@ionic/core 8.8.20-dev.11787158518.168a2fea → 8.8.20-dev.11788449221.155f9f1e
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/index.js +1 -1
- package/components/ion-accordion-group.js +1 -1
- package/components/ion-accordion.js +1 -1
- package/components/ion-action-sheet.js +1 -1
- package/components/ion-alert.js +1 -1
- package/components/ion-app.js +1 -1
- package/components/ion-avatar.js +1 -1
- package/components/ion-back-button.js +1 -1
- package/components/ion-backdrop.js +1 -1
- package/components/ion-badge.js +1 -1
- package/components/ion-breadcrumb.js +1 -1
- package/components/ion-breadcrumbs.js +1 -1
- package/components/ion-button.js +1 -1
- package/components/ion-buttons.js +1 -1
- package/components/ion-card-content.js +1 -1
- package/components/ion-card-header.js +1 -1
- package/components/ion-card-subtitle.js +1 -1
- package/components/ion-card-title.js +1 -1
- package/components/ion-card.js +1 -1
- package/components/ion-checkbox.js +1 -1
- package/components/ion-chip.js +1 -1
- package/components/ion-col.js +1 -1
- package/components/ion-content.js +1 -1
- package/components/ion-datetime-button.js +1 -1
- package/components/ion-datetime.js +1 -1
- package/components/ion-divider.d.ts +11 -0
- package/components/ion-divider.js +4 -0
- package/components/ion-fab-button.js +1 -1
- package/components/ion-fab-list.js +1 -1
- package/components/ion-fab.js +1 -1
- package/components/ion-footer.js +1 -1
- package/components/ion-gallery-item.d.ts +11 -0
- package/components/ion-gallery-item.js +4 -0
- package/components/ion-gallery.d.ts +11 -0
- package/components/ion-gallery.js +4 -0
- package/components/ion-grid.js +1 -1
- package/components/ion-header.js +1 -1
- package/components/ion-icon.js +1 -1
- package/components/ion-img.js +1 -1
- package/components/ion-infinite-scroll-content.js +1 -1
- package/components/ion-infinite-scroll.js +1 -1
- package/components/ion-input-otp.js +1 -1
- package/components/ion-input-password-toggle.js +1 -1
- package/components/ion-input.js +1 -1
- package/components/ion-item-divider.js +1 -1
- package/components/ion-item-group.js +1 -1
- package/components/ion-item-option.js +1 -1
- package/components/ion-item-options.js +1 -1
- package/components/ion-item-sliding.js +1 -1
- package/components/ion-item.js +1 -1
- package/components/ion-label.js +1 -1
- package/components/ion-list-header.js +1 -1
- package/components/ion-list.js +1 -1
- package/components/ion-loading.js +1 -1
- package/components/ion-menu-button.js +1 -1
- package/components/ion-menu-toggle.js +1 -1
- package/components/ion-menu.js +1 -1
- package/components/ion-modal.js +1 -1
- package/components/ion-nav-link.js +1 -1
- package/components/ion-nav.js +1 -1
- package/components/ion-note.js +1 -1
- package/components/ion-picker-column-option.js +1 -1
- package/components/ion-picker-column.js +1 -1
- package/components/ion-picker-legacy-column.d.ts +11 -0
- package/components/ion-picker-legacy-column.js +4 -0
- package/components/ion-picker-legacy.d.ts +11 -0
- package/components/ion-picker-legacy.js +4 -0
- package/components/ion-picker.js +1 -1
- package/components/ion-popover.js +1 -1
- package/components/ion-progress-bar.js +1 -1
- package/components/ion-radio-group.js +1 -1
- package/components/ion-radio.js +1 -1
- package/components/ion-range.js +1 -1
- package/components/ion-refresher-content.js +1 -1
- package/components/ion-refresher.js +1 -1
- package/components/ion-reorder-group.js +1 -1
- package/components/ion-reorder.js +1 -1
- package/components/ion-ripple-effect.js +1 -1
- package/components/ion-route-redirect.js +1 -1
- package/components/ion-route.js +1 -1
- package/components/ion-router-link.js +1 -1
- package/components/ion-router-outlet.js +1 -1
- package/components/ion-router.js +1 -1
- package/components/ion-row.js +1 -1
- package/components/ion-searchbar.js +1 -1
- package/components/ion-segment-button.js +1 -1
- package/components/ion-segment-content.js +1 -1
- package/components/ion-segment-view.js +1 -1
- package/components/ion-segment.js +1 -1
- package/components/ion-select-modal.js +1 -1
- package/components/ion-select-option.js +1 -1
- package/components/ion-select-popover.js +1 -1
- package/components/ion-select.js +1 -1
- package/components/ion-skeleton-text.js +1 -1
- package/components/ion-spinner.js +1 -1
- package/components/ion-split-pane.js +1 -1
- package/components/ion-tab-bar.js +1 -1
- package/components/ion-tab-button.js +1 -1
- package/components/ion-tab.js +1 -1
- package/components/ion-tabs.js +1 -1
- package/components/ion-text.js +1 -1
- package/components/ion-textarea.js +1 -1
- package/components/ion-thumbnail.js +1 -1
- package/components/ion-title.js +1 -1
- package/components/ion-toast.js +1 -1
- package/components/ion-toggle.js +1 -1
- package/components/ion-toolbar.js +1 -1
- package/components/{p-DwpKZ6rl.js → p-B2SvA6NE.js} +1 -1
- package/components/p-B39i6rpY.js +4 -0
- package/components/p-B4GJERAm.js +4 -0
- package/components/p-B9_sPaDw.js +4 -0
- package/components/p-BDqjX7Z_.js +4 -0
- package/components/p-BE21dB_a.js +4 -0
- package/components/p-BJyeT56g.js +4 -0
- package/components/p-BLP69XoA.js +4 -0
- package/components/p-BTBa_wH7.js +4 -0
- package/components/p-BTEOs1at.js +4 -0
- package/components/p-BU8Blvqg.js +4 -0
- package/components/p-BUePQFRZ.js +4 -0
- package/components/p-BXjGM4gW.js +4 -0
- package/components/p-BXuZo5-p.js +4 -0
- package/components/p-BYRVyMu9.js +4 -0
- package/components/p-BYSs-jZz.js +4 -0
- package/components/{p-ryyf_ItD.js → p-BZwQa9ey.js} +1 -1
- package/components/p-B_a4XnF2.js +4 -0
- package/components/p-BjW8SOqw.js +4 -0
- package/components/p-BnQAsi91.js +4 -0
- package/components/p-BrF4HSay.js +4 -0
- package/components/p-Bs5kME4N.js +4 -0
- package/components/p-BwKpO3Is.js +4 -0
- package/components/p-BwzRqsq1.js +4 -0
- package/components/p-C0K6CGg9.js +4 -0
- package/components/p-C1L59jNd.js +4 -0
- package/components/p-C3ydXg9O.js +4 -0
- package/components/p-C5F5Zw01.js +4 -0
- package/components/p-C784We0w.js +4 -0
- package/components/p-CA81qANP.js +4 -0
- package/components/p-CEz0vNHD.js +4 -0
- package/components/p-CHB9zWT6.js +4 -0
- package/components/p-CJNsztW3.js +4 -0
- package/components/{p-CMLAwl_N.js → p-CKLXmqy1.js} +1 -1
- package/components/p-CODBQrPj.js +4 -0
- package/components/p-CVYFPBs-.js +4 -0
- package/components/p-CWqLCAML.js +4 -0
- package/components/p-CaB0_AG0.js +4 -0
- package/components/p-CaXMr1SL.js +4 -0
- package/components/p-Cc3oC60a.js +4 -0
- package/components/p-CjlmHeGM.js +4 -0
- package/components/p-CstXr-x9.js +4 -0
- package/components/{p-DzRT60Tw.js → p-Cu8FoYIJ.js} +1 -1
- package/components/p-CxhjkdQ_.js +4 -0
- package/components/p-CxoHM559.js +4 -0
- package/components/p-D0Iqw6OZ.js +4 -0
- package/components/p-D12Xsfh7.js +4 -0
- package/components/p-D1t981Ih.js +4 -0
- package/components/p-D2tZEPGv.js +4 -0
- package/components/p-D6zl6ZA8.js +4 -0
- package/components/p-DExJ63jR.js +4 -0
- package/components/p-DHvfufkW.js +4 -0
- package/components/p-DNweMi32.js +4 -0
- package/components/p-DRUGmlKi.js +4 -0
- package/components/p-DYq-5riI.js +4 -0
- package/components/p-DaJxRxSQ.js +4 -0
- package/components/p-Db3A3kHi.js +4 -0
- package/components/p-Df6AAcu8.js +4 -0
- package/components/p-Dhi5xtNS.js +4 -0
- package/components/{p-63OhffQv.js → p-Di8NbWfs.js} +1 -1
- package/components/p-DkfVuzjA.js +4 -0
- package/components/p-DriGEn08.js +4 -0
- package/components/p-Ds3yn-R0.js +4 -0
- package/components/p-DylrHLJF.js +4 -0
- package/components/p-VrmyB-Wu.js +4 -0
- package/components/p-Wn4ujuPW.js +4 -0
- package/components/p-X6YgGSBf.js +4 -0
- package/components/p-dLA3JnNJ.js +4 -0
- package/components/p-fIOYmaqA.js +4 -0
- package/components/p-o8OKV5aD.js +4 -0
- package/components/p-vUGYs065.js +4 -0
- package/components/p-vXpMhGrs.js +4 -0
- package/css/core.css +1 -1
- package/css/core.css.map +1 -1
- package/css/display.css +1 -1
- package/css/display.css.map +1 -1
- package/css/flex-utils.css +1 -1
- package/css/flex-utils.css.map +1 -1
- package/css/float-elements.css.map +1 -1
- package/css/global.bundle.css.map +1 -1
- package/css/ionic/bundle.ionic.css +1 -0
- package/css/ionic/bundle.ionic.css.map +1 -0
- package/css/ionic/core.ionic.css +1 -0
- package/css/ionic/core.ionic.css.map +1 -0
- package/css/ionic/global.bundle.ionic.css +1 -0
- package/css/ionic/global.bundle.ionic.css.map +1 -0
- package/css/ionic/ionic-swiper.ionic.css +1 -0
- package/css/ionic/ionic-swiper.ionic.css.map +1 -0
- package/css/ionic/link.ionic.css +1 -0
- package/css/ionic/link.ionic.css.map +1 -0
- package/css/ionic/structure.ionic.css +1 -0
- package/css/ionic/structure.ionic.css.map +1 -0
- package/css/ionic/typography.ionic.css +1 -0
- package/css/ionic/typography.ionic.css.map +1 -0
- package/css/ionic/utils.bundle.ionic.css +1 -0
- package/css/ionic/utils.bundle.ionic.css.map +1 -0
- package/css/ionic-swiper.css +1 -1
- package/css/ionic-swiper.css.map +1 -1
- package/css/ionic.bundle.css +1 -1
- package/css/ionic.bundle.css.map +1 -1
- package/css/normalize.css.map +1 -1
- package/css/padding.css.map +1 -1
- package/css/palettes/dark.always.css.map +1 -1
- package/css/palettes/dark.class.css.map +1 -1
- package/css/palettes/dark.system.css.map +1 -1
- package/css/palettes/high-contrast-dark.always.css.map +1 -1
- package/css/palettes/high-contrast-dark.class.css.map +1 -1
- package/css/palettes/high-contrast-dark.system.css.map +1 -1
- package/css/palettes/high-contrast.always.css.map +1 -1
- package/css/palettes/high-contrast.class.css.map +1 -1
- package/css/palettes/high-contrast.system.css.map +1 -1
- package/css/structure.css.map +1 -1
- package/css/text-alignment.css.map +1 -1
- package/css/text-transformation.css.map +1 -1
- package/css/typography.css.map +1 -1
- package/css/utils.bundle.css +1 -1
- package/css/utils.bundle.css.map +1 -1
- package/dist/cjs/{animation-C0mOHzej.js → animation-CxRPIayb.js} +6 -6
- package/dist/cjs/{app-globals-BREG4twP.js → app-globals-BwvlV6g7.js} +1 -1
- package/dist/cjs/{button-active-CVMevT9a.js → button-active-qCQDwE2m.js} +3 -3
- package/dist/cjs/{capacitor-DmA66EwP.js → capacitor-CRl0exFC.js} +3 -3
- package/dist/cjs/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/clear-button-press-controller-C7B9kyMa.js +45 -0
- package/dist/cjs/{config-CjUbvdPW.js → config-DWdFbSNK.js} +4 -5
- package/dist/cjs/{dir-zwDPRE5K.js → dir-DD0jPVH3.js} +3 -2
- package/dist/cjs/{focus-visible-CCvKiLh3.js → focus-visible-BIj-I3-C.js} +24 -0
- package/dist/cjs/{format-pp0Du3K-.js → format-COAsdjOc.js} +30 -40
- package/dist/cjs/{framework-delegate-Dfo5XsGv.js → framework-delegate-IvkF1VuM.js} +10 -6
- package/dist/cjs/{gesture-controller-BDUH7687.js → gesture-controller-dtqlP_q4.js} +8 -15
- package/dist/cjs/{haptic-Ch-X4gRx.js → haptic-DG25gZzb.js} +4 -3
- package/dist/cjs/{helpers-YPQybDph.js → helpers-Dhimwhpn.js} +74 -7
- package/dist/cjs/{index-DwlRtFZe.js → index-BJ2-LydH.js} +3 -9
- package/dist/cjs/{index-zVCah4Uz.js → index-Bsq0SbXc.js} +2 -2
- package/dist/cjs/{index-uvry__L4.js → index-C1knGA9x.js} +65 -33
- package/dist/cjs/{index-wOmugbdg.js → index-CxDnX7hd.js} +2 -0
- package/dist/cjs/{index-DXsPSne6.js → index-DhDV4RxJ.js} +16 -15
- package/dist/cjs/{index-BLdJCcJY.js → index-DuleInoh.js} +5 -5
- package/dist/cjs/{index-B7zJsYWS.js → index-YYUVCfP-.js} +3 -3
- package/dist/cjs/{index-DDg31ZF5.js → index-yon1HGB7.js} +10 -9
- package/dist/cjs/index.cjs.js +18 -18
- package/dist/cjs/{input-shims-Cbu1fcye.js → input-shims-BgJcHtqI.js} +23 -20
- package/dist/cjs/input.utils--RmR5lVe.js +150 -0
- package/dist/cjs/ion-accordion_2.cjs.entry.js +383 -379
- package/dist/cjs/ion-action-sheet.cjs.entry.js +87 -179
- package/dist/cjs/ion-alert.cjs.entry.js +126 -251
- package/dist/cjs/ion-app_8.cjs.entry.js +608 -461
- package/dist/cjs/ion-avatar_3.cjs.entry.js +125 -19
- package/dist/cjs/ion-back-button.cjs.entry.js +50 -65
- package/dist/cjs/ion-backdrop.cjs.entry.js +22 -23
- package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +170 -212
- package/dist/cjs/ion-button_2.cjs.entry.js +118 -153
- package/dist/cjs/ion-card_5.cjs.entry.js +80 -110
- package/dist/cjs/ion-checkbox.cjs.entry.js +130 -164
- package/dist/cjs/ion-chip.cjs.entry.js +56 -21
- package/dist/cjs/ion-col_3.cjs.entry.js +61 -186
- package/dist/cjs/ion-datetime-button.cjs.entry.js +248 -256
- package/dist/cjs/ion-datetime_3.cjs.entry.js +3242 -0
- package/dist/cjs/ion-divider.cjs.entry.js +51 -0
- package/dist/cjs/ion-fab_3.cjs.entry.js +113 -155
- package/dist/cjs/ion-gallery-item.cjs.entry.js +59 -0
- package/dist/cjs/ion-gallery.cjs.entry.js +608 -0
- package/dist/cjs/ion-img.cjs.entry.js +17 -35
- package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +157 -109
- package/dist/cjs/ion-input-otp.cjs.entry.js +437 -435
- package/dist/cjs/ion-input-password-toggle.cjs.entry.js +64 -40
- package/dist/cjs/ion-input.cjs.entry.js +312 -351
- package/dist/cjs/ion-item-option_3.cjs.entry.js +512 -137
- package/dist/cjs/ion-item_8.cjs.entry.js +190 -218
- package/dist/cjs/ion-loading.cjs.entry.js +69 -152
- package/dist/cjs/ion-menu_3.cjs.entry.js +138 -182
- package/dist/cjs/ion-modal.cjs.entry.js +501 -571
- package/dist/cjs/ion-nav_2.cjs.entry.js +164 -104
- package/dist/cjs/ion-picker-column-option.cjs.entry.js +40 -40
- package/dist/cjs/ion-picker-column.cjs.entry.js +410 -422
- package/dist/cjs/ion-picker.cjs.entry.js +401 -406
- package/dist/cjs/ion-popover.cjs.entry.js +212 -324
- package/dist/cjs/ion-progress-bar.cjs.entry.js +48 -36
- package/dist/cjs/ion-radio_2.cjs.entry.js +162 -217
- package/dist/cjs/ion-range.cjs.entry.js +251 -309
- package/dist/cjs/ion-refresher_2.cjs.entry.js +122 -175
- package/dist/cjs/ion-reorder_2.cjs.entry.js +54 -60
- package/dist/cjs/ion-ripple-effect.cjs.entry.js +26 -18
- package/dist/cjs/ion-route_4.cjs.entry.js +76 -179
- package/dist/cjs/ion-searchbar.cjs.entry.js +331 -308
- package/dist/cjs/ion-segment-content.cjs.entry.js +2 -2
- package/dist/cjs/ion-segment-view.cjs.entry.js +27 -28
- package/dist/cjs/ion-segment_2.cjs.entry.js +141 -177
- package/dist/cjs/ion-select-modal.cjs.entry.js +70 -50
- package/dist/cjs/ion-select_3.cjs.entry.js +429 -507
- package/dist/cjs/ion-spinner.cjs.entry.js +36 -28
- package/dist/cjs/ion-split-pane.cjs.entry.js +25 -34
- package/dist/cjs/ion-tab-bar_2.cjs.entry.js +180 -117
- package/dist/cjs/ion-tab_2.cjs.entry.js +30 -55
- package/dist/cjs/ion-text.cjs.entry.js +7 -13
- package/dist/cjs/ion-textarea.cjs.entry.js +310 -303
- package/dist/cjs/ion-toast.cjs.entry.js +170 -265
- package/dist/cjs/ion-toggle.cjs.entry.js +187 -184
- package/dist/cjs/ionic-global-DYLhJaw7.js +519 -0
- package/dist/cjs/ionic.cjs.js +4 -4
- package/dist/cjs/{ios.transition-zTmJz8T-.js → ios.transition-Blgf-vZU.js} +21 -15
- package/dist/cjs/{item-multiple-inputs-BdYSbfKN.js → item-multiple-inputs-DKn76MYO.js} +1 -1
- package/dist/cjs/{keyboard-cHxZlTyz.js → keyboard-BgioTbwQ.js} +3 -3
- package/dist/cjs/{keyboard-Cix5TVkD.js → keyboard-Otnp8OQI.js} +5 -4
- package/dist/cjs/list-a-7GSA6K.js +8 -0
- package/dist/cjs/loader.cjs.js +4 -4
- package/dist/cjs/{md.transition-nb_4pUXu.js → md.transition-ClgvbGfq.js} +11 -9
- package/dist/cjs/notch-controller-0hkmmSGo.js +155 -0
- package/dist/cjs/{overlay-control-label-D2sdL2O8.js → overlay-control-label-DnRLQR1t.js} +13 -11
- package/dist/cjs/{overlays-KaNVDNqC.js → overlays-Bxjqh2m3.js} +336 -60
- package/dist/cjs/scroll-hide-controller-qWMU5yOk.js +345 -0
- package/dist/cjs/{select-option-render-pULCGldr.js → select-option-render-BqJEK1N1.js} +4 -3
- package/dist/cjs/{status-tap-o9IIymsP.js → status-tap-ClA8u57t.js} +5 -4
- package/dist/cjs/{swipe-back-B7X9VOlH.js → swipe-back-4vY7mi8i.js} +6 -5
- package/dist/cjs/{theme-Bw0rpaNN.js → theme-IlOsGAz7.js} +26 -7
- package/dist/cjs/validity-QmuwEptc.js +51 -0
- package/dist/cjs/x-BTF99yFH.js +8 -0
- package/dist/collection/collection-manifest.json +13 -1
- package/dist/collection/components/accordion/accordion.ionic.css +201 -0
- package/dist/collection/components/accordion/accordion.ios.css +73 -58
- package/dist/collection/components/accordion/accordion.js +338 -327
- package/dist/collection/components/accordion/accordion.md.css +67 -59
- package/dist/collection/components/accordion-group/accordion-group.ionic.css +93 -0
- package/dist/collection/components/accordion-group/accordion-group.ios.css +16 -4
- package/dist/collection/components/accordion-group/accordion-group.js +69 -56
- package/dist/collection/components/accordion-group/accordion-group.md.css +22 -4
- package/dist/collection/components/action-sheet/action-sheet.ionic.css +494 -0
- package/dist/collection/components/action-sheet/action-sheet.ios.css +184 -54
- package/dist/collection/components/action-sheet/action-sheet.js +76 -166
- package/dist/collection/components/action-sheet/action-sheet.md.css +179 -55
- package/dist/collection/components/action-sheet/test/basic/fixture.js +0 -3
- package/dist/collection/components/alert/alert.ionic.css +787 -0
- package/dist/collection/components/alert/alert.ios.css +247 -54
- package/dist/collection/components/alert/alert.js +113 -236
- package/dist/collection/components/alert/alert.md.css +243 -56
- package/dist/collection/components/app/app.js +15 -86
- package/dist/collection/components/avatar/avatar.ionic.css +385 -0
- package/dist/collection/components/avatar/avatar.ios.css +7 -33
- package/dist/collection/components/avatar/avatar.js +120 -4
- package/dist/collection/components/avatar/avatar.md.css +51 -0
- package/dist/collection/components/back-button/back-button.ios.css +60 -48
- package/dist/collection/components/back-button/back-button.js +46 -61
- package/dist/collection/components/back-button/back-button.md.css +60 -48
- package/dist/collection/components/backdrop/backdrop.ionic.css +109 -0
- package/dist/collection/components/backdrop/backdrop.ios.css +56 -19
- package/dist/collection/components/backdrop/backdrop.js +26 -22
- package/dist/collection/components/backdrop/backdrop.md.css +56 -19
- package/dist/collection/components/badge/badge.ionic.css +272 -0
- package/dist/collection/components/badge/badge.ios.css +137 -12
- package/dist/collection/components/badge/badge.js +145 -15
- package/dist/collection/components/badge/badge.md.css +122 -12
- package/dist/collection/components/breadcrumb/breadcrumb.ios.css +20 -8
- package/dist/collection/components/breadcrumb/breadcrumb.js +72 -101
- package/dist/collection/components/breadcrumb/breadcrumb.md.css +20 -8
- package/dist/collection/components/breadcrumbs/breadcrumbs.ios.css +6 -0
- package/dist/collection/components/breadcrumbs/breadcrumbs.js +99 -112
- package/dist/collection/components/breadcrumbs/breadcrumbs.md.css +6 -0
- package/dist/collection/components/button/button.ionic.css +644 -0
- package/dist/collection/components/button/button.ios.css +154 -46
- package/dist/collection/components/button/button.js +122 -157
- package/dist/collection/components/button/button.md.css +150 -50
- package/dist/collection/components/buttons/buttons.ionic.css +97 -0
- package/dist/collection/components/buttons/buttons.ios.css +59 -7
- package/dist/collection/components/buttons/buttons.js +29 -21
- package/dist/collection/components/buttons/buttons.md.css +55 -3
- package/dist/collection/components/card/card.ionic.css +144 -0
- package/dist/collection/components/card/card.ios.css +65 -14
- package/dist/collection/components/card/card.js +61 -63
- package/dist/collection/components/card/card.md.css +65 -14
- package/dist/collection/components/card-content/card-content.ionic.css +89 -0
- package/dist/collection/components/card-content/card-content.ios.css +20 -35
- package/dist/collection/components/card-content/card-content.js +12 -10
- package/dist/collection/components/card-content/card-content.md.css +20 -35
- package/dist/collection/components/card-header/card-header.ionic.css +85 -0
- package/dist/collection/components/card-header/card-header.ios.css +27 -15
- package/dist/collection/components/card-header/card-header.js +20 -21
- package/dist/collection/components/card-header/card-header.md.css +27 -15
- package/dist/collection/components/card-subtitle/card-subtitle.ionic.css +144 -0
- package/dist/collection/components/card-subtitle/card-subtitle.ios.css +12 -0
- package/dist/collection/components/card-subtitle/card-subtitle.js +11 -14
- package/dist/collection/components/card-subtitle/card-subtitle.md.css +12 -0
- package/dist/collection/components/card-title/card-title.ios.css +73 -0
- package/dist/collection/components/card-title/card-title.js +11 -14
- package/dist/collection/components/card-title/card-title.md.css +73 -0
- package/dist/collection/components/checkbox/checkbox.ionic.css +543 -0
- package/dist/collection/components/checkbox/checkbox.ios.css +242 -117
- package/dist/collection/components/checkbox/checkbox.js +165 -160
- package/dist/collection/components/checkbox/checkbox.md.css +243 -118
- package/dist/collection/components/chip/chip.ionic.css +217 -0
- package/dist/collection/components/chip/chip.ios.css +67 -14
- package/dist/collection/components/chip/chip.js +116 -20
- package/dist/collection/components/chip/chip.md.css +67 -14
- package/dist/collection/components/col/col.css +192 -4
- package/dist/collection/components/col/col.js +212 -186
- package/dist/collection/components/content/content.css +47 -2
- package/dist/collection/components/content/content.js +78 -102
- package/dist/collection/components/datetime/datetime.ionic.css +703 -0
- package/dist/collection/components/datetime/datetime.ios.css +304 -148
- package/dist/collection/components/datetime/datetime.js +928 -1086
- package/dist/collection/components/datetime/datetime.md.css +294 -138
- package/dist/collection/components/datetime/utils/data.js +19 -18
- package/dist/collection/components/datetime/utils/format.js +11 -21
- package/dist/collection/components/datetime/utils/manipulation.js +8 -8
- package/dist/collection/components/datetime/utils/parse.js +10 -10
- package/dist/collection/components/datetime/utils/state.js +2 -8
- package/dist/collection/components/datetime/utils/validate.js +5 -4
- package/dist/collection/components/datetime-button/datetime-button.ios.css +6 -5
- package/dist/collection/components/datetime-button/datetime-button.js +246 -253
- package/dist/collection/components/datetime-button/datetime-button.md.css +6 -5
- package/dist/collection/components/divider/divider.ionic.css +148 -0
- package/dist/collection/components/divider/divider.ios.css +87 -0
- package/dist/collection/components/divider/divider.js +94 -0
- package/dist/collection/components/divider/divider.md.css +87 -0
- package/dist/collection/components/fab/fab.css +25 -1
- package/dist/collection/components/fab/fab.js +22 -25
- package/dist/collection/components/fab-button/fab-button.ios.css +18 -6
- package/dist/collection/components/fab-button/fab-button.js +83 -117
- package/dist/collection/components/fab-button/fab-button.md.css +20 -8
- package/dist/collection/components/fab-list/fab-list.css +12 -0
- package/dist/collection/components/fab-list/fab-list.js +20 -15
- package/dist/collection/components/footer/footer-interface.js +1 -0
- package/dist/collection/components/footer/footer.ios.css +33 -6
- package/dist/collection/components/footer/footer.js +151 -65
- package/dist/collection/components/footer/footer.md.css +40 -0
- package/dist/collection/components/gallery/gallery-constants.js +12 -0
- package/dist/collection/components/gallery/gallery-interface.js +1 -0
- package/dist/collection/components/gallery/gallery.css +15 -0
- package/dist/collection/components/gallery/gallery.js +679 -0
- package/dist/collection/components/gallery/test/utils.js +100 -0
- package/dist/collection/components/gallery-item/gallery-item.css +49 -0
- package/dist/collection/components/gallery-item/gallery-item.js +99 -0
- package/dist/collection/components/grid/grid.css +12 -0
- package/dist/collection/components/grid/grid.js +15 -9
- package/dist/collection/components/header/header-interface.js +1 -0
- package/dist/collection/components/header/header.ionic.css +250 -0
- package/dist/collection/components/header/header.ios.css +178 -133
- package/dist/collection/components/header/header.js +202 -70
- package/dist/collection/components/header/header.md.css +199 -9
- package/dist/collection/components/header/header.utils.js +6 -13
- package/dist/collection/components/img/img.js +16 -34
- package/dist/collection/components/infinite-scroll/infinite-scroll.js +164 -76
- package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.ios.css +12 -0
- package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.js +19 -30
- package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.md.css +12 -0
- package/dist/collection/components/input/input.ionic.css +891 -0
- package/dist/collection/components/input/input.ios.css +247 -191
- package/dist/collection/components/input/input.js +340 -357
- package/dist/collection/components/input/input.md.css +234 -285
- package/dist/collection/components/input-otp/input-otp.ionic.css +371 -0
- package/dist/collection/components/input-otp/input-otp.ios.css +105 -60
- package/dist/collection/components/input-otp/input-otp.js +437 -432
- package/dist/collection/components/input-otp/input-otp.md.css +105 -60
- package/dist/collection/components/input-password-toggle/input-password-toggle.ionic.css +78 -0
- package/dist/collection/components/input-password-toggle/input-password-toggle.js +60 -37
- package/dist/collection/components/input-password-toggle/input-password-toggle.native.css +61 -0
- package/dist/collection/components/item/item.ionic.css +496 -0
- package/dist/collection/components/item/item.ios.css +120 -80
- package/dist/collection/components/item/item.js +102 -113
- package/dist/collection/components/item/item.md.css +131 -79
- package/dist/collection/components/item-divider/item-divider.ios.css +18 -0
- package/dist/collection/components/item-divider/item-divider.js +21 -23
- package/dist/collection/components/item-divider/item-divider.md.css +18 -0
- package/dist/collection/components/item-group/item-group.ios.css +12 -0
- package/dist/collection/components/item-group/item-group.js +13 -7
- package/dist/collection/components/item-group/item-group.md.css +12 -0
- package/dist/collection/components/item-option/item-option.ionic.css +277 -0
- package/dist/collection/components/item-option/item-option.ios.css +136 -29
- package/dist/collection/components/item-option/item-option.js +92 -56
- package/dist/collection/components/item-option/item-option.md.css +136 -29
- package/dist/collection/components/item-options/item-options.ionic.css +221 -0
- package/dist/collection/components/item-options/item-options.ios.css +77 -34
- package/dist/collection/components/item-options/item-options.js +20 -17
- package/dist/collection/components/item-options/item-options.md.css +77 -34
- package/dist/collection/components/item-sliding/item-sliding.ionic.css +211 -0
- package/dist/collection/components/item-sliding/item-sliding.js +441 -61
- package/dist/collection/components/item-sliding/{item-sliding.css → item-sliding.native.css} +84 -9
- package/dist/collection/components/item-sliding/test/test.utils.js +13 -0
- package/dist/collection/components/label/label.ios.css +18 -0
- package/dist/collection/components/label/label.js +15 -32
- package/dist/collection/components/label/label.md.css +18 -0
- package/dist/collection/components/list/list.ionic.css +212 -0
- package/dist/collection/components/list/list.ios.css +54 -14
- package/dist/collection/components/list/list.js +55 -19
- package/dist/collection/components/list/list.md.css +56 -16
- package/dist/collection/components/list-header/list-header.ionic.css +190 -0
- package/dist/collection/components/list-header/list-header.ios.css +82 -38
- package/dist/collection/components/list-header/list-header.js +11 -18
- package/dist/collection/components/list-header/list-header.md.css +82 -38
- package/dist/collection/components/loading/loading.ios.css +13 -1
- package/dist/collection/components/loading/loading.js +62 -143
- package/dist/collection/components/loading/loading.md.css +13 -1
- package/dist/collection/components/menu/menu.ios.css +15 -3
- package/dist/collection/components/menu/menu.js +71 -108
- package/dist/collection/components/menu/menu.md.css +15 -3
- package/dist/collection/components/menu-button/menu-button.ionic.css +236 -0
- package/dist/collection/components/menu-button/menu-button.ios.css +48 -14
- package/dist/collection/components/menu-button/menu-button.js +45 -38
- package/dist/collection/components/menu-button/menu-button.md.css +49 -15
- package/dist/collection/components/menu-toggle/menu-toggle.js +21 -25
- package/dist/collection/components/modal/animations/ionic.enter.js +40 -0
- package/dist/collection/components/modal/animations/ionic.leave.js +28 -0
- package/dist/collection/components/modal/animations/ios.enter.js +1 -1
- package/dist/collection/components/modal/animations/md.enter.js +1 -1
- package/dist/collection/components/modal/animations/sheet.js +8 -2
- package/dist/collection/components/modal/gestures/sheet.js +86 -32
- package/dist/collection/components/modal/gestures/swipe-to-close.js +3 -15
- package/dist/collection/components/modal/modal.ionic.css +255 -0
- package/dist/collection/components/modal/modal.ios.css +178 -70
- package/dist/collection/components/modal/modal.js +272 -404
- package/dist/collection/components/modal/modal.md.css +178 -70
- package/dist/collection/components/modal/safe-area-utils.js +7 -6
- package/dist/collection/components/modal/test/fixtures.js +0 -3
- package/dist/collection/components/nav/nav.css +7 -1
- package/dist/collection/components/nav/nav.js +256 -72
- package/dist/collection/components/nav/view-controller.js +1 -7
- package/dist/collection/components/nav-link/nav-link.js +14 -21
- package/dist/collection/components/note/note.ios.css +12 -0
- package/dist/collection/components/note/note.js +11 -14
- package/dist/collection/components/note/note.md.css +12 -0
- package/dist/collection/components/picker/picker.ios.css +15 -3
- package/dist/collection/components/picker/picker.js +398 -403
- package/dist/collection/components/picker/picker.md.css +15 -3
- package/dist/collection/components/picker-column/picker-column.css +9 -5
- package/dist/collection/components/picker-column/picker-column.js +409 -418
- package/dist/collection/components/picker-column-option/picker-column-option.ios.css +6 -0
- package/dist/collection/components/picker-column-option/picker-column-option.js +42 -38
- package/dist/collection/components/picker-column-option/picker-column-option.md.css +7 -6
- package/dist/collection/components/picker-legacy/animations/ios.enter.js +27 -0
- package/dist/collection/components/picker-legacy/animations/ios.leave.js +23 -0
- package/dist/collection/components/picker-legacy/picker-interface.js +1 -0
- package/dist/collection/components/picker-legacy/picker.ios.css +312 -0
- package/dist/collection/components/picker-legacy/picker.js +891 -0
- package/dist/collection/components/picker-legacy/picker.md.css +299 -0
- package/dist/collection/components/picker-legacy-column/picker-column.ios.css +243 -0
- package/dist/collection/components/picker-legacy-column/picker-column.js +422 -0
- package/dist/collection/components/picker-legacy-column/picker-column.md.css +234 -0
- package/dist/collection/components/picker-legacy-column/test/test.utils.js +43 -0
- package/dist/collection/components/popover/animations/ios.enter.js +2 -1
- package/dist/collection/components/popover/animations/md.enter.js +2 -1
- package/dist/collection/components/popover/popover.ionic.css +290 -0
- package/dist/collection/components/popover/popover.ios.css +15 -2
- package/dist/collection/components/popover/popover.js +199 -313
- package/dist/collection/components/popover/popover.md.css +15 -2
- package/dist/collection/components/popover/test/fixture.js +0 -1
- package/dist/collection/components/popover/utils.js +6 -4
- package/dist/collection/components/progress-bar/progress-bar.ionic.css +287 -0
- package/dist/collection/components/progress-bar/progress-bar.ios.css +48 -17
- package/dist/collection/components/progress-bar/progress-bar.js +65 -33
- package/dist/collection/components/progress-bar/progress-bar.md.css +48 -17
- package/dist/collection/components/radio/radio.ionic.css +422 -0
- package/dist/collection/components/radio/radio.ios.css +207 -102
- package/dist/collection/components/radio/radio.js +77 -108
- package/dist/collection/components/radio/radio.md.css +207 -102
- package/dist/collection/components/radio-group/radio-group.ionic.css +119 -0
- package/dist/collection/components/radio-group/radio-group.ios.css +43 -19
- package/dist/collection/components/radio-group/radio-group.js +113 -107
- package/dist/collection/components/radio-group/radio-group.md.css +43 -19
- package/dist/collection/components/radio-group/test/fixtures.js +0 -2
- package/dist/collection/components/range/range.ionic.css +567 -0
- package/dist/collection/components/range/range.ios.css +128 -85
- package/dist/collection/components/range/range.js +247 -305
- package/dist/collection/components/range/range.md.css +128 -85
- package/dist/collection/components/refresher/refresher.ios.css +14 -1
- package/dist/collection/components/refresher/refresher.js +88 -117
- package/dist/collection/components/refresher/refresher.md.css +15 -2
- package/dist/collection/components/refresher-content/refresher-content.js +31 -47
- package/dist/collection/components/reorder/reorder.ios.css +6 -0
- package/dist/collection/components/reorder/reorder.js +33 -7
- package/dist/collection/components/reorder/reorder.md.css +6 -0
- package/dist/collection/components/reorder-group/reorder-group.css +6 -0
- package/dist/collection/components/reorder-group/reorder-group.js +22 -47
- package/dist/collection/components/ripple-effect/{ripple-effect.css → ripple-effect.common.css} +7 -1
- package/dist/collection/components/ripple-effect/ripple-effect.ionic.css +215 -0
- package/dist/collection/components/ripple-effect/ripple-effect.js +26 -17
- package/dist/collection/components/route/route.js +14 -39
- package/dist/collection/components/route-redirect/route-redirect.js +0 -31
- package/dist/collection/components/router/router.js +37 -37
- package/dist/collection/components/router/utils/dom.js +7 -25
- package/dist/collection/components/router/utils/matching.js +9 -7
- package/dist/collection/components/router/utils/parser.js +1 -1
- package/dist/collection/components/router/utils/path.js +1 -0
- package/dist/collection/components/router-link/router-link.css +8 -2
- package/dist/collection/components/router-link/router-link.js +19 -40
- package/dist/collection/components/router-outlet/router-outlet.css +7 -1
- package/dist/collection/components/router-outlet/router-outlet.js +25 -83
- package/dist/collection/components/row/row.css +16 -0
- package/dist/collection/components/row/row.js +9 -2
- package/dist/collection/components/searchbar/searchbar.ionic.css +622 -0
- package/dist/collection/components/searchbar/searchbar.ios.css +56 -18
- package/dist/collection/components/searchbar/searchbar.js +380 -321
- package/dist/collection/components/searchbar/searchbar.md.css +56 -18
- package/dist/collection/components/segment/segment.ionic.css +115 -0
- package/dist/collection/components/segment/segment.ios.css +45 -2
- package/dist/collection/components/segment/segment.js +94 -126
- package/dist/collection/components/segment/segment.md.css +45 -2
- package/dist/collection/components/segment-button/segment-button.ionic.css +352 -0
- package/dist/collection/components/segment-button/segment-button.ios.css +146 -105
- package/dist/collection/components/segment-button/segment-button.js +46 -49
- package/dist/collection/components/segment-button/segment-button.md.css +148 -107
- package/dist/collection/components/segment-content/segment-content.js +1 -1
- package/dist/collection/components/segment-view/segment-view.ios.css +6 -0
- package/dist/collection/components/segment-view/segment-view.js +27 -28
- package/dist/collection/components/segment-view/segment-view.md.css +6 -0
- package/dist/collection/components/select/select.ionic.css +809 -0
- package/dist/collection/components/select/select.ios.css +351 -206
- package/dist/collection/components/select/select.js +444 -431
- package/dist/collection/components/select/select.md.css +383 -230
- package/dist/collection/components/select-modal/select-modal.ionic.css +257 -0
- package/dist/collection/components/select-modal/select-modal.ios.css +293 -45
- package/dist/collection/components/select-modal/select-modal.js +79 -37
- package/dist/collection/components/select-modal/select-modal.md.css +273 -43
- package/dist/collection/components/select-modal/test/fixtures.js +1 -8
- package/dist/collection/components/select-option/select-option.js +15 -48
- package/dist/collection/components/select-popover/select-popover.ionic.css +255 -0
- package/dist/collection/components/select-popover/select-popover.ios.css +188 -124
- package/dist/collection/components/select-popover/select-popover.js +37 -44
- package/dist/collection/components/select-popover/select-popover.md.css +228 -47
- package/dist/collection/components/select-popover/test/fixtures.js +1 -8
- package/dist/collection/components/skeleton-text/skeleton-text.css +6 -0
- package/dist/collection/components/skeleton-text/skeleton-text.js +15 -15
- package/dist/collection/components/spinner/{spinner.css → spinner.ionic.css} +78 -10
- package/dist/collection/components/spinner/spinner.js +55 -26
- package/dist/collection/components/spinner/spinner.native.css +199 -0
- package/dist/collection/components/split-pane/split-pane.ios.css +20 -2
- package/dist/collection/components/split-pane/split-pane.js +28 -33
- package/dist/collection/components/split-pane/split-pane.md.css +20 -2
- package/dist/collection/components/tab/tab.js +10 -17
- package/dist/collection/components/tab-bar/tab-bar.ionic.css +249 -0
- package/dist/collection/components/tab-bar/tab-bar.ios.css +86 -43
- package/dist/collection/components/tab-bar/tab-bar.js +190 -44
- package/dist/collection/components/tab-bar/tab-bar.md.css +86 -43
- package/dist/collection/components/tab-button/tab-button.ionic.css +373 -0
- package/dist/collection/components/tab-button/tab-button.ios.css +171 -95
- package/dist/collection/components/tab-button/tab-button.js +74 -68
- package/dist/collection/components/tab-button/tab-button.md.css +137 -93
- package/dist/collection/components/tabs/tabs.css +7 -1
- package/dist/collection/components/tabs/tabs.js +23 -33
- package/dist/collection/components/text/text.css +6 -0
- package/dist/collection/components/text/text.js +7 -12
- package/dist/collection/components/textarea/textarea.ionic.css +898 -0
- package/dist/collection/components/textarea/textarea.ios.css +329 -221
- package/dist/collection/components/textarea/textarea.js +334 -302
- package/dist/collection/components/textarea/textarea.md.css +358 -231
- package/dist/collection/components/thumbnail/thumbnail.css +6 -0
- package/dist/collection/components/thumbnail/thumbnail.js +9 -2
- package/dist/collection/components/title/title.ionic.css +127 -0
- package/dist/collection/components/title/title.ios.css +32 -4
- package/dist/collection/components/title/title.js +13 -23
- package/dist/collection/components/title/title.md.css +39 -4
- package/dist/collection/components/toast/animations/utils.js +1 -1
- package/dist/collection/components/toast/toast.ionic.css +394 -0
- package/dist/collection/components/toast/toast.ios.css +84 -45
- package/dist/collection/components/toast/toast.js +178 -232
- package/dist/collection/components/toast/toast.md.css +84 -45
- package/dist/collection/components/toggle/toggle.ionic.css +512 -0
- package/dist/collection/components/toggle/toggle.ios.css +247 -127
- package/dist/collection/components/toggle/toggle.js +177 -175
- package/dist/collection/components/toggle/toggle.md.css +245 -127
- package/dist/collection/components/toolbar/test/image.svg +1 -0
- package/dist/collection/components/toolbar/toolbar.ionic.css +249 -0
- package/dist/collection/components/toolbar/toolbar.ios.css +90 -47
- package/dist/collection/components/toolbar/toolbar.js +222 -25
- package/dist/collection/components/toolbar/toolbar.md.css +90 -47
- package/dist/collection/global/config.js +6 -4
- package/dist/collection/global/ionic-global.js +242 -20
- package/dist/collection/index.js +1 -1
- package/dist/collection/utils/animation/animation.js +3 -3
- package/dist/collection/utils/config.js +4 -5
- package/dist/collection/utils/css-value-validation.js +39 -0
- package/dist/collection/utils/focus-controller/index.js +1 -1
- package/dist/collection/utils/focus-trap.js +16 -5
- package/dist/collection/utils/focus-visible.js +22 -0
- package/dist/collection/utils/forms/clear-button-press-controller.js +40 -0
- package/dist/collection/utils/forms/index.js +1 -1
- package/dist/collection/utils/forms/validity.js +31 -0
- package/dist/collection/utils/framework-delegate.js +9 -5
- package/dist/collection/utils/gesture/gesture-controller.js +8 -15
- package/dist/collection/utils/gesture/index.js +2 -10
- package/dist/collection/utils/hardware-back-button.js +18 -3
- package/dist/collection/utils/helpers.js +72 -5
- package/dist/collection/utils/input-shims/hacks/scroll-assist.js +5 -4
- package/dist/collection/utils/input-shims/hacks/scroll-data.js +2 -1
- package/dist/collection/utils/keyboard/keyboard-controller.js +8 -6
- package/dist/collection/utils/keyboard/keyboard.js +1 -1
- package/dist/collection/utils/logging/index.js +4 -23
- package/dist/collection/utils/media.js +1 -0
- package/dist/collection/utils/menu-controller/animations/overlay.js +3 -3
- package/dist/collection/utils/menu-controller/animations/push.js +2 -1
- package/dist/collection/utils/menu-controller/animations/reveal.js +2 -1
- package/dist/collection/utils/menu-controller/index.js +2 -1
- package/dist/collection/utils/native/haptic.js +3 -2
- package/dist/collection/utils/native/keyboard.js +2 -2
- package/dist/collection/utils/native/status-bar.js +1 -1
- package/dist/collection/utils/overlay-control-label.js +13 -11
- package/dist/collection/utils/overlays.js +312 -45
- package/dist/collection/utils/platform.js +5 -4
- package/dist/collection/utils/rtl/dir.js +3 -2
- package/dist/collection/utils/sanitization/index.js +2 -2
- package/dist/collection/utils/scroll-hide-controller.js +178 -0
- package/dist/collection/utils/select-option-render.js +2 -1
- package/dist/collection/utils/slot-mutation-controller.js +2 -1
- package/dist/collection/utils/test/playwright/apply-keyboard-focus.js +1 -1
- package/dist/collection/utils/test/playwright/drag-element.js +35 -11
- package/dist/collection/utils/test/playwright/generator.js +51 -25
- package/dist/collection/utils/test/playwright/page/event-spy.js +12 -11
- package/dist/collection/utils/test/playwright/page/utils/goto.js +15 -5
- package/dist/collection/utils/test/playwright/page/utils/set-content.js +27 -4
- package/dist/collection/utils/test/playwright/page/utils/set-ion-viewport.js +3 -2
- package/dist/collection/utils/test/press-keys.js +17 -10
- package/dist/collection/utils/theme.js +26 -7
- package/dist/collection/utils/transition/ios.transition.js +14 -9
- package/dist/collection/utils/transition/md.transition.js +4 -3
- package/dist/docs.json +10038 -534
- package/dist/esm/{animation-CGFdmGk9.js → animation-BsVixxLP.js} +5 -5
- package/dist/esm/{app-globals-CYmMeGdU.js → app-globals-rPvWQFXp.js} +1 -1
- package/dist/esm/{button-active-BDOsVAiZ.js → button-active-BS8YgJRD.js} +3 -3
- package/dist/esm/{capacitor-CFERIeaU.js → capacitor-BnXrCBvt.js} +1 -1
- package/dist/esm/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/clear-button-press-controller-Ci6Q_x5-.js +43 -0
- package/dist/esm/{config-DWCzVL3Y.js → config-BwKpO3Is.js} +4 -5
- package/dist/esm/{dir-Dojwmvde.js → dir-o8OKV5aD.js} +3 -2
- package/dist/esm/{focus-visible-BmVRXR1y.js → focus-visible-vXpMhGrs.js} +23 -1
- package/dist/esm/{format-Dcwga61t.js → format-2WlZcMvG.js} +31 -41
- package/dist/esm/{framework-delegate-BHTU2Ip9.js → framework-delegate-P5K_3uYw.js} +10 -6
- package/dist/esm/{gesture-controller-TXPDHL13.js → gesture-controller-BTEOs1at.js} +8 -15
- package/dist/esm/{haptic-Cq4UAeka.js → haptic-ByW74Ow9.js} +4 -3
- package/dist/esm/{helpers-CAGf8Wgp.js → helpers-ChPZH7zh.js} +74 -8
- package/dist/esm/{index-BvabGprD.js → index-B4Kq2YNk.js} +2 -1
- package/dist/esm/{index-DcPaH5uL.js → index-Bck1OwMs.js} +3 -9
- package/dist/esm/{index-ChhhtsGZ.js → index-C0EQceqV.js} +66 -34
- package/dist/esm/{index-Clc-28O1.js → index-C7EAbm0C.js} +5 -4
- package/dist/esm/{index-CqneaaGd.js → index-C7F1yJyV.js} +13 -12
- package/dist/esm/{index-WlteAIqz.js → index-CXSPjEca.js} +5 -5
- package/dist/esm/{index-CKM1DdGm.js → index-Mq5pCWmZ.js} +3 -3
- package/dist/esm/{index-T0JxBI8V.js → index-niemeDYi.js} +2 -2
- package/dist/esm/index.js +17 -18
- package/dist/esm/{input-shims-B8sfni1e.js → input-shims-CM5m0K8T.js} +15 -12
- package/dist/esm/input.utils-DhJNJPiU.js +147 -0
- package/dist/esm/ion-accordion_2.entry.js +383 -379
- package/dist/esm/ion-action-sheet.entry.js +87 -179
- package/dist/esm/ion-alert.entry.js +126 -251
- package/dist/esm/ion-app_8.entry.js +607 -460
- package/dist/esm/ion-avatar_3.entry.js +125 -19
- package/dist/esm/ion-back-button.entry.js +50 -65
- package/dist/esm/ion-backdrop.entry.js +22 -23
- package/dist/esm/ion-breadcrumb_2.entry.js +170 -212
- package/dist/esm/ion-button_2.entry.js +118 -153
- package/dist/esm/ion-card_5.entry.js +80 -110
- package/dist/esm/ion-checkbox.entry.js +130 -164
- package/dist/esm/ion-chip.entry.js +56 -21
- package/dist/esm/ion-col_3.entry.js +61 -186
- package/dist/esm/ion-datetime-button.entry.js +248 -256
- package/dist/esm/ion-datetime_3.entry.js +3238 -0
- package/dist/esm/ion-divider.entry.js +49 -0
- package/dist/esm/ion-fab_3.entry.js +113 -155
- package/dist/esm/ion-gallery-item.entry.js +57 -0
- package/dist/esm/ion-gallery.entry.js +606 -0
- package/dist/esm/ion-img.entry.js +17 -35
- package/dist/esm/ion-infinite-scroll_2.entry.js +157 -109
- package/dist/esm/ion-input-otp.entry.js +437 -435
- package/dist/esm/ion-input-password-toggle.entry.js +64 -40
- package/dist/esm/ion-input.entry.js +310 -349
- package/dist/esm/ion-item-option_3.entry.js +512 -137
- package/dist/esm/ion-item_8.entry.js +190 -218
- package/dist/esm/ion-loading.entry.js +69 -152
- package/dist/esm/ion-menu_3.entry.js +138 -182
- package/dist/esm/ion-modal.entry.js +459 -529
- package/dist/esm/ion-nav_2.entry.js +164 -104
- package/dist/esm/ion-picker-column-option.entry.js +40 -40
- package/dist/esm/ion-picker-column.entry.js +410 -422
- package/dist/esm/ion-picker.entry.js +401 -406
- package/dist/esm/ion-popover.entry.js +212 -324
- package/dist/esm/ion-progress-bar.entry.js +48 -36
- package/dist/esm/ion-radio_2.entry.js +162 -217
- package/dist/esm/ion-range.entry.js +251 -309
- package/dist/esm/ion-refresher_2.entry.js +122 -175
- package/dist/esm/ion-reorder_2.entry.js +54 -60
- package/dist/esm/ion-ripple-effect.entry.js +26 -18
- package/dist/esm/ion-route_4.entry.js +76 -179
- package/dist/esm/ion-searchbar.entry.js +331 -308
- package/dist/esm/ion-segment-content.entry.js +2 -2
- package/dist/esm/ion-segment-view.entry.js +27 -28
- package/dist/esm/ion-segment_2.entry.js +141 -177
- package/dist/esm/ion-select-modal.entry.js +70 -50
- package/dist/esm/ion-select_3.entry.js +429 -507
- package/dist/esm/ion-spinner.entry.js +36 -28
- package/dist/esm/ion-split-pane.entry.js +25 -34
- package/dist/esm/ion-tab-bar_2.entry.js +179 -116
- package/dist/esm/ion-tab_2.entry.js +30 -55
- package/dist/esm/ion-text.entry.js +7 -13
- package/dist/esm/ion-textarea.entry.js +309 -302
- package/dist/esm/ion-toast.entry.js +149 -244
- package/dist/esm/ion-toggle.entry.js +187 -184
- package/dist/esm/ionic-global-BJDU78B6.js +508 -0
- package/dist/esm/ionic.js +5 -5
- package/dist/esm/{ios.transition-DXRCmcbC.js → ios.transition-6oGu53GR.js} +21 -15
- package/dist/esm/{item-multiple-inputs-rU8VaNNg.js → item-multiple-inputs-C6onMFOo.js} +1 -1
- package/dist/esm/{keyboard-Cj8mLJeq.js → keyboard-XukEYIFf.js} +5 -4
- package/dist/esm/{keyboard-DAF8GNJ9.js → keyboard-x-uHYVoq.js} +3 -3
- package/dist/esm/list-Dhi5xtNS.js +6 -0
- package/dist/esm/loader.js +5 -5
- package/dist/esm/{md.transition-BMngO4i_.js → md.transition-Dy5HxiSE.js} +11 -9
- package/dist/esm/notch-controller-BYB7mUMg.js +153 -0
- package/dist/esm/{overlay-control-label-BSQPZ79H.js → overlay-control-label-CODBQrPj.js} +13 -11
- package/dist/esm/{overlays-CPmIs9Ls.js → overlays-C3YvaMgX.js} +333 -57
- package/dist/esm/scroll-hide-controller-B3MRYNXh.js +342 -0
- package/dist/esm/{select-option-render-C4m76VGH.js → select-option-render-BlKZ2H83.js} +4 -3
- package/dist/esm/{status-tap-CHB7KwIb.js → status-tap-DK-ylvU7.js} +5 -4
- package/dist/esm/{swipe-back-C9HW1bug.js → swipe-back-DFICtpMC.js} +6 -5
- package/dist/esm/theme-DaJxRxSQ.js +67 -0
- package/dist/esm/validity-BjW8SOqw.js +48 -0
- package/dist/esm/x-BDqjX7Z_.js +6 -0
- package/dist/html.html-data.json +2690 -123
- package/dist/ionic/index.esm.js +1 -1
- package/dist/ionic/ionic.esm.js +1 -1
- package/dist/ionic/p--sroV-k-.js +4 -0
- package/dist/ionic/p-0166d6e5.entry.js +4 -0
- package/dist/ionic/p-0a0a66e2.entry.js +4 -0
- package/dist/ionic/p-0ac15b5f.entry.js +4 -0
- package/dist/ionic/p-0c636ad3.entry.js +4 -0
- package/dist/ionic/p-126031d2.entry.js +4 -0
- package/dist/ionic/p-1a609156.entry.js +4 -0
- package/dist/ionic/p-1b473bad.entry.js +4 -0
- package/dist/ionic/p-1c1c18da.entry.js +4 -0
- package/dist/ionic/p-1ce65194.entry.js +4 -0
- package/dist/ionic/p-1febf200.entry.js +4 -0
- package/dist/ionic/p-2016c1c0.entry.js +4 -0
- package/dist/ionic/p-2365483a.entry.js +4 -0
- package/dist/ionic/p-296226f1.entry.js +4 -0
- package/dist/ionic/p-2a54aec2.entry.js +4 -0
- package/dist/ionic/p-2bf60b77.entry.js +4 -0
- package/dist/ionic/p-2e0184c0.entry.js +4 -0
- package/dist/ionic/p-2e1d650a.entry.js +4 -0
- package/dist/ionic/p-316eed75.entry.js +4 -0
- package/dist/ionic/p-31a0c9c2.entry.js +4 -0
- package/dist/ionic/p-40a21a22.entry.js +4 -0
- package/dist/ionic/p-431bc3ce.entry.js +4 -0
- package/dist/ionic/p-51542c69.entry.js +4 -0
- package/dist/ionic/p-5dedd699.entry.js +4 -0
- package/dist/ionic/p-68e453f7.entry.js +4 -0
- package/dist/ionic/p-711ba315.entry.js +4 -0
- package/dist/ionic/p-731d11e1.entry.js +4 -0
- package/dist/ionic/p-75c7595c.entry.js +4 -0
- package/dist/ionic/p-76232f5f.entry.js +4 -0
- package/dist/ionic/p-7cbf17f0.entry.js +4 -0
- package/dist/ionic/p-7f59020c.entry.js +4 -0
- package/dist/ionic/p-7k7Q1A38.js +4 -0
- package/dist/ionic/p-8303462c.entry.js +4 -0
- package/dist/ionic/p-9db78e5c.entry.js +4 -0
- package/dist/ionic/p-B4Kq2YNk.js +4 -0
- package/dist/ionic/p-BDqjX7Z_.js +4 -0
- package/dist/ionic/p-BFhQ1N-L.js +4 -0
- package/dist/ionic/p-BG7tpRhR.js +4 -0
- package/dist/ionic/p-BITyMTKr.js +4 -0
- package/dist/ionic/p-BRPONI7N.js +4 -0
- package/dist/ionic/p-BTEOs1at.js +4 -0
- package/dist/ionic/p-BVdSuKmt.js +4 -0
- package/dist/ionic/p-BYRVyMu9.js +4 -0
- package/dist/ionic/p-BYSs-jZz.js +4 -0
- package/dist/ionic/p-BjW8SOqw.js +4 -0
- package/dist/ionic/p-Bpx1lBiP.js +4 -0
- package/dist/ionic/p-BwKpO3Is.js +4 -0
- package/dist/ionic/p-C-BLhfUi.js +4 -0
- package/dist/ionic/p-C-aO35cw.js +4 -0
- package/dist/ionic/p-C0EQceqV.js +5 -0
- package/dist/ionic/p-CDrQfM-I.js +4 -0
- package/dist/ionic/p-CODBQrPj.js +4 -0
- package/dist/ionic/p-CTSaffvS.js +4 -0
- package/dist/ionic/p-CaM5HwzM.js +4 -0
- package/dist/ionic/p-CgaW5Zy8.js +4 -0
- package/dist/ionic/p-Cipl19Qe.js +4 -0
- package/dist/ionic/p-CnBfCmL2.js +4 -0
- package/dist/ionic/p-D-Xit5Ye.js +4 -0
- package/dist/ionic/p-D1t981Ih.js +4 -0
- package/dist/ionic/p-D7LIC84Z.js +4 -0
- package/dist/ionic/p-D844sgjq.js +4 -0
- package/dist/ionic/p-DWDKFjrH.js +4 -0
- package/dist/ionic/p-DaJxRxSQ.js +4 -0
- package/dist/ionic/p-Dhi5xtNS.js +4 -0
- package/dist/ionic/p-DhyWlGap.js +4 -0
- package/dist/ionic/p-DiyY-i-5.js +4 -0
- package/dist/ionic/p-DrxPmT9E.js +4 -0
- package/dist/ionic/p-YIsE5bNG.js +4 -0
- package/dist/ionic/p-a37444b3.entry.js +4 -0
- package/dist/ionic/p-a9df0ccf.entry.js +4 -0
- package/dist/ionic/p-ac3af8af.entry.js +4 -0
- package/dist/ionic/p-b25f3aba.entry.js +4 -0
- package/dist/ionic/p-b3da2cc7.entry.js +4 -0
- package/dist/ionic/p-b4533070.entry.js +4 -0
- package/dist/ionic/p-b4901bce.entry.js +4 -0
- package/dist/ionic/p-bb7bb4fd.entry.js +4 -0
- package/dist/ionic/p-be06def7.entry.js +4 -0
- package/dist/ionic/p-c0983eac.entry.js +4 -0
- package/dist/ionic/p-c4ebdfd2.entry.js +4 -0
- package/dist/ionic/p-c4ed1e18.entry.js +4 -0
- package/dist/ionic/p-d9ac7a0d.entry.js +4 -0
- package/dist/ionic/p-dc8a8505.entry.js +4 -0
- package/dist/ionic/p-ddc41dbb.entry.js +4 -0
- package/dist/ionic/p-de4e8418.entry.js +4 -0
- package/dist/ionic/p-df642ef5.entry.js +4 -0
- package/dist/ionic/p-e086f8c3.entry.js +4 -0
- package/dist/ionic/p-edd8f490.entry.js +4 -0
- package/dist/ionic/p-f0968c91.entry.js +4 -0
- package/dist/ionic/p-f6768728.entry.js +4 -0
- package/dist/ionic/p-fIOYmaqA.js +4 -0
- package/dist/ionic/p-fc726f4a.entry.js +4 -0
- package/dist/ionic/p-ff74cf5d.entry.js +4 -0
- package/dist/ionic/p-i6iV8hMy.js +4 -0
- package/dist/ionic/p-nUlpIttM.js +4 -0
- package/dist/ionic/p-o8OKV5aD.js +4 -0
- package/dist/ionic/p-vXpMhGrs.js +4 -0
- package/dist/ionic/p-zRFin7iz.js +4 -0
- package/dist/ionic/p-zn4qAQ_d.js +4 -0
- package/dist/types/components/accordion/accordion.d.ts +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-interface.d.ts +1 -0
- package/dist/types/components/footer/footer.d.ts +20 -3
- package/dist/types/components/gallery/gallery-constants.d.ts +9 -0
- package/dist/types/components/gallery/gallery-interface.d.ts +10 -0
- package/dist/types/components/gallery/gallery.d.ts +218 -0
- package/dist/types/components/gallery/test/utils.d.ts +3 -0
- package/dist/types/components/gallery-item/gallery-item.d.ts +33 -0
- package/dist/types/components/grid/grid.d.ts +4 -0
- package/dist/types/components/header/header-interface.d.ts +1 -0
- package/dist/types/components/header/header.d.ts +26 -3
- package/dist/types/components/header/header.utils.d.ts +4 -5
- package/dist/types/components/img/img.d.ts +2 -1
- package/dist/types/components/infinite-scroll/infinite-scroll.d.ts +21 -0
- package/dist/types/components/infinite-scroll-content/infinite-scroll-content.d.ts +4 -0
- package/dist/types/components/input/input.d.ts +40 -17
- package/dist/types/components/input-otp/input-otp.d.ts +37 -0
- package/dist/types/components/input-password-toggle/input-password-toggle.d.ts +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 -16
- package/dist/types/components/modal/modal.d.ts +15 -12
- package/dist/types/components/nav/nav-interface.d.ts +10 -1
- package/dist/types/components/nav/nav.d.ts +27 -3
- package/dist/types/components/nav-link/nav-link.d.ts +4 -0
- package/dist/types/components/note/note.d.ts +2 -1
- package/dist/types/components/picker/picker.d.ts +2 -1
- package/dist/types/components/picker-column/picker-column.d.ts +2 -1
- package/dist/types/components/picker-column-option/picker-column-option.d.ts +4 -0
- package/dist/types/components/picker-legacy/animations/ios.enter.d.ts +5 -0
- package/dist/types/components/picker-legacy/animations/ios.leave.d.ts +5 -0
- package/dist/types/components/picker-legacy/picker-interface.d.ts +52 -0
- package/dist/types/components/picker-legacy/picker.d.ts +159 -0
- package/dist/types/components/picker-legacy-column/picker-column.d.ts +46 -0
- package/dist/types/components/picker-legacy-column/test/test.utils.d.ts +9 -0
- package/dist/types/components/popover/popover-interface.d.ts +3 -6
- package/dist/types/components/popover/popover.d.ts +6 -5
- package/dist/types/components/progress-bar/progress-bar.d.ts +10 -1
- package/dist/types/components/radio/radio.d.ts +2 -1
- package/dist/types/components/radio-group/radio-group.d.ts +12 -0
- package/dist/types/components/range/range.d.ts +2 -1
- package/dist/types/components/refresher/refresher.d.ts +2 -1
- package/dist/types/components/refresher-content/refresher-content.d.ts +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 +5 -1
- package/dist/types/components/router/router.d.ts +4 -0
- package/dist/types/components/router-link/router-link.d.ts +4 -0
- package/dist/types/components/router-outlet/router-outlet.d.ts +4 -8
- package/dist/types/components/row/row.d.ts +4 -0
- package/dist/types/components/searchbar/searchbar.d.ts +57 -11
- package/dist/types/components/segment/segment.d.ts +2 -1
- package/dist/types/components/segment-button/segment-button.d.ts +2 -1
- package/dist/types/components/select/select.d.ts +55 -26
- package/dist/types/components/select-modal/select-modal.d.ts +8 -0
- package/dist/types/components/select-option/select-option.d.ts +7 -4
- package/dist/types/components/select-popover/select-popover.d.ts +3 -0
- package/dist/types/components/skeleton-text/skeleton-text.d.ts +4 -0
- package/dist/types/components/spinner/spinner.d.ts +15 -0
- package/dist/types/components/split-pane/split-pane.d.ts +4 -0
- package/dist/types/components/tab/tab.d.ts +4 -0
- package/dist/types/components/tab-bar/tab-bar-interface.d.ts +1 -0
- package/dist/types/components/tab-bar/tab-bar.d.ts +41 -3
- package/dist/types/components/tab-button/tab-button.d.ts +12 -1
- package/dist/types/components/tabs/tabs.d.ts +3 -0
- package/dist/types/components/text/text.d.ts +2 -1
- package/dist/types/components/textarea/textarea.d.ts +58 -16
- package/dist/types/components/thumbnail/thumbnail.d.ts +4 -0
- package/dist/types/components/title/title.d.ts +4 -0
- package/dist/types/components/toast/animations/utils.d.ts +2 -2
- package/dist/types/components/toast/toast-interface.d.ts +3 -7
- package/dist/types/components/toast/toast.d.ts +19 -2
- package/dist/types/components/toggle/toggle.d.ts +15 -1
- package/dist/types/components/toolbar/toolbar.d.ts +43 -3
- package/dist/types/components.d.ts +2171 -263
- package/dist/types/global/ionic-global.d.ts +28 -2
- package/dist/types/index.d.ts +1 -1
- package/dist/types/interface.d.ts +4 -0
- package/dist/types/utils/config.d.ts +114 -3
- package/dist/types/utils/css-value-validation.d.ts +21 -0
- package/dist/types/utils/focus-trap.d.ts +1 -1
- package/dist/types/utils/focus-visible.d.ts +13 -0
- package/dist/types/utils/forms/clear-button-press-controller.d.ts +20 -0
- package/dist/types/utils/forms/index.d.ts +1 -1
- package/dist/types/utils/forms/validity.d.ts +7 -0
- package/dist/types/utils/helpers.d.ts +22 -0
- package/dist/types/utils/logging/index.d.ts +1 -2
- package/dist/types/utils/overlay-control-label.d.ts +11 -9
- package/dist/types/utils/overlays-interface.d.ts +31 -1
- package/dist/types/utils/overlays.d.ts +10 -12
- package/dist/types/utils/scroll-hide-controller.d.ts +56 -0
- package/dist/types/utils/test/playwright/drag-element.d.ts +16 -3
- package/dist/types/utils/test/playwright/generator.d.ts +31 -2
- package/dist/types/utils/test/playwright/playwright-page.d.ts +1 -1
- package/dist/types/utils/test/playwright/testExpect.d.ts +1 -1
- package/dist/types/utils/theme.d.ts +9 -0
- package/hydrate/index.js +12136 -10495
- package/hydrate/index.mjs +12136 -10495
- package/package.json +17 -56
- package/components/p--m5cCjbK.js +0 -4
- package/components/p-1jI5oW-W.js +0 -4
- package/components/p-8FN7p701.js +0 -4
- package/components/p-B4uHHhPK.js +0 -4
- package/components/p-BMPN55of.js +0 -4
- package/components/p-BNJOu1Q2.js +0 -4
- package/components/p-BOvLNVKq.js +0 -4
- package/components/p-BSQPZ79H.js +0 -4
- package/components/p-BeamQXHF.js +0 -4
- package/components/p-BhamHSw3.js +0 -4
- package/components/p-Bjig0DJK.js +0 -4
- package/components/p-BjluhQMI.js +0 -4
- package/components/p-BlsIikdZ.js +0 -4
- package/components/p-BmVRXR1y.js +0 -4
- package/components/p-BqPNzJf6.js +0 -4
- package/components/p-BrD9Xv62.js +0 -4
- package/components/p-BvJqoZ5R.js +0 -4
- package/components/p-Bz6z3Asd.js +0 -4
- package/components/p-C5KYjZWD.js +0 -4
- package/components/p-C6HnVvHO.js +0 -4
- package/components/p-C7jvh5Wy.js +0 -4
- package/components/p-C9BGR5fy.js +0 -4
- package/components/p-CB-y1CdP.js +0 -4
- package/components/p-CEW4RXZO.js +0 -4
- package/components/p-CHH3loEE.js +0 -4
- package/components/p-CIGNaXM1.js +0 -4
- package/components/p-CJKUWjmg.js +0 -4
- package/components/p-C_phlPMC.js +0 -4
- package/components/p-CbhUdtjf.js +0 -4
- package/components/p-CejmQs3h.js +0 -4
- package/components/p-CtZqa4HM.js +0 -4
- package/components/p-D7-vHX0A.js +0 -4
- package/components/p-D9qIVSWm.js +0 -4
- package/components/p-DD5fQ4EQ.js +0 -4
- package/components/p-DE-3iMNW.js +0 -4
- package/components/p-DFvZn99E.js +0 -4
- package/components/p-DHFt2rdc.js +0 -4
- package/components/p-DJztqcrH.js +0 -4
- package/components/p-DM-PrAoh.js +0 -4
- package/components/p-DSzSbVP2.js +0 -4
- package/components/p-DV85C0e0.js +0 -4
- package/components/p-DWCzVL3Y.js +0 -4
- package/components/p-D_RCyzwu.js +0 -4
- package/components/p-D_tD8r3L.js +0 -4
- package/components/p-DaA_8eqt.js +0 -4
- package/components/p-DjCtLZbF.js +0 -4
- package/components/p-Dmd2xqCe.js +0 -4
- package/components/p-Dojwmvde.js +0 -4
- package/components/p-G0TxqHfe.js +0 -4
- package/components/p-G6JR-cr_.js +0 -4
- package/components/p-GG5GhznE.js +0 -4
- package/components/p-LpMHEu3v.js +0 -4
- package/components/p-TXPDHL13.js +0 -4
- package/components/p-UIBJkZf8.js +0 -4
- package/components/p-ZjP4CjeZ.js +0 -4
- package/components/p-_IKFD3ID.js +0 -4
- package/components/p-byZM6qHV.js +0 -4
- package/components/p-dKq2jIum.js +0 -4
- package/components/p-fruGqVHh.js +0 -4
- package/components/p-iYhH60Tc.js +0 -4
- package/components/p-ia3IDdJS.js +0 -4
- package/dist/cjs/hardware-back-button-fqpYh-kd.js +0 -121
- package/dist/cjs/index-DkNv4J_i.js +0 -10
- package/dist/cjs/input.utils-BZdMWVrt.js +0 -35
- package/dist/cjs/ion-datetime.cjs.entry.js +0 -2770
- package/dist/cjs/ionic-global-k6hOWWpn.js +0 -156
- package/dist/cjs/keyboard-controller-PtZoN2GS.js +0 -167
- package/dist/cjs/slot-mutation-controller-DPHmqXdV.js +0 -397
- package/dist/cjs/validity-BpS37YFM.js +0 -19
- package/dist/collection/utils/forms/start-container-controller.js +0 -132
- package/dist/esm/hardware-back-button-gLJHMX_F.js +0 -115
- package/dist/esm/index-ZjP4CjeZ.js +0 -7
- package/dist/esm/input.utils-B1ValN_N.js +0 -33
- package/dist/esm/ion-datetime.entry.js +0 -2768
- package/dist/esm/ionic-global-BVB7BrLT.js +0 -151
- package/dist/esm/keyboard-controller-DEwoa1ev.js +0 -165
- package/dist/esm/slot-mutation-controller-DiE_C9un.js +0 -393
- package/dist/esm/theme-byZM6qHV.js +0 -48
- package/dist/esm/validity-DJztqcrH.js +0 -17
- package/dist/ionic/p-06ec7136.entry.js +0 -4
- package/dist/ionic/p-09fe4fa3.entry.js +0 -4
- package/dist/ionic/p-10d45a07.entry.js +0 -4
- package/dist/ionic/p-208c8a07.entry.js +0 -4
- package/dist/ionic/p-212474fa.entry.js +0 -4
- package/dist/ionic/p-2eef1396.entry.js +0 -4
- package/dist/ionic/p-347e005d.entry.js +0 -4
- package/dist/ionic/p-3a0b3f1d.entry.js +0 -4
- package/dist/ionic/p-3b071259.entry.js +0 -4
- package/dist/ionic/p-40424a88.entry.js +0 -4
- package/dist/ionic/p-4204184c.entry.js +0 -4
- package/dist/ionic/p-47464391.entry.js +0 -4
- package/dist/ionic/p-4eOQC00Z.js +0 -4
- package/dist/ionic/p-4f9c9126.entry.js +0 -4
- package/dist/ionic/p-5JsKPLJD.js +0 -4
- package/dist/ionic/p-5bc485c6.entry.js +0 -4
- package/dist/ionic/p-603a61e6.entry.js +0 -4
- package/dist/ionic/p-60576951.entry.js +0 -4
- package/dist/ionic/p-67a81d33.entry.js +0 -4
- package/dist/ionic/p-6affb775.entry.js +0 -4
- package/dist/ionic/p-6f120c25.entry.js +0 -4
- package/dist/ionic/p-71c82b60.entry.js +0 -4
- package/dist/ionic/p-79325ffe.entry.js +0 -4
- package/dist/ionic/p-7CBuOvEo.js +0 -4
- package/dist/ionic/p-7e4d51fa.entry.js +0 -4
- package/dist/ionic/p-7f5d4664.entry.js +0 -4
- package/dist/ionic/p-80ee82fc.entry.js +0 -4
- package/dist/ionic/p-84af7dbc.entry.js +0 -4
- package/dist/ionic/p-89ca830a.entry.js +0 -4
- package/dist/ionic/p-93b8ec8f.entry.js +0 -4
- package/dist/ionic/p-946f65c2.entry.js +0 -4
- package/dist/ionic/p-9c4b39fb.entry.js +0 -4
- package/dist/ionic/p-B1NEZUzQ.js +0 -4
- package/dist/ionic/p-B1ck5iy-.js +0 -4
- package/dist/ionic/p-B4FrqdW0.js +0 -4
- package/dist/ionic/p-BB0LlG4y.js +0 -4
- package/dist/ionic/p-BMPN55of.js +0 -4
- package/dist/ionic/p-BSQPZ79H.js +0 -4
- package/dist/ionic/p-BYEAtHr-.js +0 -4
- package/dist/ionic/p-BhamHSw3.js +0 -4
- package/dist/ionic/p-BmVRXR1y.js +0 -4
- package/dist/ionic/p-BvabGprD.js +0 -4
- package/dist/ionic/p-C-94tAim.js +0 -4
- package/dist/ionic/p-C-eHZMYE.js +0 -4
- package/dist/ionic/p-CBR_W98Z.js +0 -4
- package/dist/ionic/p-CBWAXjA5.js +0 -4
- package/dist/ionic/p-CIGNaXM1.js +0 -4
- package/dist/ionic/p-CMRtMbJc.js +0 -4
- package/dist/ionic/p-CPcPmkGv.js +0 -4
- package/dist/ionic/p-CaRuIadB.js +0 -4
- package/dist/ionic/p-Cdjxf_yg.js +0 -4
- package/dist/ionic/p-ChhhtsGZ.js +0 -5
- package/dist/ionic/p-CzS1qWve.js +0 -4
- package/dist/ionic/p-D5t_-oMk.js +0 -4
- package/dist/ionic/p-D94_RztK.js +0 -4
- package/dist/ionic/p-DJztqcrH.js +0 -4
- package/dist/ionic/p-DWCzVL3Y.js +0 -4
- package/dist/ionic/p-DjjfauRM.js +0 -4
- package/dist/ionic/p-DkUB-ROc.js +0 -4
- package/dist/ionic/p-Dn0mqQ_R.js +0 -4
- package/dist/ionic/p-Dojwmvde.js +0 -4
- package/dist/ionic/p-DplOqGUv.js +0 -4
- package/dist/ionic/p-Dst_XmZh.js +0 -4
- package/dist/ionic/p-T71k3C35.js +0 -4
- package/dist/ionic/p-TXPDHL13.js +0 -4
- package/dist/ionic/p-UIBJkZf8.js +0 -4
- package/dist/ionic/p-ZjP4CjeZ.js +0 -4
- package/dist/ionic/p-a438b193.entry.js +0 -4
- package/dist/ionic/p-babaaaa7.entry.js +0 -4
- package/dist/ionic/p-be08d500.entry.js +0 -4
- package/dist/ionic/p-be9a4f51.entry.js +0 -4
- package/dist/ionic/p-byZM6qHV.js +0 -4
- package/dist/ionic/p-c00d3092.entry.js +0 -4
- package/dist/ionic/p-c36dc8f5.entry.js +0 -4
- package/dist/ionic/p-c72a7e17.entry.js +0 -4
- package/dist/ionic/p-c8edd88c.entry.js +0 -4
- package/dist/ionic/p-ce0e380b.entry.js +0 -4
- package/dist/ionic/p-ce32912b.entry.js +0 -4
- package/dist/ionic/p-d07cf130.entry.js +0 -4
- package/dist/ionic/p-d27edeb3.entry.js +0 -4
- package/dist/ionic/p-d5d2c506.entry.js +0 -4
- package/dist/ionic/p-d5e31ca9.entry.js +0 -4
- package/dist/ionic/p-de91444f.entry.js +0 -4
- package/dist/ionic/p-ded69ceb.entry.js +0 -4
- package/dist/ionic/p-df72866d.entry.js +0 -4
- package/dist/ionic/p-e47e3151.entry.js +0 -4
- package/dist/ionic/p-e621e5e8.entry.js +0 -4
- package/dist/ionic/p-eea9cf93.entry.js +0 -4
- package/dist/ionic/p-f402f5a4.entry.js +0 -4
- package/dist/ionic/p-fe1bfbcf.entry.js +0 -4
- package/dist/ionic/p-ffb90460.entry.js +0 -4
- package/dist/types/utils/forms/start-container-controller.d.ts +0 -34
- /package/dist/collection/components/{input-password-toggle/input-password-toggle.css → refresher-content/refresher-content.css} +0 -0
|
@@ -1,23 +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";
|
|
5
6
|
import { ENABLE_HTML_CONTENT_DEFAULT } from "../../utils/config";
|
|
6
|
-
import { compareOptions, createNotchController,
|
|
7
|
-
import {
|
|
7
|
+
import { compareOptions, createNotchController, isOptionSelected, checkInvalidState } from "../../utils/forms/index";
|
|
8
|
+
import { suppressFocusVisible, renderHiddenInput, inheritAttributes } from "../../utils/helpers";
|
|
8
9
|
import { printIonWarning } from "../../utils/logging/index";
|
|
9
10
|
import { actionSheetController, alertController, popoverController, modalController } from "../../utils/overlays";
|
|
10
11
|
import { isRTL } from "../../utils/rtl/index";
|
|
11
12
|
import { reflectPropertiesToAttributes, sanitizeDOMTree } from "../../utils/sanitization/index";
|
|
12
|
-
import { createSlotMutationController } from "../../utils/slot-mutation-controller";
|
|
13
13
|
import { createColorClasses, hostContext } from "../../utils/theme";
|
|
14
14
|
import { watchForOptions } from "../../utils/watch-options";
|
|
15
15
|
import { caretDownSharp, chevronExpand } from "ionicons/icons";
|
|
16
16
|
import { config } from "../../global/config";
|
|
17
|
-
import {
|
|
17
|
+
import { getIonTheme } from "../../global/ionic-global";
|
|
18
18
|
// TODO(FW-2832): types
|
|
19
19
|
/**
|
|
20
|
-
* @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.
|
|
21
22
|
*
|
|
22
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.
|
|
23
24
|
* @slot start - Content to display at the leading edge of the select.
|
|
@@ -33,244 +34,154 @@ import { getIonMode } from "../../global/ionic-global";
|
|
|
33
34
|
* @part error-text - Supporting text displayed beneath the select when the select is invalid and touched.
|
|
34
35
|
* @part bottom - The container element for helper text, error text, and counter.
|
|
35
36
|
* @part wrapper - The clickable label element that wraps the entire form field (label text, slots, selected values or placeholder, and toggle icons).
|
|
36
|
-
* @part
|
|
37
|
-
* @part control - The wrapper element containing the label and native select control. When the label is not floating or stacked, this part also contains the dropdown icon.
|
|
38
|
-
* @part end - The wrapper element for the content in the end slot. When the label is floating or stacked, this part also contains the dropdown icon.
|
|
37
|
+
* @part inner - The inner element of the wrapper that manages the slots, selected values or placeholder, and toggle icons.
|
|
39
38
|
*/
|
|
40
39
|
export class Select {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
*/
|
|
177
|
-
toggleIcon;
|
|
178
|
-
/**
|
|
179
|
-
* The toggle icon to show when the select is open. If defined, the icon
|
|
180
|
-
* rotation behavior in `md` mode will be disabled. If undefined, `toggleIcon`
|
|
181
|
-
* will be used for when the select is both open and closed.
|
|
182
|
-
*/
|
|
183
|
-
expandedIcon;
|
|
184
|
-
/**
|
|
185
|
-
* The shape of the select. If "round" it will have an increased border radius.
|
|
186
|
-
*/
|
|
187
|
-
shape;
|
|
188
|
-
/**
|
|
189
|
-
* The value of the select.
|
|
190
|
-
*/
|
|
191
|
-
value;
|
|
192
|
-
/**
|
|
193
|
-
* If true, screen readers will announce it as a required field. This property
|
|
194
|
-
* works only for accessibility purposes, it will not prevent the form from
|
|
195
|
-
* submitting if the value is invalid.
|
|
196
|
-
*/
|
|
197
|
-
required = false;
|
|
198
|
-
/**
|
|
199
|
-
* Emitted when the value has changed.
|
|
200
|
-
*
|
|
201
|
-
* This event will not emit when programmatically setting the `value` property.
|
|
202
|
-
*/
|
|
203
|
-
ionChange;
|
|
204
|
-
/**
|
|
205
|
-
* Emitted when the selection is cancelled.
|
|
206
|
-
*/
|
|
207
|
-
ionCancel;
|
|
208
|
-
/**
|
|
209
|
-
* Emitted when the overlay is dismissed.
|
|
210
|
-
*/
|
|
211
|
-
ionDismiss;
|
|
212
|
-
/**
|
|
213
|
-
* Emitted when the select has focus.
|
|
214
|
-
*/
|
|
215
|
-
ionFocus;
|
|
216
|
-
/**
|
|
217
|
-
* Emitted when the select loses focus.
|
|
218
|
-
*/
|
|
219
|
-
ionBlur;
|
|
220
|
-
/**
|
|
221
|
-
* Emitted when the styles change.
|
|
222
|
-
* @internal
|
|
223
|
-
*/
|
|
224
|
-
ionStyle;
|
|
40
|
+
constructor() {
|
|
41
|
+
this.inputId = `ion-sel-${selectIds++}`;
|
|
42
|
+
this.helperTextId = `${this.inputId}-helper-text`;
|
|
43
|
+
this.errorTextId = `${this.inputId}-error-text`;
|
|
44
|
+
this.inheritedAttributes = {};
|
|
45
|
+
this.customHTMLEnabled = config.get('innerHTMLTemplatesEnabled', ENABLE_HTML_CONTENT_DEFAULT);
|
|
46
|
+
this.isExpanded = false;
|
|
47
|
+
/**
|
|
48
|
+
* The `hasFocus` state ensures the focus class is
|
|
49
|
+
* added regardless of how the element is focused.
|
|
50
|
+
* The `ion-focused` class only applies when focused
|
|
51
|
+
* via tabbing, not by clicking.
|
|
52
|
+
* The `has-focus` logic was added to ensure the class
|
|
53
|
+
* is applied in both cases.
|
|
54
|
+
*/
|
|
55
|
+
this.hasFocus = false;
|
|
56
|
+
/**
|
|
57
|
+
* Track validation state for proper aria-live announcements.
|
|
58
|
+
*/
|
|
59
|
+
this.isInvalid = false;
|
|
60
|
+
/**
|
|
61
|
+
* The text to display on the cancel button.
|
|
62
|
+
*/
|
|
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;
|
|
72
|
+
/**
|
|
73
|
+
* If `true`, the user cannot interact with the select.
|
|
74
|
+
*/
|
|
75
|
+
this.disabled = false;
|
|
76
|
+
/**
|
|
77
|
+
* The interface the select should use: `action-sheet`, `popover`, `alert`, or `modal`.
|
|
78
|
+
*/
|
|
79
|
+
this.interface = 'alert';
|
|
80
|
+
/**
|
|
81
|
+
* Any additional options that the `alert`, `action-sheet` or `popover` interface
|
|
82
|
+
* can take. See the [ion-alert docs](./alert), the
|
|
83
|
+
* [ion-action-sheet docs](./action-sheet), the
|
|
84
|
+
* [ion-popover docs](./popover), and the [ion-modal docs](./modal) for the
|
|
85
|
+
* create options for each interface.
|
|
86
|
+
*
|
|
87
|
+
* Note: `interfaceOptions` will not override `inputs` or `buttons` with the `alert` interface.
|
|
88
|
+
*/
|
|
89
|
+
this.interfaceOptions = {};
|
|
90
|
+
/**
|
|
91
|
+
* Where to place the label relative to the select.
|
|
92
|
+
* `"start"`: The label will appear to the left of the select in LTR and to the right in RTL.
|
|
93
|
+
* `"end"`: The label will appear to the right of the select in LTR and to the left in RTL.
|
|
94
|
+
* `"floating"`: The label will appear smaller and above the select when the select is focused or it has a value. Otherwise it will appear on top of the select.
|
|
95
|
+
* `"stacked"`: The label will appear smaller and above the select regardless even when the select is blurred or has no value.
|
|
96
|
+
* `"fixed"`: The label has the same behavior as `"start"` except it also has a fixed width. Long text will be truncated with ellipses ("...").
|
|
97
|
+
* When using `"floating"` or `"stacked"` we recommend initializing the select with either a `value` or a `placeholder`.
|
|
98
|
+
*/
|
|
99
|
+
this.labelPlacement = 'start';
|
|
100
|
+
/**
|
|
101
|
+
* If `true`, the select can accept multiple values.
|
|
102
|
+
*/
|
|
103
|
+
this.multiple = false;
|
|
104
|
+
/**
|
|
105
|
+
* The name of the control, which is submitted with the form data.
|
|
106
|
+
*/
|
|
107
|
+
this.name = this.inputId;
|
|
108
|
+
/**
|
|
109
|
+
* The text to display on the ok button.
|
|
110
|
+
*/
|
|
111
|
+
this.okText = 'OK';
|
|
112
|
+
/**
|
|
113
|
+
* If true, screen readers will announce it as a required field. This property
|
|
114
|
+
* works only for accessibility purposes, it will not prevent the form from
|
|
115
|
+
* submitting if the value is invalid.
|
|
116
|
+
*/
|
|
117
|
+
this.required = false;
|
|
118
|
+
this.onClick = (ev) => {
|
|
119
|
+
const target = ev.target;
|
|
120
|
+
const closestSlot = target.closest('[slot="start"], [slot="end"]');
|
|
121
|
+
if (target === this.el || closestSlot === null) {
|
|
122
|
+
this.setFocus();
|
|
123
|
+
this.open(ev);
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
/**
|
|
127
|
+
* Prevent clicks to the start/end slots from opening the select.
|
|
128
|
+
* We ensure the target isn't this element in case the select is slotted
|
|
129
|
+
* in, for example, an item. This would prevent the select from ever
|
|
130
|
+
* being opened since the element itself has slot="start"/"end".
|
|
131
|
+
*
|
|
132
|
+
* Clicking a slotted element also causes a click
|
|
133
|
+
* on the <label> element (since it wraps the slots).
|
|
134
|
+
* Clicking <label> dispatches another click event on
|
|
135
|
+
* the native form control that then bubbles up to this
|
|
136
|
+
* listener. This additional event targets the host
|
|
137
|
+
* element, so the select overlay is opened.
|
|
138
|
+
*
|
|
139
|
+
* When the slotted elements are clicked (and therefore
|
|
140
|
+
* the ancestor <label> element) we want to prevent the label
|
|
141
|
+
* from dispatching another click event.
|
|
142
|
+
*
|
|
143
|
+
* Do not call stopPropagation() because this will cause
|
|
144
|
+
* click handlers on the slotted elements to never fire in React.
|
|
145
|
+
* When developers do onClick in React a native "click" listener
|
|
146
|
+
* is added on the root element, not the slotted element. When that
|
|
147
|
+
* native click listener fires, React then dispatches the synthetic
|
|
148
|
+
* click event on the slotted element. However, if stopPropagation
|
|
149
|
+
* is called then the native click event will never bubble up
|
|
150
|
+
* to the root element.
|
|
151
|
+
*/
|
|
152
|
+
ev.preventDefault();
|
|
153
|
+
}
|
|
154
|
+
};
|
|
155
|
+
this.onFocus = () => {
|
|
156
|
+
this.hasFocus = true;
|
|
157
|
+
this.ionFocus.emit();
|
|
158
|
+
};
|
|
159
|
+
this.onBlur = () => {
|
|
160
|
+
this.hasFocus = false;
|
|
161
|
+
this.ionBlur.emit();
|
|
162
|
+
};
|
|
163
|
+
/**
|
|
164
|
+
* Stops propagation when the label is clicked,
|
|
165
|
+
* otherwise, two clicks will be triggered.
|
|
166
|
+
*/
|
|
167
|
+
this.onLabelClick = (ev) => {
|
|
168
|
+
// Only stop propagation if the click was directly on the label
|
|
169
|
+
// and not on the input or other child elements
|
|
170
|
+
if (ev.target === ev.currentTarget) {
|
|
171
|
+
ev.stopPropagation();
|
|
172
|
+
}
|
|
173
|
+
};
|
|
174
|
+
}
|
|
225
175
|
styleChanged() {
|
|
226
176
|
this.emitStyle();
|
|
227
177
|
}
|
|
228
178
|
setValue(value) {
|
|
229
|
-
if (this.isValueEqual(this.value, value)) {
|
|
230
|
-
return;
|
|
231
|
-
}
|
|
232
179
|
this.value = value;
|
|
233
180
|
this.ionChange.emit({ value });
|
|
234
181
|
}
|
|
235
|
-
isValueEqual(currentValue, newValue) {
|
|
236
|
-
if (this.multiple) {
|
|
237
|
-
const currentArr = Array.isArray(currentValue) ? currentValue : [];
|
|
238
|
-
const newArr = Array.isArray(newValue) ? newValue : [];
|
|
239
|
-
if (currentArr.length !== newArr.length) {
|
|
240
|
-
return false;
|
|
241
|
-
}
|
|
242
|
-
// Multiset compare: each new value must match a distinct current value.
|
|
243
|
-
// A plain `every(isOptionSelected)` would accept ['a','a'] as equal to
|
|
244
|
-
// ['a','b'] when both 'a' and 'b' map to options whose values overlap.
|
|
245
|
-
const remaining = currentArr.slice();
|
|
246
|
-
return newArr.every((val) => {
|
|
247
|
-
const idx = remaining.findIndex((c) => compareOptions(c, val, this.compareWith));
|
|
248
|
-
if (idx === -1) {
|
|
249
|
-
return false;
|
|
250
|
-
}
|
|
251
|
-
remaining.splice(idx, 1);
|
|
252
|
-
return true;
|
|
253
|
-
});
|
|
254
|
-
}
|
|
255
|
-
if (currentValue == null && newValue == null) {
|
|
256
|
-
return true;
|
|
257
|
-
}
|
|
258
|
-
if (currentValue == null || newValue == null) {
|
|
259
|
-
return false;
|
|
260
|
-
}
|
|
261
|
-
return compareOptions(currentValue, newValue, this.compareWith);
|
|
262
|
-
}
|
|
263
182
|
async connectedCallback() {
|
|
264
183
|
const { el } = this;
|
|
265
|
-
this.slotMutationController = createSlotMutationController(el, ['label', 'start', 'end'], () => {
|
|
266
|
-
this.startContainerController?.calculateStartContainerWidth();
|
|
267
|
-
forceUpdate(this);
|
|
268
|
-
});
|
|
269
184
|
this.notchController = createNotchController(el, () => this.notchSpacerEl, () => this.labelSlot);
|
|
270
|
-
this.startContainerController = createStartContainerController(el, () => this.startContainerEl, () => {
|
|
271
|
-
return Build.isBrowser && getIonMode(this) === 'md' && this.fill === 'outline';
|
|
272
|
-
});
|
|
273
|
-
this.startContainerController.calculateStartContainerWidth();
|
|
274
185
|
this.updateOverlayOptions();
|
|
275
186
|
this.emitStyle();
|
|
276
187
|
this.mutationO = watchForOptions(this.el, 'ion-select-option', async () => {
|
|
@@ -342,18 +253,10 @@ export class Select {
|
|
|
342
253
|
this.mutationO.disconnect();
|
|
343
254
|
this.mutationO = undefined;
|
|
344
255
|
}
|
|
345
|
-
if (this.slotMutationController) {
|
|
346
|
-
this.slotMutationController.destroy();
|
|
347
|
-
this.slotMutationController = undefined;
|
|
348
|
-
}
|
|
349
256
|
if (this.notchController) {
|
|
350
257
|
this.notchController.destroy();
|
|
351
258
|
this.notchController = undefined;
|
|
352
259
|
}
|
|
353
|
-
if (this.startContainerController) {
|
|
354
|
-
this.startContainerController.destroy();
|
|
355
|
-
this.startContainerController = undefined;
|
|
356
|
-
}
|
|
357
260
|
// Clean up validation observer to prevent memory leaks.
|
|
358
261
|
if (this.validationObserver) {
|
|
359
262
|
this.validationObserver.disconnect();
|
|
@@ -375,44 +278,65 @@ export class Select {
|
|
|
375
278
|
// Add logic to scroll selected item into view before presenting
|
|
376
279
|
const scrollSelectedIntoView = () => {
|
|
377
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;
|
|
378
286
|
if (indexOfSelected > -1) {
|
|
379
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
|
+
*/
|
|
380
296
|
if (selectedItem) {
|
|
381
|
-
/**
|
|
382
|
-
* Browsers such as Firefox do not
|
|
383
|
-
* correctly delegate focus when manually
|
|
384
|
-
* focusing an element with delegatesFocus.
|
|
385
|
-
* We work around this by manually focusing
|
|
386
|
-
* the interactive element.
|
|
387
|
-
* ion-radio and ion-checkbox are the only
|
|
388
|
-
* elements that ion-select-popover uses, so
|
|
389
|
-
* we only need to worry about those two components
|
|
390
|
-
* when focusing.
|
|
391
|
-
*/
|
|
392
297
|
const interactiveEl = selectedItem.querySelector('ion-radio, ion-checkbox');
|
|
393
298
|
if (interactiveEl) {
|
|
394
299
|
selectedItem.scrollIntoView({ block: 'nearest' });
|
|
395
|
-
// Needs to be called before `focusVisibleElement` to prevent issue with focus event bubbling
|
|
396
|
-
// and removing `ion-focused` style
|
|
397
|
-
interactiveEl.setFocus();
|
|
398
300
|
}
|
|
399
|
-
|
|
301
|
+
optionToFocus = interactiveEl !== null && interactiveEl !== void 0 ? interactiveEl : selectedItem;
|
|
400
302
|
}
|
|
401
303
|
}
|
|
402
304
|
else {
|
|
403
305
|
/**
|
|
404
306
|
* If no value is set then focus the first enabled option.
|
|
405
307
|
*/
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
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();
|
|
416
340
|
}
|
|
417
341
|
}
|
|
418
342
|
};
|
|
@@ -512,7 +436,8 @@ export class Select {
|
|
|
512
436
|
const isSelected = isOptionSelected(selectValue, value, this.compareWith);
|
|
513
437
|
const { content, startContent, endContent } = extractOptionContent(option, this.customHTMLEnabled);
|
|
514
438
|
return {
|
|
515
|
-
|
|
439
|
+
role: isSelected ? 'selected' : '',
|
|
440
|
+
text: content !== null && content !== void 0 ? content : '',
|
|
516
441
|
cssClass: optClass,
|
|
517
442
|
disabled: option.disabled,
|
|
518
443
|
handler: () => {
|
|
@@ -549,7 +474,7 @@ export class Select {
|
|
|
549
474
|
return {
|
|
550
475
|
type: inputType,
|
|
551
476
|
cssClass: optClass,
|
|
552
|
-
label: content
|
|
477
|
+
label: content !== null && content !== void 0 ? content : '',
|
|
553
478
|
value,
|
|
554
479
|
checked: isOptionSelected(selectValue, value, this.compareWith),
|
|
555
480
|
disabled: option.disabled,
|
|
@@ -572,7 +497,7 @@ export class Select {
|
|
|
572
497
|
const optClass = `${OPTION_CLASS} ${copyClasses}`;
|
|
573
498
|
const { content, startContent, endContent } = extractOptionContent(option, this.customHTMLEnabled);
|
|
574
499
|
return {
|
|
575
|
-
text: content
|
|
500
|
+
text: content !== null && content !== void 0 ? content : '',
|
|
576
501
|
cssClass: optClass,
|
|
577
502
|
value,
|
|
578
503
|
checked: isOptionSelected(selectValue, value, this.compareWith),
|
|
@@ -595,8 +520,8 @@ export class Select {
|
|
|
595
520
|
async openPopover(ev) {
|
|
596
521
|
const { fill, labelPlacement } = this;
|
|
597
522
|
const interfaceOptions = this.interfaceOptions;
|
|
598
|
-
const
|
|
599
|
-
const showBackdrop =
|
|
523
|
+
const theme = getIonTheme(this);
|
|
524
|
+
const showBackdrop = theme === 'md' ? false : true;
|
|
600
525
|
const multiple = this.multiple;
|
|
601
526
|
const value = this.value;
|
|
602
527
|
let event = ev;
|
|
@@ -607,7 +532,7 @@ export class Select {
|
|
|
607
532
|
* when using a fill in MD mode or if the
|
|
608
533
|
* label is floating/stacked.
|
|
609
534
|
*/
|
|
610
|
-
if (hasFloatingOrStackedLabel || (
|
|
535
|
+
if (hasFloatingOrStackedLabel || (theme === 'md' && fill !== undefined)) {
|
|
611
536
|
size = 'cover';
|
|
612
537
|
/**
|
|
613
538
|
* Otherwise the popover
|
|
@@ -616,43 +541,34 @@ export class Select {
|
|
|
616
541
|
*/
|
|
617
542
|
}
|
|
618
543
|
else {
|
|
619
|
-
event = {
|
|
620
|
-
...ev,
|
|
621
|
-
detail: {
|
|
544
|
+
event = Object.assign(Object.assign({}, ev), { detail: {
|
|
622
545
|
ionShadowTarget: this.nativeWrapperEl,
|
|
623
|
-
}
|
|
624
|
-
};
|
|
546
|
+
} });
|
|
625
547
|
}
|
|
626
548
|
const options = this.createOverlaySelectOptions(this.childOpts, value);
|
|
627
|
-
const hasRichContent = options.some((opt) =>
|
|
628
|
-
const popoverOpts = {
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
alignment: 'center',
|
|
632
|
-
size,
|
|
633
|
-
showBackdrop,
|
|
634
|
-
...interfaceOptions,
|
|
635
|
-
component: 'ion-select-popover',
|
|
636
|
-
cssClass: [
|
|
549
|
+
const hasRichContent = options.some((opt) => opt.startContent || opt.endContent || opt.description);
|
|
550
|
+
const popoverOpts = Object.assign(Object.assign({ theme,
|
|
551
|
+
event, alignment: 'center', size,
|
|
552
|
+
showBackdrop }, interfaceOptions), { component: 'ion-select-popover', cssClass: [
|
|
637
553
|
'select-popover',
|
|
638
554
|
hasRichContent ? 'select-popover-rich-content' : undefined,
|
|
639
555
|
interfaceOptions.cssClass,
|
|
640
|
-
],
|
|
641
|
-
componentProps: {
|
|
556
|
+
], componentProps: {
|
|
642
557
|
header: interfaceOptions.header,
|
|
643
558
|
subHeader: interfaceOptions.subHeader,
|
|
644
559
|
message: interfaceOptions.message,
|
|
645
560
|
multiple,
|
|
646
561
|
value,
|
|
647
562
|
options,
|
|
648
|
-
}
|
|
649
|
-
};
|
|
563
|
+
} });
|
|
650
564
|
/**
|
|
651
565
|
* Workaround for Stencil to autodefine
|
|
652
566
|
* ion-select-popover and ion-popover when
|
|
653
567
|
* using Custom Elements build.
|
|
654
568
|
*/
|
|
569
|
+
// eslint-disable-next-line
|
|
655
570
|
if (false) {
|
|
571
|
+
// eslint-disable-next-line
|
|
656
572
|
// @ts-ignore
|
|
657
573
|
document.createElement('ion-select-popover');
|
|
658
574
|
document.createElement('ion-popover');
|
|
@@ -660,20 +576,17 @@ export class Select {
|
|
|
660
576
|
return popoverController.create(popoverOpts);
|
|
661
577
|
}
|
|
662
578
|
async openActionSheet() {
|
|
663
|
-
const
|
|
579
|
+
const theme = getIonTheme(this);
|
|
664
580
|
const interfaceOptions = this.interfaceOptions;
|
|
665
|
-
const actionSheetOpts = {
|
|
666
|
-
mode,
|
|
667
|
-
...interfaceOptions,
|
|
668
|
-
buttons: this.createActionSheetButtons(this.childOpts, this.value),
|
|
669
|
-
cssClass: ['select-action-sheet', interfaceOptions.cssClass],
|
|
670
|
-
};
|
|
581
|
+
const actionSheetOpts = Object.assign(Object.assign({ theme }, interfaceOptions), { buttons: this.createActionSheetButtons(this.childOpts, this.value), cssClass: ['select-action-sheet', interfaceOptions.cssClass] });
|
|
671
582
|
/**
|
|
672
583
|
* Workaround for Stencil to autodefine
|
|
673
584
|
* ion-action-sheet when
|
|
674
585
|
* using Custom Elements build.
|
|
675
586
|
*/
|
|
587
|
+
// eslint-disable-next-line
|
|
676
588
|
if (false) {
|
|
589
|
+
// eslint-disable-next-line
|
|
677
590
|
// @ts-ignore
|
|
678
591
|
document.createElement('ion-action-sheet');
|
|
679
592
|
}
|
|
@@ -682,13 +595,8 @@ export class Select {
|
|
|
682
595
|
async openAlert() {
|
|
683
596
|
const interfaceOptions = this.interfaceOptions;
|
|
684
597
|
const inputType = this.multiple ? 'checkbox' : 'radio';
|
|
685
|
-
const
|
|
686
|
-
const alertOpts = {
|
|
687
|
-
mode,
|
|
688
|
-
...interfaceOptions,
|
|
689
|
-
header: interfaceOptions.header ? interfaceOptions.header : this.labelText,
|
|
690
|
-
inputs: this.createAlertInputs(this.childOpts, inputType, this.value),
|
|
691
|
-
buttons: [
|
|
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: [
|
|
692
600
|
{
|
|
693
601
|
text: this.cancelText,
|
|
694
602
|
role: 'cancel',
|
|
@@ -702,19 +610,19 @@ export class Select {
|
|
|
702
610
|
this.setValue(selectedValues);
|
|
703
611
|
},
|
|
704
612
|
},
|
|
705
|
-
],
|
|
706
|
-
cssClass: [
|
|
613
|
+
], cssClass: [
|
|
707
614
|
'select-alert',
|
|
708
615
|
interfaceOptions.cssClass,
|
|
709
616
|
this.multiple ? 'multiple-select-alert' : 'single-select-alert',
|
|
710
|
-
]
|
|
711
|
-
};
|
|
617
|
+
] });
|
|
712
618
|
/**
|
|
713
619
|
* Workaround for Stencil to autodefine
|
|
714
620
|
* ion-alert when
|
|
715
621
|
* using Custom Elements build.
|
|
716
622
|
*/
|
|
623
|
+
// eslint-disable-next-line
|
|
717
624
|
if (false) {
|
|
625
|
+
// eslint-disable-next-line
|
|
718
626
|
// @ts-ignore
|
|
719
627
|
document.createElement('ion-alert');
|
|
720
628
|
}
|
|
@@ -722,26 +630,23 @@ export class Select {
|
|
|
722
630
|
}
|
|
723
631
|
openModal() {
|
|
724
632
|
const { multiple, value, interfaceOptions } = this;
|
|
725
|
-
const
|
|
726
|
-
const modalOpts = {
|
|
727
|
-
...interfaceOptions,
|
|
728
|
-
mode,
|
|
729
|
-
cssClass: ['select-modal', interfaceOptions.cssClass],
|
|
730
|
-
component: 'ion-select-modal',
|
|
731
|
-
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: {
|
|
732
635
|
header: interfaceOptions.header,
|
|
733
636
|
cancelText: this.cancelText,
|
|
637
|
+
cancelIcon: this.cancelIcon,
|
|
734
638
|
multiple,
|
|
735
639
|
value,
|
|
736
640
|
options: this.createOverlaySelectOptions(this.childOpts, value),
|
|
737
|
-
}
|
|
738
|
-
};
|
|
641
|
+
} });
|
|
739
642
|
/**
|
|
740
643
|
* Workaround for Stencil to autodefine
|
|
741
644
|
* ion-select-modal and ion-modal when
|
|
742
645
|
* using Custom Elements build.
|
|
743
646
|
*/
|
|
647
|
+
// eslint-disable-next-line
|
|
744
648
|
if (false) {
|
|
649
|
+
// eslint-disable-next-line
|
|
745
650
|
// @ts-ignore
|
|
746
651
|
document.createElement('ion-select-modal');
|
|
747
652
|
document.createElement('ion-modal');
|
|
@@ -807,51 +712,18 @@ export class Select {
|
|
|
807
712
|
};
|
|
808
713
|
this.ionStyle.emit(style);
|
|
809
714
|
}
|
|
810
|
-
|
|
811
|
-
const
|
|
812
|
-
const
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
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;
|
|
816
721
|
}
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
* Prevent clicks to the start/end slots from opening the select.
|
|
820
|
-
* We ensure the target isn't this element in case the select is slotted
|
|
821
|
-
* in, for example, an item. This would prevent the select from ever
|
|
822
|
-
* being opened since the element itself has slot="start"/"end".
|
|
823
|
-
*
|
|
824
|
-
* Clicking a slotted element also causes a click
|
|
825
|
-
* on the <label> element (since it wraps the slots).
|
|
826
|
-
* Clicking <label> dispatches another click event on
|
|
827
|
-
* the native form control that then bubbles up to this
|
|
828
|
-
* listener. This additional event targets the host
|
|
829
|
-
* element, so the select overlay is opened.
|
|
830
|
-
*
|
|
831
|
-
* When the slotted elements are clicked (and therefore
|
|
832
|
-
* the ancestor <label> element) we want to prevent the label
|
|
833
|
-
* from dispatching another click event.
|
|
834
|
-
*
|
|
835
|
-
* Do not call stopPropagation() because this will cause
|
|
836
|
-
* click handlers on the slotted elements to never fire in React.
|
|
837
|
-
* When developers do onClick in React a native "click" listener
|
|
838
|
-
* is added on the root element, not the slotted element. When that
|
|
839
|
-
* native click listener fires, React then dispatches the synthetic
|
|
840
|
-
* click event on the slotted element. However, if stopPropagation
|
|
841
|
-
* is called then the native click event will never bubble up
|
|
842
|
-
* to the root element.
|
|
843
|
-
*/
|
|
844
|
-
ev.preventDefault();
|
|
722
|
+
if (size === undefined) {
|
|
723
|
+
return 'medium';
|
|
845
724
|
}
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
this.hasFocus = true;
|
|
849
|
-
this.ionFocus.emit();
|
|
850
|
-
};
|
|
851
|
-
onBlur = () => {
|
|
852
|
-
this.hasFocus = false;
|
|
853
|
-
this.ionBlur.emit();
|
|
854
|
-
};
|
|
725
|
+
return size;
|
|
726
|
+
}
|
|
855
727
|
renderLabel() {
|
|
856
728
|
const { label } = this;
|
|
857
729
|
return (h("div", { class: {
|
|
@@ -860,8 +732,8 @@ export class Select {
|
|
|
860
732
|
}, part: "label" }, label === undefined ? h("slot", { name: "label" }) : h("div", { class: "label-text" }, label)));
|
|
861
733
|
}
|
|
862
734
|
componentDidRender() {
|
|
863
|
-
|
|
864
|
-
this.
|
|
735
|
+
var _a;
|
|
736
|
+
(_a = this.notchController) === null || _a === void 0 ? void 0 : _a.calculateNotchWidth();
|
|
865
737
|
}
|
|
866
738
|
/**
|
|
867
739
|
* Gets any content passed into the `label` slot,
|
|
@@ -880,24 +752,33 @@ export class Select {
|
|
|
880
752
|
return this.label !== undefined || this.labelSlot !== null;
|
|
881
753
|
}
|
|
882
754
|
/**
|
|
883
|
-
*
|
|
884
|
-
*
|
|
885
|
-
* or mouse) and slotted content clicks to propagate so event delegation
|
|
886
|
-
* works for parent handlers.
|
|
755
|
+
* Renders the border container
|
|
756
|
+
* when fill="outline".
|
|
887
757
|
*/
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
758
|
+
renderLabelContainer() {
|
|
759
|
+
const theme = getIonTheme(this);
|
|
760
|
+
const hasOutlineFill = theme === 'md' && this.fill === 'outline';
|
|
761
|
+
if (hasOutlineFill) {
|
|
762
|
+
/**
|
|
763
|
+
* The outline fill has a special outline
|
|
764
|
+
* that appears around the select and the label.
|
|
765
|
+
* Certain stacked and floating label placements cause the
|
|
766
|
+
* label to translate up and create a "cut out"
|
|
767
|
+
* inside of that border by using the notch-spacer element.
|
|
768
|
+
*/
|
|
769
|
+
return [
|
|
770
|
+
h("div", { class: "select-outline-container" }, h("div", { class: "select-outline-start" }), h("div", { class: {
|
|
771
|
+
'select-outline-notch': true,
|
|
772
|
+
'select-outline-notch-hidden': !this.hasLabel,
|
|
773
|
+
} }, h("div", { class: "notch-spacer", "aria-hidden": "true", ref: (el) => (this.notchSpacerEl = el) }, this.label)), h("div", { class: "select-outline-end" })),
|
|
774
|
+
this.renderLabel(),
|
|
775
|
+
];
|
|
891
776
|
}
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
return (h("div", { class: "select-outline-container" }, h("div", { class: "select-outline-start" }), h("div", { class: {
|
|
898
|
-
'select-outline-notch': true,
|
|
899
|
-
'select-outline-notch-hidden': !this.hasLabel,
|
|
900
|
-
} }, h("div", { class: "notch-spacer", "aria-hidden": "true", ref: (el) => (this.notchSpacerEl = el) }, this.label)), h("div", { class: "select-outline-end" })));
|
|
777
|
+
/**
|
|
778
|
+
* If not using the outline style,
|
|
779
|
+
* we can render just the label.
|
|
780
|
+
*/
|
|
781
|
+
return this.renderLabel();
|
|
901
782
|
}
|
|
902
783
|
/**
|
|
903
784
|
* Wraps text nodes in the select text with span elements
|
|
@@ -917,7 +798,8 @@ export class Select {
|
|
|
917
798
|
return html;
|
|
918
799
|
}
|
|
919
800
|
Array.from(temp.childNodes).forEach((node) => {
|
|
920
|
-
|
|
801
|
+
var _a, _b, _c, _d;
|
|
802
|
+
if (node.nodeType === Node.TEXT_NODE && ((_a = node.textContent) === null || _a === void 0 ? void 0 : _a.trim())) {
|
|
921
803
|
const text = node.textContent;
|
|
922
804
|
/**
|
|
923
805
|
* Split comma separator from the text content
|
|
@@ -928,12 +810,12 @@ export class Select {
|
|
|
928
810
|
const commaNode = document.createTextNode(commaMatch[1]);
|
|
929
811
|
const wrapper = document.createElement('span');
|
|
930
812
|
wrapper.textContent = commaMatch[2];
|
|
931
|
-
node.parentNode
|
|
932
|
-
wrapper.parentNode
|
|
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);
|
|
933
815
|
return;
|
|
934
816
|
}
|
|
935
817
|
const wrapper = document.createElement('span');
|
|
936
|
-
node.parentNode
|
|
818
|
+
(_d = node.parentNode) === null || _d === void 0 ? void 0 : _d.replaceChild(wrapper, node);
|
|
937
819
|
wrapper.appendChild(node);
|
|
938
820
|
}
|
|
939
821
|
});
|
|
@@ -969,24 +851,20 @@ export class Select {
|
|
|
969
851
|
* next to the select text.
|
|
970
852
|
*/
|
|
971
853
|
renderSelectIcon() {
|
|
972
|
-
const
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
icon = expandedIcon;
|
|
977
|
-
}
|
|
978
|
-
else {
|
|
979
|
-
const defaultIcon = mode === 'ios' ? chevronExpand : caretDownSharp;
|
|
980
|
-
icon = toggleIcon ?? defaultIcon;
|
|
854
|
+
const { isExpanded, selectExpandedIcon, selectCollapsedIcon } = this;
|
|
855
|
+
let icon = selectCollapsedIcon;
|
|
856
|
+
if (isExpanded) {
|
|
857
|
+
icon = selectExpandedIcon;
|
|
981
858
|
}
|
|
982
859
|
return h("ion-icon", { class: "select-icon", part: "icon", "aria-hidden": "true", icon: icon });
|
|
983
860
|
}
|
|
984
861
|
get ariaLabel() {
|
|
862
|
+
var _a;
|
|
985
863
|
const { placeholder, inheritedAttributes } = this;
|
|
986
864
|
// Get the plain text from the selected text
|
|
987
865
|
const displayValue = this.getText();
|
|
988
866
|
// The aria label should be preferred over visible text if both are specified
|
|
989
|
-
const definedLabel = inheritedAttributes['aria-label']
|
|
867
|
+
const definedLabel = (_a = inheritedAttributes['aria-label']) !== null && _a !== void 0 ? _a : this.labelText;
|
|
990
868
|
/**
|
|
991
869
|
* If developer has specified a placeholder
|
|
992
870
|
* and there is nothing selected, the selectText
|
|
@@ -1012,6 +890,63 @@ export class Select {
|
|
|
1012
890
|
const { disabled, inputId, isExpanded, required } = this;
|
|
1013
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) }));
|
|
1014
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
|
+
}
|
|
1015
950
|
getHintTextId() {
|
|
1016
951
|
const { helperText, errorText, helperTextId, errorTextId, isInvalid } = this;
|
|
1017
952
|
if (isInvalid && errorText) {
|
|
@@ -1049,19 +984,41 @@ export class Select {
|
|
|
1049
984
|
return (h("div", { class: "select-bottom", part: "bottom" }, this.renderHintText()));
|
|
1050
985
|
}
|
|
1051
986
|
render() {
|
|
1052
|
-
const { disabled, el, isExpanded, expandedIcon, labelPlacement, justify, placeholder, fill,
|
|
1053
|
-
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();
|
|
1054
990
|
const hasFloatingOrStackedLabel = labelPlacement === 'floating' || labelPlacement === 'stacked';
|
|
991
|
+
const shouldRenderOuterIcon = theme !== 'ionic' && hasFloatingOrStackedLabel;
|
|
992
|
+
const shouldRenderInnerIcon = theme === 'ionic' || !hasFloatingOrStackedLabel;
|
|
1055
993
|
const justifyEnabled = !hasFloatingOrStackedLabel && justify !== undefined;
|
|
1056
994
|
const rtl = isRTL(el) ? 'rtl' : 'ltr';
|
|
1057
995
|
const inItem = hostContext('ion-item', this.el);
|
|
1058
|
-
const
|
|
996
|
+
const size = this.getSize();
|
|
997
|
+
const shouldRenderHighlight = theme === 'md' && fill !== 'outline' && !inItem;
|
|
1059
998
|
const hasValue = this.hasValue();
|
|
1060
|
-
const
|
|
999
|
+
const hasStartEndSlots = el.querySelector('[slot="start"], [slot="end"]') !== null;
|
|
1061
1000
|
renderHiddenInput(true, el, name, parseValue(value), disabled);
|
|
1062
|
-
|
|
1063
|
-
|
|
1064
|
-
|
|
1001
|
+
/**
|
|
1002
|
+
* If the label is stacked, it should always sit above the select.
|
|
1003
|
+
* For floating labels, the label should move above the select if
|
|
1004
|
+
* the select has a value, is open, or has anything in either
|
|
1005
|
+
* the start or end slot.
|
|
1006
|
+
*
|
|
1007
|
+
* If there is content in the start slot, the label would overlap
|
|
1008
|
+
* it if not forced to float. This is also applied to the end slot
|
|
1009
|
+
* because with the default or solid fills, the select is not
|
|
1010
|
+
* vertically centered in the container, but the label is. This
|
|
1011
|
+
* causes the slots and label to appear vertically offset from each
|
|
1012
|
+
* other when the label isn't floating above the input. This doesn't
|
|
1013
|
+
* apply to the outline fill, but this was not accounted for to keep
|
|
1014
|
+
* things consistent.
|
|
1015
|
+
*
|
|
1016
|
+
* TODO(FW-5592): Remove hasStartEndSlots condition
|
|
1017
|
+
*/
|
|
1018
|
+
const labelShouldFloat = labelPlacement === 'stacked' ||
|
|
1019
|
+
(labelPlacement === 'floating' && (hasValue || hasFocus || isExpanded || hasStartEndSlots));
|
|
1020
|
+
return (h(Host, { key: '9339cb236070c47333154d96c336dc1df9a11e1c', onClick: this.onClick, class: createColorClasses(this.color, {
|
|
1021
|
+
[theme]: true,
|
|
1065
1022
|
'in-item': inItem,
|
|
1066
1023
|
'in-item-color': hostContext('ion-item.ion-color', el),
|
|
1067
1024
|
'select-disabled': disabled,
|
|
@@ -1078,20 +1035,33 @@ export class Select {
|
|
|
1078
1035
|
[`select-justify-${justify}`]: justifyEnabled,
|
|
1079
1036
|
[`select-shape-${shape}`]: shape !== undefined,
|
|
1080
1037
|
[`select-label-placement-${labelPlacement}`]: true,
|
|
1081
|
-
|
|
1038
|
+
[`select-size-${size}`]: size !== undefined,
|
|
1039
|
+
}) }, h("label", { key: 'db8f0b67592f4b99f5e16d06ee8120852a60f4d1', class: "select-wrapper", id: "select-label", onClick: this.onLabelClick, part: "wrapper" }, this.renderLabelContainer(), h("div", { key: '30313c0f3034be59605b368d15af4ba00202a5f4', class: "select-wrapper-inner", part: "inner" },
|
|
1040
|
+
/**
|
|
1041
|
+
* For the ionic theme, we render the outline container here
|
|
1042
|
+
* instead of higher up, so it can be positioned relative to
|
|
1043
|
+
* the native wrapper instead of the <label> element or the
|
|
1044
|
+
* entire component. This allows the label text to be positioned
|
|
1045
|
+
* above the outline, while staying within the bounds of the
|
|
1046
|
+
* <label> element, ensuring that clicking the label text
|
|
1047
|
+
* focuses the select.
|
|
1048
|
+
*/
|
|
1049
|
+
theme === 'ionic' && fill === 'outline' && h("div", { key: '78bba2953ba88efd1189afa31e8229a8972175e5', class: "select-outline" }), h("slot", { key: '086505d193a19677d33e26a5a116783d999c6861', name: "start" }), h("div", { key: '5bb7863236596cad5c1118be1ae54898b638b760', class: "native-wrapper", ref: (el) => (this.nativeWrapperEl = el), part: "container" }, this.renderSelectText(), this.renderListbox()), h("slot", { key: '38744ee0cc6750f84d11470c09a4e950d73f1e44', name: "end" }), shouldRenderInnerIcon && this.renderSelectIcon()), shouldRenderOuterIcon && this.renderSelectIcon(), shouldRenderHighlight && h("div", { key: '4eecb0df50800d16bea58c5649e68e06b122e472', class: "select-highlight" })), this.renderBottomContent()));
|
|
1082
1050
|
}
|
|
1083
1051
|
static get is() { return "ion-select"; }
|
|
1084
1052
|
static get encapsulation() { return "shadow"; }
|
|
1085
1053
|
static get originalStyleUrls() {
|
|
1086
1054
|
return {
|
|
1087
1055
|
"ios": ["select.ios.scss"],
|
|
1088
|
-
"md": ["select.md.scss"]
|
|
1056
|
+
"md": ["select.md.scss"],
|
|
1057
|
+
"ionic": ["select.ionic.scss"]
|
|
1089
1058
|
};
|
|
1090
1059
|
}
|
|
1091
1060
|
static get styleUrls() {
|
|
1092
1061
|
return {
|
|
1093
1062
|
"ios": ["select.ios.css"],
|
|
1094
|
-
"md": ["select.md.css"]
|
|
1063
|
+
"md": ["select.md.css"],
|
|
1064
|
+
"ionic": ["select.ionic.css"]
|
|
1095
1065
|
};
|
|
1096
1066
|
}
|
|
1097
1067
|
static get properties() {
|
|
@@ -1116,6 +1086,26 @@ export class Select {
|
|
|
1116
1086
|
"attribute": "cancel-text",
|
|
1117
1087
|
"defaultValue": "'Cancel'"
|
|
1118
1088
|
},
|
|
1089
|
+
"cancelIcon": {
|
|
1090
|
+
"type": "boolean",
|
|
1091
|
+
"mutable": false,
|
|
1092
|
+
"complexType": {
|
|
1093
|
+
"original": "boolean",
|
|
1094
|
+
"resolved": "boolean",
|
|
1095
|
+
"references": {}
|
|
1096
|
+
},
|
|
1097
|
+
"required": false,
|
|
1098
|
+
"optional": false,
|
|
1099
|
+
"docs": {
|
|
1100
|
+
"tags": [],
|
|
1101
|
+
"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."
|
|
1102
|
+
},
|
|
1103
|
+
"getter": false,
|
|
1104
|
+
"setter": false,
|
|
1105
|
+
"reflect": false,
|
|
1106
|
+
"attribute": "cancel-icon",
|
|
1107
|
+
"defaultValue": "false"
|
|
1108
|
+
},
|
|
1119
1109
|
"color": {
|
|
1120
1110
|
"type": "string",
|
|
1121
1111
|
"mutable": false,
|
|
@@ -1200,7 +1190,7 @@ export class Select {
|
|
|
1200
1190
|
"optional": true,
|
|
1201
1191
|
"docs": {
|
|
1202
1192
|
"tags": [],
|
|
1203
|
-
"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
|
|
1193
|
+
"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."
|
|
1204
1194
|
},
|
|
1205
1195
|
"getter": false,
|
|
1206
1196
|
"setter": false,
|
|
@@ -1460,7 +1450,7 @@ export class Select {
|
|
|
1460
1450
|
"optional": true,
|
|
1461
1451
|
"docs": {
|
|
1462
1452
|
"tags": [],
|
|
1463
|
-
"text": "The toggle icon to use. Defaults to
|
|
1453
|
+
"text": "The toggle icon to use. Defaults to `\"chevronExpand\"` for the `\"ios\"` theme,\nor `\"caretDownSharp\"` for the `\"md\"` and `\"ionic\"` themes."
|
|
1464
1454
|
},
|
|
1465
1455
|
"getter": false,
|
|
1466
1456
|
"setter": false,
|
|
@@ -1479,70 +1469,89 @@ export class Select {
|
|
|
1479
1469
|
"optional": true,
|
|
1480
1470
|
"docs": {
|
|
1481
1471
|
"tags": [],
|
|
1482
|
-
"text": "The toggle icon to show when the select is open. If defined, the icon\nrotation behavior in
|
|
1472
|
+
"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."
|
|
1483
1473
|
},
|
|
1484
1474
|
"getter": false,
|
|
1485
1475
|
"setter": false,
|
|
1486
1476
|
"reflect": false,
|
|
1487
1477
|
"attribute": "expanded-icon"
|
|
1488
1478
|
},
|
|
1479
|
+
"required": {
|
|
1480
|
+
"type": "boolean",
|
|
1481
|
+
"mutable": false,
|
|
1482
|
+
"complexType": {
|
|
1483
|
+
"original": "boolean",
|
|
1484
|
+
"resolved": "boolean",
|
|
1485
|
+
"references": {}
|
|
1486
|
+
},
|
|
1487
|
+
"required": false,
|
|
1488
|
+
"optional": false,
|
|
1489
|
+
"docs": {
|
|
1490
|
+
"tags": [],
|
|
1491
|
+
"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."
|
|
1492
|
+
},
|
|
1493
|
+
"getter": false,
|
|
1494
|
+
"setter": false,
|
|
1495
|
+
"reflect": false,
|
|
1496
|
+
"attribute": "required",
|
|
1497
|
+
"defaultValue": "false"
|
|
1498
|
+
},
|
|
1489
1499
|
"shape": {
|
|
1490
1500
|
"type": "string",
|
|
1491
1501
|
"mutable": false,
|
|
1492
1502
|
"complexType": {
|
|
1493
|
-
"original": "'round'",
|
|
1494
|
-
"resolved": "\"round\" | undefined",
|
|
1503
|
+
"original": "'soft' | 'round' | 'rectangular'",
|
|
1504
|
+
"resolved": "\"rectangular\" | \"round\" | \"soft\" | undefined",
|
|
1495
1505
|
"references": {}
|
|
1496
1506
|
},
|
|
1497
1507
|
"required": false,
|
|
1498
1508
|
"optional": true,
|
|
1499
1509
|
"docs": {
|
|
1500
1510
|
"tags": [],
|
|
1501
|
-
"text": "
|
|
1511
|
+
"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."
|
|
1502
1512
|
},
|
|
1503
1513
|
"getter": false,
|
|
1504
1514
|
"setter": false,
|
|
1505
1515
|
"reflect": false,
|
|
1506
1516
|
"attribute": "shape"
|
|
1507
1517
|
},
|
|
1508
|
-
"
|
|
1509
|
-
"type": "
|
|
1510
|
-
"mutable":
|
|
1518
|
+
"size": {
|
|
1519
|
+
"type": "string",
|
|
1520
|
+
"mutable": false,
|
|
1511
1521
|
"complexType": {
|
|
1512
|
-
"original": "
|
|
1513
|
-
"resolved": "
|
|
1522
|
+
"original": "'small' | 'medium' | 'large'",
|
|
1523
|
+
"resolved": "\"large\" | \"medium\" | \"small\" | undefined",
|
|
1514
1524
|
"references": {}
|
|
1515
1525
|
},
|
|
1516
1526
|
"required": false,
|
|
1517
1527
|
"optional": true,
|
|
1518
1528
|
"docs": {
|
|
1519
1529
|
"tags": [],
|
|
1520
|
-
"text": "The
|
|
1530
|
+
"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."
|
|
1521
1531
|
},
|
|
1522
1532
|
"getter": false,
|
|
1523
1533
|
"setter": false,
|
|
1524
1534
|
"reflect": false,
|
|
1525
|
-
"attribute": "
|
|
1535
|
+
"attribute": "size"
|
|
1526
1536
|
},
|
|
1527
|
-
"
|
|
1528
|
-
"type": "
|
|
1529
|
-
"mutable":
|
|
1537
|
+
"value": {
|
|
1538
|
+
"type": "any",
|
|
1539
|
+
"mutable": true,
|
|
1530
1540
|
"complexType": {
|
|
1531
|
-
"original": "
|
|
1532
|
-
"resolved": "
|
|
1541
|
+
"original": "any | null",
|
|
1542
|
+
"resolved": "any",
|
|
1533
1543
|
"references": {}
|
|
1534
1544
|
},
|
|
1535
1545
|
"required": false,
|
|
1536
|
-
"optional":
|
|
1546
|
+
"optional": true,
|
|
1537
1547
|
"docs": {
|
|
1538
1548
|
"tags": [],
|
|
1539
|
-
"text": "
|
|
1549
|
+
"text": "The value of the select."
|
|
1540
1550
|
},
|
|
1541
1551
|
"getter": false,
|
|
1542
1552
|
"setter": false,
|
|
1543
1553
|
"reflect": false,
|
|
1544
|
-
"attribute": "
|
|
1545
|
-
"defaultValue": "false"
|
|
1554
|
+
"attribute": "value"
|
|
1546
1555
|
}
|
|
1547
1556
|
};
|
|
1548
1557
|
}
|
|
@@ -1791,7 +1800,7 @@ const textForValue = (opts, value, compareWith, useHTML = false) => {
|
|
|
1791
1800
|
*/
|
|
1792
1801
|
if (content) {
|
|
1793
1802
|
const texts = Array.from(content.childNodes)
|
|
1794
|
-
.map((n) => n.textContent
|
|
1803
|
+
.map((n) => { var _a; return (_a = n.textContent) === null || _a === void 0 ? void 0 : _a.trim(); })
|
|
1795
1804
|
.filter((t) => t);
|
|
1796
1805
|
return texts.join(' ') || null;
|
|
1797
1806
|
}
|
|
@@ -1811,8 +1820,9 @@ const textForValue = (opts, value, compareWith, useHTML = false) => {
|
|
|
1811
1820
|
*/
|
|
1812
1821
|
const trimTextNodes = (node) => {
|
|
1813
1822
|
node.childNodes.forEach((child) => {
|
|
1823
|
+
var _a;
|
|
1814
1824
|
if (child.nodeType === Node.TEXT_NODE) {
|
|
1815
|
-
child.textContent = child.textContent
|
|
1825
|
+
child.textContent = ((_a = child.textContent) === null || _a === void 0 ? void 0 : _a.trim()) || '';
|
|
1816
1826
|
}
|
|
1817
1827
|
else if (child.nodeType === Node.ELEMENT_NODE) {
|
|
1818
1828
|
trimTextNodes(child);
|
|
@@ -1840,13 +1850,14 @@ const getOptionContent = (option, slotName, useHTML = false) => {
|
|
|
1840
1850
|
// Default slot: get nodes without a slot attribute
|
|
1841
1851
|
const defaultSlot = getOptionDefaultSlot(option) || [];
|
|
1842
1852
|
nodes = defaultSlot.filter((node) => {
|
|
1853
|
+
var _a;
|
|
1843
1854
|
/**
|
|
1844
1855
|
* Exclude whitespace-only text nodes (newline noise between
|
|
1845
1856
|
* markup elements). Element nodes are always kept, even when
|
|
1846
1857
|
* their textContent is empty (e.g. <svg>, <img>).
|
|
1847
1858
|
*/
|
|
1848
1859
|
if (node.nodeType === Node.TEXT_NODE) {
|
|
1849
|
-
return node.textContent
|
|
1860
|
+
return ((_a = node.textContent) === null || _a === void 0 ? void 0 : _a.trim().length) !== 0;
|
|
1850
1861
|
}
|
|
1851
1862
|
return true;
|
|
1852
1863
|
});
|
|
@@ -1856,7 +1867,7 @@ const getOptionContent = (option, slotName, useHTML = false) => {
|
|
|
1856
1867
|
}
|
|
1857
1868
|
// Return plain text if no elements are found
|
|
1858
1869
|
if (!slotName && nodes.every((n) => n.nodeType === Node.TEXT_NODE)) {
|
|
1859
|
-
return nodes.map((n) => n.textContent
|
|
1870
|
+
return nodes.map((n) => { var _a; return (_a = n.textContent) === null || _a === void 0 ? void 0 : _a.trim(); }).join(' ') || null;
|
|
1860
1871
|
}
|
|
1861
1872
|
/**
|
|
1862
1873
|
* Mirror known custom-element properties (e.g. ion-icon's `icon`)
|
|
@@ -1872,9 +1883,10 @@ const getOptionContent = (option, slotName, useHTML = false) => {
|
|
|
1872
1883
|
// Clone each node into a temporary container
|
|
1873
1884
|
const container = document.createElement('div');
|
|
1874
1885
|
nodes.forEach((n) => {
|
|
1886
|
+
var _a;
|
|
1875
1887
|
const clone = n.cloneNode(true);
|
|
1876
1888
|
if (clone.nodeType === Node.TEXT_NODE) {
|
|
1877
|
-
clone.textContent = clone.textContent
|
|
1889
|
+
clone.textContent = ((_a = clone.textContent) === null || _a === void 0 ? void 0 : _a.trim()) || '';
|
|
1878
1890
|
}
|
|
1879
1891
|
else {
|
|
1880
1892
|
trimTextNodes(clone);
|
|
@@ -1925,7 +1937,7 @@ const getDefaultSlotPlainText = (option) => {
|
|
|
1925
1937
|
return node.nodeType === Node.TEXT_NODE;
|
|
1926
1938
|
})
|
|
1927
1939
|
.filter((node) => node.nodeType === Node.TEXT_NODE)
|
|
1928
|
-
.map((n) => n.textContent
|
|
1940
|
+
.map((n) => { var _a; return (_a = n.textContent) === null || _a === void 0 ? void 0 : _a.trim(); })
|
|
1929
1941
|
.filter((t) => t);
|
|
1930
1942
|
return texts.join(' ');
|
|
1931
1943
|
};
|
|
@@ -1939,6 +1951,7 @@ const getDefaultSlotPlainText = (option) => {
|
|
|
1939
1951
|
* via the `innerHTMLTemplatesEnabled` config.
|
|
1940
1952
|
*/
|
|
1941
1953
|
const extractOptionContent = (option, customHTMLEnabled) => {
|
|
1954
|
+
var _a, _b;
|
|
1942
1955
|
if (!customHTMLEnabled) {
|
|
1943
1956
|
return {
|
|
1944
1957
|
content: getDefaultSlotPlainText(option),
|
|
@@ -1948,8 +1961,8 @@ const extractOptionContent = (option, customHTMLEnabled) => {
|
|
|
1948
1961
|
}
|
|
1949
1962
|
return {
|
|
1950
1963
|
content: getOptionContent(option),
|
|
1951
|
-
startContent: getOptionContent(option, 'start')
|
|
1952
|
-
endContent: getOptionContent(option, 'end')
|
|
1964
|
+
startContent: (_a = getOptionContent(option, 'start')) !== null && _a !== void 0 ? _a : undefined,
|
|
1965
|
+
endContent: (_b = getOptionContent(option, 'end')) !== null && _b !== void 0 ? _b : undefined,
|
|
1953
1966
|
};
|
|
1954
1967
|
};
|
|
1955
1968
|
let selectIds = 0;
|