@ionic/core 8.8.20-dev.11787158518.168a2fea → 8.8.20-dev.11789504012.1a675914
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/index.js +1 -1
- package/components/ion-accordion-group.js +1 -1
- 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-app.js +1 -1
- package/components/ion-avatar.js +1 -1
- package/components/ion-back-button.js +1 -1
- package/components/ion-backdrop.js +1 -1
- package/components/ion-badge.js +1 -1
- package/components/ion-breadcrumb.js +1 -1
- package/components/ion-breadcrumbs.js +1 -1
- package/components/ion-button.js +1 -1
- package/components/ion-buttons.js +1 -1
- package/components/ion-card-content.js +1 -1
- package/components/ion-card-header.js +1 -1
- package/components/ion-card-subtitle.js +1 -1
- package/components/ion-card-title.js +1 -1
- package/components/ion-card.js +1 -1
- package/components/ion-checkbox.js +1 -1
- package/components/ion-chip.js +1 -1
- package/components/ion-col.js +1 -1
- package/components/ion-content.js +1 -1
- package/components/ion-datetime-button.js +1 -1
- package/components/ion-datetime.js +1 -1
- package/components/ion-divider.d.ts +11 -0
- package/components/ion-divider.js +4 -0
- package/components/ion-fab-button.js +1 -1
- package/components/ion-fab-list.js +1 -1
- package/components/ion-fab.js +1 -1
- package/components/ion-footer.js +1 -1
- package/components/ion-gallery-item.d.ts +11 -0
- package/components/ion-gallery-item.js +4 -0
- package/components/ion-gallery.d.ts +11 -0
- package/components/ion-gallery.js +4 -0
- package/components/ion-grid.js +1 -1
- package/components/ion-header.js +1 -1
- package/components/ion-icon.js +1 -1
- package/components/ion-img.js +1 -1
- package/components/ion-infinite-scroll-content.js +1 -1
- package/components/ion-infinite-scroll.js +1 -1
- package/components/ion-input-otp.js +1 -1
- package/components/ion-input-password-toggle.js +1 -1
- package/components/ion-input.js +1 -1
- package/components/ion-item-divider.js +1 -1
- package/components/ion-item-group.js +1 -1
- package/components/ion-item-option.js +1 -1
- package/components/ion-item-options.js +1 -1
- package/components/ion-item-sliding.js +1 -1
- package/components/ion-item.js +1 -1
- package/components/ion-label.js +1 -1
- package/components/ion-list-header.js +1 -1
- package/components/ion-list.js +1 -1
- package/components/ion-loading.js +1 -1
- package/components/ion-menu-button.js +1 -1
- package/components/ion-menu-toggle.js +1 -1
- package/components/ion-menu.js +1 -1
- package/components/ion-modal.js +1 -1
- package/components/ion-nav-link.js +1 -1
- package/components/ion-nav.js +1 -1
- package/components/ion-note.js +1 -1
- package/components/ion-picker-column-option.js +1 -1
- package/components/ion-picker-column.js +1 -1
- package/components/ion-picker-legacy-column.d.ts +11 -0
- package/components/ion-picker-legacy-column.js +4 -0
- package/components/ion-picker-legacy.d.ts +11 -0
- package/components/ion-picker-legacy.js +4 -0
- package/components/ion-picker.js +1 -1
- package/components/ion-popover.js +1 -1
- package/components/ion-progress-bar.js +1 -1
- package/components/ion-radio-group.js +1 -1
- package/components/ion-radio.js +1 -1
- package/components/ion-range.js +1 -1
- package/components/ion-refresher-content.js +1 -1
- package/components/ion-refresher.js +1 -1
- package/components/ion-reorder-group.js +1 -1
- package/components/ion-reorder.js +1 -1
- package/components/ion-ripple-effect.js +1 -1
- package/components/ion-route-redirect.js +1 -1
- package/components/ion-route.js +1 -1
- package/components/ion-router-link.js +1 -1
- package/components/ion-router-outlet.js +1 -1
- package/components/ion-router.js +1 -1
- package/components/ion-row.js +1 -1
- package/components/ion-searchbar.js +1 -1
- package/components/ion-segment-button.js +1 -1
- package/components/ion-segment-content.js +1 -1
- package/components/ion-segment-view.js +1 -1
- package/components/ion-segment.js +1 -1
- package/components/ion-select-modal.js +1 -1
- package/components/ion-select-option.js +1 -1
- package/components/ion-select-popover.js +1 -1
- package/components/ion-select.js +1 -1
- package/components/ion-skeleton-text.js +1 -1
- package/components/ion-spinner.js +1 -1
- package/components/ion-split-pane.js +1 -1
- package/components/ion-tab-bar.js +1 -1
- package/components/ion-tab-button.js +1 -1
- package/components/ion-tab.js +1 -1
- package/components/ion-tabs.js +1 -1
- package/components/ion-text.js +1 -1
- package/components/ion-textarea.js +1 -1
- package/components/ion-thumbnail.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/ion-toolbar.js +1 -1
- package/components/p-0MMiHJhx.js +4 -0
- package/components/p-0rXxxCTt.js +4 -0
- package/components/{p-DwpKZ6rl.js → p-B2SvA6NE.js} +1 -1
- package/components/p-B4GJERAm.js +4 -0
- package/components/p-B9_sPaDw.js +4 -0
- package/components/p-BE21dB_a.js +4 -0
- package/components/p-BJyeT56g.js +4 -0
- package/components/p-BTBa_wH7.js +4 -0
- package/components/p-BTEOs1at.js +4 -0
- package/components/p-BU8Blvqg.js +4 -0
- package/components/p-BXXTyrCp.js +4 -0
- package/components/p-BXjGM4gW.js +4 -0
- package/components/p-BXuZo5-p.js +4 -0
- package/components/p-BYRVyMu9.js +4 -0
- package/components/{p-ryyf_ItD.js → p-BZwQa9ey.js} +1 -1
- package/components/p-BZxBDeEU.js +4 -0
- package/components/p-BcWO94Sl.js +4 -0
- package/components/p-BjW8SOqw.js +4 -0
- package/components/p-Br6q6Rgq.js +4 -0
- package/components/p-BwKpO3Is.js +4 -0
- package/components/p-BwzRqsq1.js +4 -0
- package/components/p-C-cw-bM-.js +4 -0
- package/components/p-C0K6CGg9.js +4 -0
- package/components/p-C2J-Hvv3.js +4 -0
- package/components/p-C3ydXg9O.js +4 -0
- package/components/p-C5Bnq_Hm.js +4 -0
- package/components/p-C5JYXyPD.js +4 -0
- package/components/p-C898H5L0.js +4 -0
- package/components/p-C8kcgEG7.js +4 -0
- package/components/p-CEz0vNHD.js +4 -0
- package/components/p-CH8ypgvS.js +4 -0
- package/components/{p-CMLAwl_N.js → p-CKLXmqy1.js} +1 -1
- package/components/p-CMtmHGrE.js +4 -0
- package/components/p-CNlz8OTE.js +4 -0
- package/components/p-CODBQrPj.js +4 -0
- package/components/p-CToV3-ig.js +4 -0
- package/components/p-CV7PNBGr.js +4 -0
- package/components/p-CVYFPBs-.js +4 -0
- package/components/p-CgbD1udy.js +4 -0
- package/components/p-CjlmHeGM.js +4 -0
- package/components/p-ClTdIlic.js +4 -0
- package/components/p-CstXr-x9.js +4 -0
- package/components/{p-DzRT60Tw.js → p-Cu8FoYIJ.js} +1 -1
- package/components/p-CxhjkdQ_.js +4 -0
- package/components/p-D0Iqw6OZ.js +4 -0
- package/components/p-D12Xsfh7.js +4 -0
- package/components/p-DExJ63jR.js +4 -0
- package/components/p-DHvfufkW.js +4 -0
- package/components/p-DRUGmlKi.js +4 -0
- package/components/p-DYq-5riI.js +4 -0
- package/components/p-DaJxRxSQ.js +4 -0
- package/components/p-Db3A3kHi.js +4 -0
- package/components/p-Df6AAcu8.js +4 -0
- package/components/p-Dh1f5tAK.js +4 -0
- package/components/{p-63OhffQv.js → p-Di8NbWfs.js} +1 -1
- package/components/p-DqkLOArC.js +4 -0
- package/components/p-DriGEn08.js +4 -0
- package/components/p-DylrHLJF.js +4 -0
- package/components/p-WeNgVmOy.js +4 -0
- package/components/p-Wn4ujuPW.js +4 -0
- package/components/p-X6YgGSBf.js +4 -0
- package/components/p-dLA3JnNJ.js +4 -0
- package/components/p-eRqVSlkn.js +4 -0
- package/components/p-fUXE2zLc.js +4 -0
- package/components/p-o8OKV5aD.js +4 -0
- package/components/p-pztWcmzj.js +4 -0
- package/components/p-vXpMhGrs.js +4 -0
- package/css/core.css +1 -1
- package/css/core.css.map +1 -1
- package/css/display.css +1 -1
- package/css/display.css.map +1 -1
- package/css/flex-utils.css +1 -1
- package/css/flex-utils.css.map +1 -1
- package/css/float-elements.css.map +1 -1
- package/css/global.bundle.css.map +1 -1
- package/css/ionic/bundle.ionic.css +1 -0
- package/css/ionic/bundle.ionic.css.map +1 -0
- package/css/ionic/core.ionic.css +1 -0
- package/css/ionic/core.ionic.css.map +1 -0
- package/css/ionic/global.bundle.ionic.css +1 -0
- package/css/ionic/global.bundle.ionic.css.map +1 -0
- package/css/ionic/ionic-swiper.ionic.css +1 -0
- package/css/ionic/ionic-swiper.ionic.css.map +1 -0
- package/css/ionic/link.ionic.css +1 -0
- package/css/ionic/link.ionic.css.map +1 -0
- package/css/ionic/structure.ionic.css +1 -0
- package/css/ionic/structure.ionic.css.map +1 -0
- package/css/ionic/typography.ionic.css +1 -0
- package/css/ionic/typography.ionic.css.map +1 -0
- package/css/ionic/utils.bundle.ionic.css +1 -0
- package/css/ionic/utils.bundle.ionic.css.map +1 -0
- package/css/ionic-swiper.css +1 -1
- package/css/ionic-swiper.css.map +1 -1
- package/css/ionic.bundle.css +1 -1
- package/css/ionic.bundle.css.map +1 -1
- package/css/normalize.css.map +1 -1
- package/css/padding.css.map +1 -1
- package/css/palettes/dark.always.css.map +1 -1
- package/css/palettes/dark.class.css.map +1 -1
- package/css/palettes/dark.system.css.map +1 -1
- package/css/palettes/high-contrast-dark.always.css.map +1 -1
- package/css/palettes/high-contrast-dark.class.css.map +1 -1
- package/css/palettes/high-contrast-dark.system.css.map +1 -1
- package/css/palettes/high-contrast.always.css.map +1 -1
- package/css/palettes/high-contrast.class.css.map +1 -1
- package/css/palettes/high-contrast.system.css.map +1 -1
- package/css/structure.css.map +1 -1
- package/css/text-alignment.css.map +1 -1
- package/css/text-transformation.css.map +1 -1
- package/css/typography.css.map +1 -1
- package/css/utils.bundle.css +1 -1
- package/css/utils.bundle.css.map +1 -1
- package/dist/cjs/{animation-C0mOHzej.js → animation-CxRPIayb.js} +6 -6
- package/dist/cjs/{app-globals-BREG4twP.js → app-globals-BwvlV6g7.js} +1 -1
- package/dist/cjs/{button-active-CVMevT9a.js → button-active-qCQDwE2m.js} +3 -3
- package/dist/cjs/{capacitor-DmA66EwP.js → capacitor-CRl0exFC.js} +3 -3
- package/dist/cjs/clear-button-press-controller-C7B9kyMa.js +45 -0
- package/dist/cjs/{config-CjUbvdPW.js → config-DWdFbSNK.js} +4 -5
- package/dist/cjs/{dir-zwDPRE5K.js → dir-DD0jPVH3.js} +3 -2
- package/dist/cjs/{focus-visible-CCvKiLh3.js → focus-visible-BIj-I3-C.js} +24 -0
- package/dist/cjs/{format-pp0Du3K-.js → format-COAsdjOc.js} +30 -40
- package/dist/cjs/{framework-delegate-Dfo5XsGv.js → framework-delegate-IvkF1VuM.js} +10 -6
- package/dist/cjs/{gesture-controller-BDUH7687.js → gesture-controller-dtqlP_q4.js} +8 -15
- package/dist/cjs/{haptic-Ch-X4gRx.js → haptic-DG25gZzb.js} +4 -3
- package/dist/cjs/{helpers-YPQybDph.js → helpers-Dhimwhpn.js} +74 -7
- package/dist/cjs/{index-DwlRtFZe.js → index-BJ2-LydH.js} +3 -9
- package/dist/cjs/{index-zVCah4Uz.js → index-Bsq0SbXc.js} +2 -2
- package/dist/cjs/{index-uvry__L4.js → index-C1knGA9x.js} +65 -33
- package/dist/cjs/{index-wOmugbdg.js → index-CxDnX7hd.js} +2 -0
- package/dist/cjs/{index-DXsPSne6.js → index-DhDV4RxJ.js} +16 -15
- package/dist/cjs/{index-BLdJCcJY.js → index-DuleInoh.js} +5 -5
- package/dist/cjs/{index-B7zJsYWS.js → index-YYUVCfP-.js} +3 -3
- package/dist/cjs/{index-DDg31ZF5.js → index-yon1HGB7.js} +10 -9
- package/dist/cjs/index.cjs.js +18 -18
- package/dist/cjs/{input-shims-Cbu1fcye.js → input-shims-BgJcHtqI.js} +23 -20
- package/dist/cjs/input.utils--RmR5lVe.js +150 -0
- package/dist/cjs/ion-accordion_2.cjs.entry.js +376 -376
- package/dist/cjs/ion-action-sheet.cjs.entry.js +87 -179
- package/dist/cjs/ion-alert.cjs.entry.js +126 -251
- package/dist/cjs/ion-app_8.cjs.entry.js +608 -461
- package/dist/cjs/ion-avatar_3.cjs.entry.js +125 -19
- package/dist/cjs/ion-back-button.cjs.entry.js +49 -65
- package/dist/cjs/ion-backdrop.cjs.entry.js +22 -23
- package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +157 -210
- package/dist/cjs/ion-button_2.cjs.entry.js +118 -153
- package/dist/cjs/ion-card_5.cjs.entry.js +80 -110
- package/dist/cjs/ion-checkbox.cjs.entry.js +134 -160
- package/dist/cjs/ion-chip.cjs.entry.js +56 -21
- package/dist/cjs/ion-col_3.cjs.entry.js +61 -186
- package/dist/cjs/ion-datetime-button.cjs.entry.js +248 -256
- package/dist/cjs/ion-datetime_3.cjs.entry.js +3210 -0
- package/dist/cjs/ion-divider.cjs.entry.js +51 -0
- package/dist/cjs/ion-fab_3.cjs.entry.js +109 -155
- package/dist/cjs/ion-gallery-item.cjs.entry.js +59 -0
- package/dist/cjs/ion-gallery.cjs.entry.js +608 -0
- package/dist/cjs/ion-img.cjs.entry.js +17 -35
- package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +157 -109
- package/dist/cjs/ion-input-otp.cjs.entry.js +437 -435
- package/dist/cjs/ion-input-password-toggle.cjs.entry.js +54 -40
- package/dist/cjs/ion-input.cjs.entry.js +305 -351
- package/dist/cjs/ion-item-option_3.cjs.entry.js +512 -137
- package/dist/cjs/ion-item_8.cjs.entry.js +186 -218
- package/dist/cjs/ion-loading.cjs.entry.js +69 -152
- package/dist/cjs/ion-menu_3.cjs.entry.js +136 -182
- package/dist/cjs/ion-modal.cjs.entry.js +501 -571
- package/dist/cjs/ion-nav_2.cjs.entry.js +164 -104
- package/dist/cjs/ion-picker-column-option.cjs.entry.js +40 -40
- package/dist/cjs/ion-picker-column.cjs.entry.js +410 -422
- package/dist/cjs/ion-picker.cjs.entry.js +401 -406
- package/dist/cjs/ion-popover.cjs.entry.js +212 -324
- package/dist/cjs/ion-progress-bar.cjs.entry.js +48 -36
- package/dist/cjs/ion-radio_2.cjs.entry.js +162 -217
- package/dist/cjs/ion-range.cjs.entry.js +251 -309
- package/dist/cjs/ion-refresher_2.cjs.entry.js +127 -175
- package/dist/cjs/ion-reorder_2.cjs.entry.js +47 -60
- package/dist/cjs/ion-ripple-effect.cjs.entry.js +26 -18
- package/dist/cjs/ion-route_4.cjs.entry.js +76 -179
- package/dist/cjs/ion-searchbar.cjs.entry.js +305 -308
- package/dist/cjs/ion-segment-content.cjs.entry.js +2 -2
- package/dist/cjs/ion-segment-view.cjs.entry.js +27 -28
- package/dist/cjs/ion-segment_2.cjs.entry.js +141 -177
- package/dist/cjs/ion-select-modal.cjs.entry.js +71 -50
- package/dist/cjs/ion-select_3.cjs.entry.js +416 -507
- package/dist/cjs/ion-spinner.cjs.entry.js +36 -28
- package/dist/cjs/ion-split-pane.cjs.entry.js +25 -34
- package/dist/cjs/ion-tab-bar_2.cjs.entry.js +180 -117
- package/dist/cjs/ion-tab_2.cjs.entry.js +30 -55
- package/dist/cjs/ion-text.cjs.entry.js +7 -13
- package/dist/cjs/ion-textarea.cjs.entry.js +310 -303
- package/dist/cjs/ion-toast.cjs.entry.js +170 -265
- package/dist/cjs/ion-toggle.cjs.entry.js +172 -184
- package/dist/cjs/ionic-global-DYLhJaw7.js +519 -0
- package/dist/cjs/ionic.cjs.js +4 -4
- package/dist/cjs/{ios.transition-zTmJz8T-.js → ios.transition-Blgf-vZU.js} +21 -15
- package/dist/cjs/{item-multiple-inputs-BdYSbfKN.js → item-multiple-inputs-DKn76MYO.js} +1 -1
- package/dist/cjs/{keyboard-cHxZlTyz.js → keyboard-BgioTbwQ.js} +3 -3
- package/dist/cjs/{keyboard-Cix5TVkD.js → keyboard-Otnp8OQI.js} +5 -4
- package/dist/cjs/loader.cjs.js +4 -4
- package/dist/cjs/{md.transition-nb_4pUXu.js → md.transition-ClgvbGfq.js} +11 -9
- package/dist/cjs/notch-controller-0hkmmSGo.js +155 -0
- package/dist/cjs/{overlay-control-label-D2sdL2O8.js → overlay-control-label-DnRLQR1t.js} +13 -11
- package/dist/cjs/{overlays-KaNVDNqC.js → overlays-Bxjqh2m3.js} +336 -60
- package/dist/cjs/scroll-hide-controller-qWMU5yOk.js +345 -0
- package/dist/cjs/{select-option-render-pULCGldr.js → select-option-render-BqJEK1N1.js} +4 -3
- package/dist/cjs/{status-tap-o9IIymsP.js → status-tap-ClA8u57t.js} +5 -4
- package/dist/cjs/{swipe-back-B7X9VOlH.js → swipe-back-4vY7mi8i.js} +6 -5
- package/dist/cjs/{theme-Bw0rpaNN.js → theme-IlOsGAz7.js} +26 -7
- package/dist/cjs/validity-QmuwEptc.js +51 -0
- package/dist/collection/collection-manifest.json +13 -1
- package/dist/collection/components/accordion/accordion.ionic.css +201 -0
- package/dist/collection/components/accordion/accordion.ios.css +73 -58
- package/dist/collection/components/accordion/accordion.js +331 -324
- package/dist/collection/components/accordion/accordion.md.css +67 -59
- package/dist/collection/components/accordion-group/accordion-group.ionic.css +93 -0
- package/dist/collection/components/accordion-group/accordion-group.ios.css +16 -4
- package/dist/collection/components/accordion-group/accordion-group.js +69 -56
- package/dist/collection/components/accordion-group/accordion-group.md.css +22 -4
- package/dist/collection/components/action-sheet/action-sheet.ionic.css +494 -0
- package/dist/collection/components/action-sheet/action-sheet.ios.css +184 -54
- package/dist/collection/components/action-sheet/action-sheet.js +76 -166
- package/dist/collection/components/action-sheet/action-sheet.md.css +179 -55
- package/dist/collection/components/action-sheet/test/basic/fixture.js +0 -3
- package/dist/collection/components/alert/alert.ionic.css +787 -0
- package/dist/collection/components/alert/alert.ios.css +247 -54
- package/dist/collection/components/alert/alert.js +113 -236
- package/dist/collection/components/alert/alert.md.css +243 -56
- package/dist/collection/components/app/app.js +15 -86
- package/dist/collection/components/avatar/avatar.ionic.css +385 -0
- package/dist/collection/components/avatar/avatar.ios.css +7 -33
- package/dist/collection/components/avatar/avatar.js +120 -4
- package/dist/collection/components/avatar/avatar.md.css +51 -0
- package/dist/collection/components/back-button/back-button.ios.css +60 -48
- package/dist/collection/components/back-button/back-button.js +45 -61
- package/dist/collection/components/back-button/back-button.md.css +60 -48
- package/dist/collection/components/backdrop/backdrop.ionic.css +109 -0
- package/dist/collection/components/backdrop/backdrop.ios.css +56 -19
- package/dist/collection/components/backdrop/backdrop.js +26 -22
- package/dist/collection/components/backdrop/backdrop.md.css +56 -19
- package/dist/collection/components/badge/badge.ionic.css +272 -0
- package/dist/collection/components/badge/badge.ios.css +137 -12
- package/dist/collection/components/badge/badge.js +145 -15
- package/dist/collection/components/badge/badge.md.css +122 -12
- package/dist/collection/components/breadcrumb/breadcrumb.ios.css +20 -8
- package/dist/collection/components/breadcrumb/breadcrumb.js +60 -99
- package/dist/collection/components/breadcrumb/breadcrumb.md.css +20 -8
- package/dist/collection/components/breadcrumbs/breadcrumbs.ios.css +6 -0
- package/dist/collection/components/breadcrumbs/breadcrumbs.js +99 -112
- package/dist/collection/components/breadcrumbs/breadcrumbs.md.css +6 -0
- package/dist/collection/components/button/button.ionic.css +644 -0
- package/dist/collection/components/button/button.ios.css +154 -46
- package/dist/collection/components/button/button.js +122 -157
- package/dist/collection/components/button/button.md.css +150 -50
- package/dist/collection/components/buttons/buttons.ionic.css +97 -0
- package/dist/collection/components/buttons/buttons.ios.css +59 -7
- package/dist/collection/components/buttons/buttons.js +29 -21
- package/dist/collection/components/buttons/buttons.md.css +55 -3
- package/dist/collection/components/card/card.ionic.css +144 -0
- package/dist/collection/components/card/card.ios.css +65 -14
- package/dist/collection/components/card/card.js +61 -63
- package/dist/collection/components/card/card.md.css +65 -14
- package/dist/collection/components/card-content/card-content.ionic.css +89 -0
- package/dist/collection/components/card-content/card-content.ios.css +20 -35
- package/dist/collection/components/card-content/card-content.js +12 -10
- package/dist/collection/components/card-content/card-content.md.css +20 -35
- package/dist/collection/components/card-header/card-header.ionic.css +85 -0
- package/dist/collection/components/card-header/card-header.ios.css +27 -15
- package/dist/collection/components/card-header/card-header.js +20 -21
- package/dist/collection/components/card-header/card-header.md.css +27 -15
- package/dist/collection/components/card-subtitle/card-subtitle.ionic.css +144 -0
- package/dist/collection/components/card-subtitle/card-subtitle.ios.css +12 -0
- package/dist/collection/components/card-subtitle/card-subtitle.js +11 -14
- package/dist/collection/components/card-subtitle/card-subtitle.md.css +12 -0
- package/dist/collection/components/card-title/card-title.ios.css +73 -0
- package/dist/collection/components/card-title/card-title.js +11 -14
- package/dist/collection/components/card-title/card-title.md.css +73 -0
- package/dist/collection/components/checkbox/checkbox.ionic.css +536 -0
- package/dist/collection/components/checkbox/checkbox.ios.css +246 -115
- package/dist/collection/components/checkbox/checkbox.js +172 -157
- package/dist/collection/components/checkbox/checkbox.md.css +247 -116
- package/dist/collection/components/chip/chip.ionic.css +217 -0
- package/dist/collection/components/chip/chip.ios.css +67 -14
- package/dist/collection/components/chip/chip.js +116 -20
- package/dist/collection/components/chip/chip.md.css +67 -14
- package/dist/collection/components/col/col.css +192 -4
- package/dist/collection/components/col/col.js +212 -186
- package/dist/collection/components/content/content.css +47 -2
- package/dist/collection/components/content/content.js +78 -102
- package/dist/collection/components/datetime/datetime.ionic.css +703 -0
- package/dist/collection/components/datetime/datetime.ios.css +304 -148
- package/dist/collection/components/datetime/datetime.js +900 -1090
- package/dist/collection/components/datetime/datetime.md.css +294 -138
- package/dist/collection/components/datetime/utils/data.js +19 -18
- package/dist/collection/components/datetime/utils/format.js +11 -21
- package/dist/collection/components/datetime/utils/manipulation.js +8 -8
- package/dist/collection/components/datetime/utils/parse.js +10 -10
- package/dist/collection/components/datetime/utils/state.js +2 -8
- package/dist/collection/components/datetime/utils/validate.js +5 -4
- package/dist/collection/components/datetime-button/datetime-button.ios.css +6 -5
- package/dist/collection/components/datetime-button/datetime-button.js +246 -253
- package/dist/collection/components/datetime-button/datetime-button.md.css +6 -5
- package/dist/collection/components/divider/divider.ionic.css +148 -0
- package/dist/collection/components/divider/divider.ios.css +87 -0
- package/dist/collection/components/divider/divider.js +94 -0
- package/dist/collection/components/divider/divider.md.css +87 -0
- package/dist/collection/components/fab/fab.css +25 -1
- package/dist/collection/components/fab/fab.js +22 -25
- package/dist/collection/components/fab-button/fab-button.ios.css +18 -6
- package/dist/collection/components/fab-button/fab-button.js +79 -117
- package/dist/collection/components/fab-button/fab-button.md.css +20 -8
- package/dist/collection/components/fab-list/fab-list.css +12 -0
- package/dist/collection/components/fab-list/fab-list.js +20 -15
- package/dist/collection/components/footer/footer-interface.js +1 -0
- package/dist/collection/components/footer/footer.ios.css +33 -6
- package/dist/collection/components/footer/footer.js +151 -65
- package/dist/collection/components/footer/footer.md.css +40 -0
- package/dist/collection/components/gallery/gallery-constants.js +12 -0
- package/dist/collection/components/gallery/gallery-interface.js +1 -0
- package/dist/collection/components/gallery/gallery.css +15 -0
- package/dist/collection/components/gallery/gallery.js +679 -0
- package/dist/collection/components/gallery/test/utils.js +100 -0
- package/dist/collection/components/gallery-item/gallery-item.css +49 -0
- package/dist/collection/components/gallery-item/gallery-item.js +99 -0
- package/dist/collection/components/grid/grid.css +12 -0
- package/dist/collection/components/grid/grid.js +15 -9
- package/dist/collection/components/header/header-interface.js +1 -0
- package/dist/collection/components/header/header.ionic.css +250 -0
- package/dist/collection/components/header/header.ios.css +178 -133
- package/dist/collection/components/header/header.js +202 -70
- package/dist/collection/components/header/header.md.css +199 -9
- package/dist/collection/components/header/header.utils.js +6 -13
- package/dist/collection/components/img/img.js +16 -34
- package/dist/collection/components/infinite-scroll/infinite-scroll.js +164 -76
- package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.ios.css +12 -0
- package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.js +19 -30
- package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.md.css +12 -0
- package/dist/collection/components/input/input.ionic.css +891 -0
- package/dist/collection/components/input/input.ios.css +247 -191
- package/dist/collection/components/input/input.js +333 -357
- package/dist/collection/components/input/input.md.css +234 -285
- package/dist/collection/components/input-otp/input-otp.ionic.css +371 -0
- package/dist/collection/components/input-otp/input-otp.ios.css +105 -60
- package/dist/collection/components/input-otp/input-otp.js +437 -432
- package/dist/collection/components/input-otp/input-otp.md.css +105 -60
- package/dist/collection/components/input-password-toggle/input-password-toggle.ionic.css +78 -0
- package/dist/collection/components/input-password-toggle/input-password-toggle.js +51 -36
- package/dist/collection/components/input-password-toggle/input-password-toggle.native.css +61 -0
- package/dist/collection/components/item/item.ionic.css +496 -0
- package/dist/collection/components/item/item.ios.css +120 -80
- package/dist/collection/components/item/item.js +98 -113
- package/dist/collection/components/item/item.md.css +131 -79
- package/dist/collection/components/item-divider/item-divider.ios.css +18 -0
- package/dist/collection/components/item-divider/item-divider.js +21 -23
- package/dist/collection/components/item-divider/item-divider.md.css +18 -0
- package/dist/collection/components/item-group/item-group.ios.css +12 -0
- package/dist/collection/components/item-group/item-group.js +13 -7
- package/dist/collection/components/item-group/item-group.md.css +12 -0
- package/dist/collection/components/item-option/item-option.ionic.css +277 -0
- package/dist/collection/components/item-option/item-option.ios.css +136 -29
- package/dist/collection/components/item-option/item-option.js +92 -56
- package/dist/collection/components/item-option/item-option.md.css +136 -29
- package/dist/collection/components/item-options/item-options.ionic.css +221 -0
- package/dist/collection/components/item-options/item-options.ios.css +77 -34
- package/dist/collection/components/item-options/item-options.js +20 -17
- package/dist/collection/components/item-options/item-options.md.css +77 -34
- package/dist/collection/components/item-sliding/item-sliding.ionic.css +211 -0
- package/dist/collection/components/item-sliding/item-sliding.js +441 -61
- package/dist/collection/components/item-sliding/{item-sliding.css → item-sliding.native.css} +84 -9
- package/dist/collection/components/item-sliding/test/test.utils.js +13 -0
- package/dist/collection/components/label/label.ios.css +18 -0
- package/dist/collection/components/label/label.js +15 -32
- package/dist/collection/components/label/label.md.css +18 -0
- package/dist/collection/components/list/list.ionic.css +212 -0
- package/dist/collection/components/list/list.ios.css +54 -14
- package/dist/collection/components/list/list.js +55 -19
- package/dist/collection/components/list/list.md.css +56 -16
- package/dist/collection/components/list-header/list-header.ionic.css +190 -0
- package/dist/collection/components/list-header/list-header.ios.css +82 -38
- package/dist/collection/components/list-header/list-header.js +11 -18
- package/dist/collection/components/list-header/list-header.md.css +82 -38
- package/dist/collection/components/loading/loading.ios.css +13 -1
- package/dist/collection/components/loading/loading.js +62 -143
- package/dist/collection/components/loading/loading.md.css +13 -1
- package/dist/collection/components/menu/menu.ios.css +15 -3
- package/dist/collection/components/menu/menu.js +71 -108
- package/dist/collection/components/menu/menu.md.css +15 -3
- package/dist/collection/components/menu-button/menu-button.ionic.css +236 -0
- package/dist/collection/components/menu-button/menu-button.ios.css +48 -14
- package/dist/collection/components/menu-button/menu-button.js +43 -38
- package/dist/collection/components/menu-button/menu-button.md.css +49 -15
- package/dist/collection/components/menu-toggle/menu-toggle.js +21 -25
- package/dist/collection/components/modal/animations/ionic.enter.js +40 -0
- package/dist/collection/components/modal/animations/ionic.leave.js +28 -0
- package/dist/collection/components/modal/animations/ios.enter.js +1 -1
- package/dist/collection/components/modal/animations/md.enter.js +1 -1
- package/dist/collection/components/modal/animations/sheet.js +8 -2
- package/dist/collection/components/modal/gestures/sheet.js +86 -32
- package/dist/collection/components/modal/gestures/swipe-to-close.js +3 -15
- package/dist/collection/components/modal/modal.ionic.css +255 -0
- package/dist/collection/components/modal/modal.ios.css +178 -70
- package/dist/collection/components/modal/modal.js +272 -404
- package/dist/collection/components/modal/modal.md.css +178 -70
- package/dist/collection/components/modal/safe-area-utils.js +7 -6
- package/dist/collection/components/modal/test/fixtures.js +0 -3
- package/dist/collection/components/nav/nav.css +7 -1
- package/dist/collection/components/nav/nav.js +256 -72
- package/dist/collection/components/nav/view-controller.js +1 -7
- package/dist/collection/components/nav-link/nav-link.js +14 -21
- package/dist/collection/components/note/note.ios.css +12 -0
- package/dist/collection/components/note/note.js +11 -14
- package/dist/collection/components/note/note.md.css +12 -0
- package/dist/collection/components/picker/picker.ios.css +15 -3
- package/dist/collection/components/picker/picker.js +398 -403
- package/dist/collection/components/picker/picker.md.css +15 -3
- package/dist/collection/components/picker-column/picker-column.css +9 -5
- package/dist/collection/components/picker-column/picker-column.js +409 -418
- package/dist/collection/components/picker-column-option/picker-column-option.ios.css +6 -0
- package/dist/collection/components/picker-column-option/picker-column-option.js +42 -38
- package/dist/collection/components/picker-column-option/picker-column-option.md.css +7 -6
- package/dist/collection/components/picker-legacy/animations/ios.enter.js +27 -0
- package/dist/collection/components/picker-legacy/animations/ios.leave.js +23 -0
- package/dist/collection/components/picker-legacy/picker-interface.js +1 -0
- package/dist/collection/components/picker-legacy/picker.ios.css +312 -0
- package/dist/collection/components/picker-legacy/picker.js +891 -0
- package/dist/collection/components/picker-legacy/picker.md.css +299 -0
- package/dist/collection/components/picker-legacy-column/picker-column.ios.css +243 -0
- package/dist/collection/components/picker-legacy-column/picker-column.js +422 -0
- package/dist/collection/components/picker-legacy-column/picker-column.md.css +234 -0
- package/dist/collection/components/picker-legacy-column/test/test.utils.js +43 -0
- package/dist/collection/components/popover/animations/ios.enter.js +2 -1
- package/dist/collection/components/popover/animations/md.enter.js +2 -1
- package/dist/collection/components/popover/popover.ionic.css +290 -0
- package/dist/collection/components/popover/popover.ios.css +15 -2
- package/dist/collection/components/popover/popover.js +199 -313
- package/dist/collection/components/popover/popover.md.css +15 -2
- package/dist/collection/components/popover/test/fixture.js +0 -1
- package/dist/collection/components/popover/utils.js +6 -4
- package/dist/collection/components/progress-bar/progress-bar.ionic.css +287 -0
- package/dist/collection/components/progress-bar/progress-bar.ios.css +48 -17
- package/dist/collection/components/progress-bar/progress-bar.js +65 -33
- package/dist/collection/components/progress-bar/progress-bar.md.css +48 -17
- package/dist/collection/components/radio/radio.ionic.css +422 -0
- package/dist/collection/components/radio/radio.ios.css +207 -102
- package/dist/collection/components/radio/radio.js +77 -108
- package/dist/collection/components/radio/radio.md.css +207 -102
- package/dist/collection/components/radio-group/radio-group.ionic.css +119 -0
- package/dist/collection/components/radio-group/radio-group.ios.css +43 -19
- package/dist/collection/components/radio-group/radio-group.js +113 -107
- package/dist/collection/components/radio-group/radio-group.md.css +43 -19
- package/dist/collection/components/radio-group/test/fixtures.js +0 -2
- package/dist/collection/components/range/range.ionic.css +567 -0
- package/dist/collection/components/range/range.ios.css +128 -85
- package/dist/collection/components/range/range.js +247 -305
- package/dist/collection/components/range/range.md.css +128 -85
- package/dist/collection/components/refresher/refresher.ios.css +14 -1
- package/dist/collection/components/refresher/refresher.js +88 -117
- package/dist/collection/components/refresher/refresher.md.css +15 -2
- package/dist/collection/components/refresher-content/refresher-content.js +37 -47
- package/dist/collection/components/reorder/reorder.ios.css +6 -0
- package/dist/collection/components/reorder/reorder.js +26 -7
- package/dist/collection/components/reorder/reorder.md.css +6 -0
- package/dist/collection/components/reorder-group/reorder-group.css +6 -0
- package/dist/collection/components/reorder-group/reorder-group.js +22 -47
- package/dist/collection/components/ripple-effect/{ripple-effect.css → ripple-effect.common.css} +7 -1
- package/dist/collection/components/ripple-effect/ripple-effect.ionic.css +215 -0
- package/dist/collection/components/ripple-effect/ripple-effect.js +26 -17
- package/dist/collection/components/route/route.js +14 -39
- package/dist/collection/components/route-redirect/route-redirect.js +0 -31
- package/dist/collection/components/router/router.js +37 -37
- package/dist/collection/components/router/utils/dom.js +7 -25
- package/dist/collection/components/router/utils/matching.js +9 -7
- package/dist/collection/components/router/utils/parser.js +1 -1
- package/dist/collection/components/router/utils/path.js +1 -0
- package/dist/collection/components/router-link/router-link.css +8 -2
- package/dist/collection/components/router-link/router-link.js +19 -40
- package/dist/collection/components/router-outlet/router-outlet.css +7 -1
- package/dist/collection/components/router-outlet/router-outlet.js +25 -83
- package/dist/collection/components/row/row.css +16 -0
- package/dist/collection/components/row/row.js +9 -2
- package/dist/collection/components/searchbar/searchbar.ionic.css +622 -0
- package/dist/collection/components/searchbar/searchbar.ios.css +56 -18
- package/dist/collection/components/searchbar/searchbar.js +356 -321
- package/dist/collection/components/searchbar/searchbar.md.css +56 -18
- package/dist/collection/components/segment/segment.ionic.css +115 -0
- package/dist/collection/components/segment/segment.ios.css +45 -2
- package/dist/collection/components/segment/segment.js +94 -126
- package/dist/collection/components/segment/segment.md.css +45 -2
- package/dist/collection/components/segment-button/segment-button.ionic.css +352 -0
- package/dist/collection/components/segment-button/segment-button.ios.css +146 -105
- package/dist/collection/components/segment-button/segment-button.js +46 -49
- package/dist/collection/components/segment-button/segment-button.md.css +148 -107
- package/dist/collection/components/segment-content/segment-content.js +1 -1
- package/dist/collection/components/segment-view/segment-view.ios.css +6 -0
- package/dist/collection/components/segment-view/segment-view.js +27 -28
- package/dist/collection/components/segment-view/segment-view.md.css +6 -0
- package/dist/collection/components/select/select.ionic.css +809 -0
- package/dist/collection/components/select/select.ios.css +351 -206
- package/dist/collection/components/select/select.js +431 -431
- package/dist/collection/components/select/select.md.css +383 -230
- package/dist/collection/components/select-modal/select-modal.ionic.css +257 -0
- package/dist/collection/components/select-modal/select-modal.ios.css +293 -45
- package/dist/collection/components/select-modal/select-modal.js +81 -37
- package/dist/collection/components/select-modal/select-modal.md.css +273 -43
- package/dist/collection/components/select-modal/test/fixtures.js +1 -8
- package/dist/collection/components/select-option/select-option.js +15 -48
- package/dist/collection/components/select-popover/select-popover.ionic.css +255 -0
- package/dist/collection/components/select-popover/select-popover.ios.css +188 -124
- package/dist/collection/components/select-popover/select-popover.js +37 -44
- package/dist/collection/components/select-popover/select-popover.md.css +228 -47
- package/dist/collection/components/select-popover/test/fixtures.js +1 -8
- package/dist/collection/components/skeleton-text/skeleton-text.css +6 -0
- package/dist/collection/components/skeleton-text/skeleton-text.js +15 -15
- package/dist/collection/components/spinner/{spinner.css → spinner.ionic.css} +78 -10
- package/dist/collection/components/spinner/spinner.js +55 -26
- package/dist/collection/components/spinner/spinner.native.css +199 -0
- package/dist/collection/components/split-pane/split-pane.ios.css +20 -2
- package/dist/collection/components/split-pane/split-pane.js +28 -33
- package/dist/collection/components/split-pane/split-pane.md.css +20 -2
- package/dist/collection/components/tab/tab.js +10 -17
- package/dist/collection/components/tab-bar/tab-bar.ionic.css +249 -0
- package/dist/collection/components/tab-bar/tab-bar.ios.css +86 -43
- package/dist/collection/components/tab-bar/tab-bar.js +190 -44
- package/dist/collection/components/tab-bar/tab-bar.md.css +86 -43
- package/dist/collection/components/tab-button/tab-button.ionic.css +373 -0
- package/dist/collection/components/tab-button/tab-button.ios.css +171 -95
- package/dist/collection/components/tab-button/tab-button.js +74 -68
- package/dist/collection/components/tab-button/tab-button.md.css +137 -93
- package/dist/collection/components/tabs/tabs.css +7 -1
- package/dist/collection/components/tabs/tabs.js +23 -33
- package/dist/collection/components/text/text.css +6 -0
- package/dist/collection/components/text/text.js +7 -12
- package/dist/collection/components/textarea/textarea.ionic.css +898 -0
- package/dist/collection/components/textarea/textarea.ios.css +329 -221
- package/dist/collection/components/textarea/textarea.js +334 -302
- package/dist/collection/components/textarea/textarea.md.css +358 -231
- package/dist/collection/components/thumbnail/thumbnail.css +6 -0
- package/dist/collection/components/thumbnail/thumbnail.js +9 -2
- package/dist/collection/components/title/title.ionic.css +127 -0
- package/dist/collection/components/title/title.ios.css +32 -4
- package/dist/collection/components/title/title.js +13 -23
- package/dist/collection/components/title/title.md.css +39 -4
- package/dist/collection/components/toast/animations/utils.js +1 -1
- package/dist/collection/components/toast/toast.ionic.css +394 -0
- package/dist/collection/components/toast/toast.ios.css +84 -45
- package/dist/collection/components/toast/toast.js +178 -232
- package/dist/collection/components/toast/toast.md.css +84 -45
- package/dist/collection/components/toggle/toggle.ionic.css +512 -0
- package/dist/collection/components/toggle/toggle.ios.css +247 -127
- package/dist/collection/components/toggle/toggle.js +164 -175
- package/dist/collection/components/toggle/toggle.md.css +245 -127
- package/dist/collection/components/toolbar/test/image.svg +1 -0
- package/dist/collection/components/toolbar/toolbar.ionic.css +249 -0
- package/dist/collection/components/toolbar/toolbar.ios.css +90 -47
- package/dist/collection/components/toolbar/toolbar.js +222 -25
- package/dist/collection/components/toolbar/toolbar.md.css +90 -47
- package/dist/collection/global/config.js +6 -4
- package/dist/collection/global/ionic-global.js +242 -20
- package/dist/collection/index.js +1 -1
- package/dist/collection/utils/animation/animation.js +3 -3
- package/dist/collection/utils/config.js +4 -5
- package/dist/collection/utils/css-value-validation.js +39 -0
- package/dist/collection/utils/focus-controller/index.js +1 -1
- package/dist/collection/utils/focus-trap.js +16 -5
- package/dist/collection/utils/focus-visible.js +22 -0
- package/dist/collection/utils/forms/clear-button-press-controller.js +40 -0
- package/dist/collection/utils/forms/index.js +1 -1
- package/dist/collection/utils/forms/validity.js +31 -0
- package/dist/collection/utils/framework-delegate.js +9 -5
- package/dist/collection/utils/gesture/gesture-controller.js +8 -15
- package/dist/collection/utils/gesture/index.js +2 -10
- package/dist/collection/utils/hardware-back-button.js +18 -3
- package/dist/collection/utils/helpers.js +72 -5
- package/dist/collection/utils/input-shims/hacks/scroll-assist.js +5 -4
- package/dist/collection/utils/input-shims/hacks/scroll-data.js +2 -1
- package/dist/collection/utils/keyboard/keyboard-controller.js +8 -6
- package/dist/collection/utils/keyboard/keyboard.js +1 -1
- package/dist/collection/utils/logging/index.js +4 -23
- package/dist/collection/utils/media.js +1 -0
- package/dist/collection/utils/menu-controller/animations/overlay.js +3 -3
- package/dist/collection/utils/menu-controller/animations/push.js +2 -1
- package/dist/collection/utils/menu-controller/animations/reveal.js +2 -1
- package/dist/collection/utils/menu-controller/index.js +2 -1
- package/dist/collection/utils/native/haptic.js +3 -2
- package/dist/collection/utils/native/keyboard.js +2 -2
- package/dist/collection/utils/native/status-bar.js +1 -1
- package/dist/collection/utils/overlay-control-label.js +13 -11
- package/dist/collection/utils/overlays.js +312 -45
- package/dist/collection/utils/platform.js +5 -4
- package/dist/collection/utils/rtl/dir.js +3 -2
- package/dist/collection/utils/sanitization/index.js +2 -2
- package/dist/collection/utils/scroll-hide-controller.js +178 -0
- package/dist/collection/utils/select-option-render.js +2 -1
- package/dist/collection/utils/slot-mutation-controller.js +2 -1
- package/dist/collection/utils/test/playwright/apply-keyboard-focus.js +1 -1
- package/dist/collection/utils/test/playwright/drag-element.js +35 -11
- package/dist/collection/utils/test/playwright/generator.js +51 -25
- package/dist/collection/utils/test/playwright/page/event-spy.js +12 -11
- package/dist/collection/utils/test/playwright/page/utils/goto.js +15 -5
- package/dist/collection/utils/test/playwright/page/utils/set-content.js +27 -4
- package/dist/collection/utils/test/playwright/page/utils/set-ion-viewport.js +3 -2
- package/dist/collection/utils/test/press-keys.js +17 -10
- package/dist/collection/utils/theme.js +26 -7
- package/dist/collection/utils/transition/ios.transition.js +14 -9
- package/dist/collection/utils/transition/md.transition.js +4 -3
- package/dist/docs.json +10054 -537
- package/dist/esm/{animation-CGFdmGk9.js → animation-BsVixxLP.js} +5 -5
- package/dist/esm/{app-globals-CYmMeGdU.js → app-globals-rPvWQFXp.js} +1 -1
- package/dist/esm/{button-active-BDOsVAiZ.js → button-active-BS8YgJRD.js} +3 -3
- package/dist/esm/{capacitor-CFERIeaU.js → capacitor-BnXrCBvt.js} +1 -1
- package/dist/esm/clear-button-press-controller-Ci6Q_x5-.js +43 -0
- package/dist/esm/{config-DWCzVL3Y.js → config-BwKpO3Is.js} +4 -5
- package/dist/esm/{dir-Dojwmvde.js → dir-o8OKV5aD.js} +3 -2
- package/dist/esm/{focus-visible-BmVRXR1y.js → focus-visible-vXpMhGrs.js} +23 -1
- package/dist/esm/{format-Dcwga61t.js → format-2WlZcMvG.js} +31 -41
- package/dist/esm/{framework-delegate-BHTU2Ip9.js → framework-delegate-P5K_3uYw.js} +10 -6
- package/dist/esm/{gesture-controller-TXPDHL13.js → gesture-controller-BTEOs1at.js} +8 -15
- package/dist/esm/{haptic-Cq4UAeka.js → haptic-ByW74Ow9.js} +4 -3
- package/dist/esm/{helpers-CAGf8Wgp.js → helpers-ChPZH7zh.js} +74 -8
- package/dist/esm/{index-DcPaH5uL.js → index-Bck1OwMs.js} +3 -9
- package/dist/esm/{index-ChhhtsGZ.js → index-C0EQceqV.js} +66 -34
- package/dist/esm/{index-Clc-28O1.js → index-C7EAbm0C.js} +5 -4
- package/dist/esm/{index-CqneaaGd.js → index-C7F1yJyV.js} +13 -12
- package/dist/esm/{index-WlteAIqz.js → index-CXSPjEca.js} +5 -5
- package/dist/esm/{index-CKM1DdGm.js → index-Mq5pCWmZ.js} +3 -3
- package/dist/esm/{index-BvabGprD.js → index-PnwG0glX.js} +2 -1
- package/dist/esm/{index-T0JxBI8V.js → index-niemeDYi.js} +2 -2
- package/dist/esm/index.js +17 -18
- package/dist/esm/{input-shims-B8sfni1e.js → input-shims-CM5m0K8T.js} +15 -12
- package/dist/esm/input.utils-DhJNJPiU.js +147 -0
- package/dist/esm/ion-accordion_2.entry.js +376 -376
- package/dist/esm/ion-action-sheet.entry.js +87 -179
- package/dist/esm/ion-alert.entry.js +126 -251
- package/dist/esm/ion-app_8.entry.js +607 -460
- package/dist/esm/ion-avatar_3.entry.js +125 -19
- package/dist/esm/ion-back-button.entry.js +49 -65
- package/dist/esm/ion-backdrop.entry.js +22 -23
- package/dist/esm/ion-breadcrumb_2.entry.js +157 -210
- package/dist/esm/ion-button_2.entry.js +118 -153
- package/dist/esm/ion-card_5.entry.js +80 -110
- package/dist/esm/ion-checkbox.entry.js +134 -160
- package/dist/esm/ion-chip.entry.js +56 -21
- package/dist/esm/ion-col_3.entry.js +61 -186
- package/dist/esm/ion-datetime-button.entry.js +248 -256
- package/dist/esm/ion-datetime_3.entry.js +3206 -0
- package/dist/esm/ion-divider.entry.js +49 -0
- package/dist/esm/ion-fab_3.entry.js +109 -155
- package/dist/esm/ion-gallery-item.entry.js +57 -0
- package/dist/esm/ion-gallery.entry.js +606 -0
- package/dist/esm/ion-img.entry.js +17 -35
- package/dist/esm/ion-infinite-scroll_2.entry.js +157 -109
- package/dist/esm/ion-input-otp.entry.js +437 -435
- package/dist/esm/ion-input-password-toggle.entry.js +54 -40
- package/dist/esm/ion-input.entry.js +303 -349
- package/dist/esm/ion-item-option_3.entry.js +512 -137
- package/dist/esm/ion-item_8.entry.js +186 -218
- package/dist/esm/ion-loading.entry.js +69 -152
- package/dist/esm/ion-menu_3.entry.js +136 -182
- package/dist/esm/ion-modal.entry.js +459 -529
- package/dist/esm/ion-nav_2.entry.js +164 -104
- package/dist/esm/ion-picker-column-option.entry.js +40 -40
- package/dist/esm/ion-picker-column.entry.js +410 -422
- package/dist/esm/ion-picker.entry.js +401 -406
- package/dist/esm/ion-popover.entry.js +212 -324
- package/dist/esm/ion-progress-bar.entry.js +48 -36
- package/dist/esm/ion-radio_2.entry.js +162 -217
- package/dist/esm/ion-range.entry.js +251 -309
- package/dist/esm/ion-refresher_2.entry.js +127 -175
- package/dist/esm/ion-reorder_2.entry.js +47 -60
- package/dist/esm/ion-ripple-effect.entry.js +26 -18
- package/dist/esm/ion-route_4.entry.js +76 -179
- package/dist/esm/ion-searchbar.entry.js +305 -308
- package/dist/esm/ion-segment-content.entry.js +2 -2
- package/dist/esm/ion-segment-view.entry.js +27 -28
- package/dist/esm/ion-segment_2.entry.js +141 -177
- package/dist/esm/ion-select-modal.entry.js +71 -50
- package/dist/esm/ion-select_3.entry.js +416 -507
- package/dist/esm/ion-spinner.entry.js +36 -28
- package/dist/esm/ion-split-pane.entry.js +25 -34
- package/dist/esm/ion-tab-bar_2.entry.js +179 -116
- package/dist/esm/ion-tab_2.entry.js +30 -55
- package/dist/esm/ion-text.entry.js +7 -13
- package/dist/esm/ion-textarea.entry.js +309 -302
- package/dist/esm/ion-toast.entry.js +149 -244
- package/dist/esm/ion-toggle.entry.js +172 -184
- package/dist/esm/ionic-global-BJDU78B6.js +508 -0
- package/dist/esm/ionic.js +5 -5
- package/dist/esm/{ios.transition-DXRCmcbC.js → ios.transition-6oGu53GR.js} +21 -15
- package/dist/esm/{item-multiple-inputs-rU8VaNNg.js → item-multiple-inputs-C6onMFOo.js} +1 -1
- package/dist/esm/{keyboard-Cj8mLJeq.js → keyboard-XukEYIFf.js} +5 -4
- package/dist/esm/{keyboard-DAF8GNJ9.js → keyboard-x-uHYVoq.js} +3 -3
- package/dist/esm/loader.js +5 -5
- package/dist/esm/{md.transition-BMngO4i_.js → md.transition-Dy5HxiSE.js} +11 -9
- package/dist/esm/notch-controller-BYB7mUMg.js +153 -0
- package/dist/esm/{overlay-control-label-BSQPZ79H.js → overlay-control-label-CODBQrPj.js} +13 -11
- package/dist/esm/{overlays-CPmIs9Ls.js → overlays-C3YvaMgX.js} +333 -57
- package/dist/esm/scroll-hide-controller-B3MRYNXh.js +342 -0
- package/dist/esm/{select-option-render-C4m76VGH.js → select-option-render-BlKZ2H83.js} +4 -3
- package/dist/esm/{status-tap-CHB7KwIb.js → status-tap-DK-ylvU7.js} +5 -4
- package/dist/esm/{swipe-back-C9HW1bug.js → swipe-back-DFICtpMC.js} +6 -5
- package/dist/esm/theme-DaJxRxSQ.js +67 -0
- package/dist/esm/validity-BjW8SOqw.js +48 -0
- package/dist/html.html-data.json +2690 -123
- package/dist/ionic/index.esm.js +1 -1
- package/dist/ionic/ionic.esm.js +1 -1
- package/dist/ionic/p--sroV-k-.js +4 -0
- package/dist/ionic/p-0115c2fa.entry.js +4 -0
- package/dist/ionic/p-0ac15b5f.entry.js +4 -0
- package/dist/ionic/p-0b2c58e0.entry.js +4 -0
- package/dist/ionic/p-0bfb8d9e.entry.js +4 -0
- package/dist/ionic/p-1147fa06.entry.js +4 -0
- package/dist/ionic/p-1e45586e.entry.js +4 -0
- package/dist/ionic/p-1febf200.entry.js +4 -0
- package/dist/ionic/p-208cecae.entry.js +4 -0
- package/dist/ionic/p-29f69d29.entry.js +4 -0
- package/dist/ionic/p-2b5e04c5.entry.js +4 -0
- package/dist/ionic/p-311ef139.entry.js +4 -0
- package/dist/ionic/p-3eff3411.entry.js +4 -0
- package/dist/ionic/p-3f17704b.entry.js +4 -0
- package/dist/ionic/p-46e754ae.entry.js +4 -0
- package/dist/ionic/p-4901a10b.entry.js +4 -0
- package/dist/ionic/p-4c8178d8.entry.js +4 -0
- package/dist/ionic/p-5196bee9.entry.js +4 -0
- package/dist/ionic/p-5386b094.entry.js +4 -0
- package/dist/ionic/p-54579b68.entry.js +4 -0
- package/dist/ionic/p-54baa1af.entry.js +4 -0
- package/dist/ionic/p-59e59209.entry.js +4 -0
- package/dist/ionic/p-5ad0c670.entry.js +4 -0
- package/dist/ionic/p-62602fbd.entry.js +4 -0
- package/dist/ionic/p-6b86cb62.entry.js +4 -0
- package/dist/ionic/p-7134537b.entry.js +4 -0
- package/dist/ionic/p-72eacca0.entry.js +4 -0
- package/dist/ionic/p-7ae06f6f.entry.js +4 -0
- package/dist/ionic/p-7bde9ee1.entry.js +4 -0
- package/dist/ionic/p-7f59020c.entry.js +4 -0
- package/dist/ionic/p-7k7Q1A38.js +4 -0
- package/dist/ionic/p-87ab986c.entry.js +4 -0
- package/dist/ionic/p-9dff6288.entry.js +4 -0
- package/dist/ionic/p-9e09cb80.entry.js +4 -0
- package/dist/ionic/p-BFhQ1N-L.js +4 -0
- package/dist/ionic/p-BG7tpRhR.js +4 -0
- package/dist/ionic/p-BITyMTKr.js +4 -0
- package/dist/ionic/p-BRPONI7N.js +4 -0
- package/dist/ionic/p-BTEOs1at.js +4 -0
- package/dist/ionic/p-BVdSuKmt.js +4 -0
- package/dist/ionic/p-BYRVyMu9.js +4 -0
- package/dist/ionic/p-BjW8SOqw.js +4 -0
- package/dist/ionic/p-Bpx1lBiP.js +4 -0
- package/dist/ionic/p-BwKpO3Is.js +4 -0
- package/dist/ionic/p-C-BLhfUi.js +4 -0
- package/dist/ionic/p-C-aO35cw.js +4 -0
- package/dist/ionic/p-C0EQceqV.js +5 -0
- package/dist/ionic/p-CDrQfM-I.js +4 -0
- package/dist/ionic/p-CODBQrPj.js +4 -0
- package/dist/ionic/p-CTSaffvS.js +4 -0
- package/dist/ionic/p-CaM5HwzM.js +4 -0
- package/dist/ionic/p-CgaW5Zy8.js +4 -0
- package/dist/ionic/p-Cipl19Qe.js +4 -0
- package/dist/ionic/p-CnBfCmL2.js +4 -0
- package/dist/ionic/p-D-Xit5Ye.js +4 -0
- package/dist/ionic/p-D7LIC84Z.js +4 -0
- package/dist/ionic/p-D844sgjq.js +4 -0
- package/dist/ionic/p-DWDKFjrH.js +4 -0
- package/dist/ionic/p-DaJxRxSQ.js +4 -0
- package/dist/ionic/p-DhyWlGap.js +4 -0
- package/dist/ionic/p-DiyY-i-5.js +4 -0
- package/dist/ionic/p-DrxPmT9E.js +4 -0
- package/dist/ionic/p-PnwG0glX.js +4 -0
- package/dist/ionic/p-YIsE5bNG.js +4 -0
- package/dist/ionic/p-a320cdb2.entry.js +4 -0
- package/dist/ionic/p-a37444b3.entry.js +4 -0
- package/dist/ionic/p-a4bed36b.entry.js +4 -0
- package/dist/ionic/p-a7914fe5.entry.js +4 -0
- package/dist/ionic/p-aa298c58.entry.js +4 -0
- package/dist/ionic/p-ace3062d.entry.js +4 -0
- package/dist/ionic/p-b70775b0.entry.js +4 -0
- package/dist/ionic/p-b7c75507.entry.js +4 -0
- package/dist/ionic/p-b920f149.entry.js +4 -0
- package/dist/ionic/p-c39025c0.entry.js +4 -0
- package/dist/ionic/p-c9cda5ce.entry.js +4 -0
- package/dist/ionic/p-cc314123.entry.js +4 -0
- package/dist/ionic/p-d1f42864.entry.js +4 -0
- package/dist/ionic/p-d4506138.entry.js +4 -0
- package/dist/ionic/p-dbd06d8d.entry.js +4 -0
- package/dist/ionic/p-dda49380.entry.js +4 -0
- package/dist/ionic/p-de4e8418.entry.js +4 -0
- package/dist/ionic/p-e95618c4.entry.js +4 -0
- package/dist/ionic/p-f89fcf62.entry.js +4 -0
- package/dist/ionic/p-fcce2dda.entry.js +4 -0
- package/dist/ionic/p-fd2a869f.entry.js +4 -0
- package/dist/ionic/p-fd95a423.entry.js +4 -0
- package/dist/ionic/p-fe14205b.entry.js +4 -0
- package/dist/ionic/p-i6iV8hMy.js +4 -0
- package/dist/ionic/p-nUlpIttM.js +4 -0
- package/dist/ionic/p-o8OKV5aD.js +4 -0
- package/dist/ionic/p-vXpMhGrs.js +4 -0
- package/dist/ionic/p-zRFin7iz.js +4 -0
- package/dist/ionic/p-zn4qAQ_d.js +4 -0
- package/dist/types/components/accordion/accordion.d.ts +12 -3
- package/dist/types/components/accordion-group/accordion-group.d.ts +12 -1
- package/dist/types/components/action-sheet/action-sheet-interface.d.ts +3 -7
- package/dist/types/components/action-sheet/action-sheet.d.ts +3 -2
- package/dist/types/components/alert/alert-interface.d.ts +3 -7
- package/dist/types/components/alert/alert.d.ts +3 -2
- package/dist/types/components/app/app.d.ts +4 -5
- package/dist/types/components/avatar/avatar.d.ts +32 -0
- package/dist/types/components/back-button/back-button.d.ts +8 -1
- package/dist/types/components/backdrop/backdrop.d.ts +4 -0
- package/dist/types/components/badge/badge.d.ts +34 -1
- package/dist/types/components/breadcrumb/breadcrumb.d.ts +14 -1
- package/dist/types/components/breadcrumbs/breadcrumbs.d.ts +2 -2
- package/dist/types/components/button/button.d.ts +23 -8
- package/dist/types/components/buttons/buttons.d.ts +5 -1
- package/dist/types/components/card/card.d.ts +8 -1
- package/dist/types/components/card-content/card-content.d.ts +2 -1
- package/dist/types/components/card-header/card-header.d.ts +3 -2
- package/dist/types/components/card-subtitle/card-subtitle.d.ts +2 -1
- package/dist/types/components/card-title/card-title.d.ts +2 -1
- package/dist/types/components/checkbox/checkbox.d.ts +26 -5
- package/dist/types/components/chip/chip.d.ts +26 -1
- package/dist/types/components/col/col.d.ts +52 -5
- package/dist/types/components/content/content.d.ts +3 -0
- package/dist/types/components/datetime/datetime.d.ts +26 -1
- package/dist/types/components/datetime/utils/data.d.ts +5 -5
- package/dist/types/components/datetime-button/datetime-button.d.ts +2 -1
- package/dist/types/components/divider/divider.d.ts +20 -0
- package/dist/types/components/fab/fab.d.ts +4 -0
- package/dist/types/components/fab-button/fab-button.d.ts +11 -3
- package/dist/types/components/fab-list/fab-list.d.ts +4 -0
- package/dist/types/components/footer/footer-interface.d.ts +1 -0
- package/dist/types/components/footer/footer.d.ts +20 -3
- package/dist/types/components/gallery/gallery-constants.d.ts +9 -0
- package/dist/types/components/gallery/gallery-interface.d.ts +10 -0
- package/dist/types/components/gallery/gallery.d.ts +218 -0
- package/dist/types/components/gallery/test/utils.d.ts +3 -0
- package/dist/types/components/gallery-item/gallery-item.d.ts +33 -0
- package/dist/types/components/grid/grid.d.ts +4 -0
- package/dist/types/components/header/header-interface.d.ts +1 -0
- package/dist/types/components/header/header.d.ts +26 -3
- package/dist/types/components/header/header.utils.d.ts +4 -5
- package/dist/types/components/img/img.d.ts +2 -1
- package/dist/types/components/infinite-scroll/infinite-scroll.d.ts +21 -0
- package/dist/types/components/infinite-scroll-content/infinite-scroll-content.d.ts +4 -0
- package/dist/types/components/input/input.d.ts +40 -17
- package/dist/types/components/input-otp/input-otp.d.ts +37 -0
- package/dist/types/components/input-password-toggle/input-password-toggle.d.ts +14 -0
- package/dist/types/components/item/item.d.ts +17 -4
- package/dist/types/components/item-divider/item-divider.d.ts +2 -1
- package/dist/types/components/item-group/item-group.d.ts +4 -0
- package/dist/types/components/item-option/item-option.d.ts +18 -1
- package/dist/types/components/item-options/item-options.d.ts +4 -0
- package/dist/types/components/item-sliding/item-sliding.d.ts +47 -1
- package/dist/types/components/item-sliding/test/test.utils.d.ts +13 -0
- package/dist/types/components/label/label.d.ts +2 -1
- package/dist/types/components/list/list.d.ts +15 -1
- package/dist/types/components/list-header/list-header.d.ts +2 -1
- package/dist/types/components/loading/loading-interface.d.ts +2 -7
- package/dist/types/components/loading/loading.d.ts +3 -2
- package/dist/types/components/menu/menu.d.ts +3 -0
- package/dist/types/components/menu-button/menu-button.d.ts +8 -1
- package/dist/types/components/menu-toggle/menu-toggle.d.ts +3 -0
- package/dist/types/components/modal/animations/ionic.enter.d.ts +6 -0
- package/dist/types/components/modal/animations/ionic.leave.d.ts +6 -0
- package/dist/types/components/modal/gestures/sheet.d.ts +1 -1
- package/dist/types/components/modal/modal-interface.d.ts +4 -16
- package/dist/types/components/modal/modal.d.ts +15 -12
- package/dist/types/components/nav/nav-interface.d.ts +10 -1
- package/dist/types/components/nav/nav.d.ts +27 -3
- package/dist/types/components/nav-link/nav-link.d.ts +4 -0
- package/dist/types/components/note/note.d.ts +2 -1
- package/dist/types/components/picker/picker.d.ts +2 -1
- package/dist/types/components/picker-column/picker-column.d.ts +2 -1
- package/dist/types/components/picker-column-option/picker-column-option.d.ts +4 -0
- package/dist/types/components/picker-legacy/animations/ios.enter.d.ts +5 -0
- package/dist/types/components/picker-legacy/animations/ios.leave.d.ts +5 -0
- package/dist/types/components/picker-legacy/picker-interface.d.ts +52 -0
- package/dist/types/components/picker-legacy/picker.d.ts +159 -0
- package/dist/types/components/picker-legacy-column/picker-column.d.ts +46 -0
- package/dist/types/components/picker-legacy-column/test/test.utils.d.ts +9 -0
- package/dist/types/components/popover/popover-interface.d.ts +3 -6
- package/dist/types/components/popover/popover.d.ts +6 -5
- package/dist/types/components/progress-bar/progress-bar.d.ts +10 -1
- package/dist/types/components/radio/radio.d.ts +2 -1
- package/dist/types/components/radio-group/radio-group.d.ts +12 -0
- package/dist/types/components/range/range.d.ts +2 -1
- package/dist/types/components/refresher/refresher.d.ts +2 -1
- package/dist/types/components/refresher-content/refresher-content.d.ts +10 -0
- package/dist/types/components/reorder/reorder.d.ts +9 -0
- package/dist/types/components/reorder-group/reorder-group.d.ts +4 -0
- package/dist/types/components/ripple-effect/ripple-effect.d.ts +4 -0
- package/dist/types/components/route/route.d.ts +5 -1
- package/dist/types/components/router/router.d.ts +4 -0
- package/dist/types/components/router-link/router-link.d.ts +4 -0
- package/dist/types/components/router-outlet/router-outlet.d.ts +4 -8
- package/dist/types/components/row/row.d.ts +4 -0
- package/dist/types/components/searchbar/searchbar.d.ts +57 -11
- package/dist/types/components/segment/segment.d.ts +2 -1
- package/dist/types/components/segment-button/segment-button.d.ts +2 -1
- package/dist/types/components/select/select.d.ts +55 -26
- package/dist/types/components/select-modal/select-modal.d.ts +13 -0
- package/dist/types/components/select-option/select-option.d.ts +7 -4
- package/dist/types/components/select-popover/select-popover.d.ts +3 -0
- package/dist/types/components/skeleton-text/skeleton-text.d.ts +4 -0
- package/dist/types/components/spinner/spinner.d.ts +15 -0
- package/dist/types/components/split-pane/split-pane.d.ts +4 -0
- package/dist/types/components/tab/tab.d.ts +4 -0
- package/dist/types/components/tab-bar/tab-bar-interface.d.ts +1 -0
- package/dist/types/components/tab-bar/tab-bar.d.ts +41 -3
- package/dist/types/components/tab-button/tab-button.d.ts +12 -1
- package/dist/types/components/tabs/tabs.d.ts +3 -0
- package/dist/types/components/text/text.d.ts +2 -1
- package/dist/types/components/textarea/textarea.d.ts +58 -16
- package/dist/types/components/thumbnail/thumbnail.d.ts +4 -0
- package/dist/types/components/title/title.d.ts +4 -0
- package/dist/types/components/toast/animations/utils.d.ts +2 -2
- package/dist/types/components/toast/toast-interface.d.ts +3 -7
- package/dist/types/components/toast/toast.d.ts +19 -2
- package/dist/types/components/toggle/toggle.d.ts +18 -1
- package/dist/types/components/toolbar/toolbar.d.ts +43 -3
- package/dist/types/components.d.ts +2171 -263
- package/dist/types/global/ionic-global.d.ts +28 -2
- package/dist/types/index.d.ts +1 -1
- package/dist/types/interface.d.ts +4 -0
- package/dist/types/utils/config.d.ts +133 -3
- package/dist/types/utils/css-value-validation.d.ts +21 -0
- package/dist/types/utils/focus-trap.d.ts +1 -1
- package/dist/types/utils/focus-visible.d.ts +13 -0
- package/dist/types/utils/forms/clear-button-press-controller.d.ts +20 -0
- package/dist/types/utils/forms/index.d.ts +1 -1
- package/dist/types/utils/forms/validity.d.ts +7 -0
- package/dist/types/utils/helpers.d.ts +22 -0
- package/dist/types/utils/logging/index.d.ts +1 -2
- package/dist/types/utils/overlay-control-label.d.ts +11 -9
- package/dist/types/utils/overlays-interface.d.ts +31 -1
- package/dist/types/utils/overlays.d.ts +10 -12
- package/dist/types/utils/scroll-hide-controller.d.ts +56 -0
- package/dist/types/utils/test/playwright/drag-element.d.ts +16 -3
- package/dist/types/utils/test/playwright/generator.d.ts +31 -2
- package/dist/types/utils/test/playwright/playwright-page.d.ts +1 -1
- package/dist/types/utils/test/playwright/testExpect.d.ts +1 -1
- package/dist/types/utils/theme.d.ts +9 -0
- package/hydrate/index.js +12008 -10485
- package/hydrate/index.mjs +12008 -10485
- package/package.json +16 -56
- package/components/p--m5cCjbK.js +0 -4
- package/components/p-1jI5oW-W.js +0 -4
- package/components/p-8FN7p701.js +0 -4
- package/components/p-B4uHHhPK.js +0 -4
- package/components/p-BMPN55of.js +0 -4
- package/components/p-BNJOu1Q2.js +0 -4
- package/components/p-BOvLNVKq.js +0 -4
- package/components/p-BSQPZ79H.js +0 -4
- package/components/p-BeamQXHF.js +0 -4
- package/components/p-BhamHSw3.js +0 -4
- package/components/p-Bjig0DJK.js +0 -4
- package/components/p-BjluhQMI.js +0 -4
- package/components/p-BlsIikdZ.js +0 -4
- package/components/p-BmVRXR1y.js +0 -4
- package/components/p-BqPNzJf6.js +0 -4
- package/components/p-BrD9Xv62.js +0 -4
- package/components/p-BvJqoZ5R.js +0 -4
- package/components/p-Bz6z3Asd.js +0 -4
- package/components/p-C5KYjZWD.js +0 -4
- package/components/p-C6HnVvHO.js +0 -4
- package/components/p-C7jvh5Wy.js +0 -4
- package/components/p-C9BGR5fy.js +0 -4
- package/components/p-CB-y1CdP.js +0 -4
- package/components/p-CEW4RXZO.js +0 -4
- package/components/p-CHH3loEE.js +0 -4
- package/components/p-CIGNaXM1.js +0 -4
- package/components/p-CJKUWjmg.js +0 -4
- package/components/p-C_phlPMC.js +0 -4
- package/components/p-CbhUdtjf.js +0 -4
- package/components/p-CejmQs3h.js +0 -4
- package/components/p-CtZqa4HM.js +0 -4
- package/components/p-D7-vHX0A.js +0 -4
- package/components/p-D9qIVSWm.js +0 -4
- package/components/p-DD5fQ4EQ.js +0 -4
- package/components/p-DE-3iMNW.js +0 -4
- package/components/p-DFvZn99E.js +0 -4
- package/components/p-DHFt2rdc.js +0 -4
- package/components/p-DJztqcrH.js +0 -4
- package/components/p-DM-PrAoh.js +0 -4
- package/components/p-DSzSbVP2.js +0 -4
- package/components/p-DV85C0e0.js +0 -4
- package/components/p-DWCzVL3Y.js +0 -4
- package/components/p-D_RCyzwu.js +0 -4
- package/components/p-D_tD8r3L.js +0 -4
- package/components/p-DaA_8eqt.js +0 -4
- package/components/p-DjCtLZbF.js +0 -4
- package/components/p-Dmd2xqCe.js +0 -4
- package/components/p-Dojwmvde.js +0 -4
- package/components/p-G0TxqHfe.js +0 -4
- package/components/p-G6JR-cr_.js +0 -4
- package/components/p-GG5GhznE.js +0 -4
- package/components/p-LpMHEu3v.js +0 -4
- package/components/p-TXPDHL13.js +0 -4
- package/components/p-UIBJkZf8.js +0 -4
- package/components/p-ZjP4CjeZ.js +0 -4
- package/components/p-_IKFD3ID.js +0 -4
- package/components/p-byZM6qHV.js +0 -4
- package/components/p-dKq2jIum.js +0 -4
- package/components/p-fruGqVHh.js +0 -4
- package/components/p-iYhH60Tc.js +0 -4
- package/components/p-ia3IDdJS.js +0 -4
- package/dist/cjs/hardware-back-button-fqpYh-kd.js +0 -121
- package/dist/cjs/index-DkNv4J_i.js +0 -10
- package/dist/cjs/input.utils-BZdMWVrt.js +0 -35
- package/dist/cjs/ion-datetime.cjs.entry.js +0 -2770
- package/dist/cjs/ionic-global-k6hOWWpn.js +0 -156
- package/dist/cjs/keyboard-controller-PtZoN2GS.js +0 -167
- package/dist/cjs/slot-mutation-controller-DPHmqXdV.js +0 -397
- package/dist/cjs/validity-BpS37YFM.js +0 -19
- package/dist/collection/utils/forms/start-container-controller.js +0 -132
- package/dist/esm/hardware-back-button-gLJHMX_F.js +0 -115
- package/dist/esm/index-ZjP4CjeZ.js +0 -7
- package/dist/esm/input.utils-B1ValN_N.js +0 -33
- package/dist/esm/ion-datetime.entry.js +0 -2768
- package/dist/esm/ionic-global-BVB7BrLT.js +0 -151
- package/dist/esm/keyboard-controller-DEwoa1ev.js +0 -165
- package/dist/esm/slot-mutation-controller-DiE_C9un.js +0 -393
- package/dist/esm/theme-byZM6qHV.js +0 -48
- package/dist/esm/validity-DJztqcrH.js +0 -17
- package/dist/ionic/p-06ec7136.entry.js +0 -4
- package/dist/ionic/p-09fe4fa3.entry.js +0 -4
- package/dist/ionic/p-10d45a07.entry.js +0 -4
- package/dist/ionic/p-208c8a07.entry.js +0 -4
- package/dist/ionic/p-212474fa.entry.js +0 -4
- package/dist/ionic/p-2eef1396.entry.js +0 -4
- package/dist/ionic/p-347e005d.entry.js +0 -4
- package/dist/ionic/p-3a0b3f1d.entry.js +0 -4
- package/dist/ionic/p-3b071259.entry.js +0 -4
- package/dist/ionic/p-40424a88.entry.js +0 -4
- package/dist/ionic/p-4204184c.entry.js +0 -4
- package/dist/ionic/p-47464391.entry.js +0 -4
- package/dist/ionic/p-4eOQC00Z.js +0 -4
- package/dist/ionic/p-4f9c9126.entry.js +0 -4
- package/dist/ionic/p-5JsKPLJD.js +0 -4
- package/dist/ionic/p-5bc485c6.entry.js +0 -4
- package/dist/ionic/p-603a61e6.entry.js +0 -4
- package/dist/ionic/p-60576951.entry.js +0 -4
- package/dist/ionic/p-67a81d33.entry.js +0 -4
- package/dist/ionic/p-6affb775.entry.js +0 -4
- package/dist/ionic/p-6f120c25.entry.js +0 -4
- package/dist/ionic/p-71c82b60.entry.js +0 -4
- package/dist/ionic/p-79325ffe.entry.js +0 -4
- package/dist/ionic/p-7CBuOvEo.js +0 -4
- package/dist/ionic/p-7e4d51fa.entry.js +0 -4
- package/dist/ionic/p-7f5d4664.entry.js +0 -4
- package/dist/ionic/p-80ee82fc.entry.js +0 -4
- package/dist/ionic/p-84af7dbc.entry.js +0 -4
- package/dist/ionic/p-89ca830a.entry.js +0 -4
- package/dist/ionic/p-93b8ec8f.entry.js +0 -4
- package/dist/ionic/p-946f65c2.entry.js +0 -4
- package/dist/ionic/p-9c4b39fb.entry.js +0 -4
- package/dist/ionic/p-B1NEZUzQ.js +0 -4
- package/dist/ionic/p-B1ck5iy-.js +0 -4
- package/dist/ionic/p-B4FrqdW0.js +0 -4
- package/dist/ionic/p-BB0LlG4y.js +0 -4
- package/dist/ionic/p-BMPN55of.js +0 -4
- package/dist/ionic/p-BSQPZ79H.js +0 -4
- package/dist/ionic/p-BYEAtHr-.js +0 -4
- package/dist/ionic/p-BhamHSw3.js +0 -4
- package/dist/ionic/p-BmVRXR1y.js +0 -4
- package/dist/ionic/p-BvabGprD.js +0 -4
- package/dist/ionic/p-C-94tAim.js +0 -4
- package/dist/ionic/p-C-eHZMYE.js +0 -4
- package/dist/ionic/p-CBR_W98Z.js +0 -4
- package/dist/ionic/p-CBWAXjA5.js +0 -4
- package/dist/ionic/p-CIGNaXM1.js +0 -4
- package/dist/ionic/p-CMRtMbJc.js +0 -4
- package/dist/ionic/p-CPcPmkGv.js +0 -4
- package/dist/ionic/p-CaRuIadB.js +0 -4
- package/dist/ionic/p-Cdjxf_yg.js +0 -4
- package/dist/ionic/p-ChhhtsGZ.js +0 -5
- package/dist/ionic/p-CzS1qWve.js +0 -4
- package/dist/ionic/p-D5t_-oMk.js +0 -4
- package/dist/ionic/p-D94_RztK.js +0 -4
- package/dist/ionic/p-DJztqcrH.js +0 -4
- package/dist/ionic/p-DWCzVL3Y.js +0 -4
- package/dist/ionic/p-DjjfauRM.js +0 -4
- package/dist/ionic/p-DkUB-ROc.js +0 -4
- package/dist/ionic/p-Dn0mqQ_R.js +0 -4
- package/dist/ionic/p-Dojwmvde.js +0 -4
- package/dist/ionic/p-DplOqGUv.js +0 -4
- package/dist/ionic/p-Dst_XmZh.js +0 -4
- package/dist/ionic/p-T71k3C35.js +0 -4
- package/dist/ionic/p-TXPDHL13.js +0 -4
- package/dist/ionic/p-UIBJkZf8.js +0 -4
- package/dist/ionic/p-ZjP4CjeZ.js +0 -4
- package/dist/ionic/p-a438b193.entry.js +0 -4
- package/dist/ionic/p-babaaaa7.entry.js +0 -4
- package/dist/ionic/p-be08d500.entry.js +0 -4
- package/dist/ionic/p-be9a4f51.entry.js +0 -4
- package/dist/ionic/p-byZM6qHV.js +0 -4
- package/dist/ionic/p-c00d3092.entry.js +0 -4
- package/dist/ionic/p-c36dc8f5.entry.js +0 -4
- package/dist/ionic/p-c72a7e17.entry.js +0 -4
- package/dist/ionic/p-c8edd88c.entry.js +0 -4
- package/dist/ionic/p-ce0e380b.entry.js +0 -4
- package/dist/ionic/p-ce32912b.entry.js +0 -4
- package/dist/ionic/p-d07cf130.entry.js +0 -4
- package/dist/ionic/p-d27edeb3.entry.js +0 -4
- package/dist/ionic/p-d5d2c506.entry.js +0 -4
- package/dist/ionic/p-d5e31ca9.entry.js +0 -4
- package/dist/ionic/p-de91444f.entry.js +0 -4
- package/dist/ionic/p-ded69ceb.entry.js +0 -4
- package/dist/ionic/p-df72866d.entry.js +0 -4
- package/dist/ionic/p-e47e3151.entry.js +0 -4
- package/dist/ionic/p-e621e5e8.entry.js +0 -4
- package/dist/ionic/p-eea9cf93.entry.js +0 -4
- package/dist/ionic/p-f402f5a4.entry.js +0 -4
- package/dist/ionic/p-fe1bfbcf.entry.js +0 -4
- package/dist/ionic/p-ffb90460.entry.js +0 -4
- package/dist/types/utils/forms/start-container-controller.d.ts +0 -34
- /package/dist/collection/components/{input-password-toggle/input-password-toggle.css → refresher-content/refresher-content.css} +0 -0
|
@@ -1,21 +1,20 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
3
|
*/
|
|
4
|
-
import { r as registerInstance,
|
|
5
|
-
import {
|
|
6
|
-
import { a as isPlatform, b as getIonMode } from './ionic-global-
|
|
7
|
-
import { i as inheritAriaAttributes, h as hasLazyBuild, c as componentOnReady, e as clamp, s as shallowEqualStringMap } from './helpers-
|
|
8
|
-
import { i as isRTL } from './dir-
|
|
9
|
-
import { h as hostContext, c as createColorClasses } from './theme-
|
|
10
|
-
import { b as findIonContent, p as printIonContentErrorMsg, g as getScrollElement } from './index-
|
|
11
|
-
import { c as createKeyboardController } from './
|
|
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
|
+
import { focusElements } from './focus-visible-vXpMhGrs.js';
|
|
6
|
+
import { c as getIonTheme, a as isPlatform, b as getIonMode } from './ionic-global-BJDU78B6.js';
|
|
7
|
+
import { i as inheritAriaAttributes, h as hasLazyBuild, c as componentOnReady, e as clamp, s as shallowEqualStringMap } from './helpers-ChPZH7zh.js';
|
|
8
|
+
import { i as isRTL } from './dir-o8OKV5aD.js';
|
|
9
|
+
import { h as hostContext, c as createColorClasses } from './theme-DaJxRxSQ.js';
|
|
10
|
+
import { b as findIonContent, p as printIonContentErrorMsg, g as getScrollElement } from './index-niemeDYi.js';
|
|
11
|
+
import { c as createScrollHideController, a as createKeyboardController } from './scroll-hide-controller-B3MRYNXh.js';
|
|
12
12
|
import { g as getTimeGivenProgression } from './cubic-bezier-hHmYLOfE.js';
|
|
13
|
-
import { a as attachComponent, d as detachComponent } from './framework-delegate-
|
|
13
|
+
import { a as attachComponent, d as detachComponent } from './framework-delegate-P5K_3uYw.js';
|
|
14
14
|
import { c as createLockController } from './lock-controller-B-hirT0v.js';
|
|
15
|
-
import { t as transition } from './index-
|
|
16
|
-
import './
|
|
17
|
-
import './
|
|
18
|
-
import './capacitor-CFERIeaU.js';
|
|
15
|
+
import { t as transition } from './index-CXSPjEca.js';
|
|
16
|
+
import './keyboard-x-uHYVoq.js';
|
|
17
|
+
import './capacitor-BnXrCBvt.js';
|
|
19
18
|
|
|
20
19
|
const appCss = () => `html.plt-mobile ion-app{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}html.plt-mobile ion-app [contenteditable]{-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}ion-app.force-statusbar-padding{--ion-safe-area-top:20px}`;
|
|
21
20
|
|
|
@@ -23,54 +22,6 @@ const App = class {
|
|
|
23
22
|
constructor(hostRef) {
|
|
24
23
|
registerInstance(this, hostRef);
|
|
25
24
|
}
|
|
26
|
-
focusVisible;
|
|
27
|
-
loadTimeout;
|
|
28
|
-
get el() { return getElement(this); }
|
|
29
|
-
componentDidLoad() {
|
|
30
|
-
{
|
|
31
|
-
this.rIC(async () => {
|
|
32
|
-
const isHybrid = isPlatform(window, 'hybrid');
|
|
33
|
-
if (!config.getBoolean('_testing')) {
|
|
34
|
-
import('./index-Clc-28O1.js').then((module) => module.startTapClick(config));
|
|
35
|
-
}
|
|
36
|
-
if (config.getBoolean('statusTap', isHybrid)) {
|
|
37
|
-
import('./status-tap-CHB7KwIb.js').then((module) => module.startStatusTap());
|
|
38
|
-
}
|
|
39
|
-
if (config.getBoolean('inputShims', needInputShims())) {
|
|
40
|
-
/**
|
|
41
|
-
* needInputShims() ensures that only iOS and Android
|
|
42
|
-
* platforms proceed into this block.
|
|
43
|
-
*/
|
|
44
|
-
const platform = isPlatform(window, 'ios') ? 'ios' : 'android';
|
|
45
|
-
import('./input-shims-B8sfni1e.js').then((module) => module.startInputShims(config, platform));
|
|
46
|
-
}
|
|
47
|
-
const hardwareBackButtonModule = await import('./hardware-back-button-gLJHMX_F.js');
|
|
48
|
-
const supportsHardwareBackButtonEvents = isHybrid || shouldUseCloseWatcher();
|
|
49
|
-
if (config.getBoolean('hardwareBackButton', supportsHardwareBackButtonEvents)) {
|
|
50
|
-
hardwareBackButtonModule.startHardwareBackButton();
|
|
51
|
-
}
|
|
52
|
-
else {
|
|
53
|
-
/**
|
|
54
|
-
* If an app sets hardwareBackButton: false and experimentalCloseWatcher: true
|
|
55
|
-
* then the close watcher will not be used.
|
|
56
|
-
*/
|
|
57
|
-
if (shouldUseCloseWatcher()) {
|
|
58
|
-
printIonWarning('[ion-app] - experimentalCloseWatcher was set to `true`, but hardwareBackButton was set to `false`. Both config options must be `true` for the Close Watcher API to be used.');
|
|
59
|
-
}
|
|
60
|
-
hardwareBackButtonModule.blockHardwareBackButton();
|
|
61
|
-
}
|
|
62
|
-
if (typeof window !== 'undefined') {
|
|
63
|
-
import('./keyboard-Cj8mLJeq.js').then((module) => module.startKeyboardAssist(window));
|
|
64
|
-
}
|
|
65
|
-
import('./focus-visible-BmVRXR1y.js').then((module) => (this.focusVisible = module.startFocusVisible()));
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
disconnectedCallback() {
|
|
70
|
-
if (this.loadTimeout) {
|
|
71
|
-
clearTimeout(this.loadTimeout);
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
25
|
/**
|
|
75
26
|
* Used to set focus on an element that uses `ion-focusable`.
|
|
76
27
|
* Do not use this if focusing the element as a result of a keyboard
|
|
@@ -83,83 +34,62 @@ const App = class {
|
|
|
83
34
|
* @param elements An array of HTML elements to set focus on.
|
|
84
35
|
*/
|
|
85
36
|
async setFocus(elements) {
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
if ('requestIdleCallback' in window) {
|
|
92
|
-
window.requestIdleCallback(callback);
|
|
93
|
-
}
|
|
94
|
-
else {
|
|
95
|
-
this.loadTimeout = setTimeout(callback, 32);
|
|
96
|
-
}
|
|
37
|
+
/**
|
|
38
|
+
* The focus-visible utility is used to set focus on an
|
|
39
|
+
* element that uses `ion-focusable`.
|
|
40
|
+
*/
|
|
41
|
+
focusElements(elements);
|
|
97
42
|
}
|
|
98
43
|
render() {
|
|
99
|
-
const
|
|
100
|
-
return (h(Host, { key: '
|
|
101
|
-
[
|
|
44
|
+
const theme = getIonTheme(this);
|
|
45
|
+
return (h(Host, { key: '3b7e84c7c4187287123413f90838cda89136b2a4', class: {
|
|
46
|
+
[theme]: true,
|
|
102
47
|
'ion-page': true,
|
|
103
48
|
'force-statusbar-padding': config.getBoolean('_forceStatusbarPadding'),
|
|
104
49
|
} }));
|
|
105
50
|
}
|
|
106
|
-
}
|
|
107
|
-
const needInputShims = () => {
|
|
108
|
-
/**
|
|
109
|
-
* iOS always needs input shims
|
|
110
|
-
*/
|
|
111
|
-
const needsShimsIOS = isPlatform(window, 'ios') && isPlatform(window, 'mobile');
|
|
112
|
-
if (needsShimsIOS) {
|
|
113
|
-
return true;
|
|
114
|
-
}
|
|
115
|
-
/**
|
|
116
|
-
* Android only needs input shims when running
|
|
117
|
-
* in the browser and only if the browser is using the
|
|
118
|
-
* new Chrome 108+ resize behavior: https://developer.chrome.com/blog/viewport-resize-behavior/
|
|
119
|
-
*/
|
|
120
|
-
const isAndroidMobileWeb = isPlatform(window, 'android') && isPlatform(window, 'mobileweb');
|
|
121
|
-
if (isAndroidMobileWeb) {
|
|
122
|
-
return true;
|
|
123
|
-
}
|
|
124
|
-
return false;
|
|
51
|
+
get el() { return getElement(this); }
|
|
125
52
|
};
|
|
126
53
|
App.style = appCss();
|
|
127
54
|
|
|
128
|
-
const
|
|
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-500, 1.25rem)}`;
|
|
129
56
|
|
|
130
|
-
const
|
|
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
|
+
|
|
59
|
+
const buttonsMdCss = () => `.sc-ion-buttons-md-h{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-webkit-transform:translateZ(0);transform:translateZ(0)}.sc-ion-buttons-md-s ion-button{--padding-top:0;--padding-bottom:0;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0}.sc-ion-buttons-md-h{z-index:99}.sc-ion-buttons-md-s ion-button{--padding-top:0;--padding-bottom:0;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0}.sc-ion-buttons-md-s ion-button{--padding-top:3px;--padding-bottom:3px;--padding-start:8px;--padding-end:8px;--box-shadow:none;-webkit-margin-start:2px;margin-inline-start:2px;-webkit-margin-end:2px;margin-inline-end:2px;min-height:32px}.sc-ion-buttons-md-s .button-has-icon-only{--padding-top:0;--padding-bottom:0}.sc-ion-buttons-md-s ion-button:not(.button-round){--border-radius:2px}.sc-ion-buttons-md-h.ion-color.sc-ion-buttons-md-s .button,.ion-color .sc-ion-buttons-md-h.sc-ion-buttons-md-s .button{--color:initial;--color-focused:var(--ion-color-contrast);--color-hover:var(--ion-color-contrast);--background-activated:transparent;--background-focused:var(--ion-color-contrast);--background-hover:var(--ion-color-contrast)}.sc-ion-buttons-md-h.ion-color.sc-ion-buttons-md-s .button-solid,.ion-color .sc-ion-buttons-md-h.sc-ion-buttons-md-s .button-solid{--background:var(--ion-color-contrast);--background-activated:transparent;--background-focused:var(--ion-color-shade);--background-hover:var(--ion-color-base);--color:var(--ion-color-base);--color-focused:var(--ion-color-base);--color-hover:var(--ion-color-base)}.sc-ion-buttons-md-h.ion-color.sc-ion-buttons-md-s .button-outline,.ion-color .sc-ion-buttons-md-h.sc-ion-buttons-md-s .button-outline{--border-color:var(--ion-color-contrast)}.sc-ion-buttons-md-s .button-has-icon-only.button-clear{--padding-top:12px;--padding-end:12px;--padding-bottom:12px;--padding-start:12px;--border-radius:50%;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;width:3rem;height:3rem}.sc-ion-buttons-md-s .button{--background-hover:currentColor}.sc-ion-buttons-md-s .button-solid{--color:var(--ion-toolbar-background, var(--ion-background-color, #fff));--background:var(--ion-toolbar-color, var(--ion-text-color, #424242));--background-activated:transparent;--background-focused:currentColor}.sc-ion-buttons-md-s .button-outline{--color:initial;--background:transparent;--background-activated:transparent;--background-focused:currentColor;--background-hover:currentColor;--border-color:currentColor}.sc-ion-buttons-md-s .button-clear{--color:initial;--background:transparent;--background-activated:transparent;--background-focused:currentColor;--background-hover:currentColor}.sc-ion-buttons-md-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.4em}.sc-ion-buttons-md-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.4em}.sc-ion-buttons-md-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.8em}`;
|
|
131
60
|
|
|
132
61
|
const Buttons = class {
|
|
133
62
|
constructor(hostRef) {
|
|
134
63
|
registerInstance(this, hostRef);
|
|
64
|
+
/**
|
|
65
|
+
* If true, buttons will disappear when its
|
|
66
|
+
* parent toolbar has fully collapsed if the toolbar
|
|
67
|
+
* is not the first toolbar. If the toolbar is the
|
|
68
|
+
* first toolbar, the buttons will be hidden and will
|
|
69
|
+
* only be shown once all toolbars have fully collapsed.
|
|
70
|
+
*
|
|
71
|
+
* Only applies in the `ios` theme with `collapse` set to
|
|
72
|
+
* `true` on `ion-header`.
|
|
73
|
+
*
|
|
74
|
+
* Typically used for [Collapsible Large Titles](https://ionicframework.com/docs/api/title#collapsible-large-titles)
|
|
75
|
+
*/
|
|
76
|
+
this.collapse = false;
|
|
135
77
|
}
|
|
136
|
-
/**
|
|
137
|
-
* If true, buttons will disappear when its
|
|
138
|
-
* parent toolbar has fully collapsed if the toolbar
|
|
139
|
-
* is not the first toolbar. If the toolbar is the
|
|
140
|
-
* first toolbar, the buttons will be hidden and will
|
|
141
|
-
* only be shown once all toolbars have fully collapsed.
|
|
142
|
-
*
|
|
143
|
-
* Only applies in `ios` mode with `collapse` set to
|
|
144
|
-
* `true` on `ion-header`.
|
|
145
|
-
*
|
|
146
|
-
* Typically used for [Collapsible Large Titles](https://ionicframework.com/docs/api/title#collapsible-large-titles)
|
|
147
|
-
*/
|
|
148
|
-
collapse = false;
|
|
149
78
|
render() {
|
|
150
|
-
const
|
|
151
|
-
return (h(Host, { key: '
|
|
152
|
-
[
|
|
79
|
+
const theme = getIonTheme(this);
|
|
80
|
+
return (h(Host, { key: '95c107ba7871c801a5ef14c636dc8e2fe69debf3', class: {
|
|
81
|
+
[theme]: true,
|
|
153
82
|
['buttons-collapse']: this.collapse,
|
|
154
|
-
} }, h("slot", { key: '
|
|
83
|
+
} }, h("slot", { key: '58669abfce458e1344b84286d4200e305017b958' })));
|
|
155
84
|
}
|
|
156
85
|
};
|
|
157
86
|
Buttons.style = {
|
|
87
|
+
ionic: buttonsIonicCss(),
|
|
158
88
|
ios: buttonsIosCss(),
|
|
159
89
|
md: buttonsMdCss()
|
|
160
90
|
};
|
|
161
91
|
|
|
162
|
-
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{
|
|
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}}`;
|
|
163
93
|
|
|
164
94
|
const Content = class {
|
|
165
95
|
constructor(hostRef) {
|
|
@@ -167,100 +97,68 @@ const Content = class {
|
|
|
167
97
|
this.ionScrollStart = createEvent(this, "ionScrollStart", 7);
|
|
168
98
|
this.ionScroll = createEvent(this, "ionScroll", 7);
|
|
169
99
|
this.ionScrollEnd = createEvent(this, "ionScrollEnd", 7);
|
|
100
|
+
this.watchDog = null;
|
|
101
|
+
this.isScrolling = false;
|
|
102
|
+
this.lastScroll = 0;
|
|
103
|
+
this.queued = false;
|
|
104
|
+
this.cTop = -1;
|
|
105
|
+
this.cBottom = -1;
|
|
106
|
+
this.isMainContent = true;
|
|
107
|
+
this.resizeTimeout = null;
|
|
108
|
+
this.inheritedAttributes = {};
|
|
109
|
+
this.tabsElement = null;
|
|
110
|
+
// Detail is used in a hot loop in the scroll event, by allocating it here
|
|
111
|
+
// V8 will be able to inline any read/write to it since it's a monomorphic class.
|
|
112
|
+
// https://mrale.ph/blog/2015/01/11/whats-up-with-monomorphism.html
|
|
113
|
+
this.detail = {
|
|
114
|
+
scrollTop: 0,
|
|
115
|
+
scrollLeft: 0,
|
|
116
|
+
type: 'scroll',
|
|
117
|
+
event: undefined,
|
|
118
|
+
startX: 0,
|
|
119
|
+
startY: 0,
|
|
120
|
+
startTime: 0,
|
|
121
|
+
currentX: 0,
|
|
122
|
+
currentY: 0,
|
|
123
|
+
velocityX: 0,
|
|
124
|
+
velocityY: 0,
|
|
125
|
+
deltaX: 0,
|
|
126
|
+
deltaY: 0,
|
|
127
|
+
currentTime: 0,
|
|
128
|
+
data: undefined,
|
|
129
|
+
isScrolling: true,
|
|
130
|
+
};
|
|
131
|
+
/**
|
|
132
|
+
* If `true`, the content will scroll behind the headers
|
|
133
|
+
* and footers. This effect can easily be seen by setting the toolbar
|
|
134
|
+
* to transparent.
|
|
135
|
+
*/
|
|
136
|
+
this.fullscreen = false;
|
|
137
|
+
/**
|
|
138
|
+
* Controls where the fixed content is placed relative to the main content
|
|
139
|
+
* in the DOM. This can be used to control the order in which fixed elements
|
|
140
|
+
* receive keyboard focus.
|
|
141
|
+
* For example, if a FAB in the fixed slot should receive keyboard focus before
|
|
142
|
+
* the main page content, set this property to `'before'`.
|
|
143
|
+
*/
|
|
144
|
+
this.fixedSlotPlacement = 'after';
|
|
145
|
+
/**
|
|
146
|
+
* If you want to enable the content scrolling in the X axis, set this property to `true`.
|
|
147
|
+
*/
|
|
148
|
+
this.scrollX = false;
|
|
149
|
+
/**
|
|
150
|
+
* If you want to disable the content scrolling in the Y axis, set this property to `false`.
|
|
151
|
+
*/
|
|
152
|
+
this.scrollY = true;
|
|
153
|
+
/**
|
|
154
|
+
* Because of performance reasons, ionScroll events are disabled by default, in order to enable them
|
|
155
|
+
* and start listening from (ionScroll), set this property to `true`.
|
|
156
|
+
*/
|
|
157
|
+
this.scrollEvents = false;
|
|
170
158
|
}
|
|
171
|
-
watchDog = null;
|
|
172
|
-
isScrolling = false;
|
|
173
|
-
lastScroll = 0;
|
|
174
|
-
queued = false;
|
|
175
|
-
cTop = -1;
|
|
176
|
-
cBottom = -1;
|
|
177
|
-
scrollEl;
|
|
178
|
-
backgroundContentEl;
|
|
179
|
-
isMainContent = true;
|
|
180
|
-
resizeTimeout = null;
|
|
181
|
-
fullscreenResizeObserver;
|
|
182
|
-
inheritedAttributes = {};
|
|
183
|
-
tabsElement = null;
|
|
184
|
-
tabsLoadCallback;
|
|
185
|
-
// Detail is used in a hot loop in the scroll event, by allocating it here
|
|
186
|
-
// V8 will be able to inline any read/write to it since it's a monomorphic class.
|
|
187
|
-
// https://mrale.ph/blog/2015/01/11/whats-up-with-monomorphism.html
|
|
188
|
-
detail = {
|
|
189
|
-
scrollTop: 0,
|
|
190
|
-
scrollLeft: 0,
|
|
191
|
-
type: 'scroll',
|
|
192
|
-
event: undefined,
|
|
193
|
-
startX: 0,
|
|
194
|
-
startY: 0,
|
|
195
|
-
startTime: 0,
|
|
196
|
-
currentX: 0,
|
|
197
|
-
currentY: 0,
|
|
198
|
-
velocityX: 0,
|
|
199
|
-
velocityY: 0,
|
|
200
|
-
deltaX: 0,
|
|
201
|
-
deltaY: 0,
|
|
202
|
-
currentTime: 0,
|
|
203
|
-
data: undefined,
|
|
204
|
-
isScrolling: true,
|
|
205
|
-
};
|
|
206
|
-
get el() { return getElement(this); }
|
|
207
|
-
/**
|
|
208
|
-
* The color to use from your application's color palette.
|
|
209
|
-
* Default options are: `"primary"`, `"secondary"`, `"tertiary"`, `"success"`, `"warning"`, `"danger"`, `"light"`, `"medium"`, and `"dark"`.
|
|
210
|
-
* For more information on colors, see [theming](/docs/theming/basics).
|
|
211
|
-
*/
|
|
212
|
-
color;
|
|
213
|
-
/**
|
|
214
|
-
* If `true`, the content will scroll behind the headers
|
|
215
|
-
* and footers. This effect can easily be seen by setting the toolbar
|
|
216
|
-
* to transparent.
|
|
217
|
-
*/
|
|
218
|
-
fullscreen = false;
|
|
219
159
|
fullscreenChanged() {
|
|
220
160
|
this.setupFullscreenResizeObserver();
|
|
221
161
|
}
|
|
222
|
-
/**
|
|
223
|
-
* Controls where the fixed content is placed relative to the main content
|
|
224
|
-
* in the DOM. This can be used to control the order in which fixed elements
|
|
225
|
-
* receive keyboard focus.
|
|
226
|
-
* For example, if a FAB in the fixed slot should receive keyboard focus before
|
|
227
|
-
* the main page content, set this property to `'before'`.
|
|
228
|
-
*/
|
|
229
|
-
fixedSlotPlacement = 'after';
|
|
230
|
-
/**
|
|
231
|
-
* If `true` and the content does not cause an overflow scroll, the scroll interaction will cause a bounce.
|
|
232
|
-
* If the content exceeds the bounds of ionContent, nothing will change.
|
|
233
|
-
* Note, this does not disable the system bounce on iOS. That is an OS level setting.
|
|
234
|
-
*/
|
|
235
|
-
forceOverscroll;
|
|
236
|
-
/**
|
|
237
|
-
* If you want to enable the content scrolling in the X axis, set this property to `true`.
|
|
238
|
-
*/
|
|
239
|
-
scrollX = false;
|
|
240
|
-
/**
|
|
241
|
-
* If you want to disable the content scrolling in the Y axis, set this property to `false`.
|
|
242
|
-
*/
|
|
243
|
-
scrollY = true;
|
|
244
|
-
/**
|
|
245
|
-
* Because of performance reasons, ionScroll events are disabled by default, in order to enable them
|
|
246
|
-
* and start listening from (ionScroll), set this property to `true`.
|
|
247
|
-
*/
|
|
248
|
-
scrollEvents = false;
|
|
249
|
-
/**
|
|
250
|
-
* Emitted when the scroll has started. This event is disabled by default.
|
|
251
|
-
* Set `scrollEvents` to `true` to enable.
|
|
252
|
-
*/
|
|
253
|
-
ionScrollStart;
|
|
254
|
-
/**
|
|
255
|
-
* Emitted while scrolling. This event is disabled by default.
|
|
256
|
-
* Set `scrollEvents` to `true` to enable.
|
|
257
|
-
*/
|
|
258
|
-
ionScroll;
|
|
259
|
-
/**
|
|
260
|
-
* Emitted when the scroll has ended. This event is disabled by default.
|
|
261
|
-
* Set `scrollEvents` to `true` to enable.
|
|
262
|
-
*/
|
|
263
|
-
ionScrollEnd;
|
|
264
162
|
componentWillLoad() {
|
|
265
163
|
this.inheritedAttributes = inheritAriaAttributes(this.el);
|
|
266
164
|
}
|
|
@@ -399,9 +297,8 @@ const Content = class {
|
|
|
399
297
|
this.resize();
|
|
400
298
|
}, 100);
|
|
401
299
|
}
|
|
402
|
-
shouldForceOverscroll() {
|
|
300
|
+
shouldForceOverscroll(mode) {
|
|
403
301
|
const { forceOverscroll } = this;
|
|
404
|
-
const mode = getIonMode(this);
|
|
405
302
|
return forceOverscroll === undefined ? mode === 'ios' && isPlatform('ios') : forceOverscroll;
|
|
406
303
|
}
|
|
407
304
|
resize() {
|
|
@@ -597,12 +494,13 @@ const Content = class {
|
|
|
597
494
|
render() {
|
|
598
495
|
const { fixedSlotPlacement, inheritedAttributes, isMainContent, scrollX, scrollY, el } = this;
|
|
599
496
|
const rtl = isRTL(el) ? 'rtl' : 'ltr';
|
|
600
|
-
const
|
|
601
|
-
const
|
|
602
|
-
const
|
|
497
|
+
const theme = getIonTheme(this);
|
|
498
|
+
const mode = getIonMode(this, theme);
|
|
499
|
+
const forceOverscroll = this.shouldForceOverscroll(mode);
|
|
500
|
+
const transitionShadow = theme === 'ios';
|
|
603
501
|
this.resize();
|
|
604
|
-
return (h(Host, { key: '
|
|
605
|
-
[
|
|
502
|
+
return (h(Host, Object.assign({ key: '6be663a1c94186ab306827797e0743d936616b8f', role: isMainContent ? 'main' : undefined, class: createColorClasses(this.color, {
|
|
503
|
+
[theme]: true,
|
|
606
504
|
'content-fullscreen': this.fullscreen,
|
|
607
505
|
'content-sizing': hostContext('ion-popover', this.el),
|
|
608
506
|
overscroll: forceOverscroll,
|
|
@@ -610,13 +508,14 @@ const Content = class {
|
|
|
610
508
|
}), style: {
|
|
611
509
|
'--offset-top': `${this.cTop}px`,
|
|
612
510
|
'--offset-bottom': `${this.cBottom}px`,
|
|
613
|
-
},
|
|
511
|
+
} }, inheritedAttributes), h("div", { key: '237014db6e83ca2651eed9968b2d909af3658d14', ref: (el) => (this.backgroundContentEl = el), id: "background-content", part: "background" }), fixedSlotPlacement === 'before' ? h("slot", { name: "fixed" }) : null, h("div", { key: 'cafc39be73fc71223f57d283b46c94ddb5605ab3', class: {
|
|
614
512
|
'inner-scroll': true,
|
|
615
513
|
'scroll-x': scrollX,
|
|
616
514
|
'scroll-y': scrollY,
|
|
617
515
|
overscroll: (scrollX || scrollY) && forceOverscroll,
|
|
618
|
-
}, ref: (scrollEl) => (this.scrollEl = scrollEl), onScroll: this.scrollEvents ? (ev) => this.onScroll(ev) : undefined, part: "scroll" }, h("slot", { key: '
|
|
516
|
+
}, ref: (scrollEl) => (this.scrollEl = scrollEl), onScroll: this.scrollEvents ? (ev) => this.onScroll(ev) : undefined, part: "scroll" }, h("slot", { key: 'b93929f7d6d8512a042892532f58b5fbbafec449' })), transitionShadow ? (h("div", { class: "transition-effect" }, h("div", { class: "transition-cover" }), h("div", { class: "transition-shadow" }))) : null, fixedSlotPlacement === 'after' ? h("slot", { name: "fixed" }) : null));
|
|
619
517
|
}
|
|
518
|
+
get el() { return getElement(this); }
|
|
620
519
|
static get watchers() { return {
|
|
621
520
|
"fullscreen": [{
|
|
622
521
|
"fullscreenChanged": 0
|
|
@@ -624,11 +523,12 @@ const Content = class {
|
|
|
624
523
|
}; }
|
|
625
524
|
};
|
|
626
525
|
const getParentElement = (el) => {
|
|
526
|
+
var _a;
|
|
627
527
|
if (el.parentElement) {
|
|
628
528
|
// normal element with a parent element
|
|
629
529
|
return el.parentElement;
|
|
630
530
|
}
|
|
631
|
-
if (el.parentNode
|
|
531
|
+
if ((_a = el.parentNode) === null || _a === void 0 ? void 0 : _a.host) {
|
|
632
532
|
// shadow dom's document fragment
|
|
633
533
|
return el.parentNode.host;
|
|
634
534
|
}
|
|
@@ -644,7 +544,8 @@ const getPageElement = (el) => {
|
|
|
644
544
|
* between the popover and the edges of the screen. But if the popover contains
|
|
645
545
|
* its own page element, we should use that instead.
|
|
646
546
|
*/
|
|
647
|
-
const
|
|
547
|
+
const appRootSelector = config.get('appRootSelector', 'ion-app');
|
|
548
|
+
const page = el.closest(`${appRootSelector}, ion-page, .ion-page, page-inner, .popover-content`);
|
|
648
549
|
if (page) {
|
|
649
550
|
return page;
|
|
650
551
|
}
|
|
@@ -708,34 +609,100 @@ const handleFooterFade = (scrollEl, baseEl) => {
|
|
|
708
609
|
});
|
|
709
610
|
};
|
|
710
611
|
|
|
711
|
-
const
|
|
612
|
+
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}`;
|
|
613
|
+
|
|
614
|
+
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}`;
|
|
712
615
|
|
|
713
|
-
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}`;
|
|
616
|
+
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}`;
|
|
714
617
|
|
|
715
618
|
const Footer = class {
|
|
716
619
|
constructor(hostRef) {
|
|
717
620
|
registerInstance(this, hostRef);
|
|
621
|
+
this.keyboardCtrl = null;
|
|
622
|
+
this.keyboardCtrlPromise = null;
|
|
623
|
+
this.scrollHideCtrlPromise = null;
|
|
624
|
+
this.hasWarnedCollapse = false;
|
|
625
|
+
this.fadeSetupId = 0;
|
|
626
|
+
this.keyboardVisible = false;
|
|
627
|
+
/**
|
|
628
|
+
* If `true`, the footer will be translucent.
|
|
629
|
+
* Only applies when the theme is `"ios"` and the device supports
|
|
630
|
+
* [`backdrop-filter`](https://developer.mozilla.org/en-US/docs/Web/CSS/backdrop-filter#Browser_compatibility).
|
|
631
|
+
*
|
|
632
|
+
* Note: In order to scroll content behind the footer, the `fullscreen`
|
|
633
|
+
* attribute needs to be set on the content.
|
|
634
|
+
*/
|
|
635
|
+
this.translucent = false;
|
|
636
|
+
this.checkCollapsibleFooter = async () => {
|
|
637
|
+
const { scrollEffect, collapse } = this;
|
|
638
|
+
if (collapse !== undefined && scrollEffect === undefined && !this.hasWarnedCollapse) {
|
|
639
|
+
this.hasWarnedCollapse = true;
|
|
640
|
+
printIonWarning(`[ion-footer] - The \`collapse\` property is deprecated. Use \`scrollEffect\` instead.\nExample: <ion-footer scroll-effect="${collapse}">`, this.el);
|
|
641
|
+
}
|
|
642
|
+
const effect = scrollEffect !== null && scrollEffect !== void 0 ? scrollEffect : collapse;
|
|
643
|
+
// Skip teardown/rebuild if the effect hasn't changed.
|
|
644
|
+
// This prevents keyboard toggles (which trigger re-renders via
|
|
645
|
+
// @State keyboardVisible) from destroying the scroll controller
|
|
646
|
+
// and resetting isHidden.
|
|
647
|
+
if (effect === this.activeEffect) {
|
|
648
|
+
return;
|
|
649
|
+
}
|
|
650
|
+
const hasHide = effect === 'hide';
|
|
651
|
+
const hasFade = effect === 'fade';
|
|
652
|
+
this.destroyCollapsibleFooter();
|
|
653
|
+
const appRootSelector = config.get('appRootSelector', 'ion-app');
|
|
654
|
+
const pageEl = this.el.closest(`${appRootSelector}, ion-page, .ion-page, page-inner`);
|
|
655
|
+
const contentEl = pageEl ? findIonContent(pageEl) : null;
|
|
656
|
+
if (hasHide && contentEl) {
|
|
657
|
+
this.activeEffect = effect;
|
|
658
|
+
await this.setupScrollEffectHide(contentEl);
|
|
659
|
+
return;
|
|
660
|
+
}
|
|
661
|
+
// fade via the deprecated `collapse` prop is iOS-only.
|
|
662
|
+
// fade via the new `scrollEffect` prop works in all themes.
|
|
663
|
+
const isModeRestricted = scrollEffect === undefined && getIonTheme(this) !== 'ios';
|
|
664
|
+
if (hasFade && !isModeRestricted) {
|
|
665
|
+
if (!contentEl) {
|
|
666
|
+
printIonContentErrorMsg(this.el);
|
|
667
|
+
return;
|
|
668
|
+
}
|
|
669
|
+
this.setupFadeFooter(contentEl);
|
|
670
|
+
this.activeEffect = effect;
|
|
671
|
+
}
|
|
672
|
+
};
|
|
673
|
+
this.setupScrollEffectHide = async (contentEl) => {
|
|
674
|
+
const setupPromise = createScrollHideController(contentEl, {
|
|
675
|
+
el: this.el,
|
|
676
|
+
cssVar: '--internal-footer-hide-height',
|
|
677
|
+
hiddenClass: 'footer-scroll-hidden',
|
|
678
|
+
contentPartnerClass: 'content-footer-hide-scroll-partner',
|
|
679
|
+
contentHiddenClass: 'content-footer-hide-scroll-hidden',
|
|
680
|
+
});
|
|
681
|
+
this.scrollHideCtrlPromise = setupPromise;
|
|
682
|
+
const controller = await setupPromise;
|
|
683
|
+
if (this.scrollHideCtrlPromise === setupPromise) {
|
|
684
|
+
this.scrollHideCtrlPromise = null;
|
|
685
|
+
controller.init();
|
|
686
|
+
this.scrollHideCtrl = controller;
|
|
687
|
+
}
|
|
688
|
+
};
|
|
689
|
+
this.setupFadeFooter = async (contentEl) => {
|
|
690
|
+
const setupId = ++this.fadeSetupId;
|
|
691
|
+
const scrollEl = await getScrollElement(contentEl);
|
|
692
|
+
if (this.fadeSetupId !== setupId) {
|
|
693
|
+
return;
|
|
694
|
+
}
|
|
695
|
+
this.scrollEl = scrollEl;
|
|
696
|
+
/**
|
|
697
|
+
* Handle fading of toolbars on scroll
|
|
698
|
+
*/
|
|
699
|
+
this.contentScrollCallback = () => {
|
|
700
|
+
handleFooterFade(scrollEl, this.el);
|
|
701
|
+
};
|
|
702
|
+
scrollEl.addEventListener('scroll', this.contentScrollCallback);
|
|
703
|
+
handleFooterFade(scrollEl, this.el);
|
|
704
|
+
};
|
|
718
705
|
}
|
|
719
|
-
scrollEl;
|
|
720
|
-
contentScrollCallback;
|
|
721
|
-
keyboardCtrl = null;
|
|
722
|
-
keyboardCtrlPromise = null;
|
|
723
|
-
keyboardVisible = false;
|
|
724
|
-
get el() { return getElement(this); }
|
|
725
|
-
/**
|
|
726
|
-
* Describes the scroll effect that will be applied to the footer.
|
|
727
|
-
* Only applies in iOS mode.
|
|
728
|
-
*/
|
|
729
|
-
collapse;
|
|
730
|
-
/**
|
|
731
|
-
* If `true`, the footer will be translucent.
|
|
732
|
-
* Only applies when the mode is `"ios"` and the device supports
|
|
733
|
-
* [`backdrop-filter`](https://developer.mozilla.org/en-US/docs/Web/CSS/backdrop-filter#Browser_compatibility).
|
|
734
|
-
*
|
|
735
|
-
* Note: In order to scroll content behind the footer, the `fullscreen`
|
|
736
|
-
* attribute needs to be set on the content.
|
|
737
|
-
*/
|
|
738
|
-
translucent = false;
|
|
739
706
|
componentDidLoad() {
|
|
740
707
|
this.checkCollapsibleFooter();
|
|
741
708
|
}
|
|
@@ -770,6 +737,7 @@ const Footer = class {
|
|
|
770
737
|
}
|
|
771
738
|
}
|
|
772
739
|
disconnectedCallback() {
|
|
740
|
+
this.destroyCollapsibleFooter();
|
|
773
741
|
if (this.keyboardCtrlPromise) {
|
|
774
742
|
this.keyboardCtrlPromise.then((ctrl) => ctrl.destroy());
|
|
775
743
|
this.keyboardCtrlPromise = null;
|
|
@@ -779,58 +747,44 @@ const Footer = class {
|
|
|
779
747
|
this.keyboardCtrl = null;
|
|
780
748
|
}
|
|
781
749
|
}
|
|
782
|
-
checkCollapsibleFooter = () => {
|
|
783
|
-
const mode = getIonMode(this);
|
|
784
|
-
if (mode !== 'ios') {
|
|
785
|
-
return;
|
|
786
|
-
}
|
|
787
|
-
const { collapse } = this;
|
|
788
|
-
const hasFade = collapse === 'fade';
|
|
789
|
-
this.destroyCollapsibleFooter();
|
|
790
|
-
if (hasFade) {
|
|
791
|
-
const pageEl = this.el.closest('ion-app,ion-page,.ion-page,page-inner');
|
|
792
|
-
const contentEl = pageEl ? findIonContent(pageEl) : null;
|
|
793
|
-
if (!contentEl) {
|
|
794
|
-
printIonContentErrorMsg(this.el);
|
|
795
|
-
return;
|
|
796
|
-
}
|
|
797
|
-
this.setupFadeFooter(contentEl);
|
|
798
|
-
}
|
|
799
|
-
};
|
|
800
|
-
setupFadeFooter = async (contentEl) => {
|
|
801
|
-
const scrollEl = (this.scrollEl = await getScrollElement(contentEl));
|
|
802
|
-
/**
|
|
803
|
-
* Handle fading of toolbars on scroll
|
|
804
|
-
*/
|
|
805
|
-
this.contentScrollCallback = () => {
|
|
806
|
-
handleFooterFade(scrollEl, this.el);
|
|
807
|
-
};
|
|
808
|
-
scrollEl.addEventListener('scroll', this.contentScrollCallback);
|
|
809
|
-
handleFooterFade(scrollEl, this.el);
|
|
810
|
-
};
|
|
811
750
|
destroyCollapsibleFooter() {
|
|
751
|
+
this.activeEffect = undefined;
|
|
752
|
+
this.fadeSetupId++;
|
|
753
|
+
this.scrollHideCtrlPromise = null;
|
|
754
|
+
if (this.scrollHideCtrl) {
|
|
755
|
+
this.scrollHideCtrl.destroy();
|
|
756
|
+
this.scrollHideCtrl = undefined;
|
|
757
|
+
}
|
|
812
758
|
if (this.scrollEl && this.contentScrollCallback) {
|
|
813
759
|
this.scrollEl.removeEventListener('scroll', this.contentScrollCallback);
|
|
814
760
|
this.contentScrollCallback = undefined;
|
|
815
761
|
}
|
|
816
762
|
}
|
|
817
763
|
render() {
|
|
818
|
-
const { translucent, collapse } = this;
|
|
819
|
-
const
|
|
764
|
+
const { translucent, scrollEffect, collapse } = this;
|
|
765
|
+
const theme = getIonTheme(this);
|
|
766
|
+
const effect = scrollEffect !== null && scrollEffect !== void 0 ? scrollEffect : collapse;
|
|
767
|
+
// fade via the deprecated `collapse` prop is iOS-only.
|
|
768
|
+
const isModeRestricted = scrollEffect === undefined && theme !== 'ios';
|
|
769
|
+
const hasHide = effect === 'hide';
|
|
770
|
+
const hasFade = effect === 'fade' && !isModeRestricted;
|
|
820
771
|
const tabs = this.el.closest('ion-tabs');
|
|
821
|
-
const tabBar = tabs
|
|
822
|
-
return (h(Host, { key: '
|
|
823
|
-
[
|
|
772
|
+
const tabBar = tabs === null || tabs === void 0 ? void 0 : tabs.querySelector(':scope > ion-tab-bar');
|
|
773
|
+
return (h(Host, { key: 'a968cbaa37aa5f66f852b393d17a5617892d3708', role: "contentinfo", class: {
|
|
774
|
+
[theme]: true,
|
|
824
775
|
// Used internally for styling
|
|
825
|
-
[`footer-${
|
|
776
|
+
[`footer-${theme}`]: true,
|
|
826
777
|
[`footer-translucent`]: translucent,
|
|
827
|
-
[`footer-translucent-${
|
|
778
|
+
[`footer-translucent-${theme}`]: translucent,
|
|
828
779
|
['footer-toolbar-padding']: !this.keyboardVisible && (!tabBar || tabBar.slot !== 'bottom'),
|
|
829
|
-
|
|
830
|
-
|
|
780
|
+
'footer-collapse-fade': hasFade,
|
|
781
|
+
'footer-scroll-effect-hide': hasHide,
|
|
782
|
+
} }, theme === 'ios' && translucent && h("div", { key: '5116db55a74d2a738a00c177d797dc03146ea129', class: "footer-background" }), h("slot", { key: 'b61dd28630507aa01c047e119bbc367d26c5be93' })));
|
|
831
783
|
}
|
|
784
|
+
get el() { return getElement(this); }
|
|
832
785
|
};
|
|
833
786
|
Footer.style = {
|
|
787
|
+
ionic: ionicFooterMdCss(),
|
|
834
788
|
ios: footerIosCss(),
|
|
835
789
|
md: footerMdCss()
|
|
836
790
|
};
|
|
@@ -882,13 +836,14 @@ const handleContentScroll = (scrollEl, scrollHeaderIndex, contentEl) => {
|
|
|
882
836
|
});
|
|
883
837
|
};
|
|
884
838
|
const setToolbarBackgroundOpacity = (headerEl, opacity) => {
|
|
839
|
+
var _a;
|
|
885
840
|
/**
|
|
886
841
|
* Fading in the backdrop opacity
|
|
887
842
|
* should happen after the large title
|
|
888
843
|
* has collapsed, so it is handled
|
|
889
844
|
* by handleHeaderFade()
|
|
890
845
|
*/
|
|
891
|
-
if (headerEl.collapse === 'fade') {
|
|
846
|
+
if (((_a = headerEl.scrollEffect) !== null && _a !== void 0 ? _a : headerEl.collapse) === 'fade') {
|
|
892
847
|
return;
|
|
893
848
|
}
|
|
894
849
|
if (opacity === undefined) {
|
|
@@ -1046,57 +1001,79 @@ const handleHeaderFade = (scrollEl, baseEl, condenseHeader) => {
|
|
|
1046
1001
|
* Get the role type for the ion-header.
|
|
1047
1002
|
*
|
|
1048
1003
|
* @param isInsideMenu If ion-header is inside ion-menu.
|
|
1049
|
-
* @
|
|
1050
|
-
*
|
|
1051
|
-
*
|
|
1052
|
-
* mode, otherwise 'banner'.
|
|
1004
|
+
* @returns 'none' if inside ion-menu, otherwise 'banner'.
|
|
1005
|
+
* Condensed headers start as 'banner' and have their role
|
|
1006
|
+
* toggled dynamically by setHeaderActive() on scroll.
|
|
1053
1007
|
*/
|
|
1054
|
-
const getRoleType = (isInsideMenu
|
|
1008
|
+
const getRoleType = (isInsideMenu) => {
|
|
1055
1009
|
// If the header is inside a menu, it should not have the banner role.
|
|
1056
1010
|
if (isInsideMenu) {
|
|
1057
1011
|
return ROLE_NONE;
|
|
1058
1012
|
}
|
|
1059
|
-
/**
|
|
1060
|
-
* Only apply role="none" to `md` mode condensed headers
|
|
1061
|
-
* since the large header is never shown.
|
|
1062
|
-
*/
|
|
1063
|
-
if (isCondensed && mode === 'md') {
|
|
1064
|
-
return ROLE_NONE;
|
|
1065
|
-
}
|
|
1066
1013
|
// Default to banner role.
|
|
1067
1014
|
return ROLE_BANNER;
|
|
1068
1015
|
};
|
|
1069
1016
|
|
|
1070
|
-
const
|
|
1017
|
+
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}}`;
|
|
1071
1018
|
|
|
1072
|
-
const
|
|
1019
|
+
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}`;
|
|
1020
|
+
|
|
1021
|
+
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}`;
|
|
1073
1022
|
|
|
1074
1023
|
const Header = class {
|
|
1075
1024
|
constructor(hostRef) {
|
|
1076
1025
|
registerInstance(this, hostRef);
|
|
1026
|
+
this.inheritedAttributes = {};
|
|
1027
|
+
this.scrollHideCtrlPromise = null;
|
|
1028
|
+
this.hasWarnedCollapse = false;
|
|
1029
|
+
this.fadeCondenseSetupId = 0;
|
|
1030
|
+
/**
|
|
1031
|
+
* If `true`, the header will have a line at the bottom.
|
|
1032
|
+
* TODO(ROU-10855): add support for this prop on ios/md themes
|
|
1033
|
+
*/
|
|
1034
|
+
this.divider = false;
|
|
1035
|
+
/**
|
|
1036
|
+
* If `true`, the header will be translucent.
|
|
1037
|
+
* Only applies when the theme is `"ios"` or `"ionic"` and the device supports
|
|
1038
|
+
* [`backdrop-filter`](https://developer.mozilla.org/en-US/docs/Web/CSS/backdrop-filter#Browser_compatibility).
|
|
1039
|
+
*
|
|
1040
|
+
* Note: In order to scroll content behind the header, the `fullscreen`
|
|
1041
|
+
* attribute needs to be set on the content.
|
|
1042
|
+
*/
|
|
1043
|
+
this.translucent = false;
|
|
1044
|
+
this.setupScrollEffectHide = async (contentEl) => {
|
|
1045
|
+
const setupPromise = createScrollHideController(contentEl, {
|
|
1046
|
+
el: this.el,
|
|
1047
|
+
cssVar: '--internal-header-hide-height',
|
|
1048
|
+
hiddenClass: 'header-scroll-hidden',
|
|
1049
|
+
contentPartnerClass: 'content-header-hide-scroll-partner',
|
|
1050
|
+
contentHiddenClass: 'content-header-hide-scroll-hidden',
|
|
1051
|
+
});
|
|
1052
|
+
this.scrollHideCtrlPromise = setupPromise;
|
|
1053
|
+
const controller = await setupPromise;
|
|
1054
|
+
if (this.scrollHideCtrlPromise === setupPromise) {
|
|
1055
|
+
this.scrollHideCtrlPromise = null;
|
|
1056
|
+
controller.init();
|
|
1057
|
+
this.scrollHideCtrl = controller;
|
|
1058
|
+
}
|
|
1059
|
+
};
|
|
1060
|
+
this.setupFadeHeader = async (contentEl, condenseHeader) => {
|
|
1061
|
+
const setupId = ++this.fadeCondenseSetupId;
|
|
1062
|
+
const scrollEl = await getScrollElement(contentEl);
|
|
1063
|
+
if (this.fadeCondenseSetupId !== setupId) {
|
|
1064
|
+
return;
|
|
1065
|
+
}
|
|
1066
|
+
this.scrollEl = scrollEl;
|
|
1067
|
+
/**
|
|
1068
|
+
* Handle fading of toolbars on scroll
|
|
1069
|
+
*/
|
|
1070
|
+
this.contentScrollCallback = () => {
|
|
1071
|
+
handleHeaderFade(this.scrollEl, this.el, condenseHeader);
|
|
1072
|
+
};
|
|
1073
|
+
scrollEl.addEventListener('scroll', this.contentScrollCallback);
|
|
1074
|
+
handleHeaderFade(this.scrollEl, this.el, condenseHeader);
|
|
1075
|
+
};
|
|
1077
1076
|
}
|
|
1078
|
-
scrollEl;
|
|
1079
|
-
contentScrollCallback;
|
|
1080
|
-
intersectionObserver;
|
|
1081
|
-
collapsibleMainHeader;
|
|
1082
|
-
inheritedAttributes = {};
|
|
1083
|
-
get el() { return getElement(this); }
|
|
1084
|
-
/**
|
|
1085
|
-
* Describes the scroll effect that will be applied to the header.
|
|
1086
|
-
* Only applies in iOS mode.
|
|
1087
|
-
*
|
|
1088
|
-
* Typically used for [Collapsible Large Titles](https://ionicframework.com/docs/api/title#collapsible-large-titles)
|
|
1089
|
-
*/
|
|
1090
|
-
collapse;
|
|
1091
|
-
/**
|
|
1092
|
-
* If `true`, the header will be translucent.
|
|
1093
|
-
* Only applies when the mode is `"ios"` and the device supports
|
|
1094
|
-
* [`backdrop-filter`](https://developer.mozilla.org/en-US/docs/Web/CSS/backdrop-filter#Browser_compatibility).
|
|
1095
|
-
*
|
|
1096
|
-
* Note: In order to scroll content behind the header, the `fullscreen`
|
|
1097
|
-
* attribute needs to be set on the content.
|
|
1098
|
-
*/
|
|
1099
|
-
translucent = false;
|
|
1100
1077
|
componentWillLoad() {
|
|
1101
1078
|
this.inheritedAttributes = inheritAriaAttributes(this.el);
|
|
1102
1079
|
}
|
|
@@ -1110,48 +1087,63 @@ const Header = class {
|
|
|
1110
1087
|
this.destroyCollapsibleHeader();
|
|
1111
1088
|
}
|
|
1112
1089
|
async checkCollapsibleHeader() {
|
|
1113
|
-
const
|
|
1114
|
-
if (
|
|
1090
|
+
const { scrollEffect, collapse } = this;
|
|
1091
|
+
if (collapse !== undefined && scrollEffect === undefined && !this.hasWarnedCollapse) {
|
|
1092
|
+
this.hasWarnedCollapse = true;
|
|
1093
|
+
printIonWarning(`[ion-header] - The \`collapse\` property is deprecated. Use \`scrollEffect\` instead.\nExample: <ion-header scroll-effect="${collapse}">`, this.el);
|
|
1094
|
+
}
|
|
1095
|
+
const effect = scrollEffect !== null && scrollEffect !== void 0 ? scrollEffect : collapse;
|
|
1096
|
+
// Skip teardown/rebuild if the effect hasn't changed.
|
|
1097
|
+
// This prevents re-renders from destroying the scroll controller
|
|
1098
|
+
// and resetting isHidden.
|
|
1099
|
+
if (effect === this.activeEffect) {
|
|
1115
1100
|
return;
|
|
1116
1101
|
}
|
|
1117
|
-
const
|
|
1118
|
-
const hasCondense =
|
|
1119
|
-
const hasFade =
|
|
1102
|
+
const hasHide = effect === 'hide';
|
|
1103
|
+
const hasCondense = effect === 'condense';
|
|
1104
|
+
const hasFade = effect === 'fade';
|
|
1120
1105
|
this.destroyCollapsibleHeader();
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
|
|
1106
|
+
const appRootSelector = config.get('appRootSelector', 'ion-app');
|
|
1107
|
+
const pageEl = this.el.closest(`${appRootSelector}, ion-page, .ion-page, page-inner`);
|
|
1108
|
+
const contentEl = pageEl ? findIonContent(pageEl) : null;
|
|
1109
|
+
if (hasHide && contentEl) {
|
|
1110
|
+
this.activeEffect = effect;
|
|
1111
|
+
await this.setupScrollEffectHide(contentEl);
|
|
1112
|
+
return;
|
|
1113
|
+
}
|
|
1114
|
+
// condense/fade via the deprecated `collapse` prop are iOS-only.
|
|
1115
|
+
// condense/fade via the new `scrollEffect` prop work in all themes.
|
|
1116
|
+
const isModeRestricted = scrollEffect === undefined && getIonTheme(this) !== 'ios';
|
|
1117
|
+
if (hasCondense && !isModeRestricted) {
|
|
1124
1118
|
// Cloned elements are always needed in iOS transition
|
|
1125
1119
|
writeTask(() => {
|
|
1126
1120
|
const title = cloneElement('ion-title');
|
|
1127
1121
|
title.size = 'large';
|
|
1128
1122
|
cloneElement('ion-back-button');
|
|
1129
1123
|
});
|
|
1130
|
-
await this.setupCondenseHeader(contentEl, pageEl);
|
|
1124
|
+
const didSetup = await this.setupCondenseHeader(contentEl, pageEl);
|
|
1125
|
+
if (didSetup) {
|
|
1126
|
+
this.activeEffect = effect;
|
|
1127
|
+
}
|
|
1131
1128
|
}
|
|
1132
|
-
else if (hasFade) {
|
|
1133
|
-
const pageEl = this.el.closest('ion-app,ion-page,.ion-page,page-inner');
|
|
1134
|
-
const contentEl = pageEl ? findIonContent(pageEl) : null;
|
|
1129
|
+
else if (hasFade && !isModeRestricted) {
|
|
1135
1130
|
if (!contentEl) {
|
|
1136
1131
|
printIonContentErrorMsg(this.el);
|
|
1137
1132
|
return;
|
|
1138
1133
|
}
|
|
1139
|
-
const condenseHeader = contentEl.querySelector('ion-header[collapse="condense"]');
|
|
1134
|
+
const condenseHeader = contentEl.querySelector('ion-header[collapse="condense"],ion-header[scroll-effect="condense"]');
|
|
1135
|
+
this.activeEffect = effect;
|
|
1140
1136
|
await this.setupFadeHeader(contentEl, condenseHeader);
|
|
1141
1137
|
}
|
|
1142
1138
|
}
|
|
1143
|
-
setupFadeHeader = async (contentEl, condenseHeader) => {
|
|
1144
|
-
const scrollEl = (this.scrollEl = await getScrollElement(contentEl));
|
|
1145
|
-
/**
|
|
1146
|
-
* Handle fading of toolbars on scroll
|
|
1147
|
-
*/
|
|
1148
|
-
this.contentScrollCallback = () => {
|
|
1149
|
-
handleHeaderFade(this.scrollEl, this.el, condenseHeader);
|
|
1150
|
-
};
|
|
1151
|
-
scrollEl.addEventListener('scroll', this.contentScrollCallback);
|
|
1152
|
-
handleHeaderFade(this.scrollEl, this.el, condenseHeader);
|
|
1153
|
-
};
|
|
1154
1139
|
destroyCollapsibleHeader() {
|
|
1140
|
+
this.activeEffect = undefined;
|
|
1141
|
+
this.fadeCondenseSetupId++;
|
|
1142
|
+
this.scrollHideCtrlPromise = null;
|
|
1143
|
+
if (this.scrollHideCtrl) {
|
|
1144
|
+
this.scrollHideCtrl.destroy();
|
|
1145
|
+
this.scrollHideCtrl = undefined;
|
|
1146
|
+
}
|
|
1155
1147
|
if (this.intersectionObserver) {
|
|
1156
1148
|
this.intersectionObserver.disconnect();
|
|
1157
1149
|
this.intersectionObserver = undefined;
|
|
@@ -1168,21 +1160,40 @@ const Header = class {
|
|
|
1168
1160
|
async setupCondenseHeader(contentEl, pageEl) {
|
|
1169
1161
|
if (!contentEl || !pageEl) {
|
|
1170
1162
|
printIonContentErrorMsg(this.el);
|
|
1171
|
-
return;
|
|
1163
|
+
return false;
|
|
1172
1164
|
}
|
|
1173
1165
|
if (typeof IntersectionObserver === 'undefined') {
|
|
1174
|
-
return;
|
|
1166
|
+
return false;
|
|
1167
|
+
}
|
|
1168
|
+
const setupId = ++this.fadeCondenseSetupId;
|
|
1169
|
+
const scrollEl = await getScrollElement(contentEl);
|
|
1170
|
+
if (this.fadeCondenseSetupId !== setupId) {
|
|
1171
|
+
return false;
|
|
1172
|
+
}
|
|
1173
|
+
this.scrollEl = scrollEl;
|
|
1174
|
+
/**
|
|
1175
|
+
* The condense effect requires an ion-title with size="large"
|
|
1176
|
+
* in the condense header. Without it, there is nothing to
|
|
1177
|
+
* collapse into the main header toolbar.
|
|
1178
|
+
*/
|
|
1179
|
+
const hasLargeTitle = this.el.querySelector('ion-title[size="large"]') !== null;
|
|
1180
|
+
if (!hasLargeTitle) {
|
|
1181
|
+
printIonWarning('[ion-header] - The condense scroll effect requires an <ion-title size="large"> in the condense header.', this.el);
|
|
1182
|
+
return false;
|
|
1175
1183
|
}
|
|
1176
|
-
this.scrollEl = await getScrollElement(contentEl);
|
|
1177
1184
|
const headers = pageEl.querySelectorAll('ion-header');
|
|
1178
|
-
this.collapsibleMainHeader = Array.from(headers).find((header) =>
|
|
1185
|
+
this.collapsibleMainHeader = Array.from(headers).find((header) => {
|
|
1186
|
+
var _a;
|
|
1187
|
+
const effect = (_a = header.scrollEffect) !== null && _a !== void 0 ? _a : header.collapse;
|
|
1188
|
+
return effect !== 'condense';
|
|
1189
|
+
});
|
|
1179
1190
|
if (!this.collapsibleMainHeader) {
|
|
1180
|
-
return;
|
|
1191
|
+
return false;
|
|
1181
1192
|
}
|
|
1182
1193
|
const mainHeaderIndex = createHeaderIndex(this.collapsibleMainHeader);
|
|
1183
1194
|
const scrollHeaderIndex = createHeaderIndex(this.el);
|
|
1184
1195
|
if (!mainHeaderIndex || !scrollHeaderIndex) {
|
|
1185
|
-
return;
|
|
1196
|
+
return false;
|
|
1186
1197
|
}
|
|
1187
1198
|
setHeaderActive(mainHeaderIndex, false);
|
|
1188
1199
|
setToolbarBackgroundOpacity(mainHeaderIndex.el, 0);
|
|
@@ -1214,30 +1225,45 @@ const Header = class {
|
|
|
1214
1225
|
this.collapsibleMainHeader.classList.add('header-collapse-main');
|
|
1215
1226
|
}
|
|
1216
1227
|
});
|
|
1228
|
+
return true;
|
|
1217
1229
|
}
|
|
1218
1230
|
render() {
|
|
1219
|
-
const { translucent, inheritedAttributes } = this;
|
|
1220
|
-
const
|
|
1221
|
-
const
|
|
1222
|
-
|
|
1231
|
+
const { translucent, inheritedAttributes, divider, scrollEffect, collapse } = this;
|
|
1232
|
+
const theme = getIonTheme(this);
|
|
1233
|
+
const effect = scrollEffect !== null && scrollEffect !== void 0 ? scrollEffect : collapse;
|
|
1234
|
+
// condense/fade via the deprecated `collapse` prop are iOS-only.
|
|
1235
|
+
const isModeRestricted = scrollEffect === undefined && theme !== 'ios';
|
|
1236
|
+
const hasHide = effect === 'hide';
|
|
1237
|
+
const hasCondense = effect === 'condense' && !isModeRestricted && this.el.querySelector('ion-title[size="large"]') !== null;
|
|
1238
|
+
const hasFade = effect === 'fade' && !isModeRestricted;
|
|
1239
|
+
// The condense header should be hidden when
|
|
1240
|
+
// - deprecated collapse prop is used on non-iOS (mode restricted), or
|
|
1241
|
+
// - scrollEffect="condense" is set but no ion-title[size="large"] is present
|
|
1242
|
+
const isHiddenCondense = effect === 'condense' && !hasCondense;
|
|
1223
1243
|
// banner role must be at top level, so remove role if inside a menu
|
|
1224
|
-
const roleType = getRoleType(hostContext('ion-menu', this.el)
|
|
1225
|
-
return (h(Host, { key: '
|
|
1226
|
-
[
|
|
1244
|
+
const roleType = isHiddenCondense ? 'none' : getRoleType(hostContext('ion-menu', this.el));
|
|
1245
|
+
return (h(Host, Object.assign({ key: '41cc94124ed8dfb413deecfd3369facbbbd91096', role: roleType, class: {
|
|
1246
|
+
[theme]: true,
|
|
1227
1247
|
// Used internally for styling
|
|
1228
|
-
[`header-${
|
|
1248
|
+
[`header-${theme}`]: true,
|
|
1229
1249
|
[`header-translucent`]: this.translucent,
|
|
1230
|
-
[
|
|
1231
|
-
[
|
|
1232
|
-
|
|
1250
|
+
['header-collapse-condense']: hasCondense,
|
|
1251
|
+
['header-collapse-condense-hidden']: isHiddenCondense,
|
|
1252
|
+
['header-collapse-fade']: hasFade,
|
|
1253
|
+
[`header-translucent-${theme}`]: this.translucent,
|
|
1254
|
+
['header-divider']: divider,
|
|
1255
|
+
'header-scroll-effect-hide': hasHide,
|
|
1256
|
+
} }, inheritedAttributes), theme !== 'md' && translucent && h("div", { key: 'bbf8d7571a1c1f07ddd03d806218b26a4b32e2c3', class: "header-background" }), h("slot", { key: '84cad2cdebcdc2902b7a19042a83d8c56a19612d' })));
|
|
1233
1257
|
}
|
|
1258
|
+
get el() { return getElement(this); }
|
|
1234
1259
|
};
|
|
1235
1260
|
Header.style = {
|
|
1261
|
+
ionic: headerIonicCss(),
|
|
1236
1262
|
ios: headerIosCss(),
|
|
1237
1263
|
md: headerMdCss()
|
|
1238
1264
|
};
|
|
1239
1265
|
|
|
1240
|
-
const routerOutletCss = () => `:host{
|
|
1266
|
+
const routerOutletCss = () => `:host{right:0;left:0;top:0;bottom:0;position:absolute;contain:layout size style;z-index:0}`;
|
|
1241
1267
|
|
|
1242
1268
|
const RouterOutlet = class {
|
|
1243
1269
|
constructor(hostRef) {
|
|
@@ -1245,47 +1271,22 @@ const RouterOutlet = class {
|
|
|
1245
1271
|
this.ionNavWillLoad = createEvent(this, "ionNavWillLoad", 7);
|
|
1246
1272
|
this.ionNavWillChange = createEvent(this, "ionNavWillChange", 3);
|
|
1247
1273
|
this.ionNavDidChange = createEvent(this, "ionNavDidChange", 3);
|
|
1274
|
+
this.lockController = createLockController();
|
|
1275
|
+
this.gestureOrAnimationInProgress = false;
|
|
1276
|
+
/**
|
|
1277
|
+
* The mode determines the platform behaviors of the component.
|
|
1278
|
+
*/
|
|
1279
|
+
this.mode = getIonMode(this);
|
|
1280
|
+
/**
|
|
1281
|
+
* If `true`, the router-outlet should animate the transition of components.
|
|
1282
|
+
*/
|
|
1283
|
+
this.animated = true;
|
|
1248
1284
|
}
|
|
1249
|
-
lockController = createLockController();
|
|
1250
|
-
activeEl;
|
|
1251
|
-
// TODO(FW-2832): types
|
|
1252
|
-
activeComponent;
|
|
1253
|
-
activeParams;
|
|
1254
|
-
gesture;
|
|
1255
|
-
ani;
|
|
1256
|
-
gestureOrAnimationInProgress = false;
|
|
1257
|
-
get el() { return getElement(this); }
|
|
1258
|
-
/**
|
|
1259
|
-
* The mode determines which platform styles to use.
|
|
1260
|
-
*/
|
|
1261
|
-
mode = getIonMode(this);
|
|
1262
|
-
/** @internal */
|
|
1263
|
-
delegate;
|
|
1264
|
-
/**
|
|
1265
|
-
* If `true`, the router-outlet should animate the transition of components.
|
|
1266
|
-
*/
|
|
1267
|
-
animated = true;
|
|
1268
|
-
/** This property allows to create custom transition using AnimationBuilder functions. */
|
|
1269
|
-
animation;
|
|
1270
|
-
/**
|
|
1271
|
-
* If `true`, the router-outlet should allow navigation via swipe-to-go-back gesture.
|
|
1272
|
-
* Defaults to `true` for `"ios"` mode and `false` for `"md"` mode.
|
|
1273
|
-
*/
|
|
1274
|
-
swipeGesture;
|
|
1275
|
-
swipeGestureChanged() {
|
|
1276
|
-
this.updateGestureEnabled();
|
|
1277
|
-
}
|
|
1278
|
-
/** @internal */
|
|
1279
|
-
swipeHandler;
|
|
1280
1285
|
swipeHandlerChanged() {
|
|
1281
|
-
this.
|
|
1286
|
+
if (this.gesture) {
|
|
1287
|
+
this.gesture.enable(this.swipeHandler !== undefined);
|
|
1288
|
+
}
|
|
1282
1289
|
}
|
|
1283
|
-
/** @internal */
|
|
1284
|
-
ionNavWillLoad;
|
|
1285
|
-
/** @internal */
|
|
1286
|
-
ionNavWillChange;
|
|
1287
|
-
/** @internal */
|
|
1288
|
-
ionNavDidChange;
|
|
1289
1290
|
async connectedCallback() {
|
|
1290
1291
|
const onStart = () => {
|
|
1291
1292
|
this.gestureOrAnimationInProgress = true;
|
|
@@ -1293,7 +1294,7 @@ const RouterOutlet = class {
|
|
|
1293
1294
|
this.swipeHandler.onStart();
|
|
1294
1295
|
}
|
|
1295
1296
|
};
|
|
1296
|
-
this.gesture = (await import('./swipe-back-
|
|
1297
|
+
this.gesture = (await import('./swipe-back-DFICtpMC.js')).createSwipeBackGesture(this.el, () => !this.gestureOrAnimationInProgress && !!this.swipeHandler && this.swipeHandler.canStart(), () => onStart(), (step) => { var _a; return (_a = this.ani) === null || _a === void 0 ? void 0 : _a.progressStep(step); }, (shouldComplete, step, dur) => {
|
|
1297
1298
|
if (this.ani) {
|
|
1298
1299
|
this.ani.onFinish(() => {
|
|
1299
1300
|
this.gestureOrAnimationInProgress = false;
|
|
@@ -1324,21 +1325,11 @@ const RouterOutlet = class {
|
|
|
1324
1325
|
this.gestureOrAnimationInProgress = false;
|
|
1325
1326
|
}
|
|
1326
1327
|
});
|
|
1327
|
-
|
|
1328
|
-
this.swipeGesture = config.getBoolean('swipeBackEnabled', this.mode === 'ios');
|
|
1329
|
-
}
|
|
1330
|
-
else {
|
|
1331
|
-
this.updateGestureEnabled();
|
|
1332
|
-
}
|
|
1328
|
+
this.swipeHandlerChanged();
|
|
1333
1329
|
}
|
|
1334
1330
|
componentWillLoad() {
|
|
1335
1331
|
this.ionNavWillLoad.emit();
|
|
1336
1332
|
}
|
|
1337
|
-
updateGestureEnabled() {
|
|
1338
|
-
if (this.gesture) {
|
|
1339
|
-
this.gesture.enable(this.swipeHandler !== undefined && this.swipeGesture === true);
|
|
1340
|
-
}
|
|
1341
|
-
}
|
|
1342
1333
|
disconnectedCallback() {
|
|
1343
1334
|
if (this.gesture) {
|
|
1344
1335
|
this.gesture.destroy();
|
|
@@ -1405,19 +1396,16 @@ const RouterOutlet = class {
|
|
|
1405
1396
|
const { el, mode } = this;
|
|
1406
1397
|
const animated = this.animated && config.getBoolean('animated', true);
|
|
1407
1398
|
const animationBuilder = opts.animationBuilder || this.animation || config.get('navAnimation');
|
|
1408
|
-
await transition({
|
|
1409
|
-
mode,
|
|
1399
|
+
await transition(Object.assign(Object.assign({ mode,
|
|
1410
1400
|
animated,
|
|
1411
1401
|
enteringEl,
|
|
1412
|
-
leavingEl,
|
|
1413
|
-
baseEl: el,
|
|
1402
|
+
leavingEl, baseEl: el,
|
|
1414
1403
|
/**
|
|
1415
1404
|
* We need to wait for all Stencil components
|
|
1416
1405
|
* to be ready only when using the lazy
|
|
1417
1406
|
* loaded bundle.
|
|
1418
1407
|
*/
|
|
1419
|
-
deepWait: hasLazyBuild(el),
|
|
1420
|
-
progressCallback: opts.progressAnimation
|
|
1408
|
+
deepWait: hasLazyBuild(el), progressCallback: opts.progressAnimation
|
|
1421
1409
|
? (ani) => {
|
|
1422
1410
|
/**
|
|
1423
1411
|
* Because this progress callback is called asynchronously
|
|
@@ -1446,21 +1434,16 @@ const RouterOutlet = class {
|
|
|
1446
1434
|
this.ani = ani;
|
|
1447
1435
|
}
|
|
1448
1436
|
}
|
|
1449
|
-
: undefined,
|
|
1450
|
-
...opts,
|
|
1451
|
-
animationBuilder,
|
|
1452
|
-
});
|
|
1437
|
+
: undefined }, opts), { animationBuilder }));
|
|
1453
1438
|
// emit nav changed event
|
|
1454
1439
|
this.ionNavDidChange.emit();
|
|
1455
1440
|
return true;
|
|
1456
1441
|
}
|
|
1457
1442
|
render() {
|
|
1458
|
-
return h("slot", { key: '
|
|
1443
|
+
return h("slot", { key: 'ad5a4dfb30e9b6942131580c6f1b09cf562a1d8e' });
|
|
1459
1444
|
}
|
|
1445
|
+
get el() { return getElement(this); }
|
|
1460
1446
|
static get watchers() { return {
|
|
1461
|
-
"swipeGesture": [{
|
|
1462
|
-
"swipeGestureChanged": 0
|
|
1463
|
-
}],
|
|
1464
1447
|
"swipeHandler": [{
|
|
1465
1448
|
"swipeHandlerChanged": 0
|
|
1466
1449
|
}]
|
|
@@ -1468,31 +1451,17 @@ const RouterOutlet = class {
|
|
|
1468
1451
|
};
|
|
1469
1452
|
RouterOutlet.style = routerOutletCss();
|
|
1470
1453
|
|
|
1471
|
-
const
|
|
1454
|
+
const titleIonicCss = () => `: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{font-size:var(--token-font-size-450, 1.125rem);font-weight:var(--token-font-weight-medium, 500);letter-spacing:var(--token-font-letter-spacing-0, 0%);line-height:var(--token-font-line-height-700, var(--token-scale-700, 28px));text-decoration:none;text-transform:none;-webkit-box-sizing:border-box;box-sizing:border-box;pointer-events:none}:host(.title-large){font-size:var(--token-font-size-700, 1.75rem);font-weight:var(--token-font-weight-medium, 500);letter-spacing:var(--token-font-letter-spacing-0, 0%);line-height:var(--token-font-line-height-900, var(--token-scale-900, 36px));text-decoration:none;text-transform:none}`;
|
|
1455
|
+
|
|
1456
|
+
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)}}`;
|
|
1472
1457
|
|
|
1473
|
-
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)}
|
|
1458
|
+
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}`;
|
|
1474
1459
|
|
|
1475
1460
|
const ToolbarTitle = class {
|
|
1476
1461
|
constructor(hostRef) {
|
|
1477
1462
|
registerInstance(this, hostRef);
|
|
1478
1463
|
this.ionStyle = createEvent(this, "ionStyle", 7);
|
|
1479
1464
|
}
|
|
1480
|
-
get el() { return getElement(this); }
|
|
1481
|
-
/**
|
|
1482
|
-
* The color to use from your application's color palette.
|
|
1483
|
-
* Default options are: `"primary"`, `"secondary"`, `"tertiary"`, `"success"`, `"warning"`, `"danger"`, `"light"`, `"medium"`, and `"dark"`.
|
|
1484
|
-
* For more information on colors, see [theming](/docs/theming/basics).
|
|
1485
|
-
*/
|
|
1486
|
-
color;
|
|
1487
|
-
/**
|
|
1488
|
-
* The size of the toolbar title.
|
|
1489
|
-
*/
|
|
1490
|
-
size;
|
|
1491
|
-
/**
|
|
1492
|
-
* Emitted when the styles change.
|
|
1493
|
-
* @internal
|
|
1494
|
-
*/
|
|
1495
|
-
ionStyle;
|
|
1496
1465
|
sizeChanged() {
|
|
1497
1466
|
this.emitStyle();
|
|
1498
1467
|
}
|
|
@@ -1509,14 +1478,15 @@ const ToolbarTitle = class {
|
|
|
1509
1478
|
return this.size !== undefined ? this.size : 'default';
|
|
1510
1479
|
}
|
|
1511
1480
|
render() {
|
|
1512
|
-
const
|
|
1481
|
+
const theme = getIonTheme(this);
|
|
1513
1482
|
const size = this.getSize();
|
|
1514
|
-
return (h(Host, { key: '
|
|
1515
|
-
[
|
|
1483
|
+
return (h(Host, { key: 'ee32202b0a04aa63b4369e5d4862759cb8ec24c0', class: createColorClasses(this.color, {
|
|
1484
|
+
[theme]: true,
|
|
1516
1485
|
[`title-${size}`]: true,
|
|
1517
1486
|
'title-rtl': document.dir === 'rtl',
|
|
1518
|
-
}) }, h("div", { key: '
|
|
1487
|
+
}) }, h("div", { key: 'bfe124a72b10e9f4375ca0aa7caf46b8ef1e5ae8', class: "toolbar-title" }, h("slot", { key: 'b55441661bacb883ddf9895616cfc72792f3508a' }))));
|
|
1519
1488
|
}
|
|
1489
|
+
get el() { return getElement(this); }
|
|
1520
1490
|
static get watchers() { return {
|
|
1521
1491
|
"size": [{
|
|
1522
1492
|
"sizeChanged": 0
|
|
@@ -1524,26 +1494,30 @@ const ToolbarTitle = class {
|
|
|
1524
1494
|
}; }
|
|
1525
1495
|
};
|
|
1526
1496
|
ToolbarTitle.style = {
|
|
1497
|
+
ionic: titleIonicCss(),
|
|
1527
1498
|
ios: titleIosCss(),
|
|
1528
1499
|
md: titleMdCss()
|
|
1529
1500
|
};
|
|
1530
1501
|
|
|
1531
|
-
const
|
|
1502
|
+
const toolbarIonicCss = () => `:host{--border-width:0;--border-style:solid;--opacity:1;--opacity-scale:1;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:block;position:relative;width:100%;padding-right:var(--ion-safe-area-right);padding-left:var(--ion-safe-area-left);color:var(--color);contain:content;-webkit-box-sizing:border-box;box-sizing:border-box}.toolbar-container{-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:var(--padding-top);padding-bottom:var(--padding-bottom);display:-ms-flexbox;display:flex;position:relative;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;width:100%;min-height:var(--min-height);contain:content;overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box}.toolbar-background{right:0;left:0;top:0;bottom:0;position:absolute;-webkit-transform:translateZ(0);transform:translateZ(0);border-width:var(--border-width);border-style:var(--border-style);border-color:var(--border-color);background:var(--background);contain:strict;opacity:calc(var(--opacity) * var(--opacity-scale));pointer-events:none}::slotted(ion-progress-bar){right:0;left:0;bottom:0;position:absolute}:host{--background:var(--token-bg-surface-default, var(--token-primitives-base-white, #ffffff));--color:var(--token-text-default, var(--token-primitives-neutral-1200, #242424));--border-color:currentColor;--padding-top:var(--token-space-200, var(--token-scale-200, 8px));--padding-bottom:var(--token-space-200, var(--token-scale-200, 8px));--padding-start:var(--token-space-200, var(--token-scale-200, 8px));--padding-end:var(--token-space-200, var(--token-scale-200, 8px));--min-height:var(--token-scale-1400, 56px)}.toolbar-container{gap:var(--token-space-400, var(--token-scale-400, 16px));z-index:10}.toolbar-background{z-index:-1}.toolbar-content{-ms-flex:1 1 auto;flex:1 1 auto;min-width:0}:host(.toolbar-searchbar) ::slotted(ion-searchbar){padding-left:0;padding-right:0;padding-top:0;padding-bottom:0}::slotted(ion-buttons){gap:var(--token-space-200, var(--token-scale-200, 8px))}::slotted(ion-title){-webkit-padding-start:var(--token-space-200, var(--token-scale-200, 8px));padding-inline-start:var(--token-space-200, var(--token-scale-200, 8px));-webkit-padding-end:var(--token-space-200, var(--token-scale-200, 8px));padding-inline-end:var(--token-space-200, var(--token-scale-200, 8px))}:host(.toolbar-title-large) ::slotted(ion-title){-webkit-padding-start:var(--token-space-400, var(--token-scale-400, 16px));padding-inline-start:var(--token-space-400, var(--token-scale-400, 16px));-webkit-padding-end:var(--token-space-400, var(--token-scale-400, 16px));padding-inline-end:var(--token-space-400, var(--token-scale-400, 16px))}:host(.has-end-content) slot[name=end],:host(.show-end) slot[name=end]{display:-ms-flexbox;display:flex;-ms-flex:0 0 var(--start-end-size, 0);flex:0 0 var(--start-end-size, 0);-ms-flex-pack:end;justify-content:flex-end;text-align:end}:host(.has-start-content) slot[name=start],:host(.show-start) slot[name=start]{display:-ms-flexbox;display:flex;-ms-flex:0 0 var(--start-end-size, 0);flex:0 0 var(--start-end-size, 0)}:host(.has-primary-content) slot[name=primary],:host(.show-primary) slot[name=primary]{display:-ms-flexbox;display:flex;-ms-flex:0 0 var(--primary-secondary-size, 0);flex:0 0 var(--primary-secondary-size, 0);-ms-flex-pack:end;justify-content:flex-end;text-align:end}:host(.has-secondary-content) slot[name=secondary],:host(.show-secondary) slot[name=secondary]{display:-ms-flexbox;display:flex;-ms-flex:0 0 var(--primary-secondary-size, 0);flex:0 0 var(--primary-secondary-size, 0)}:host(.toolbar-title-placement-start) ::slotted(ion-title){text-align:start}:host(.toolbar-title-placement-center) ::slotted(ion-title){text-align:center}:host(.toolbar-title-placement-end) ::slotted(ion-title){text-align:end}`;
|
|
1532
1503
|
|
|
1533
|
-
const
|
|
1504
|
+
const toolbarIosCss = () => `:host{--border-width:0;--border-style:solid;--opacity:1;--opacity-scale:1;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:block;position:relative;width:100%;padding-right:var(--ion-safe-area-right);padding-left:var(--ion-safe-area-left);color:var(--color);contain:content;-webkit-box-sizing:border-box;box-sizing:border-box}.toolbar-container{-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:var(--padding-top);padding-bottom:var(--padding-bottom);display:-ms-flexbox;display:flex;position:relative;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;width:100%;min-height:var(--min-height);contain:content;overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box}.toolbar-background{right:0;left:0;top:0;bottom:0;position:absolute;-webkit-transform:translateZ(0);transform:translateZ(0);border-width:var(--border-width);border-style:var(--border-style);border-color:var(--border-color);background:var(--background);contain:strict;opacity:calc(var(--opacity) * var(--opacity-scale));pointer-events:none}::slotted(ion-progress-bar){right:0;left:0;bottom:0;position:absolute}:host{font-family:var(--ion-font-family, inherit);z-index:10}:host(.ion-color){color:var(--ion-color-contrast)}:host(.ion-color) .toolbar-background{background:var(--ion-color-base)}.toolbar-container{z-index:10}.toolbar-background{z-index:-1}:host{--background:var(--ion-toolbar-background, var(--ion-color-step-50, var(--ion-background-color-step-50, #f7f7f7)));--color:var(--ion-toolbar-color, var(--ion-text-color, #000));--border-color:var(--ion-toolbar-border-color, var(--ion-border-color, var(--ion-color-step-150, var(--ion-background-color-step-150, rgba(0, 0, 0, 0.2)))));--padding-top:3px;--padding-bottom:3px;--padding-start:4px;--padding-end:4px;--min-height:44px}.toolbar-content{-ms-flex:1;flex:1;-ms-flex-order:4;order:4;min-width:0}:host(.toolbar-segment) .toolbar-content{display:-ms-inline-flexbox;display:inline-flex}:host(.toolbar-searchbar) .toolbar-container{padding-top:0;padding-bottom:0}:host(.toolbar-searchbar) ::slotted(*){-ms-flex-item-align:start;align-self:start}:host(.toolbar-searchbar) ::slotted(ion-chip){margin-top:3px}::slotted(ion-buttons){min-height:38px}::slotted([slot=start]){-ms-flex-order:2;order:2}::slotted([slot=secondary]){-ms-flex-order:3;order:3}::slotted([slot=primary]){-ms-flex-order:5;order:5;text-align:end}::slotted([slot=end]){-ms-flex-order:6;order:6;text-align:end}:host(.toolbar-title-large) .toolbar-container{-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:start;align-items:flex-start}:host(.toolbar-title-large) .toolbar-content ion-title{-ms-flex:1;flex:1;-ms-flex-order:8;order:8;min-width:100%}`;
|
|
1505
|
+
|
|
1506
|
+
const toolbarMdCss = () => `:host{--border-width:0;--border-style:solid;--opacity:1;--opacity-scale:1;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:block;position:relative;width:100%;padding-right:var(--ion-safe-area-right);padding-left:var(--ion-safe-area-left);color:var(--color);contain:content;-webkit-box-sizing:border-box;box-sizing:border-box}.toolbar-container{-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:var(--padding-top);padding-bottom:var(--padding-bottom);display:-ms-flexbox;display:flex;position:relative;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;width:100%;min-height:var(--min-height);contain:content;overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box}.toolbar-background{right:0;left:0;top:0;bottom:0;position:absolute;-webkit-transform:translateZ(0);transform:translateZ(0);border-width:var(--border-width);border-style:var(--border-style);border-color:var(--border-color);background:var(--background);contain:strict;opacity:calc(var(--opacity) * var(--opacity-scale));pointer-events:none}::slotted(ion-progress-bar){right:0;left:0;bottom:0;position:absolute}:host{font-family:var(--ion-font-family, inherit);z-index:10}:host(.ion-color){color:var(--ion-color-contrast)}:host(.ion-color) .toolbar-background{background:var(--ion-color-base)}.toolbar-container{z-index:10}.toolbar-background{z-index:-1}:host{--background:var(--ion-toolbar-background, var(--ion-background-color, #fff));--color:var(--ion-toolbar-color, var(--ion-text-color, #424242));--border-color:var(--ion-toolbar-border-color, var(--ion-border-color, var(--ion-color-step-150, var(--ion-background-color-step-150, #c1c4cd))));--padding-top:0;--padding-bottom:0;--padding-start:0;--padding-end:0;--min-height:56px}.toolbar-content{-ms-flex:1;flex:1;-ms-flex-order:3;order:3;min-width:0;max-width:100%}::slotted(.buttons-first-slot){-webkit-margin-start:4px;margin-inline-start:4px}::slotted(.buttons-last-slot){-webkit-margin-end:4px;margin-inline-end:4px}::slotted([slot=start]){-ms-flex-order:2;order:2}::slotted([slot=secondary]){-ms-flex-order:4;order:4}::slotted([slot=primary]){-ms-flex-order:5;order:5;text-align:end}::slotted([slot=end]){-ms-flex-order:6;order:6;text-align:end}`;
|
|
1534
1507
|
|
|
1535
1508
|
const Toolbar = class {
|
|
1536
1509
|
constructor(hostRef) {
|
|
1537
1510
|
registerInstance(this, hostRef);
|
|
1511
|
+
this.childrenStyles = new Map();
|
|
1512
|
+
this.slotClasses = [
|
|
1513
|
+
'has-start-content',
|
|
1514
|
+
'has-end-content',
|
|
1515
|
+
'has-primary-content',
|
|
1516
|
+
'has-secondary-content',
|
|
1517
|
+
];
|
|
1518
|
+
this.showClasses = ['show-start', 'show-end', 'show-primary', 'show-secondary'];
|
|
1519
|
+
this.slotSizeVars = ['--start-end-size', '--primary-secondary-size'];
|
|
1538
1520
|
}
|
|
1539
|
-
childrenStyles = new Map();
|
|
1540
|
-
get el() { return getElement(this); }
|
|
1541
|
-
/**
|
|
1542
|
-
* The color to use from your application's color palette.
|
|
1543
|
-
* Default options are: `"primary"`, `"secondary"`, `"tertiary"`, `"success"`, `"warning"`, `"danger"`, `"light"`, `"medium"`, and `"dark"`.
|
|
1544
|
-
* For more information on colors, see [theming](/docs/theming/basics).
|
|
1545
|
-
*/
|
|
1546
|
-
color;
|
|
1547
1521
|
componentWillLoad() {
|
|
1548
1522
|
const buttons = Array.from(this.el.querySelectorAll('ion-buttons'));
|
|
1549
1523
|
const firstButtons = buttons.find((button) => {
|
|
@@ -1559,6 +1533,173 @@ const Toolbar = class {
|
|
|
1559
1533
|
if (lastButtons) {
|
|
1560
1534
|
lastButtons.classList.add('buttons-last-slot');
|
|
1561
1535
|
}
|
|
1536
|
+
this.updateSlotClasses();
|
|
1537
|
+
}
|
|
1538
|
+
componentDidLoad() {
|
|
1539
|
+
this.updateSlotClasses();
|
|
1540
|
+
this.updateSlotWidths();
|
|
1541
|
+
}
|
|
1542
|
+
titlePlacementChanged() {
|
|
1543
|
+
this.updateSlotClasses();
|
|
1544
|
+
}
|
|
1545
|
+
/**
|
|
1546
|
+
* Gets the title placement.
|
|
1547
|
+
* Returns the title placement if it is set, otherwise returns `"center"`
|
|
1548
|
+
* for `ionic` and `ios`, and `"start"` for `md`.
|
|
1549
|
+
*/
|
|
1550
|
+
getTitlePlacement() {
|
|
1551
|
+
if (this.titlePlacement !== undefined) {
|
|
1552
|
+
return this.titlePlacement;
|
|
1553
|
+
}
|
|
1554
|
+
return getIonTheme(this) === 'ionic' || getIonTheme(this) === 'ios' ? 'center' : 'start';
|
|
1555
|
+
}
|
|
1556
|
+
/**
|
|
1557
|
+
* Updates the CSS custom properties for slot widths
|
|
1558
|
+
* This ensures that slots shown by their met conditions
|
|
1559
|
+
* have a minimum width matching their required slot
|
|
1560
|
+
*/
|
|
1561
|
+
updateSlotWidths(tries = 0) {
|
|
1562
|
+
// Set timeout to try to execute after everything is rendered
|
|
1563
|
+
setTimeout(() => {
|
|
1564
|
+
// Attempt to measure and update
|
|
1565
|
+
const success = this.measureAndUpdateSlots();
|
|
1566
|
+
// If not all measurements were successful, try again in 100 ms
|
|
1567
|
+
// cap recursion at 5 tries for safety
|
|
1568
|
+
if (!success && tries < 5) {
|
|
1569
|
+
setTimeout(() => {
|
|
1570
|
+
this.updateSlotWidths(tries + 1);
|
|
1571
|
+
}, 100);
|
|
1572
|
+
}
|
|
1573
|
+
});
|
|
1574
|
+
}
|
|
1575
|
+
/**
|
|
1576
|
+
* Measure the widths of the slots and update the CSS custom properties
|
|
1577
|
+
* for the minimum width of each pair of slots based on the largest width in each pair.
|
|
1578
|
+
* Returns whether we successfully measured all of the slots we expect to have content.
|
|
1579
|
+
* If not, the content probably hasn't rendered yet and we need to try again.
|
|
1580
|
+
*/
|
|
1581
|
+
measureAndUpdateSlots() {
|
|
1582
|
+
// Define the relationship between slots based on the conditions array
|
|
1583
|
+
// Group slots that should have the same width
|
|
1584
|
+
const slotPairs = [
|
|
1585
|
+
{ name: 'start-end', slots: ['start', 'end'] },
|
|
1586
|
+
{ name: 'primary-secondary', slots: ['primary', 'secondary'] },
|
|
1587
|
+
];
|
|
1588
|
+
// First, measure all slot widths
|
|
1589
|
+
const slotWidths = new Map();
|
|
1590
|
+
let allMeasurementsSuccessful = true;
|
|
1591
|
+
// Measure all slots with content
|
|
1592
|
+
const slots = ['start', 'end', 'primary', 'secondary'];
|
|
1593
|
+
slots.forEach((slot) => {
|
|
1594
|
+
var _a;
|
|
1595
|
+
if (this.el.classList.contains(`has-${slot}-content`)) {
|
|
1596
|
+
const slotElement = (_a = this.el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector(`slot[name="${slot}"]`);
|
|
1597
|
+
if (slotElement) {
|
|
1598
|
+
// Check if the slot contains an img or ion-img
|
|
1599
|
+
const assignedElements = slotElement.assignedElements({ flatten: true });
|
|
1600
|
+
const hasImg = assignedElements.some((el) => {
|
|
1601
|
+
if (el.tagName === 'IMG' || el.tagName === 'ION-IMG') {
|
|
1602
|
+
return true;
|
|
1603
|
+
}
|
|
1604
|
+
// Check for nested images
|
|
1605
|
+
return el.querySelector('img, ion-img');
|
|
1606
|
+
});
|
|
1607
|
+
// Temporarily allow slot to size to content by setting flex-basis
|
|
1608
|
+
// to 'auto'. This ensures that slotted images can render at their
|
|
1609
|
+
// intrinsic width for measurement.
|
|
1610
|
+
if (hasImg) {
|
|
1611
|
+
const { name } = slotPairs.find((pair) => pair.slots.includes(slot));
|
|
1612
|
+
this.el.style.setProperty(`--${name}-size`, 'auto');
|
|
1613
|
+
}
|
|
1614
|
+
const width = slotElement.offsetWidth;
|
|
1615
|
+
if (width > 0) {
|
|
1616
|
+
slotWidths.set(slot, width);
|
|
1617
|
+
}
|
|
1618
|
+
else {
|
|
1619
|
+
allMeasurementsSuccessful = false;
|
|
1620
|
+
}
|
|
1621
|
+
}
|
|
1622
|
+
}
|
|
1623
|
+
});
|
|
1624
|
+
// Then set the CSS custom properties based on the largest width in each pair
|
|
1625
|
+
slotPairs.forEach(({ name, slots }) => {
|
|
1626
|
+
// Find the maximum width among the slots in this pair
|
|
1627
|
+
let maxWidth = 0;
|
|
1628
|
+
let hasAnyContent = false;
|
|
1629
|
+
slots.forEach((slot) => {
|
|
1630
|
+
var _a;
|
|
1631
|
+
if (slotWidths.has(slot)) {
|
|
1632
|
+
hasAnyContent = true;
|
|
1633
|
+
maxWidth = Math.max(maxWidth, (_a = slotWidths.get(slot)) !== null && _a !== void 0 ? _a : 0);
|
|
1634
|
+
}
|
|
1635
|
+
});
|
|
1636
|
+
// If at least one slot in the pair has content, set the min-width for the pair
|
|
1637
|
+
if (hasAnyContent && maxWidth > 0) {
|
|
1638
|
+
// Set a single CSS variable for the pair
|
|
1639
|
+
this.el.style.setProperty(`--${name}-size`, `${maxWidth}px`);
|
|
1640
|
+
}
|
|
1641
|
+
});
|
|
1642
|
+
return allMeasurementsSuccessful;
|
|
1643
|
+
}
|
|
1644
|
+
/**
|
|
1645
|
+
* Removes all slot visibility classes and slot width CSS variables.
|
|
1646
|
+
*/
|
|
1647
|
+
removeSlotClasses() {
|
|
1648
|
+
this.el.classList.remove(...this.slotClasses, ...this.showClasses);
|
|
1649
|
+
this.slotSizeVars.forEach((cssVar) => this.el.style.removeProperty(cssVar));
|
|
1650
|
+
}
|
|
1651
|
+
updateSlotClasses() {
|
|
1652
|
+
const titlePlacement = this.getTitlePlacement();
|
|
1653
|
+
if (titlePlacement !== 'center') {
|
|
1654
|
+
this.removeSlotClasses();
|
|
1655
|
+
return;
|
|
1656
|
+
}
|
|
1657
|
+
// Check if slots have content
|
|
1658
|
+
const slots = ['start', 'end', 'primary', 'secondary'];
|
|
1659
|
+
const classesToAdd = [];
|
|
1660
|
+
const classesToRemove = [];
|
|
1661
|
+
slots.forEach((slot) => {
|
|
1662
|
+
const slotHasContent = this.hasSlotContent(slot);
|
|
1663
|
+
const slotClass = `has-${slot}-content`;
|
|
1664
|
+
if (slotHasContent) {
|
|
1665
|
+
classesToAdd.push(slotClass);
|
|
1666
|
+
}
|
|
1667
|
+
else {
|
|
1668
|
+
classesToRemove.push(slotClass);
|
|
1669
|
+
}
|
|
1670
|
+
});
|
|
1671
|
+
// Force visibilities in certain conditions. This works by adding a class to the toolbar
|
|
1672
|
+
// named `show-{slot}`. This class will be added if the toolbar has the required slots
|
|
1673
|
+
// and does not have any of the excluded slots, otherwise it will be removed.
|
|
1674
|
+
// This is useful to enforce centering of the toolbar content when there are different amounts
|
|
1675
|
+
// of slots on either side of the toolbar.
|
|
1676
|
+
const conditions = [
|
|
1677
|
+
{ name: 'end', requiredSlots: ['start'], excludeSlots: ['end', 'primary'] },
|
|
1678
|
+
{ name: 'start', requiredSlots: ['end'], excludeSlots: ['start', 'secondary'] },
|
|
1679
|
+
{ name: 'secondary', requiredSlots: ['primary'], excludeSlots: ['secondary', 'start'] },
|
|
1680
|
+
{ name: 'primary', requiredSlots: ['secondary'], excludeSlots: ['primary', 'end'] },
|
|
1681
|
+
];
|
|
1682
|
+
conditions.forEach((condition) => {
|
|
1683
|
+
const hasRequiredSlots = condition.requiredSlots.every((slot) => classesToAdd.includes(`has-${slot}-content`));
|
|
1684
|
+
const hasExcludedSlots = condition.excludeSlots.some((slot) => classesToAdd.includes(`has-${slot}-content`));
|
|
1685
|
+
const className = `show-${condition.name}`;
|
|
1686
|
+
if (hasRequiredSlots && !hasExcludedSlots) {
|
|
1687
|
+
classesToAdd.push(className);
|
|
1688
|
+
}
|
|
1689
|
+
else {
|
|
1690
|
+
classesToRemove.push(className);
|
|
1691
|
+
}
|
|
1692
|
+
});
|
|
1693
|
+
// Add classes to the toolbar element
|
|
1694
|
+
this.el.classList.add(...classesToAdd);
|
|
1695
|
+
this.el.classList.remove(...classesToRemove);
|
|
1696
|
+
// Update slot widths after classes have been updated
|
|
1697
|
+
this.updateSlotWidths();
|
|
1698
|
+
}
|
|
1699
|
+
hasSlotContent(slotName) {
|
|
1700
|
+
var _a;
|
|
1701
|
+
const slotNode = (_a = this.el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector(`slot[name="${slotName}"]`);
|
|
1702
|
+
return !!slotNode && slotNode.assignedNodes().length > 0;
|
|
1562
1703
|
}
|
|
1563
1704
|
childrenStyle(ev) {
|
|
1564
1705
|
ev.stopPropagation();
|
|
@@ -1583,21 +1724,27 @@ const Toolbar = class {
|
|
|
1583
1724
|
}
|
|
1584
1725
|
}
|
|
1585
1726
|
render() {
|
|
1586
|
-
const
|
|
1727
|
+
const theme = getIonTheme(this);
|
|
1587
1728
|
const childStyles = {};
|
|
1588
|
-
this.childrenStyles.forEach((
|
|
1589
|
-
Object.assign(childStyles,
|
|
1729
|
+
this.childrenStyles.forEach((style) => {
|
|
1730
|
+
Object.assign(childStyles, style);
|
|
1590
1731
|
});
|
|
1591
|
-
|
|
1592
|
-
|
|
1593
|
-
|
|
1594
|
-
|
|
1595
|
-
|
|
1596
|
-
|
|
1597
|
-
} }, h("div", { key: '20e3f85844c94b8399c245d2df125e6ab678d681', class: "toolbar-background", part: "background" }), h("div", { key: '12f09e324e8d9130b9d30c493106b500233fb016', class: "toolbar-container", part: "container" }, h("slot", { key: '6da0fe99ee0c4d7c969712e2908a4e7e6be5ed2c', name: "start" }), h("slot", { key: '177c346d6dcabb7857d810cda7d25c6dde32e6e2', name: "secondary" }), h("div", { key: '8c921b415940c71bf4c1a2c5c6887f36ad1afd16', class: "toolbar-content", part: "content" }, h("slot", { key: '1f2976b80d967bd51e86ed1357b363271d655df2' })), h("slot", { key: '0f7618044a7e8b0d9b715a8e208070f7ef2ee4c8', name: "primary" }), h("slot", { key: '125c393197e0660a3c2638dd4628c41ef7e05f19', name: "end" }))));
|
|
1732
|
+
const titlePlacement = this.getTitlePlacement();
|
|
1733
|
+
return (h(Host, { key: 'bbb8d7cd786d5b91b0f65b97335294d9701d4cdc', class: Object.assign(Object.assign({}, createColorClasses(this.color, {
|
|
1734
|
+
[theme]: true,
|
|
1735
|
+
'in-toolbar': hostContext('ion-toolbar', this.el),
|
|
1736
|
+
[`toolbar-title-placement-${titlePlacement}`]: true,
|
|
1737
|
+
})), childStyles) }, h("div", { key: 'c5ea1b921e87f6f1615f1fa98959a985881bf9f1', class: "toolbar-background", part: "background" }), h("div", { key: 'fa9da58a2be236daa05e26ddd4046dff41d33fcb', class: "toolbar-container", part: "container" }, h("slot", { key: '45f76c8833843bc27c79121bec16d65433277c12', name: "start", onSlotchange: () => this.updateSlotClasses }), h("slot", { key: '3d1a7f34bc361ae87e361e05c5c6a3b2a7423f1d', name: "secondary", onSlotchange: () => this.updateSlotClasses }), h("div", { key: 'ad7d5133a105c9b9398a0c6458c5ff3f9b0f6253', class: "toolbar-content", part: "content" }, h("slot", { key: '783fe390e4bca1b7a245961e750a50bb009173b6' })), h("slot", { key: 'a555b3bef40a9bab3a1f1b39a02cbc8b28122c4a', name: "primary", onSlotchange: () => this.updateSlotClasses }), h("slot", { key: '635a84fff3818e4648ea46bd80f5ef0808a9ff0e', name: "end", onSlotchange: () => this.updateSlotClasses }))));
|
|
1598
1738
|
}
|
|
1739
|
+
get el() { return getElement(this); }
|
|
1740
|
+
static get watchers() { return {
|
|
1741
|
+
"titlePlacement": [{
|
|
1742
|
+
"titlePlacementChanged": 0
|
|
1743
|
+
}]
|
|
1744
|
+
}; }
|
|
1599
1745
|
};
|
|
1600
1746
|
Toolbar.style = {
|
|
1747
|
+
ionic: toolbarIonicCss(),
|
|
1601
1748
|
ios: toolbarIosCss(),
|
|
1602
1749
|
md: toolbarMdCss()
|
|
1603
1750
|
};
|