@ionic/core 8.8.11 → 8.8.12-dev.11781793379.156d3260
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.js +1 -1
- package/components/ion-picker-legacy.js +1 -1
- 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-B59jk20F.js +4 -0
- package/components/p-B8xhFBOE.js +4 -0
- package/components/p-BDqjX7Z_.js +4 -0
- package/components/p-BI03N_8J.js +4 -0
- package/components/p-BISCDmUD.js +4 -0
- package/components/{p-C4t5ymfq.js → p-BKSylJVh.js} +1 -1
- package/components/p-BKfkCIKU.js +4 -0
- package/components/p-BLlJA2Q9.js +4 -0
- package/components/p-BYSs-jZz.js +4 -0
- package/components/p-BYZR_5L4.js +4 -0
- package/components/p-BaPtaYEC.js +4 -0
- package/components/{p-BAYYcg3o.js → p-BbmXEfTR.js} +1 -1
- package/components/p-BiG3Zevl.js +4 -0
- package/components/p-BjW8SOqw.js +4 -0
- package/components/p-BoWc8hp0.js +4 -0
- package/components/p-BqRIq3ti.js +4 -0
- package/components/p-BskJOMNV.js +4 -0
- package/components/p-BwKpO3Is.js +4 -0
- package/components/p-BxA8Ha5k.js +4 -0
- package/components/p-BxnlgSC0.js +4 -0
- package/components/p-C9QYu-sR.js +4 -0
- package/components/p-CEY-R8M2.js +4 -0
- package/components/p-CEbQglhY.js +4 -0
- package/components/p-CGwI_XL6.js +4 -0
- package/components/p-CIdlZzoM.js +4 -0
- package/components/p-CODBQrPj.js +4 -0
- package/components/p-CWq1hA4y.js +4 -0
- package/components/p-CeL9Glto.js +4 -0
- package/components/p-Ck_9SoHZ.js +4 -0
- package/components/p-Cl94E1nn.js +4 -0
- package/components/p-CmnPD02Z.js +4 -0
- package/components/p-Cog60JgJ.js +4 -0
- package/components/p-CtaqMPhV.js +4 -0
- package/components/p-CyGaZ-Qb.js +4 -0
- package/components/p-CzFNvOq3.js +4 -0
- package/components/p-Czw29-II.js +4 -0
- package/components/p-D0Iqw6OZ.js +4 -0
- package/components/p-D1t981Ih.js +4 -0
- package/components/p-D4UIY4kz.js +4 -0
- package/components/p-D6oKOaRz.js +4 -0
- package/components/p-D6un2jDV.js +4 -0
- package/components/p-D9583Eo8.js +4 -0
- package/components/p-DABI8XVx.js +4 -0
- package/components/p-DBXSwfLt.js +4 -0
- package/components/p-DEZQwbtZ.js +4 -0
- package/components/p-DEnOtJ3m.js +4 -0
- package/components/p-DJw3WM2A.js +4 -0
- package/{dist/ionic/p-D13Eaw-8.js → components/p-DP96lPOT.js} +1 -1
- package/components/{p-DqLB8yFQ.js → p-DRnK3A-V.js} +1 -1
- package/components/p-DTmj4D2t.js +4 -0
- package/components/p-DaJxRxSQ.js +4 -0
- package/components/p-Daj5LWIm.js +4 -0
- package/components/p-Dg8OSVcP.js +4 -0
- package/components/p-Dhi5xtNS.js +4 -0
- package/components/p-DiKh2eQw.js +4 -0
- package/{dist/ionic/p-VAemlbDS.js → components/p-DmVUl5t4.js} +1 -1
- package/components/p-Dn77l_LX.js +4 -0
- package/components/{p-D5Ubpm7D.js → p-Dqgyr3aJ.js} +1 -1
- package/components/{p-cyNmxje6.js → p-Fagxa-Vi.js} +1 -1
- package/components/p-I0lsm6wZ.js +4 -0
- package/components/p-TaMIMwf5.js +4 -0
- package/components/p-ZOOvnqsf.js +4 -0
- package/components/p-ZWbVyMi6.js +4 -0
- package/components/p-_rgGxkzx.js +4 -0
- package/components/p-fIOYmaqA.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-BJq0kcy2.js → animation-B3xfVcDO.js} +3 -3
- package/dist/cjs/{app-globals-BlqrqKTN.js → app-globals-3ZoCVkn-.js} +1 -1
- package/dist/cjs/{button-active-0mPOKmV2.js → button-active-3tZKuPbT.js} +2 -2
- package/dist/cjs/{capacitor-DmA66EwP.js → capacitor-CQSg1uCo.js} +3 -3
- package/dist/cjs/caret-down-vtVgfXIs.js +8 -0
- package/dist/cjs/caret-left-CxZXLRv5.js +8 -0
- package/dist/cjs/caret-right-CRCgv98E.js +8 -0
- package/dist/cjs/config-DWdFbSNK.js +35 -0
- package/dist/cjs/{data-DLTUw-KF.js → data-DmCm0SEx.js} +6 -6
- package/dist/cjs/{focus-visible-CCvKiLh3.js → focus-visible-BIj-I3-C.js} +24 -0
- package/dist/cjs/{framework-delegate-BtICZDHr.js → framework-delegate-DC5nq_NN.js} +4 -2
- package/dist/cjs/{haptic-ClPPQ_PS.js → haptic-eix26ESE.js} +1 -1
- package/dist/cjs/{helpers-Cv23MFHM.js → helpers-DiOgV5hw.js} +71 -4
- package/dist/cjs/{index-BERfRao3.js → index-BaJ7_YbC.js} +4 -4
- package/dist/cjs/{index-CIrkNXqJ.js → index-BxEZd5IE.js} +2 -2
- package/dist/cjs/{index-DqmRDbxg.js → index-CgAbCW6L.js} +2 -0
- package/dist/cjs/index-CzFol6Yk.js +414 -0
- package/dist/cjs/{index-aC4x3Fk3.js → index-DYRcC3bw.js} +15 -15
- package/dist/cjs/{index-Ct7gcRif.js → index-GZU9YrFc.js} +41 -4
- package/dist/cjs/{index-D81eLYUM.js → index-bX3nz2vw.js} +9 -8
- package/dist/cjs/index.cjs.js +16 -16
- package/dist/cjs/{input-shims-CFLg7uzj.js → input-shims-BSEBw22J.js} +18 -17
- package/dist/cjs/{input.utils-DetjmtH2.js → input.utils-D68wgI2Y.js} +5 -5
- package/dist/cjs/ion-accordion_2.cjs.entry.js +61 -29
- package/dist/cjs/ion-action-sheet.cjs.entry.js +41 -22
- package/dist/cjs/ion-alert.cjs.entry.js +78 -41
- package/dist/cjs/ion-app_8.cjs.entry.js +292 -157
- package/dist/cjs/ion-avatar_3.cjs.entry.js +125 -13
- package/dist/cjs/ion-back-button.cjs.entry.js +31 -22
- package/dist/cjs/ion-backdrop.cjs.entry.js +10 -7
- package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +54 -18
- package/dist/cjs/ion-button_2.cjs.entry.js +59 -22
- package/dist/cjs/ion-card_5.cjs.entry.js +55 -33
- package/dist/cjs/ion-checkbox.cjs.entry.js +37 -17
- package/dist/cjs/ion-chip.cjs.entry.js +50 -9
- package/dist/cjs/ion-col_3.cjs.entry.js +56 -57
- package/dist/cjs/ion-datetime-button.cjs.entry.js +13 -9
- package/dist/cjs/ion-datetime_3.cjs.entry.js +116 -41
- package/dist/cjs/ion-divider.cjs.entry.js +51 -0
- package/dist/cjs/ion-fab_3.cjs.entry.js +44 -28
- package/dist/cjs/ion-gallery-item.cjs.entry.js +59 -0
- package/dist/cjs/ion-gallery.cjs.entry.js +607 -0
- package/dist/cjs/ion-img.cjs.entry.js +8 -4
- package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +93 -17
- package/dist/cjs/ion-input-otp.cjs.entry.js +74 -9
- package/dist/cjs/ion-input-password-toggle.cjs.entry.js +53 -15
- package/dist/cjs/ion-input.cjs.entry.js +124 -34
- package/dist/cjs/ion-item-option_3.cjs.entry.js +467 -52
- package/dist/cjs/ion-item_8.cjs.entry.js +121 -50
- package/dist/cjs/ion-loading.cjs.entry.js +22 -19
- package/dist/cjs/ion-menu_3.cjs.entry.js +47 -29
- package/dist/cjs/ion-modal.cjs.entry.js +262 -138
- package/dist/cjs/ion-nav_2.cjs.entry.js +14 -11
- package/dist/cjs/ion-picker-column-option.cjs.entry.js +12 -8
- package/dist/cjs/ion-picker-column.cjs.entry.js +14 -14
- package/dist/cjs/ion-picker.cjs.entry.js +10 -6
- package/dist/cjs/ion-popover.cjs.entry.js +21 -19
- package/dist/cjs/ion-progress-bar.cjs.entry.js +27 -9
- package/dist/cjs/ion-radio_2.cjs.entry.js +35 -17
- package/dist/cjs/ion-range.cjs.entry.js +20 -13
- package/dist/cjs/ion-refresher_2.cjs.entry.js +42 -23
- package/dist/cjs/ion-reorder_2.cjs.entry.js +38 -14
- package/dist/cjs/ion-ripple-effect.cjs.entry.js +15 -7
- package/dist/cjs/ion-route_4.cjs.entry.js +11 -10
- package/dist/cjs/ion-searchbar.cjs.entry.js +137 -24
- package/dist/cjs/ion-segment-content.cjs.entry.js +2 -2
- package/dist/cjs/ion-segment-view.cjs.entry.js +13 -3
- package/dist/cjs/ion-segment_2.cjs.entry.js +23 -16
- package/dist/cjs/ion-select-modal.cjs.entry.js +114 -38
- package/dist/cjs/ion-select_3.cjs.entry.js +556 -107
- package/dist/cjs/ion-spinner.cjs.entry.js +30 -8
- package/dist/cjs/ion-split-pane.cjs.entry.js +13 -9
- package/dist/cjs/ion-tab-bar_2.cjs.entry.js +147 -23
- package/dist/cjs/ion-tab_2.cjs.entry.js +8 -7
- package/dist/cjs/ion-text.cjs.entry.js +7 -7
- package/dist/cjs/ion-textarea.cjs.entry.js +137 -23
- package/dist/cjs/ion-toast.cjs.entry.js +70 -46
- package/dist/cjs/ion-toggle.cjs.entry.js +82 -25
- package/dist/cjs/ionic-global-QoUqobrQ.js +519 -0
- package/dist/cjs/ionic.cjs.js +4 -4
- package/dist/cjs/{ios.transition-BOSWOaiK.js → ios.transition-DpFQfFfT.js} +7 -5
- package/dist/cjs/{keyboard-UuAS4D_9.js → keyboard-Bn0Ppim6.js} +1 -1
- package/dist/cjs/{keyboard-controller-GXBiBRKS.js → keyboard-controller-CefyW9lm.js} +11 -9
- package/dist/cjs/{keyboard-hHzlEQpk.js → keyboard-faZBQysj.js} +4 -3
- package/dist/cjs/list-a-7GSA6K.js +8 -0
- package/dist/cjs/loader.cjs.js +4 -4
- package/dist/cjs/{md.transition-B8-wBZqt.js → md.transition-ChJcoZUH.js} +6 -5
- package/dist/cjs/{notch-controller-18PzRGXd.js → notch-controller-BO0UGB4F.js} +4 -4
- package/dist/cjs/overlay-control-label-DnRLQR1t.js +52 -0
- package/dist/cjs/{overlays-TbKsuC-K.js → overlays-xkzfBAc_.js} +309 -18
- package/dist/cjs/select-option-render-8XQ4CgCm.js +116 -0
- package/dist/cjs/{status-tap-BXX8H8_Y.js → status-tap-x2qDo5QR.js} +4 -3
- package/dist/cjs/{swipe-back-C0GCB18x.js → swipe-back-CvZt_4YX.js} +3 -2
- package/dist/cjs/{theme-CeDs6Hcv.js → theme-IlOsGAz7.js} +25 -1
- package/dist/cjs/validity-QmuwEptc.js +51 -0
- package/dist/cjs/x-BTF99yFH.js +8 -0
- package/dist/collection/collection-manifest.json +9 -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 +41 -27
- 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 +44 -8
- package/dist/collection/components/accordion-group/accordion-group.md.css +22 -4
- package/dist/collection/components/action-sheet/action-sheet.ionic.css +491 -0
- package/dist/collection/components/action-sheet/action-sheet.ios.css +368 -11
- package/dist/collection/components/action-sheet/action-sheet.js +32 -13
- package/dist/collection/components/action-sheet/action-sheet.md.css +307 -10
- package/dist/collection/components/alert/alert.ionic.css +784 -0
- package/dist/collection/components/alert/alert.ios.css +482 -19
- package/dist/collection/components/alert/alert.js +67 -30
- package/dist/collection/components/alert/alert.md.css +465 -29
- package/dist/collection/components/app/app.js +15 -83
- package/dist/collection/components/avatar/avatar.ionic.css +391 -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 +27 -19
- 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 +12 -6
- package/dist/collection/components/backdrop/backdrop.md.css +56 -19
- package/dist/collection/components/badge/badge.ionic.css +275 -0
- package/dist/collection/components/badge/badge.ios.css +139 -12
- package/dist/collection/components/badge/badge.js +145 -9
- package/dist/collection/components/badge/badge.md.css +123 -12
- package/dist/collection/components/breadcrumb/breadcrumb.ios.css +20 -8
- package/dist/collection/components/breadcrumb/breadcrumb.js +43 -11
- 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 +11 -9
- package/dist/collection/components/breadcrumbs/breadcrumbs.md.css +6 -0
- package/dist/collection/components/button/button.ionic.css +646 -0
- package/dist/collection/components/button/button.ios.css +154 -46
- package/dist/collection/components/button/button.js +63 -27
- 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 +15 -9
- 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 +41 -10
- 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 +13 -10
- 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 -8
- 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 -8
- package/dist/collection/components/card-title/card-title.md.css +73 -0
- package/dist/collection/components/checkbox/checkbox.ionic.css +543 -0
- package/dist/collection/components/checkbox/checkbox.ios.css +163 -99
- package/dist/collection/components/checkbox/checkbox.js +73 -15
- package/dist/collection/components/checkbox/checkbox.md.css +164 -100
- 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 +108 -8
- 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 +211 -61
- package/dist/collection/components/content/content.css +8 -2
- package/dist/collection/components/content/content.js +16 -11
- package/dist/collection/components/datetime/datetime.ionic.css +703 -0
- package/dist/collection/components/datetime/datetime.ios.css +302 -106
- package/dist/collection/components/datetime/datetime.js +98 -20
- package/dist/collection/components/datetime/datetime.md.css +293 -96
- package/dist/collection/components/datetime/utils/data.js +5 -5
- package/dist/collection/components/datetime-button/datetime-button.ios.css +6 -0
- package/dist/collection/components/datetime-button/datetime-button.js +11 -8
- package/dist/collection/components/datetime-button/datetime-button.md.css +6 -0
- 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 +9 -5
- package/dist/collection/components/fab-button/fab-button.ios.css +18 -6
- package/dist/collection/components/fab-button/fab-button.js +36 -21
- 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 +9 -5
- package/dist/collection/components/footer/footer.ios.css +14 -2
- package/dist/collection/components/footer/footer.js +21 -16
- package/dist/collection/components/footer/footer.md.css +12 -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 +9 -5
- package/dist/collection/components/header/header.ionic.css +97 -0
- package/dist/collection/components/header/header.ios.css +25 -10
- package/dist/collection/components/header/header.js +50 -19
- package/dist/collection/components/header/header.md.css +23 -8
- package/dist/collection/components/header/header.utils.js +5 -5
- package/dist/collection/components/img/img.js +8 -2
- package/dist/collection/components/infinite-scroll/infinite-scroll.js +100 -5
- 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 +16 -10
- package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.md.css +12 -0
- package/dist/collection/components/input/input.ionic.css +889 -0
- package/dist/collection/components/input/input.ios.css +223 -135
- package/dist/collection/components/input/input.js +148 -37
- package/dist/collection/components/input/input.md.css +193 -207
- 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 +74 -7
- 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 +48 -12
- 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 +109 -69
- package/dist/collection/components/item/item.js +56 -21
- package/dist/collection/components/item/item.md.css +120 -68
- package/dist/collection/components/item-divider/item-divider.ios.css +18 -0
- package/dist/collection/components/item-divider/item-divider.js +11 -8
- 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 +278 -0
- package/dist/collection/components/item-option/item-option.ios.css +136 -29
- package/dist/collection/components/item-option/item-option.js +73 -9
- 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 +13 -7
- 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 +421 -35
- 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 +11 -8
- 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 +48 -9
- 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 -8
- 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 +14 -11
- 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 +12 -7
- 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 +26 -10
- package/dist/collection/components/menu-button/menu-button.md.css +49 -15
- package/dist/collection/components/menu-toggle/menu-toggle.js +8 -5
- 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/sheet.js +8 -2
- package/dist/collection/components/modal/gestures/sheet.js +76 -10
- package/dist/collection/components/modal/modal.ionic.css +247 -0
- package/dist/collection/components/modal/modal.ios.css +178 -70
- package/dist/collection/components/modal/modal.js +50 -12
- package/dist/collection/components/modal/modal.md.css +178 -70
- package/dist/collection/components/nav/nav.css +7 -1
- package/dist/collection/components/nav/nav.js +11 -5
- package/dist/collection/components/nav-link/nav-link.js +5 -1
- package/dist/collection/components/note/note.ios.css +12 -0
- package/dist/collection/components/note/note.js +11 -8
- 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 +8 -5
- package/dist/collection/components/picker/picker.md.css +15 -3
- package/dist/collection/components/picker-column/picker-column.css +9 -2
- package/dist/collection/components/picker-column/picker-column.js +8 -7
- 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 +13 -7
- package/dist/collection/components/picker-column-option/picker-column-option.md.css +6 -0
- package/dist/collection/components/picker-legacy/picker.ios.css +13 -1
- package/dist/collection/components/picker-legacy/picker.js +7 -6
- package/dist/collection/components/picker-legacy/picker.md.css +13 -1
- package/dist/collection/components/picker-legacy-column/picker-column.ios.css +12 -0
- package/dist/collection/components/picker-legacy-column/picker-column.js +4 -4
- package/dist/collection/components/picker-legacy-column/picker-column.md.css +12 -0
- package/dist/collection/components/popover/popover.ionic.css +290 -0
- package/dist/collection/components/popover/popover.ios.css +29 -1
- package/dist/collection/components/popover/popover.js +18 -15
- package/dist/collection/components/popover/popover.md.css +29 -1
- 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 +43 -7
- 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 +134 -91
- package/dist/collection/components/radio/radio.js +14 -9
- package/dist/collection/components/radio/radio.md.css +134 -91
- 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 +48 -7
- package/dist/collection/components/radio-group/radio-group.md.css +43 -19
- 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 +16 -10
- 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 +11 -8
- package/dist/collection/components/refresher/refresher.md.css +15 -2
- package/dist/collection/components/refresher-content/refresher-content.js +28 -7
- package/dist/collection/components/reorder/reorder.ios.css +6 -0
- package/dist/collection/components/reorder/reorder.js +33 -6
- 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 +8 -4
- 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 +14 -6
- package/dist/collection/components/route/route.js +4 -0
- package/dist/collection/components/router/router.js +4 -0
- package/dist/collection/components/router-link/router-link.css +8 -2
- package/dist/collection/components/router-link/router-link.js +9 -5
- package/dist/collection/components/router-outlet/router-outlet.css +7 -1
- package/dist/collection/components/router-outlet/router-outlet.js +6 -3
- 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 +626 -0
- package/dist/collection/components/searchbar/searchbar.ios.css +56 -18
- package/dist/collection/components/searchbar/searchbar.js +180 -33
- 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 +11 -8
- package/dist/collection/components/segment/segment.md.css +45 -2
- package/dist/collection/components/segment-button/segment-button.ionic.css +353 -0
- package/dist/collection/components/segment-button/segment-button.ios.css +146 -105
- package/dist/collection/components/segment-button/segment-button.js +11 -8
- 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 +13 -4
- package/dist/collection/components/segment-view/segment-view.md.css +6 -0
- package/dist/collection/components/select/select.ionic.css +810 -0
- package/dist/collection/components/select/select.ios.css +348 -176
- package/dist/collection/components/select/select.js +521 -92
- package/dist/collection/components/select/select.md.css +364 -178
- package/dist/collection/components/select-modal/select-modal.ionic.css +254 -0
- package/dist/collection/components/select-modal/select-modal.ios.css +467 -0
- package/dist/collection/components/select-modal/select-modal.js +126 -30
- package/dist/collection/components/select-modal/select-modal.md.css +395 -0
- package/dist/collection/components/select-option/select-option.js +70 -2
- package/dist/collection/components/select-popover/select-popover.ionic.css +252 -0
- package/dist/collection/components/select-popover/select-popover.ios.css +303 -20
- package/dist/collection/components/select-popover/select-popover.js +89 -29
- package/dist/collection/components/select-popover/select-popover.md.css +346 -0
- package/dist/collection/components/skeleton-text/skeleton-text.css +6 -0
- package/dist/collection/components/skeleton-text/skeleton-text.js +9 -5
- package/dist/collection/components/spinner/{spinner.css → spinner.ionic.css} +78 -10
- package/dist/collection/components/spinner/spinner.js +47 -6
- 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 +15 -8
- package/dist/collection/components/split-pane/split-pane.md.css +20 -2
- package/dist/collection/components/tab/tab.js +6 -2
- package/dist/collection/components/tab-bar/tab-bar.ionic.css +227 -0
- package/dist/collection/components/tab-bar/tab-bar.ios.css +71 -43
- package/dist/collection/components/tab-bar/tab-bar.js +171 -13
- package/dist/collection/components/tab-bar/tab-bar.md.css +71 -43
- package/dist/collection/components/tab-button/tab-button.ionic.css +348 -0
- package/dist/collection/components/tab-button/tab-button.ios.css +171 -95
- package/dist/collection/components/tab-button/tab-button.js +54 -9
- 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 +4 -1
- package/dist/collection/components/text/text.css +6 -0
- package/dist/collection/components/text/text.js +7 -6
- package/dist/collection/components/textarea/textarea.ionic.css +898 -0
- package/dist/collection/components/textarea/textarea.ios.css +298 -158
- package/dist/collection/components/textarea/textarea.js +162 -24
- package/dist/collection/components/textarea/textarea.md.css +312 -159
- 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 -7
- package/dist/collection/components/title/title.md.css +32 -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 +76 -13
- package/dist/collection/components/toast/toast.md.css +84 -45
- package/dist/collection/components/toggle/toggle.ionic.css +508 -0
- package/dist/collection/components/toggle/toggle.ios.css +247 -131
- package/dist/collection/components/toggle/toggle.js +73 -18
- package/dist/collection/components/toggle/toggle.md.css +244 -131
- 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 +218 -13
- package/dist/collection/components/toolbar/toolbar.md.css +90 -47
- package/dist/collection/global/ionic-global.js +241 -13
- package/dist/collection/utils/css-value-validation.js +39 -0
- package/dist/collection/utils/focus-trap.js +13 -2
- package/dist/collection/utils/focus-visible.js +22 -0
- package/dist/collection/utils/forms/validity.js +31 -0
- package/dist/collection/utils/framework-delegate.js +3 -1
- package/dist/collection/utils/hardware-back-button.js +15 -0
- package/dist/collection/utils/helpers.js +70 -3
- package/dist/collection/utils/keyboard/keyboard-controller.js +3 -1
- 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/overlay-control-label.js +47 -0
- package/dist/collection/utils/overlays.js +290 -8
- package/dist/collection/utils/sanitization/index.js +255 -14
- package/dist/collection/utils/select-option-render.js +111 -0
- package/dist/collection/utils/test/playwright/drag-element.js +32 -9
- package/dist/collection/utils/test/playwright/generator.js +48 -23
- package/dist/collection/utils/test/playwright/page/utils/goto.js +14 -5
- package/dist/collection/utils/test/playwright/page/utils/set-content.js +26 -3
- package/dist/collection/utils/theme.js +25 -1
- package/dist/collection/utils/transition/ios.transition.js +1 -0
- package/dist/docs.json +8975 -283
- package/dist/esm/{animation-DLJpuoEz.js → animation-B2qdQ_ou.js} +2 -2
- package/dist/esm/{app-globals-D0C5S4hU.js → app-globals-DZ-iIjxA.js} +1 -1
- package/dist/esm/{button-active-BSpTQmS9.js → button-active-BmajAby6.js} +2 -2
- package/dist/esm/{capacitor-CFERIeaU.js → capacitor-CtQSWUU0.js} +1 -1
- package/dist/esm/caret-down-D1t981Ih.js +6 -0
- package/dist/esm/caret-left-fIOYmaqA.js +6 -0
- package/dist/esm/caret-right-BYSs-jZz.js +6 -0
- package/dist/esm/config-BwKpO3Is.js +31 -0
- package/dist/esm/{data-DZI70dKr.js → data-CPP_AdEM.js} +6 -6
- package/dist/esm/{focus-visible-BmVRXR1y.js → focus-visible-vXpMhGrs.js} +23 -1
- package/dist/esm/{framework-delegate-FnPGymXL.js → framework-delegate-DO2QXccA.js} +4 -2
- package/dist/esm/{haptic-DzAMWJuk.js → haptic-DFgKNCce.js} +1 -1
- package/dist/esm/{helpers-HEqiOzXb.js → helpers-DfF5_wJc.js} +71 -5
- package/dist/esm/{index-B_dQk_WE.js → index-BIUWGRUl.js} +4 -4
- package/dist/esm/index-BUyahZJ4.js +409 -0
- package/dist/esm/{index-BRHzoo00.js → index-BjaaZqVY.js} +4 -3
- package/dist/esm/{index-tcQvqkiX.js → index-C0EQceqV.js} +41 -4
- package/dist/esm/{index-DV3sJJW8.js → index-D2tu5BUg.js} +2 -1
- package/dist/esm/{index-Q6UPU0Ay.js → index-Di034G4O.js} +11 -11
- package/dist/esm/{index-MEDq2S8l.js → index-KxK0gcRp.js} +2 -2
- package/dist/esm/index.js +14 -14
- package/dist/esm/{input-shims-D10mwcw1.js → input-shims-DvNNw70a.js} +7 -6
- package/dist/esm/{input.utils-Y6NgW8bw.js → input.utils-_LkBfBWt.js} +3 -3
- package/dist/esm/ion-accordion_2.entry.js +61 -29
- package/dist/esm/ion-action-sheet.entry.js +41 -22
- package/dist/esm/ion-alert.entry.js +77 -40
- package/dist/esm/ion-app_8.entry.js +292 -157
- package/dist/esm/ion-avatar_3.entry.js +125 -13
- package/dist/esm/ion-back-button.entry.js +31 -22
- package/dist/esm/ion-backdrop.entry.js +10 -7
- package/dist/esm/ion-breadcrumb_2.entry.js +54 -18
- package/dist/esm/ion-button_2.entry.js +59 -22
- package/dist/esm/ion-card_5.entry.js +55 -33
- package/dist/esm/ion-checkbox.entry.js +37 -17
- package/dist/esm/ion-chip.entry.js +50 -9
- package/dist/esm/ion-col_3.entry.js +56 -57
- package/dist/esm/ion-datetime-button.entry.js +13 -9
- package/dist/esm/ion-datetime_3.entry.js +116 -41
- package/dist/esm/ion-divider.entry.js +49 -0
- package/dist/esm/ion-fab_3.entry.js +44 -28
- package/dist/esm/ion-gallery-item.entry.js +57 -0
- package/dist/esm/ion-gallery.entry.js +605 -0
- package/dist/esm/ion-img.entry.js +8 -4
- package/dist/esm/ion-infinite-scroll_2.entry.js +92 -16
- package/dist/esm/ion-input-otp.entry.js +74 -9
- package/dist/esm/ion-input-password-toggle.entry.js +53 -15
- package/dist/esm/ion-input.entry.js +124 -34
- package/dist/esm/ion-item-option_3.entry.js +467 -52
- package/dist/esm/ion-item_8.entry.js +121 -50
- package/dist/esm/ion-loading.entry.js +21 -18
- package/dist/esm/ion-menu_3.entry.js +47 -29
- package/dist/esm/ion-modal.entry.js +215 -91
- package/dist/esm/ion-nav_2.entry.js +14 -11
- package/dist/esm/ion-picker-column-option.entry.js +12 -8
- package/dist/esm/ion-picker-column.entry.js +13 -13
- package/dist/esm/ion-picker.entry.js +10 -6
- package/dist/esm/ion-popover.entry.js +21 -19
- package/dist/esm/ion-progress-bar.entry.js +27 -9
- package/dist/esm/ion-radio_2.entry.js +35 -17
- package/dist/esm/ion-range.entry.js +20 -13
- package/dist/esm/ion-refresher_2.entry.js +40 -21
- package/dist/esm/ion-reorder_2.entry.js +38 -14
- package/dist/esm/ion-ripple-effect.entry.js +15 -7
- package/dist/esm/ion-route_4.entry.js +11 -10
- package/dist/esm/ion-searchbar.entry.js +137 -24
- package/dist/esm/ion-segment-content.entry.js +2 -2
- package/dist/esm/ion-segment-view.entry.js +13 -3
- package/dist/esm/ion-segment_2.entry.js +23 -16
- package/dist/esm/ion-select-modal.entry.js +114 -38
- package/dist/esm/ion-select_3.entry.js +556 -107
- package/dist/esm/ion-spinner.entry.js +30 -8
- package/dist/esm/ion-split-pane.entry.js +13 -9
- package/dist/esm/ion-tab-bar_2.entry.js +147 -23
- package/dist/esm/ion-tab_2.entry.js +8 -7
- package/dist/esm/ion-text.entry.js +7 -7
- package/dist/esm/ion-textarea.entry.js +137 -23
- package/dist/esm/ion-toast.entry.js +45 -21
- package/dist/esm/ion-toggle.entry.js +82 -25
- package/dist/esm/ionic-global-BpkTponr.js +508 -0
- package/dist/esm/ionic.js +5 -5
- package/dist/esm/{ios.transition-ClFrsIrS.js → ios.transition-CgScDbsb.js} +7 -5
- package/dist/esm/{keyboard-CUw4ekVy.js → keyboard-CyyguLDw.js} +1 -1
- package/dist/esm/{keyboard-ywgs5efA.js → keyboard-WJix-wcz.js} +4 -3
- package/dist/esm/{keyboard-controller-BaaVITYt.js → keyboard-controller-BFwRdk2T.js} +5 -3
- package/dist/esm/list-Dhi5xtNS.js +6 -0
- package/dist/esm/loader.js +5 -5
- package/dist/esm/{md.transition-D0msQmzI.js → md.transition-DThqYazt.js} +6 -5
- package/dist/esm/{notch-controller-DKDjU_O7.js → notch-controller-MTblRxjD.js} +2 -2
- package/dist/esm/overlay-control-label-CODBQrPj.js +49 -0
- package/dist/esm/{overlays-TbiM4mdr.js → overlays-Dnhc5m_r.js} +306 -15
- package/dist/esm/select-option-render-qQ99XSVh.js +114 -0
- package/dist/esm/{status-tap-Kan2W7sh.js → status-tap-CoPI1M2q.js} +4 -3
- package/dist/esm/{swipe-back-DQ1q5MgD.js → swipe-back-qmvTRnSq.js} +3 -2
- package/dist/esm/{theme-DiVJyqlX.js → theme-DaJxRxSQ.js} +25 -1
- package/dist/esm/validity-BjW8SOqw.js +48 -0
- package/dist/esm/x-BDqjX7Z_.js +6 -0
- package/dist/html.html-data.json +2653 -146
- package/dist/ionic/index.esm.js +1 -1
- package/dist/ionic/ionic.esm.js +1 -1
- package/dist/ionic/p-05ce9821.entry.js +4 -0
- package/dist/ionic/p-066c290a.entry.js +4 -0
- package/dist/ionic/p-085b8cdf.entry.js +4 -0
- package/dist/ionic/p-0ef6bfc4.entry.js +4 -0
- package/dist/ionic/p-18969b6d.entry.js +4 -0
- package/dist/ionic/p-18bc4f2d.entry.js +4 -0
- package/dist/ionic/p-1b6e3914.entry.js +4 -0
- package/dist/ionic/p-25b51635.entry.js +4 -0
- package/dist/ionic/p-2740db6e.entry.js +4 -0
- package/dist/ionic/p-274a829d.entry.js +4 -0
- package/dist/ionic/p-2a1abbb1.entry.js +4 -0
- package/dist/ionic/p-3b4c5cb5.entry.js +4 -0
- package/dist/ionic/p-3cfb4ff2.entry.js +4 -0
- package/dist/ionic/p-43b00c5b.entry.js +4 -0
- package/dist/ionic/p-4827557b.entry.js +4 -0
- package/dist/ionic/p-4a97918d.entry.js +4 -0
- package/dist/ionic/p-52b3aedb.entry.js +4 -0
- package/dist/ionic/p-53d4ce5e.entry.js +4 -0
- package/dist/ionic/p-56224b93.entry.js +4 -0
- package/dist/ionic/p-5732396e.entry.js +4 -0
- package/dist/ionic/p-58d8877d.entry.js +4 -0
- package/dist/ionic/p-5d079dc1.entry.js +4 -0
- package/dist/ionic/p-5e9665dd.entry.js +4 -0
- package/dist/ionic/p-5fee5cc1.entry.js +4 -0
- package/dist/ionic/p-602cf876.entry.js +4 -0
- package/dist/ionic/p-678ee14a.entry.js +4 -0
- package/dist/ionic/p-68ea8ed1.entry.js +4 -0
- package/dist/ionic/p-6916fea6.entry.js +4 -0
- package/dist/ionic/p-6e1ec775.entry.js +4 -0
- package/dist/ionic/p-745d6b2b.entry.js +4 -0
- package/dist/ionic/p-7ce56473.entry.js +4 -0
- package/dist/ionic/p-83acfa2d.entry.js +4 -0
- package/dist/ionic/p-849b1759.entry.js +4 -0
- package/dist/ionic/p-8cb23f27.entry.js +4 -0
- package/dist/ionic/p-8d5fd199.entry.js +4 -0
- package/dist/ionic/p-8f2f8f6d.entry.js +4 -0
- package/dist/ionic/p-BDSH5ckF.js +4 -0
- package/dist/ionic/p-BDqjX7Z_.js +4 -0
- package/dist/ionic/p-BFe7BoXu.js +4 -0
- package/dist/ionic/p-BFy_BK46.js +4 -0
- package/dist/ionic/p-BYSs-jZz.js +4 -0
- package/dist/ionic/p-BjW8SOqw.js +4 -0
- package/{components/p-CtukzcyX.js → dist/ionic/p-BlZo7Gy-.js} +1 -1
- package/dist/ionic/p-Bq8S4vhI.js +4 -0
- package/dist/ionic/p-BwKpO3Is.js +4 -0
- package/dist/ionic/p-C0EQceqV.js +5 -0
- package/dist/ionic/p-C8i6xYLf.js +4 -0
- package/dist/ionic/p-CB91Gr9M.js +4 -0
- package/dist/ionic/p-CEkwLb3L.js +4 -0
- package/dist/ionic/p-CJsJQPQD.js +4 -0
- package/dist/ionic/p-CODBQrPj.js +4 -0
- package/dist/ionic/p-Ch7MBNn_.js +4 -0
- package/{components/p-BT_5jSqG.js → dist/ionic/p-Cm20lBQw.js} +1 -1
- package/dist/ionic/p-CnAWnbNK.js +4 -0
- package/dist/ionic/p-D1t981Ih.js +4 -0
- package/dist/ionic/p-D2tu5BUg.js +4 -0
- package/dist/ionic/p-D4MT1z4_.js +4 -0
- package/dist/ionic/p-D4veLKCq.js +4 -0
- package/dist/ionic/{p-DAAFkPFT.js → p-DDVaMUQI.js} +1 -1
- package/dist/ionic/p-DF7ubVci.js +4 -0
- package/dist/ionic/p-DMaSfupH.js +4 -0
- package/{components/p-D13Eaw-8.js → dist/ionic/p-DQDmksdT.js} +1 -1
- package/dist/ionic/p-DTsDGZPd.js +4 -0
- package/dist/ionic/p-DaJxRxSQ.js +4 -0
- package/dist/ionic/p-DdCaKRle.js +4 -0
- package/dist/ionic/p-Dhi5xtNS.js +4 -0
- package/dist/ionic/p-MqqcZQSB.js +4 -0
- package/dist/ionic/{p-CKvCXMs9.js → p-OkgYzj-7.js} +1 -1
- package/dist/ionic/p-WHzwm7OM.js +4 -0
- package/dist/ionic/p-a6a9a840.entry.js +4 -0
- package/dist/ionic/p-b7327160.entry.js +4 -0
- package/dist/ionic/p-ba447506.entry.js +4 -0
- package/dist/ionic/p-c04429f2.entry.js +4 -0
- package/dist/ionic/p-c25a2a9b.entry.js +4 -0
- package/dist/ionic/p-c414ac3a.entry.js +4 -0
- package/dist/ionic/p-ca3a07b5.entry.js +4 -0
- package/dist/ionic/p-ced3cda1.entry.js +4 -0
- package/dist/ionic/p-cf22e991.entry.js +4 -0
- package/dist/ionic/p-d0d42da6.entry.js +4 -0
- package/dist/ionic/p-d33dfc12.entry.js +4 -0
- package/dist/ionic/p-d34bfb61.entry.js +4 -0
- package/dist/ionic/p-ddde8df3.entry.js +4 -0
- package/dist/ionic/p-df642ef5.entry.js +4 -0
- package/dist/ionic/p-e04d63e1.entry.js +4 -0
- package/dist/ionic/p-e516b509.entry.js +4 -0
- package/dist/ionic/p-f18969f0.entry.js +4 -0
- package/dist/ionic/p-fIOYmaqA.js +4 -0
- package/dist/ionic/p-fc6d26ff.entry.js +4 -0
- package/dist/ionic/p-fce05eae.entry.js +4 -0
- package/dist/ionic/p-im8OkZlj.js +4 -0
- package/dist/ionic/p-lMb_45ax.js +4 -0
- package/dist/ionic/{p-Wk5HzclC.js → p-oUgyLDGL.js} +1 -1
- package/dist/ionic/p-vXpMhGrs.js +4 -0
- package/dist/types/components/accordion/accordion.d.ts +6 -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 +2 -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 +4 -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 +14 -4
- 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 +5 -3
- package/dist/types/components/fab-list/fab-list.d.ts +4 -0
- package/dist/types/components/footer/footer.d.ts +4 -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.d.ts +9 -3
- package/dist/types/components/header/header.utils.d.ts +3 -3
- package/dist/types/components/img/img.d.ts +3 -0
- 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 +31 -5
- package/dist/types/components/input-otp/input-otp.d.ts +37 -0
- package/dist/types/components/input-password-toggle/input-password-toggle.d.ts +2 -0
- package/dist/types/components/item/item.d.ts +11 -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 +3 -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 -7
- package/dist/types/components/modal/modal.d.ts +11 -1
- package/dist/types/components/nav/nav-interface.d.ts +9 -1
- package/dist/types/components/nav/nav.d.ts +5 -1
- 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/picker.d.ts +2 -1
- 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 +4 -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 +4 -0
- 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 -1
- package/dist/types/components/row/row.d.ts +4 -0
- package/dist/types/components/searchbar/searchbar.d.ts +51 -9
- 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-interface.d.ts +31 -0
- package/dist/types/components/select/select.d.ts +66 -13
- package/dist/types/components/select-modal/select-modal.d.ts +8 -0
- package/dist/types/components/select-option/select-option.d.ts +44 -0
- 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.d.ts +37 -2
- 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 +53 -4
- 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 +15 -1
- package/dist/types/components/toolbar/toolbar.d.ts +43 -3
- package/dist/types/components.d.ts +1852 -205
- package/dist/types/global/ionic-global.d.ts +28 -2
- package/dist/types/interface.d.ts +3 -0
- package/dist/types/utils/config.d.ts +106 -2
- 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/validity.d.ts +7 -0
- package/dist/types/utils/helpers.d.ts +22 -0
- package/dist/types/utils/overlay-control-label.d.ts +34 -0
- package/dist/types/utils/overlays-interface.d.ts +31 -1
- package/dist/types/utils/overlays.d.ts +1 -1
- package/dist/types/utils/sanitization/index.d.ts +54 -2
- package/dist/types/utils/select-option-render.d.ts +53 -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/theme.d.ts +9 -0
- package/hydrate/index.js +5982 -1347
- package/hydrate/index.mjs +5982 -1347
- package/package.json +9 -5
- package/components/p--JUspHvy.js +0 -4
- package/components/p-0NRupjzW.js +0 -4
- package/components/p-5bE_Wz4Y.js +0 -4
- package/components/p-B60hm8Qv.js +0 -4
- package/components/p-B9jFTlwE.js +0 -4
- package/components/p-BLmJ0zRm.js +0 -4
- package/components/p-BSEgsdFI.js +0 -4
- package/components/p-BTPfOxsU.js +0 -4
- package/components/p-Baq1XyAy.js +0 -4
- package/components/p-BirPFsRD.js +0 -4
- package/components/p-BjfgFSSR.js +0 -4
- package/components/p-BmVRXR1y.js +0 -4
- package/components/p-BnqQlm7c.js +0 -4
- package/components/p-BsPelv04.js +0 -4
- package/components/p-Bth-EzJ0.js +0 -4
- package/components/p-Bz0dSlXZ.js +0 -4
- package/components/p-C1aScSTo.js +0 -4
- package/components/p-C2lKgrXx.js +0 -4
- package/components/p-CHqRYvYm.js +0 -4
- package/components/p-CI3ncNZm.js +0 -4
- package/components/p-CIGNaXM1.js +0 -4
- package/components/p-CO7fmmxt.js +0 -4
- package/components/p-CSZf8_j0.js +0 -4
- package/components/p-CU5rbWAW.js +0 -4
- package/components/p-C_xFdyXe.js +0 -4
- package/components/p-Cfx4M1Bn.js +0 -4
- package/components/p-Ciz1-FuE.js +0 -4
- package/components/p-CmR5uXej.js +0 -4
- package/components/p-CtWGkNnJ.js +0 -4
- package/components/p-D6Ynv7Xh.js +0 -4
- package/components/p-D7bSXQD3.js +0 -4
- package/components/p-DDWp95gH.js +0 -4
- package/components/p-DIE4pXMl.js +0 -4
- package/components/p-DJztqcrH.js +0 -4
- package/components/p-DNQI6d-L.js +0 -4
- package/components/p-DOFCbuQR.js +0 -4
- package/components/p-DiVJyqlX.js +0 -4
- package/components/p-DnL1c9_X.js +0 -4
- package/components/p-DqZAXv2t.js +0 -4
- package/components/p-Sh0ICmPV.js +0 -4
- package/components/p-W5nO8mX_.js +0 -4
- package/components/p-W9CZ2mWX.js +0 -4
- package/components/p-ZjP4CjeZ.js +0 -4
- package/components/p-dhLYXa7A.js +0 -4
- package/components/p-ijF0iCrA.js +0 -4
- package/components/p-j5IxBIan.js +0 -4
- package/components/p-k_E4tX5Z.js +0 -4
- package/components/p-lE_JGpHD.js +0 -4
- package/components/p-nQi4oKcG.js +0 -4
- package/components/p-rCa2eL0j.js +0 -4
- package/components/p-ryqmO0B-.js +0 -4
- package/components/p-uVRyUM3z.js +0 -4
- package/dist/cjs/config-xninhj0J.js +0 -201
- package/dist/cjs/hardware-back-button-iUuF_76h.js +0 -121
- package/dist/cjs/index-DkNv4J_i.js +0 -10
- package/dist/cjs/ionic-global-B-cA6LkY.js +0 -151
- package/dist/cjs/validity-BpS37YFM.js +0 -19
- package/dist/esm/config-DQCONYYp.js +0 -195
- package/dist/esm/hardware-back-button-B93Gru0Y.js +0 -115
- package/dist/esm/index-ZjP4CjeZ.js +0 -7
- package/dist/esm/ionic-global-Cp_eT4sZ.js +0 -146
- package/dist/esm/validity-DJztqcrH.js +0 -17
- package/dist/ionic/p-00dbb17e.entry.js +0 -4
- package/dist/ionic/p-01f81ea5.entry.js +0 -4
- package/dist/ionic/p-06c232a4.entry.js +0 -4
- package/dist/ionic/p-0d005398.entry.js +0 -4
- package/dist/ionic/p-0fa9c382.entry.js +0 -4
- package/dist/ionic/p-1ae21e4c.entry.js +0 -4
- package/dist/ionic/p-20b1a044.entry.js +0 -4
- package/dist/ionic/p-21eb76d5.entry.js +0 -4
- package/dist/ionic/p-27d30585.entry.js +0 -4
- package/dist/ionic/p-2bb2cb18.entry.js +0 -4
- package/dist/ionic/p-2f55dc1a.entry.js +0 -4
- package/dist/ionic/p-30bf9737.entry.js +0 -4
- package/dist/ionic/p-3353c229.entry.js +0 -4
- package/dist/ionic/p-37e720da.entry.js +0 -4
- package/dist/ionic/p-390ca786.entry.js +0 -4
- package/dist/ionic/p-3a126bca.entry.js +0 -4
- package/dist/ionic/p-3a541154.entry.js +0 -4
- package/dist/ionic/p-3a7d1e91.entry.js +0 -4
- package/dist/ionic/p-3ae5f277.entry.js +0 -4
- package/dist/ionic/p-4745f534.entry.js +0 -4
- package/dist/ionic/p-4858af1f.entry.js +0 -4
- package/dist/ionic/p-485fda23.entry.js +0 -4
- package/dist/ionic/p-4baa5b82.entry.js +0 -4
- package/dist/ionic/p-4dc1c33c.entry.js +0 -4
- package/dist/ionic/p-4e92a11f.entry.js +0 -4
- package/dist/ionic/p-50e1194a.entry.js +0 -4
- package/dist/ionic/p-5d1da0a2.entry.js +0 -4
- package/dist/ionic/p-5fc7e542.entry.js +0 -4
- package/dist/ionic/p-75dc25ba.entry.js +0 -4
- package/dist/ionic/p-81ea5652.entry.js +0 -4
- package/dist/ionic/p-84d5ce05.entry.js +0 -4
- package/dist/ionic/p-874b4bd8.entry.js +0 -4
- package/dist/ionic/p-8c8eee7d.entry.js +0 -4
- package/dist/ionic/p-8eb8ee76.entry.js +0 -4
- package/dist/ionic/p-8fce95d5.entry.js +0 -4
- package/dist/ionic/p-94f2a736.entry.js +0 -4
- package/dist/ionic/p-9a65ac7f.entry.js +0 -4
- package/dist/ionic/p-9eeaBrnk.js +0 -4
- package/dist/ionic/p-9f1103ce.entry.js +0 -4
- package/dist/ionic/p-BGqMS-oh.js +0 -4
- package/dist/ionic/p-BUFIpxKM.js +0 -4
- package/dist/ionic/p-BmVRXR1y.js +0 -4
- package/dist/ionic/p-CFlfIb2g.js +0 -4
- package/dist/ionic/p-CIGNaXM1.js +0 -4
- package/dist/ionic/p-CtWGkNnJ.js +0 -4
- package/dist/ionic/p-Cx3IXROA.js +0 -4
- package/dist/ionic/p-D4uTWt4-.js +0 -4
- package/dist/ionic/p-DC3RagnA.js +0 -4
- package/dist/ionic/p-DIuEbVLu.js +0 -4
- package/dist/ionic/p-DJztqcrH.js +0 -4
- package/dist/ionic/p-DSG2s2Eb.js +0 -4
- package/dist/ionic/p-DV3sJJW8.js +0 -4
- package/dist/ionic/p-Dfbt-q2k.js +0 -4
- package/dist/ionic/p-DiVJyqlX.js +0 -4
- package/dist/ionic/p-DoJvtrbw.js +0 -4
- package/dist/ionic/p-DzWaWHGc.js +0 -4
- package/dist/ionic/p-KjNvRoEp.js +0 -4
- package/dist/ionic/p-Nqf6uvGh.js +0 -4
- package/dist/ionic/p-SNAkTDfm.js +0 -4
- package/dist/ionic/p-ZjP4CjeZ.js +0 -4
- package/dist/ionic/p-a21add2f.entry.js +0 -4
- package/dist/ionic/p-a3bdcae6.entry.js +0 -4
- package/dist/ionic/p-aa5d6b8f.entry.js +0 -4
- package/dist/ionic/p-b6a7397c.entry.js +0 -4
- package/dist/ionic/p-c0fb8edd.entry.js +0 -4
- package/dist/ionic/p-c4d8641b.entry.js +0 -4
- package/dist/ionic/p-c6e49f3f.entry.js +0 -4
- package/dist/ionic/p-dfa8d673.entry.js +0 -4
- package/dist/ionic/p-e0be05c5.entry.js +0 -4
- package/dist/ionic/p-e847a888.entry.js +0 -4
- package/dist/ionic/p-ec090e0a.entry.js +0 -4
- package/dist/ionic/p-ef4c3bee.entry.js +0 -4
- package/dist/ionic/p-f386f6ae.entry.js +0 -4
- package/dist/ionic/p-fabcce6c.entry.js +0 -4
- package/dist/ionic/p-mjKAFv89.js +0 -4
- package/dist/ionic/p-tcQvqkiX.js +0 -5
- package/dist/ionic/p-viFHDgRs.js +0 -4
- package/dist/ionic/p-xOfi7-Zn.js +0 -4
- package/dist/ionic/p-xWb6fgfq.js +0 -4
- /package/dist/collection/components/{input-password-toggle/input-password-toggle.css → refresher-content/refresher-content.css} +0 -0
|
@@ -1,19 +1,24 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
3
|
*/
|
|
4
|
+
import caretDownRegular from "@phosphor-icons/core/assets/regular/caret-down.svg";
|
|
4
5
|
import { Build, Host, h, forceUpdate } from "@stencil/core";
|
|
6
|
+
import { ENABLE_HTML_CONTENT_DEFAULT } from "../../utils/config";
|
|
5
7
|
import { compareOptions, createNotchController, isOptionSelected, checkInvalidState } from "../../utils/forms/index";
|
|
6
|
-
import {
|
|
8
|
+
import { suppressFocusVisible, renderHiddenInput, inheritAttributes } from "../../utils/helpers";
|
|
7
9
|
import { printIonWarning } from "../../utils/logging/index";
|
|
8
10
|
import { actionSheetController, alertController, popoverController, modalController } from "../../utils/overlays";
|
|
9
11
|
import { isRTL } from "../../utils/rtl/index";
|
|
12
|
+
import { reflectPropertiesToAttributes, sanitizeDOMTree } from "../../utils/sanitization/index";
|
|
10
13
|
import { createColorClasses, hostContext } from "../../utils/theme";
|
|
11
14
|
import { watchForOptions } from "../../utils/watch-options";
|
|
12
15
|
import { caretDownSharp, chevronExpand } from "ionicons/icons";
|
|
13
|
-
import {
|
|
16
|
+
import { config } from "../../global/config";
|
|
17
|
+
import { getIonTheme } from "../../global/ionic-global";
|
|
14
18
|
// TODO(FW-2832): types
|
|
15
19
|
/**
|
|
16
|
-
* @virtualProp {"ios" | "md"} mode - The mode determines
|
|
20
|
+
* @virtualProp {"ios" | "md"} mode - The mode determines the platform behaviors of the component.
|
|
21
|
+
* @virtualProp {"ios" | "md" | "ionic"} theme - The theme determines the visual appearance of the component.
|
|
17
22
|
*
|
|
18
23
|
* @slot label - The label text to associate with the select. Use the `labelPlacement` property to control where the label is placed relative to the select. Use this if you need to render a label with custom HTML.
|
|
19
24
|
* @slot start - Content to display at the leading edge of the select.
|
|
@@ -37,6 +42,7 @@ export class Select {
|
|
|
37
42
|
this.helperTextId = `${this.inputId}-helper-text`;
|
|
38
43
|
this.errorTextId = `${this.inputId}-error-text`;
|
|
39
44
|
this.inheritedAttributes = {};
|
|
45
|
+
this.customHTMLEnabled = config.get('innerHTMLTemplatesEnabled', ENABLE_HTML_CONTENT_DEFAULT);
|
|
40
46
|
this.isExpanded = false;
|
|
41
47
|
/**
|
|
42
48
|
* The `hasFocus` state ensures the focus class is
|
|
@@ -55,6 +61,14 @@ export class Select {
|
|
|
55
61
|
* The text to display on the cancel button.
|
|
56
62
|
*/
|
|
57
63
|
this.cancelText = 'Cancel';
|
|
64
|
+
/**
|
|
65
|
+
* If `true`, the cancel button will display an icon instead of the `cancelText`.
|
|
66
|
+
* Only applies when `interface` is set to `"modal"`. Has no effect on `"action-sheet"`,
|
|
67
|
+
* `"alert"`, or `"popover"` interfaces.
|
|
68
|
+
* When `cancelIcon` is `true`, the `cancelText` property is ignored for display
|
|
69
|
+
* but is used as the accessible label for the icon button.
|
|
70
|
+
*/
|
|
71
|
+
this.cancelIcon = false;
|
|
58
72
|
/**
|
|
59
73
|
* If `true`, the user cannot interact with the select.
|
|
60
74
|
*/
|
|
@@ -264,44 +278,65 @@ export class Select {
|
|
|
264
278
|
// Add logic to scroll selected item into view before presenting
|
|
265
279
|
const scrollSelectedIntoView = () => {
|
|
266
280
|
const indexOfSelected = this.childOpts.findIndex((o) => o.value === this.value);
|
|
281
|
+
/**
|
|
282
|
+
* Determine which option to focus when the overlay opens: the selected
|
|
283
|
+
* option if the select has a value, otherwise the first enabled option.
|
|
284
|
+
*/
|
|
285
|
+
let optionToFocus = null;
|
|
267
286
|
if (indexOfSelected > -1) {
|
|
268
287
|
const selectedItem = overlay.querySelector(`.select-interface-option:nth-of-type(${indexOfSelected + 1})`);
|
|
288
|
+
/**
|
|
289
|
+
* If the option contains an `ion-radio` or `ion-checkbox`, focus
|
|
290
|
+
* that instead of the option element itself. This ensures that
|
|
291
|
+
* screen readers will announce the role and state of the element
|
|
292
|
+
* (e.g. "radio button, checked") rather than only the option text.
|
|
293
|
+
* Alert and action sheet options are plain buttons, so fall back to
|
|
294
|
+
* focusing the option element itself in those cases.
|
|
295
|
+
*/
|
|
269
296
|
if (selectedItem) {
|
|
270
|
-
/**
|
|
271
|
-
* Browsers such as Firefox do not
|
|
272
|
-
* correctly delegate focus when manually
|
|
273
|
-
* focusing an element with delegatesFocus.
|
|
274
|
-
* We work around this by manually focusing
|
|
275
|
-
* the interactive element.
|
|
276
|
-
* ion-radio and ion-checkbox are the only
|
|
277
|
-
* elements that ion-select-popover uses, so
|
|
278
|
-
* we only need to worry about those two components
|
|
279
|
-
* when focusing.
|
|
280
|
-
*/
|
|
281
297
|
const interactiveEl = selectedItem.querySelector('ion-radio, ion-checkbox');
|
|
282
298
|
if (interactiveEl) {
|
|
283
299
|
selectedItem.scrollIntoView({ block: 'nearest' });
|
|
284
|
-
// Needs to be called before `focusVisibleElement` to prevent issue with focus event bubbling
|
|
285
|
-
// and removing `ion-focused` style
|
|
286
|
-
interactiveEl.setFocus();
|
|
287
300
|
}
|
|
288
|
-
|
|
301
|
+
optionToFocus = interactiveEl !== null && interactiveEl !== void 0 ? interactiveEl : selectedItem;
|
|
289
302
|
}
|
|
290
303
|
}
|
|
291
304
|
else {
|
|
292
305
|
/**
|
|
293
306
|
* If no value is set then focus the first enabled option.
|
|
294
307
|
*/
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
308
|
+
optionToFocus = overlay.querySelector('ion-radio:not(.radio-disabled), ion-checkbox:not(.checkbox-disabled)');
|
|
309
|
+
}
|
|
310
|
+
if (optionToFocus) {
|
|
311
|
+
/**
|
|
312
|
+
* Focus the option directly (`setFocus()`/`focus()`) rather than
|
|
313
|
+
* with `focusVisibleElement()`. `focusVisibleElement()` forces the
|
|
314
|
+
* `ion-focused` focus ring on regardless of how the overlay was
|
|
315
|
+
* opened, whereas a plain focus lets the focus-visible utility
|
|
316
|
+
* decide: it shows the ring only when the overlay was opened with
|
|
317
|
+
* the keyboard and hides it for pointer opens.
|
|
318
|
+
*
|
|
319
|
+
* `ion-radio` and `ion-checkbox` expose `setFocus`, which correctly
|
|
320
|
+
* delegates focus to their inner focusable element. This is needed
|
|
321
|
+
* because browsers such as Firefox do not delegate focus correctly
|
|
322
|
+
* when focusing an element with delegatesFocus. When the option is
|
|
323
|
+
* a plain button it can be focused directly.
|
|
324
|
+
*/
|
|
325
|
+
if (optionToFocus.matches('ion-radio, ion-checkbox')) {
|
|
326
|
+
optionToFocus.setFocus();
|
|
327
|
+
}
|
|
328
|
+
else {
|
|
329
|
+
optionToFocus.focus();
|
|
330
|
+
}
|
|
331
|
+
/**
|
|
332
|
+
* In the alert interface, when tabbing and pressing enter to open
|
|
333
|
+
* the select, the value that is currently selected flashes the
|
|
334
|
+
* focused state briefly before moving to its wrapper. This suppresses
|
|
335
|
+
* the focus visible state, so that the option will only show as
|
|
336
|
+
* focused when navigating with the keyboard.
|
|
337
|
+
*/
|
|
338
|
+
if (this.interface === 'alert') {
|
|
339
|
+
suppressFocusVisible();
|
|
305
340
|
}
|
|
306
341
|
}
|
|
307
342
|
};
|
|
@@ -399,10 +434,12 @@ export class Select {
|
|
|
399
434
|
.join(' ');
|
|
400
435
|
const optClass = `${OPTION_CLASS} ${copyClasses}`;
|
|
401
436
|
const isSelected = isOptionSelected(selectValue, value, this.compareWith);
|
|
437
|
+
const { content, startContent, endContent } = extractOptionContent(option, this.customHTMLEnabled);
|
|
402
438
|
return {
|
|
403
439
|
role: isSelected ? 'selected' : '',
|
|
404
|
-
text:
|
|
440
|
+
text: content !== null && content !== void 0 ? content : '',
|
|
405
441
|
cssClass: optClass,
|
|
442
|
+
disabled: option.disabled,
|
|
406
443
|
handler: () => {
|
|
407
444
|
this.setValue(value);
|
|
408
445
|
},
|
|
@@ -410,6 +447,9 @@ export class Select {
|
|
|
410
447
|
'aria-checked': isSelected ? 'true' : 'false',
|
|
411
448
|
role: 'radio',
|
|
412
449
|
},
|
|
450
|
+
startContent,
|
|
451
|
+
endContent,
|
|
452
|
+
description: option.description,
|
|
413
453
|
};
|
|
414
454
|
});
|
|
415
455
|
// Add "cancel" button
|
|
@@ -430,13 +470,19 @@ export class Select {
|
|
|
430
470
|
.filter((cls) => cls !== 'hydrated')
|
|
431
471
|
.join(' ');
|
|
432
472
|
const optClass = `${OPTION_CLASS} ${copyClasses}`;
|
|
473
|
+
const { content, startContent, endContent } = extractOptionContent(option, this.customHTMLEnabled);
|
|
433
474
|
return {
|
|
434
475
|
type: inputType,
|
|
435
476
|
cssClass: optClass,
|
|
436
|
-
label:
|
|
477
|
+
label: content !== null && content !== void 0 ? content : '',
|
|
437
478
|
value,
|
|
438
479
|
checked: isOptionSelected(selectValue, value, this.compareWith),
|
|
439
480
|
disabled: option.disabled,
|
|
481
|
+
startContent,
|
|
482
|
+
endContent,
|
|
483
|
+
description: option.description,
|
|
484
|
+
labelPlacement: option.labelPlacement,
|
|
485
|
+
justify: option.justify,
|
|
440
486
|
};
|
|
441
487
|
});
|
|
442
488
|
return alertInputs;
|
|
@@ -449,8 +495,9 @@ export class Select {
|
|
|
449
495
|
.filter((cls) => cls !== 'hydrated')
|
|
450
496
|
.join(' ');
|
|
451
497
|
const optClass = `${OPTION_CLASS} ${copyClasses}`;
|
|
498
|
+
const { content, startContent, endContent } = extractOptionContent(option, this.customHTMLEnabled);
|
|
452
499
|
return {
|
|
453
|
-
text:
|
|
500
|
+
text: content !== null && content !== void 0 ? content : '',
|
|
454
501
|
cssClass: optClass,
|
|
455
502
|
value,
|
|
456
503
|
checked: isOptionSelected(selectValue, value, this.compareWith),
|
|
@@ -461,6 +508,11 @@ export class Select {
|
|
|
461
508
|
this.close();
|
|
462
509
|
}
|
|
463
510
|
},
|
|
511
|
+
startContent,
|
|
512
|
+
endContent,
|
|
513
|
+
description: option.description,
|
|
514
|
+
labelPlacement: option.labelPlacement,
|
|
515
|
+
justify: option.justify,
|
|
464
516
|
};
|
|
465
517
|
});
|
|
466
518
|
return popoverOptions;
|
|
@@ -468,8 +520,8 @@ export class Select {
|
|
|
468
520
|
async openPopover(ev) {
|
|
469
521
|
const { fill, labelPlacement } = this;
|
|
470
522
|
const interfaceOptions = this.interfaceOptions;
|
|
471
|
-
const
|
|
472
|
-
const showBackdrop =
|
|
523
|
+
const theme = getIonTheme(this);
|
|
524
|
+
const showBackdrop = theme === 'md' ? false : true;
|
|
473
525
|
const multiple = this.multiple;
|
|
474
526
|
const value = this.value;
|
|
475
527
|
let event = ev;
|
|
@@ -480,7 +532,7 @@ export class Select {
|
|
|
480
532
|
* when using a fill in MD mode or if the
|
|
481
533
|
* label is floating/stacked.
|
|
482
534
|
*/
|
|
483
|
-
if (hasFloatingOrStackedLabel || (
|
|
535
|
+
if (hasFloatingOrStackedLabel || (theme === 'md' && fill !== undefined)) {
|
|
484
536
|
size = 'cover';
|
|
485
537
|
/**
|
|
486
538
|
* Otherwise the popover
|
|
@@ -493,15 +545,21 @@ export class Select {
|
|
|
493
545
|
ionShadowTarget: this.nativeWrapperEl,
|
|
494
546
|
} });
|
|
495
547
|
}
|
|
496
|
-
const
|
|
548
|
+
const options = this.createOverlaySelectOptions(this.childOpts, value);
|
|
549
|
+
const hasRichContent = options.some((opt) => opt.startContent || opt.endContent || opt.description);
|
|
550
|
+
const popoverOpts = Object.assign(Object.assign({ theme,
|
|
497
551
|
event, alignment: 'center', size,
|
|
498
|
-
showBackdrop }, interfaceOptions), { component: 'ion-select-popover', cssClass: [
|
|
552
|
+
showBackdrop }, interfaceOptions), { component: 'ion-select-popover', cssClass: [
|
|
553
|
+
'select-popover',
|
|
554
|
+
hasRichContent ? 'select-popover-rich-content' : undefined,
|
|
555
|
+
interfaceOptions.cssClass,
|
|
556
|
+
], componentProps: {
|
|
499
557
|
header: interfaceOptions.header,
|
|
500
558
|
subHeader: interfaceOptions.subHeader,
|
|
501
559
|
message: interfaceOptions.message,
|
|
502
560
|
multiple,
|
|
503
561
|
value,
|
|
504
|
-
options
|
|
562
|
+
options,
|
|
505
563
|
} });
|
|
506
564
|
/**
|
|
507
565
|
* Workaround for Stencil to autodefine
|
|
@@ -518,9 +576,9 @@ export class Select {
|
|
|
518
576
|
return popoverController.create(popoverOpts);
|
|
519
577
|
}
|
|
520
578
|
async openActionSheet() {
|
|
521
|
-
const
|
|
579
|
+
const theme = getIonTheme(this);
|
|
522
580
|
const interfaceOptions = this.interfaceOptions;
|
|
523
|
-
const actionSheetOpts = Object.assign(Object.assign({
|
|
581
|
+
const actionSheetOpts = Object.assign(Object.assign({ theme }, interfaceOptions), { buttons: this.createActionSheetButtons(this.childOpts, this.value), cssClass: ['select-action-sheet', interfaceOptions.cssClass] });
|
|
524
582
|
/**
|
|
525
583
|
* Workaround for Stencil to autodefine
|
|
526
584
|
* ion-action-sheet when
|
|
@@ -537,8 +595,8 @@ export class Select {
|
|
|
537
595
|
async openAlert() {
|
|
538
596
|
const interfaceOptions = this.interfaceOptions;
|
|
539
597
|
const inputType = this.multiple ? 'checkbox' : 'radio';
|
|
540
|
-
const
|
|
541
|
-
const alertOpts = Object.assign(Object.assign({
|
|
598
|
+
const theme = getIonTheme(this);
|
|
599
|
+
const alertOpts = Object.assign(Object.assign({ theme }, interfaceOptions), { header: interfaceOptions.header ? interfaceOptions.header : this.labelText, inputs: this.createAlertInputs(this.childOpts, inputType, this.value), buttons: [
|
|
542
600
|
{
|
|
543
601
|
text: this.cancelText,
|
|
544
602
|
role: 'cancel',
|
|
@@ -572,10 +630,11 @@ export class Select {
|
|
|
572
630
|
}
|
|
573
631
|
openModal() {
|
|
574
632
|
const { multiple, value, interfaceOptions } = this;
|
|
575
|
-
const
|
|
576
|
-
const modalOpts = Object.assign(Object.assign({}, interfaceOptions), { mode, cssClass: ['select-modal', interfaceOptions.cssClass], component: 'ion-select-modal', componentProps: {
|
|
633
|
+
const theme = getIonTheme(this);
|
|
634
|
+
const modalOpts = Object.assign(Object.assign({}, interfaceOptions), { mode: theme, cssClass: ['select-modal', interfaceOptions.cssClass], component: 'ion-select-modal', componentProps: {
|
|
577
635
|
header: interfaceOptions.header,
|
|
578
636
|
cancelText: this.cancelText,
|
|
637
|
+
cancelIcon: this.cancelIcon,
|
|
579
638
|
multiple,
|
|
580
639
|
value,
|
|
581
640
|
options: this.createOverlaySelectOptions(this.childOpts, value),
|
|
@@ -628,12 +687,18 @@ export class Select {
|
|
|
628
687
|
}
|
|
629
688
|
return;
|
|
630
689
|
}
|
|
631
|
-
|
|
690
|
+
/**
|
|
691
|
+
* Returns the text to display in the select based on the selected value.
|
|
692
|
+
*
|
|
693
|
+
* @param useHTML If `true`, the returned text will include any custom HTML content from the selected option. If `false`, the returned text will be plain text without any HTML. Defaults to `false`.
|
|
694
|
+
* @returns The text to display in the select, either with or without HTML based on the `useHTML` parameter.
|
|
695
|
+
*/
|
|
696
|
+
getText(useHTML = false) {
|
|
632
697
|
const selectedText = this.selectedText;
|
|
633
698
|
if (selectedText != null && selectedText !== '') {
|
|
634
699
|
return selectedText;
|
|
635
700
|
}
|
|
636
|
-
return generateText(this.childOpts, this.value, this.compareWith);
|
|
701
|
+
return generateText(this.childOpts, this.value, this.compareWith, useHTML);
|
|
637
702
|
}
|
|
638
703
|
setFocus() {
|
|
639
704
|
if (this.focusEl) {
|
|
@@ -647,6 +712,18 @@ export class Select {
|
|
|
647
712
|
};
|
|
648
713
|
this.ionStyle.emit(style);
|
|
649
714
|
}
|
|
715
|
+
getSize() {
|
|
716
|
+
const theme = getIonTheme(this);
|
|
717
|
+
const { size } = this;
|
|
718
|
+
// TODO(ROU-11370): Remove theme check when sizes are defined for all themes.
|
|
719
|
+
if (theme !== 'ionic') {
|
|
720
|
+
return undefined;
|
|
721
|
+
}
|
|
722
|
+
if (size === undefined) {
|
|
723
|
+
return 'medium';
|
|
724
|
+
}
|
|
725
|
+
return size;
|
|
726
|
+
}
|
|
650
727
|
renderLabel() {
|
|
651
728
|
const { label } = this;
|
|
652
729
|
return (h("div", { class: {
|
|
@@ -679,8 +756,8 @@ export class Select {
|
|
|
679
756
|
* when fill="outline".
|
|
680
757
|
*/
|
|
681
758
|
renderLabelContainer() {
|
|
682
|
-
const
|
|
683
|
-
const hasOutlineFill =
|
|
759
|
+
const theme = getIonTheme(this);
|
|
760
|
+
const hasOutlineFill = theme === 'md' && this.fill === 'outline';
|
|
684
761
|
if (hasOutlineFill) {
|
|
685
762
|
/**
|
|
686
763
|
* The outline fill has a special outline
|
|
@@ -703,6 +780,47 @@ export class Select {
|
|
|
703
780
|
*/
|
|
704
781
|
return this.renderLabel();
|
|
705
782
|
}
|
|
783
|
+
/**
|
|
784
|
+
* Wraps text nodes in the select text with span elements
|
|
785
|
+
* so spacing can be added between elements without
|
|
786
|
+
* changing the display to prevent losing the ellipses
|
|
787
|
+
* behavior.
|
|
788
|
+
*
|
|
789
|
+
* Only wraps when the string contains HTML elements
|
|
790
|
+
* alongside text.
|
|
791
|
+
*/
|
|
792
|
+
wrapSelectTextNodes(html) {
|
|
793
|
+
const temp = document.createElement('div');
|
|
794
|
+
temp.innerHTML = html;
|
|
795
|
+
const hasElements = Array.from(temp.childNodes).some((n) => n.nodeType === Node.ELEMENT_NODE);
|
|
796
|
+
// Return the plain text
|
|
797
|
+
if (!hasElements) {
|
|
798
|
+
return html;
|
|
799
|
+
}
|
|
800
|
+
Array.from(temp.childNodes).forEach((node) => {
|
|
801
|
+
var _a, _b, _c, _d;
|
|
802
|
+
if (node.nodeType === Node.TEXT_NODE && ((_a = node.textContent) === null || _a === void 0 ? void 0 : _a.trim())) {
|
|
803
|
+
const text = node.textContent;
|
|
804
|
+
/**
|
|
805
|
+
* Split comma separator from the text content
|
|
806
|
+
* e.g., ", Bacon" becomes ", " text node + <span>Bacon</span>.
|
|
807
|
+
*/
|
|
808
|
+
const commaMatch = text.match(/^(,\s*)(.*)/);
|
|
809
|
+
if (commaMatch) {
|
|
810
|
+
const commaNode = document.createTextNode(commaMatch[1]);
|
|
811
|
+
const wrapper = document.createElement('span');
|
|
812
|
+
wrapper.textContent = commaMatch[2];
|
|
813
|
+
(_b = node.parentNode) === null || _b === void 0 ? void 0 : _b.replaceChild(wrapper, node);
|
|
814
|
+
(_c = wrapper.parentNode) === null || _c === void 0 ? void 0 : _c.insertBefore(commaNode, wrapper);
|
|
815
|
+
return;
|
|
816
|
+
}
|
|
817
|
+
const wrapper = document.createElement('span');
|
|
818
|
+
(_d = node.parentNode) === null || _d === void 0 ? void 0 : _d.replaceChild(wrapper, node);
|
|
819
|
+
wrapper.appendChild(node);
|
|
820
|
+
}
|
|
821
|
+
});
|
|
822
|
+
return temp.innerHTML;
|
|
823
|
+
}
|
|
706
824
|
/**
|
|
707
825
|
* Renders either the placeholder
|
|
708
826
|
* or the selected values based on
|
|
@@ -710,7 +828,7 @@ export class Select {
|
|
|
710
828
|
*/
|
|
711
829
|
renderSelectText() {
|
|
712
830
|
const { placeholder } = this;
|
|
713
|
-
const displayValue = this.getText();
|
|
831
|
+
const displayValue = this.getText(true);
|
|
714
832
|
let addPlaceholderClass = false;
|
|
715
833
|
let selectText = displayValue;
|
|
716
834
|
if (selectText === '' && placeholder !== undefined) {
|
|
@@ -722,6 +840,10 @@ export class Select {
|
|
|
722
840
|
'select-placeholder': addPlaceholderClass,
|
|
723
841
|
};
|
|
724
842
|
const textPart = addPlaceholderClass ? 'placeholder' : 'text';
|
|
843
|
+
if (this.customHTMLEnabled) {
|
|
844
|
+
const wrapped = this.wrapSelectTextNodes(selectText);
|
|
845
|
+
return h("div", { "aria-hidden": "true", class: selectTextClasses, part: textPart, innerHTML: wrapped });
|
|
846
|
+
}
|
|
725
847
|
return (h("div", { "aria-hidden": "true", class: selectTextClasses, part: textPart }, selectText));
|
|
726
848
|
}
|
|
727
849
|
/**
|
|
@@ -729,21 +851,17 @@ export class Select {
|
|
|
729
851
|
* next to the select text.
|
|
730
852
|
*/
|
|
731
853
|
renderSelectIcon() {
|
|
732
|
-
const
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
icon = expandedIcon;
|
|
737
|
-
}
|
|
738
|
-
else {
|
|
739
|
-
const defaultIcon = mode === 'ios' ? chevronExpand : caretDownSharp;
|
|
740
|
-
icon = toggleIcon !== null && toggleIcon !== void 0 ? toggleIcon : defaultIcon;
|
|
854
|
+
const { isExpanded, selectExpandedIcon, selectCollapsedIcon } = this;
|
|
855
|
+
let icon = selectCollapsedIcon;
|
|
856
|
+
if (isExpanded) {
|
|
857
|
+
icon = selectExpandedIcon;
|
|
741
858
|
}
|
|
742
859
|
return h("ion-icon", { class: "select-icon", part: "icon", "aria-hidden": "true", icon: icon });
|
|
743
860
|
}
|
|
744
861
|
get ariaLabel() {
|
|
745
862
|
var _a;
|
|
746
863
|
const { placeholder, inheritedAttributes } = this;
|
|
864
|
+
// Get the plain text from the selected text
|
|
747
865
|
const displayValue = this.getText();
|
|
748
866
|
// The aria label should be preferred over visible text if both are specified
|
|
749
867
|
const definedLabel = (_a = inheritedAttributes['aria-label']) !== null && _a !== void 0 ? _a : this.labelText;
|
|
@@ -772,6 +890,63 @@ export class Select {
|
|
|
772
890
|
const { disabled, inputId, isExpanded, required } = this;
|
|
773
891
|
return (h("button", { disabled: disabled, id: inputId, "aria-label": this.ariaLabel, "aria-haspopup": "dialog", "aria-expanded": `${isExpanded}`, "aria-describedby": this.hintTextId, "aria-invalid": this.isInvalid ? 'true' : undefined, "aria-required": `${required}`, onFocus: this.onFocus, onBlur: this.onBlur, ref: (focusEl) => (this.focusEl = focusEl) }));
|
|
774
892
|
}
|
|
893
|
+
getShape() {
|
|
894
|
+
const theme = getIonTheme(this);
|
|
895
|
+
const { shape } = this;
|
|
896
|
+
// TODO(ROU-11366): Remove theme check when shapes are defined for all themes.
|
|
897
|
+
if (theme === 'ionic' && shape === undefined) {
|
|
898
|
+
return 'round';
|
|
899
|
+
}
|
|
900
|
+
return shape;
|
|
901
|
+
}
|
|
902
|
+
/**
|
|
903
|
+
* Get the icon to use for the expand icon.
|
|
904
|
+
* If an icon is set on the component, use that.
|
|
905
|
+
* Otherwise, use the icon set in the config.
|
|
906
|
+
* If no icon is set in the config, use the default icon.
|
|
907
|
+
*/
|
|
908
|
+
get selectExpandedIcon() {
|
|
909
|
+
// Return the expandedIcon or toggleIcon if either is explicitly set
|
|
910
|
+
if (this.expandedIcon != null) {
|
|
911
|
+
return this.expandedIcon;
|
|
912
|
+
}
|
|
913
|
+
else if (this.toggleIcon != null) {
|
|
914
|
+
return this.toggleIcon;
|
|
915
|
+
}
|
|
916
|
+
// Determine the theme and map to default icons
|
|
917
|
+
const theme = getIonTheme(this);
|
|
918
|
+
const defaultIcons = {
|
|
919
|
+
ios: chevronExpand,
|
|
920
|
+
ionic: caretDownRegular,
|
|
921
|
+
md: caretDownSharp,
|
|
922
|
+
};
|
|
923
|
+
// Get the default icon based on the theme, falling back to 'md' icon if necessary
|
|
924
|
+
const defaultIcon = defaultIcons[theme] || defaultIcons.md;
|
|
925
|
+
// Return the configured select expanded icon or the default icon
|
|
926
|
+
return config.get('selectExpandedIcon', defaultIcon);
|
|
927
|
+
}
|
|
928
|
+
/**
|
|
929
|
+
* Get the icon to use for the collapsed icon.
|
|
930
|
+
* If an icon is set on the component, use that.
|
|
931
|
+
* Otherwise, use the icon set in the config.
|
|
932
|
+
* If no icon is set in the config, use the default icon.
|
|
933
|
+
*/
|
|
934
|
+
get selectCollapsedIcon() {
|
|
935
|
+
// Return the toggleIcon if it is explicitly set
|
|
936
|
+
if (this.toggleIcon) {
|
|
937
|
+
return this.toggleIcon;
|
|
938
|
+
}
|
|
939
|
+
// Determine the theme and map to default icons
|
|
940
|
+
const theme = getIonTheme(this);
|
|
941
|
+
const defaultIcons = {
|
|
942
|
+
ios: chevronExpand,
|
|
943
|
+
ionic: caretDownRegular,
|
|
944
|
+
md: caretDownSharp,
|
|
945
|
+
};
|
|
946
|
+
// Get the default icon based on the theme, falling back to 'md' icon if necessary
|
|
947
|
+
const defaultIcon = defaultIcons[theme] || defaultIcons.md;
|
|
948
|
+
return config.get('selectCollapsedIcon', defaultIcon);
|
|
949
|
+
}
|
|
775
950
|
getHintTextId() {
|
|
776
951
|
const { helperText, errorText, helperTextId, errorTextId, isInvalid } = this;
|
|
777
952
|
if (isInvalid && errorText) {
|
|
@@ -809,13 +984,17 @@ export class Select {
|
|
|
809
984
|
return (h("div", { class: "select-bottom", part: "bottom" }, this.renderHintText()));
|
|
810
985
|
}
|
|
811
986
|
render() {
|
|
812
|
-
const { disabled, el, isExpanded, expandedIcon, labelPlacement, justify, placeholder, fill,
|
|
813
|
-
const
|
|
987
|
+
const { disabled, el, isExpanded, expandedIcon, labelPlacement, justify, placeholder, fill, name, value, hasFocus, } = this;
|
|
988
|
+
const theme = getIonTheme(this);
|
|
989
|
+
const shape = this.getShape();
|
|
814
990
|
const hasFloatingOrStackedLabel = labelPlacement === 'floating' || labelPlacement === 'stacked';
|
|
991
|
+
const shouldRenderOuterIcon = theme !== 'ionic' && hasFloatingOrStackedLabel;
|
|
992
|
+
const shouldRenderInnerIcon = theme === 'ionic' || !hasFloatingOrStackedLabel;
|
|
815
993
|
const justifyEnabled = !hasFloatingOrStackedLabel && justify !== undefined;
|
|
816
994
|
const rtl = isRTL(el) ? 'rtl' : 'ltr';
|
|
817
995
|
const inItem = hostContext('ion-item', this.el);
|
|
818
|
-
const
|
|
996
|
+
const size = this.getSize();
|
|
997
|
+
const shouldRenderHighlight = theme === 'md' && fill !== 'outline' && !inItem;
|
|
819
998
|
const hasValue = this.hasValue();
|
|
820
999
|
const hasStartEndSlots = el.querySelector('[slot="start"], [slot="end"]') !== null;
|
|
821
1000
|
renderHiddenInput(true, el, name, parseValue(value), disabled);
|
|
@@ -837,8 +1016,8 @@ export class Select {
|
|
|
837
1016
|
* TODO(FW-5592): Remove hasStartEndSlots condition
|
|
838
1017
|
*/
|
|
839
1018
|
const labelShouldFloat = labelPlacement === 'stacked' || (labelPlacement === 'floating' && (hasValue || isExpanded || hasStartEndSlots));
|
|
840
|
-
return (h(Host, { key: '
|
|
841
|
-
[
|
|
1019
|
+
return (h(Host, { key: 'cabce5ba3159dc09313bd687b67a8dd0e9f257d2', onClick: this.onClick, class: createColorClasses(this.color, {
|
|
1020
|
+
[theme]: true,
|
|
842
1021
|
'in-item': inItem,
|
|
843
1022
|
'in-item-color': hostContext('ion-item.ion-color', el),
|
|
844
1023
|
'select-disabled': disabled,
|
|
@@ -855,20 +1034,33 @@ export class Select {
|
|
|
855
1034
|
[`select-justify-${justify}`]: justifyEnabled,
|
|
856
1035
|
[`select-shape-${shape}`]: shape !== undefined,
|
|
857
1036
|
[`select-label-placement-${labelPlacement}`]: true,
|
|
858
|
-
|
|
1037
|
+
[`select-size-${size}`]: size !== undefined,
|
|
1038
|
+
}) }, h("label", { key: '427f7b6d6d0ea092e09908a29a572350177c1534', class: "select-wrapper", id: "select-label", onClick: this.onLabelClick, part: "wrapper" }, this.renderLabelContainer(), h("div", { key: '68a008bef050d74f84edf6eedf2e34351bb2cd71', class: "select-wrapper-inner", part: "inner" },
|
|
1039
|
+
/**
|
|
1040
|
+
* For the ionic theme, we render the outline container here
|
|
1041
|
+
* instead of higher up, so it can be positioned relative to
|
|
1042
|
+
* the native wrapper instead of the <label> element or the
|
|
1043
|
+
* entire component. This allows the label text to be positioned
|
|
1044
|
+
* above the outline, while staying within the bounds of the
|
|
1045
|
+
* <label> element, ensuring that clicking the label text
|
|
1046
|
+
* focuses the select.
|
|
1047
|
+
*/
|
|
1048
|
+
theme === 'ionic' && fill === 'outline' && h("div", { key: 'b980208894d2ab9da9f79747dc64df09df2c860b', class: "select-outline" }), h("slot", { key: '3c70c38cc8c4b3bd85ef69bf736dd194342a26e1', name: "start" }), h("div", { key: 'b6e6378c150eaf64e5767907636ee4e117296a58', class: "native-wrapper", ref: (el) => (this.nativeWrapperEl = el), part: "container" }, this.renderSelectText(), this.renderListbox()), h("slot", { key: 'c57b4e3386d23f72c691fd1859593e0c9adfb47b', name: "end" }), shouldRenderInnerIcon && this.renderSelectIcon()), shouldRenderOuterIcon && this.renderSelectIcon(), shouldRenderHighlight && h("div", { key: '75ad1882ef2372b12ca4013d72d16bd7576b7437', class: "select-highlight" })), this.renderBottomContent()));
|
|
859
1049
|
}
|
|
860
1050
|
static get is() { return "ion-select"; }
|
|
861
1051
|
static get encapsulation() { return "shadow"; }
|
|
862
1052
|
static get originalStyleUrls() {
|
|
863
1053
|
return {
|
|
864
1054
|
"ios": ["select.ios.scss"],
|
|
865
|
-
"md": ["select.md.scss"]
|
|
1055
|
+
"md": ["select.md.scss"],
|
|
1056
|
+
"ionic": ["select.ionic.scss"]
|
|
866
1057
|
};
|
|
867
1058
|
}
|
|
868
1059
|
static get styleUrls() {
|
|
869
1060
|
return {
|
|
870
1061
|
"ios": ["select.ios.css"],
|
|
871
|
-
"md": ["select.md.css"]
|
|
1062
|
+
"md": ["select.md.css"],
|
|
1063
|
+
"ionic": ["select.ionic.css"]
|
|
872
1064
|
};
|
|
873
1065
|
}
|
|
874
1066
|
static get properties() {
|
|
@@ -893,6 +1085,26 @@ export class Select {
|
|
|
893
1085
|
"attribute": "cancel-text",
|
|
894
1086
|
"defaultValue": "'Cancel'"
|
|
895
1087
|
},
|
|
1088
|
+
"cancelIcon": {
|
|
1089
|
+
"type": "boolean",
|
|
1090
|
+
"mutable": false,
|
|
1091
|
+
"complexType": {
|
|
1092
|
+
"original": "boolean",
|
|
1093
|
+
"resolved": "boolean",
|
|
1094
|
+
"references": {}
|
|
1095
|
+
},
|
|
1096
|
+
"required": false,
|
|
1097
|
+
"optional": false,
|
|
1098
|
+
"docs": {
|
|
1099
|
+
"tags": [],
|
|
1100
|
+
"text": "If `true`, the cancel button will display an icon instead of the `cancelText`.\nOnly applies when `interface` is set to `\"modal\"`. Has no effect on `\"action-sheet\"`,\n`\"alert\"`, or `\"popover\"` interfaces.\nWhen `cancelIcon` is `true`, the `cancelText` property is ignored for display\nbut is used as the accessible label for the icon button."
|
|
1101
|
+
},
|
|
1102
|
+
"getter": false,
|
|
1103
|
+
"setter": false,
|
|
1104
|
+
"reflect": false,
|
|
1105
|
+
"attribute": "cancel-icon",
|
|
1106
|
+
"defaultValue": "false"
|
|
1107
|
+
},
|
|
896
1108
|
"color": {
|
|
897
1109
|
"type": "string",
|
|
898
1110
|
"mutable": false,
|
|
@@ -977,7 +1189,7 @@ export class Select {
|
|
|
977
1189
|
"optional": true,
|
|
978
1190
|
"docs": {
|
|
979
1191
|
"tags": [],
|
|
980
|
-
"text": "The fill for the item. If `\"solid\"` the item will have a background. If\n`\"outline\"` the item will be transparent with a border. Only available in
|
|
1192
|
+
"text": "The fill for the item. If `\"solid\"` the item will have a background. If\n`\"outline\"` the item will be transparent with a border. Only available in the `\"md\"` theme."
|
|
981
1193
|
},
|
|
982
1194
|
"getter": false,
|
|
983
1195
|
"setter": false,
|
|
@@ -1237,7 +1449,7 @@ export class Select {
|
|
|
1237
1449
|
"optional": true,
|
|
1238
1450
|
"docs": {
|
|
1239
1451
|
"tags": [],
|
|
1240
|
-
"text": "The toggle icon to use. Defaults to
|
|
1452
|
+
"text": "The toggle icon to use. Defaults to `\"chevronExpand\"` for the `\"ios\"` theme,\nor `\"caretDownSharp\"` for the `\"md\"` and `\"ionic\"` themes."
|
|
1241
1453
|
},
|
|
1242
1454
|
"getter": false,
|
|
1243
1455
|
"setter": false,
|
|
@@ -1256,70 +1468,89 @@ export class Select {
|
|
|
1256
1468
|
"optional": true,
|
|
1257
1469
|
"docs": {
|
|
1258
1470
|
"tags": [],
|
|
1259
|
-
"text": "The toggle icon to show when the select is open. If defined, the icon\nrotation behavior in
|
|
1471
|
+
"text": "The toggle icon to show when the select is open. If defined, the icon\nrotation behavior in `\"md\"` theme will be disabled. If undefined, `toggleIcon`\nwill be used for when the select is both open and closed."
|
|
1260
1472
|
},
|
|
1261
1473
|
"getter": false,
|
|
1262
1474
|
"setter": false,
|
|
1263
1475
|
"reflect": false,
|
|
1264
1476
|
"attribute": "expanded-icon"
|
|
1265
1477
|
},
|
|
1478
|
+
"required": {
|
|
1479
|
+
"type": "boolean",
|
|
1480
|
+
"mutable": false,
|
|
1481
|
+
"complexType": {
|
|
1482
|
+
"original": "boolean",
|
|
1483
|
+
"resolved": "boolean",
|
|
1484
|
+
"references": {}
|
|
1485
|
+
},
|
|
1486
|
+
"required": false,
|
|
1487
|
+
"optional": false,
|
|
1488
|
+
"docs": {
|
|
1489
|
+
"tags": [],
|
|
1490
|
+
"text": "If true, screen readers will announce it as a required field. This property\nworks only for accessibility purposes, it will not prevent the form from\nsubmitting if the value is invalid."
|
|
1491
|
+
},
|
|
1492
|
+
"getter": false,
|
|
1493
|
+
"setter": false,
|
|
1494
|
+
"reflect": false,
|
|
1495
|
+
"attribute": "required",
|
|
1496
|
+
"defaultValue": "false"
|
|
1497
|
+
},
|
|
1266
1498
|
"shape": {
|
|
1267
1499
|
"type": "string",
|
|
1268
1500
|
"mutable": false,
|
|
1269
1501
|
"complexType": {
|
|
1270
|
-
"original": "'round'",
|
|
1271
|
-
"resolved": "\"round\" | undefined",
|
|
1502
|
+
"original": "'soft' | 'round' | 'rectangular'",
|
|
1503
|
+
"resolved": "\"rectangular\" | \"round\" | \"soft\" | undefined",
|
|
1272
1504
|
"references": {}
|
|
1273
1505
|
},
|
|
1274
1506
|
"required": false,
|
|
1275
1507
|
"optional": true,
|
|
1276
1508
|
"docs": {
|
|
1277
1509
|
"tags": [],
|
|
1278
|
-
"text": "
|
|
1510
|
+
"text": "Set to `\"soft\"` for a select with slightly rounded corners,\n`\"round\"` for a select with fully rounded corners,\nor `\"rectangular\"` for a select without rounded corners.\n\nDefaults to `\"round\"` for the `\"ionic\"` theme, undefined for all other themes."
|
|
1279
1511
|
},
|
|
1280
1512
|
"getter": false,
|
|
1281
1513
|
"setter": false,
|
|
1282
1514
|
"reflect": false,
|
|
1283
1515
|
"attribute": "shape"
|
|
1284
1516
|
},
|
|
1285
|
-
"
|
|
1286
|
-
"type": "
|
|
1287
|
-
"mutable":
|
|
1517
|
+
"size": {
|
|
1518
|
+
"type": "string",
|
|
1519
|
+
"mutable": false,
|
|
1288
1520
|
"complexType": {
|
|
1289
|
-
"original": "
|
|
1290
|
-
"resolved": "
|
|
1521
|
+
"original": "'small' | 'medium' | 'large'",
|
|
1522
|
+
"resolved": "\"large\" | \"medium\" | \"small\" | undefined",
|
|
1291
1523
|
"references": {}
|
|
1292
1524
|
},
|
|
1293
1525
|
"required": false,
|
|
1294
1526
|
"optional": true,
|
|
1295
1527
|
"docs": {
|
|
1296
1528
|
"tags": [],
|
|
1297
|
-
"text": "The
|
|
1529
|
+
"text": "The size of the select. If \"large\" it will increase the height of the select, while\n\"small\" and \"medium\" provide progressively smaller heights.\n\nDefaults to `\"medium\"` for the ionic theme, and undefined for all other themes."
|
|
1298
1530
|
},
|
|
1299
1531
|
"getter": false,
|
|
1300
1532
|
"setter": false,
|
|
1301
1533
|
"reflect": false,
|
|
1302
|
-
"attribute": "
|
|
1534
|
+
"attribute": "size"
|
|
1303
1535
|
},
|
|
1304
|
-
"
|
|
1305
|
-
"type": "
|
|
1306
|
-
"mutable":
|
|
1536
|
+
"value": {
|
|
1537
|
+
"type": "any",
|
|
1538
|
+
"mutable": true,
|
|
1307
1539
|
"complexType": {
|
|
1308
|
-
"original": "
|
|
1309
|
-
"resolved": "
|
|
1540
|
+
"original": "any | null",
|
|
1541
|
+
"resolved": "any",
|
|
1310
1542
|
"references": {}
|
|
1311
1543
|
},
|
|
1312
1544
|
"required": false,
|
|
1313
|
-
"optional":
|
|
1545
|
+
"optional": true,
|
|
1314
1546
|
"docs": {
|
|
1315
1547
|
"tags": [],
|
|
1316
|
-
"text": "
|
|
1548
|
+
"text": "The value of the select."
|
|
1317
1549
|
},
|
|
1318
1550
|
"getter": false,
|
|
1319
1551
|
"setter": false,
|
|
1320
1552
|
"reflect": false,
|
|
1321
|
-
"attribute": "
|
|
1322
|
-
"defaultValue": "false"
|
|
1553
|
+
"attribute": "value"
|
|
1323
1554
|
}
|
|
1324
1555
|
};
|
|
1325
1556
|
}
|
|
@@ -1515,25 +1746,223 @@ const parseValue = (value) => {
|
|
|
1515
1746
|
}
|
|
1516
1747
|
return value.toString();
|
|
1517
1748
|
};
|
|
1518
|
-
const generateText = (opts, value, compareWith) => {
|
|
1749
|
+
const generateText = (opts, value, compareWith, useHTML = false) => {
|
|
1519
1750
|
if (value === undefined) {
|
|
1520
1751
|
return '';
|
|
1521
1752
|
}
|
|
1522
1753
|
if (Array.isArray(value)) {
|
|
1523
1754
|
return value
|
|
1524
|
-
.map((v) => textForValue(opts, v, compareWith))
|
|
1755
|
+
.map((v) => textForValue(opts, v, compareWith, useHTML))
|
|
1525
1756
|
.filter((opt) => opt !== null)
|
|
1526
1757
|
.join(', ');
|
|
1527
1758
|
}
|
|
1528
1759
|
else {
|
|
1529
|
-
return textForValue(opts, value, compareWith) || '';
|
|
1760
|
+
return textForValue(opts, value, compareWith, useHTML) || '';
|
|
1530
1761
|
}
|
|
1531
1762
|
};
|
|
1532
|
-
|
|
1763
|
+
/**
|
|
1764
|
+
* Returns the display text for a given value from the list of options.
|
|
1765
|
+
* When `useHTML` is true, returns sanitized HTML for the select text.
|
|
1766
|
+
* When `useHTML` is false, returns plain text for aria-label and other
|
|
1767
|
+
* text-only contexts.
|
|
1768
|
+
*
|
|
1769
|
+
* @param opts - The list of ion-select-option elements.
|
|
1770
|
+
* @param value - The value to find the matching option for.
|
|
1771
|
+
* @param compareWith - Custom comparison function or property name.
|
|
1772
|
+
* @param useHTML - If true, returns HTML string. If false, returns plain text.
|
|
1773
|
+
*/
|
|
1774
|
+
const textForValue = (opts, value, compareWith, useHTML = false) => {
|
|
1533
1775
|
const selectOpt = opts.find((opt) => {
|
|
1534
1776
|
return compareOptions(value, getOptionValue(opt), compareWith);
|
|
1535
1777
|
});
|
|
1536
|
-
|
|
1778
|
+
const customHTMLEnabled = config.get('innerHTMLTemplatesEnabled', ENABLE_HTML_CONTENT_DEFAULT);
|
|
1779
|
+
if (!selectOpt) {
|
|
1780
|
+
return null;
|
|
1781
|
+
}
|
|
1782
|
+
// Return sanitized HTML for the select text
|
|
1783
|
+
if (customHTMLEnabled && useHTML) {
|
|
1784
|
+
return getOptionContent(selectOpt, undefined, true);
|
|
1785
|
+
}
|
|
1786
|
+
/**
|
|
1787
|
+
* When custom HTML is enabled, extract only the default slot content.
|
|
1788
|
+
* This ensures aria-label and other text-only contexts read only
|
|
1789
|
+
* the relevant option text.
|
|
1790
|
+
*/
|
|
1791
|
+
if (customHTMLEnabled) {
|
|
1792
|
+
const content = getOptionContent(selectOpt);
|
|
1793
|
+
if (typeof content === 'string') {
|
|
1794
|
+
return content;
|
|
1795
|
+
}
|
|
1796
|
+
/**
|
|
1797
|
+
* Elements were found in the default slot, extract and concatenate
|
|
1798
|
+
* their text content while trimming whitespace.
|
|
1799
|
+
*/
|
|
1800
|
+
if (content) {
|
|
1801
|
+
const texts = Array.from(content.childNodes)
|
|
1802
|
+
.map((n) => { var _a; return (_a = n.textContent) === null || _a === void 0 ? void 0 : _a.trim(); })
|
|
1803
|
+
.filter((t) => t);
|
|
1804
|
+
return texts.join(' ') || null;
|
|
1805
|
+
}
|
|
1806
|
+
// Empty option
|
|
1807
|
+
return null;
|
|
1808
|
+
}
|
|
1809
|
+
return getDefaultSlotPlainText(selectOpt);
|
|
1810
|
+
};
|
|
1811
|
+
/**
|
|
1812
|
+
* Trims whitespace from all text nodes within a DOM tree.
|
|
1813
|
+
* This prevents invisible layout shifts and unwanted gaps between
|
|
1814
|
+
* elements when HTML content is injected via innerHTML or cloneNode,
|
|
1815
|
+
* as browsers preserve whitespace (tabs, newlines, spaces) from
|
|
1816
|
+
* the original source markup.
|
|
1817
|
+
*
|
|
1818
|
+
* @param node The root node to start trimming text nodes from.
|
|
1819
|
+
*/
|
|
1820
|
+
const trimTextNodes = (node) => {
|
|
1821
|
+
node.childNodes.forEach((child) => {
|
|
1822
|
+
var _a;
|
|
1823
|
+
if (child.nodeType === Node.TEXT_NODE) {
|
|
1824
|
+
child.textContent = ((_a = child.textContent) === null || _a === void 0 ? void 0 : _a.trim()) || '';
|
|
1825
|
+
}
|
|
1826
|
+
else if (child.nodeType === Node.ELEMENT_NODE) {
|
|
1827
|
+
trimTextNodes(child);
|
|
1828
|
+
}
|
|
1829
|
+
});
|
|
1830
|
+
};
|
|
1831
|
+
/**
|
|
1832
|
+
* Extracts and clones content from an `ion-select-option` element
|
|
1833
|
+
* for rendering within overlay interfaces or the select text when `customHTMLEnabled` is `true`.
|
|
1834
|
+
*
|
|
1835
|
+
* @param option - The `ion-select-option` element to extract content from.
|
|
1836
|
+
* @param slotName - Optional slot name to extract. If omitted, extracts the default slot content.
|
|
1837
|
+
* @param useHTML - If `true`, the returned string will include any custom HTML content. If `false`, the returned string will be plain text without any HTML.
|
|
1838
|
+
* @returns When `useHTML` is `true`, a sanitized HTML string. When `false`, a
|
|
1839
|
+
* div element containing cloned child nodes. Returns `null` if no matching
|
|
1840
|
+
* content is found.
|
|
1841
|
+
*/
|
|
1842
|
+
const getOptionContent = (option, slotName, useHTML = false) => {
|
|
1843
|
+
let nodes;
|
|
1844
|
+
if (slotName) {
|
|
1845
|
+
// Named slot: get elements with matching slot attribute
|
|
1846
|
+
nodes = Array.from(option.children).filter((el) => el.getAttribute('slot') === slotName);
|
|
1847
|
+
}
|
|
1848
|
+
else {
|
|
1849
|
+
// Default slot: get nodes without a slot attribute
|
|
1850
|
+
const defaultSlot = getOptionDefaultSlot(option) || [];
|
|
1851
|
+
nodes = defaultSlot.filter((node) => {
|
|
1852
|
+
var _a;
|
|
1853
|
+
/**
|
|
1854
|
+
* Exclude whitespace-only text nodes (newline noise between
|
|
1855
|
+
* markup elements). Element nodes are always kept, even when
|
|
1856
|
+
* their textContent is empty (e.g. <svg>, <img>).
|
|
1857
|
+
*/
|
|
1858
|
+
if (node.nodeType === Node.TEXT_NODE) {
|
|
1859
|
+
return ((_a = node.textContent) === null || _a === void 0 ? void 0 : _a.trim().length) !== 0;
|
|
1860
|
+
}
|
|
1861
|
+
return true;
|
|
1862
|
+
});
|
|
1863
|
+
}
|
|
1864
|
+
if (nodes.length === 0) {
|
|
1865
|
+
return null;
|
|
1866
|
+
}
|
|
1867
|
+
// Return plain text if no elements are found
|
|
1868
|
+
if (!slotName && nodes.every((n) => n.nodeType === Node.TEXT_NODE)) {
|
|
1869
|
+
return nodes.map((n) => { var _a; return (_a = n.textContent) === null || _a === void 0 ? void 0 : _a.trim(); }).join(' ') || null;
|
|
1870
|
+
}
|
|
1871
|
+
/**
|
|
1872
|
+
* Mirror known custom-element properties (e.g. ion-icon's `icon`)
|
|
1873
|
+
* onto attributes before cloning. Frameworks like Vue set these as
|
|
1874
|
+
* DOM properties, which `cloneNode` doesn't copy, so without this
|
|
1875
|
+
* step the cloned overlay copy renders without the prop's value.
|
|
1876
|
+
*/
|
|
1877
|
+
nodes.forEach((n) => {
|
|
1878
|
+
if (n.nodeType === Node.ELEMENT_NODE) {
|
|
1879
|
+
reflectPropertiesToAttributes(n);
|
|
1880
|
+
}
|
|
1881
|
+
});
|
|
1882
|
+
// Clone each node into a temporary container
|
|
1883
|
+
const container = document.createElement('div');
|
|
1884
|
+
nodes.forEach((n) => {
|
|
1885
|
+
var _a;
|
|
1886
|
+
const clone = n.cloneNode(true);
|
|
1887
|
+
if (clone.nodeType === Node.TEXT_NODE) {
|
|
1888
|
+
clone.textContent = ((_a = clone.textContent) === null || _a === void 0 ? void 0 : _a.trim()) || '';
|
|
1889
|
+
}
|
|
1890
|
+
else {
|
|
1891
|
+
trimTextNodes(clone);
|
|
1892
|
+
}
|
|
1893
|
+
container.appendChild(clone);
|
|
1894
|
+
});
|
|
1895
|
+
/**
|
|
1896
|
+
* Sanitize the cloned DOM in place. Trusted attributes (size, color,
|
|
1897
|
+
* shape, etc.) are preserved; event handlers, javascript: URLs, and
|
|
1898
|
+
* blocked tags are stripped.
|
|
1899
|
+
*/
|
|
1900
|
+
sanitizeDOMTree(container);
|
|
1901
|
+
if (useHTML) {
|
|
1902
|
+
return container.innerHTML.trim() || null;
|
|
1903
|
+
}
|
|
1904
|
+
return container;
|
|
1905
|
+
};
|
|
1906
|
+
/**
|
|
1907
|
+
* Returns the child nodes that belong to the default slot of an
|
|
1908
|
+
* option element, excluding any nodes that are assigned to named
|
|
1909
|
+
* slots.
|
|
1910
|
+
*
|
|
1911
|
+
* @param option - The `ion-select-option` element to extract default-slot nodes from.
|
|
1912
|
+
* @returns An array of default slot nodes, or `null` if none are found.
|
|
1913
|
+
*/
|
|
1914
|
+
const getOptionDefaultSlot = (option) => {
|
|
1915
|
+
const defaultSlotNodes = Array.from(option.childNodes).filter((node) => {
|
|
1916
|
+
if (node.nodeType === Node.ELEMENT_NODE) {
|
|
1917
|
+
return !node.hasAttribute('slot');
|
|
1918
|
+
}
|
|
1919
|
+
return node.nodeType === Node.TEXT_NODE;
|
|
1920
|
+
});
|
|
1921
|
+
if (defaultSlotNodes.length === 0) {
|
|
1922
|
+
return null;
|
|
1923
|
+
}
|
|
1924
|
+
return defaultSlotNodes;
|
|
1925
|
+
};
|
|
1926
|
+
/**
|
|
1927
|
+
* Extracts plain text from only the default slot of an option,
|
|
1928
|
+
* excluding content assigned to named slots (start/end).
|
|
1929
|
+
*/
|
|
1930
|
+
const getDefaultSlotPlainText = (option) => {
|
|
1931
|
+
const texts = Array.from(option.childNodes)
|
|
1932
|
+
.filter((node) => {
|
|
1933
|
+
if (node.nodeType === Node.ELEMENT_NODE) {
|
|
1934
|
+
return !node.hasAttribute('slot');
|
|
1935
|
+
}
|
|
1936
|
+
return node.nodeType === Node.TEXT_NODE;
|
|
1937
|
+
})
|
|
1938
|
+
.filter((node) => node.nodeType === Node.TEXT_NODE)
|
|
1939
|
+
.map((n) => { var _a; return (_a = n.textContent) === null || _a === void 0 ? void 0 : _a.trim(); })
|
|
1940
|
+
.filter((t) => t);
|
|
1941
|
+
return texts.join(' ');
|
|
1942
|
+
};
|
|
1943
|
+
/**
|
|
1944
|
+
* Extracts the rich content from an `ion-select-option`.
|
|
1945
|
+
* When `customHTMLEnabled` is `false`, only the plain text from the
|
|
1946
|
+
* default slot is read and the start and end slots are skipped.
|
|
1947
|
+
*
|
|
1948
|
+
* @param option - The `ion-select-option` element to extract content from.
|
|
1949
|
+
* @param customHTMLEnabled - Whether custom HTML rendering is enabled
|
|
1950
|
+
* via the `innerHTMLTemplatesEnabled` config.
|
|
1951
|
+
*/
|
|
1952
|
+
const extractOptionContent = (option, customHTMLEnabled) => {
|
|
1953
|
+
var _a, _b;
|
|
1954
|
+
if (!customHTMLEnabled) {
|
|
1955
|
+
return {
|
|
1956
|
+
content: getDefaultSlotPlainText(option),
|
|
1957
|
+
startContent: undefined,
|
|
1958
|
+
endContent: undefined,
|
|
1959
|
+
};
|
|
1960
|
+
}
|
|
1961
|
+
return {
|
|
1962
|
+
content: getOptionContent(option),
|
|
1963
|
+
startContent: (_a = getOptionContent(option, 'start')) !== null && _a !== void 0 ? _a : undefined,
|
|
1964
|
+
endContent: (_b = getOptionContent(option, 'end')) !== null && _b !== void 0 ? _b : undefined,
|
|
1965
|
+
};
|
|
1537
1966
|
};
|
|
1538
1967
|
let selectIds = 0;
|
|
1539
1968
|
const OPTION_CLASS = 'select-interface-option';
|