@ionic/core 8.8.20-dev.11787158518.168a2fea → 8.8.20-dev.11789504012.1a675914
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/index.js +1 -1
- package/components/ion-accordion-group.js +1 -1
- package/components/ion-accordion.js +1 -1
- package/components/ion-action-sheet.js +1 -1
- package/components/ion-alert.js +1 -1
- package/components/ion-app.js +1 -1
- package/components/ion-avatar.js +1 -1
- package/components/ion-back-button.js +1 -1
- package/components/ion-backdrop.js +1 -1
- package/components/ion-badge.js +1 -1
- package/components/ion-breadcrumb.js +1 -1
- package/components/ion-breadcrumbs.js +1 -1
- package/components/ion-button.js +1 -1
- package/components/ion-buttons.js +1 -1
- package/components/ion-card-content.js +1 -1
- package/components/ion-card-header.js +1 -1
- package/components/ion-card-subtitle.js +1 -1
- package/components/ion-card-title.js +1 -1
- package/components/ion-card.js +1 -1
- package/components/ion-checkbox.js +1 -1
- package/components/ion-chip.js +1 -1
- package/components/ion-col.js +1 -1
- package/components/ion-content.js +1 -1
- package/components/ion-datetime-button.js +1 -1
- package/components/ion-datetime.js +1 -1
- package/components/ion-divider.d.ts +11 -0
- package/components/ion-divider.js +4 -0
- package/components/ion-fab-button.js +1 -1
- package/components/ion-fab-list.js +1 -1
- package/components/ion-fab.js +1 -1
- package/components/ion-footer.js +1 -1
- package/components/ion-gallery-item.d.ts +11 -0
- package/components/ion-gallery-item.js +4 -0
- package/components/ion-gallery.d.ts +11 -0
- package/components/ion-gallery.js +4 -0
- package/components/ion-grid.js +1 -1
- package/components/ion-header.js +1 -1
- package/components/ion-icon.js +1 -1
- package/components/ion-img.js +1 -1
- package/components/ion-infinite-scroll-content.js +1 -1
- package/components/ion-infinite-scroll.js +1 -1
- package/components/ion-input-otp.js +1 -1
- package/components/ion-input-password-toggle.js +1 -1
- package/components/ion-input.js +1 -1
- package/components/ion-item-divider.js +1 -1
- package/components/ion-item-group.js +1 -1
- package/components/ion-item-option.js +1 -1
- package/components/ion-item-options.js +1 -1
- package/components/ion-item-sliding.js +1 -1
- package/components/ion-item.js +1 -1
- package/components/ion-label.js +1 -1
- package/components/ion-list-header.js +1 -1
- package/components/ion-list.js +1 -1
- package/components/ion-loading.js +1 -1
- package/components/ion-menu-button.js +1 -1
- package/components/ion-menu-toggle.js +1 -1
- package/components/ion-menu.js +1 -1
- package/components/ion-modal.js +1 -1
- package/components/ion-nav-link.js +1 -1
- package/components/ion-nav.js +1 -1
- package/components/ion-note.js +1 -1
- package/components/ion-picker-column-option.js +1 -1
- package/components/ion-picker-column.js +1 -1
- package/components/ion-picker-legacy-column.d.ts +11 -0
- package/components/ion-picker-legacy-column.js +4 -0
- package/components/ion-picker-legacy.d.ts +11 -0
- package/components/ion-picker-legacy.js +4 -0
- package/components/ion-picker.js +1 -1
- package/components/ion-popover.js +1 -1
- package/components/ion-progress-bar.js +1 -1
- package/components/ion-radio-group.js +1 -1
- package/components/ion-radio.js +1 -1
- package/components/ion-range.js +1 -1
- package/components/ion-refresher-content.js +1 -1
- package/components/ion-refresher.js +1 -1
- package/components/ion-reorder-group.js +1 -1
- package/components/ion-reorder.js +1 -1
- package/components/ion-ripple-effect.js +1 -1
- package/components/ion-route-redirect.js +1 -1
- package/components/ion-route.js +1 -1
- package/components/ion-router-link.js +1 -1
- package/components/ion-router-outlet.js +1 -1
- package/components/ion-router.js +1 -1
- package/components/ion-row.js +1 -1
- package/components/ion-searchbar.js +1 -1
- package/components/ion-segment-button.js +1 -1
- package/components/ion-segment-content.js +1 -1
- package/components/ion-segment-view.js +1 -1
- package/components/ion-segment.js +1 -1
- package/components/ion-select-modal.js +1 -1
- package/components/ion-select-option.js +1 -1
- package/components/ion-select-popover.js +1 -1
- package/components/ion-select.js +1 -1
- package/components/ion-skeleton-text.js +1 -1
- package/components/ion-spinner.js +1 -1
- package/components/ion-split-pane.js +1 -1
- package/components/ion-tab-bar.js +1 -1
- package/components/ion-tab-button.js +1 -1
- package/components/ion-tab.js +1 -1
- package/components/ion-tabs.js +1 -1
- package/components/ion-text.js +1 -1
- package/components/ion-textarea.js +1 -1
- package/components/ion-thumbnail.js +1 -1
- package/components/ion-title.js +1 -1
- package/components/ion-toast.js +1 -1
- package/components/ion-toggle.js +1 -1
- package/components/ion-toolbar.js +1 -1
- package/components/p-0MMiHJhx.js +4 -0
- package/components/p-0rXxxCTt.js +4 -0
- package/components/{p-DwpKZ6rl.js → p-B2SvA6NE.js} +1 -1
- package/components/p-B4GJERAm.js +4 -0
- package/components/p-B9_sPaDw.js +4 -0
- package/components/p-BE21dB_a.js +4 -0
- package/components/p-BJyeT56g.js +4 -0
- package/components/p-BTBa_wH7.js +4 -0
- package/components/p-BTEOs1at.js +4 -0
- package/components/p-BU8Blvqg.js +4 -0
- package/components/p-BXXTyrCp.js +4 -0
- package/components/p-BXjGM4gW.js +4 -0
- package/components/p-BXuZo5-p.js +4 -0
- package/components/p-BYRVyMu9.js +4 -0
- package/components/{p-ryyf_ItD.js → p-BZwQa9ey.js} +1 -1
- package/components/p-BZxBDeEU.js +4 -0
- package/components/p-BcWO94Sl.js +4 -0
- package/components/p-BjW8SOqw.js +4 -0
- package/components/p-Br6q6Rgq.js +4 -0
- package/components/p-BwKpO3Is.js +4 -0
- package/components/p-BwzRqsq1.js +4 -0
- package/components/p-C-cw-bM-.js +4 -0
- package/components/p-C0K6CGg9.js +4 -0
- package/components/p-C2J-Hvv3.js +4 -0
- package/components/p-C3ydXg9O.js +4 -0
- package/components/p-C5Bnq_Hm.js +4 -0
- package/components/p-C5JYXyPD.js +4 -0
- package/components/p-C898H5L0.js +4 -0
- package/components/p-C8kcgEG7.js +4 -0
- package/components/p-CEz0vNHD.js +4 -0
- package/components/p-CH8ypgvS.js +4 -0
- package/components/{p-CMLAwl_N.js → p-CKLXmqy1.js} +1 -1
- package/components/p-CMtmHGrE.js +4 -0
- package/components/p-CNlz8OTE.js +4 -0
- package/components/p-CODBQrPj.js +4 -0
- package/components/p-CToV3-ig.js +4 -0
- package/components/p-CV7PNBGr.js +4 -0
- package/components/p-CVYFPBs-.js +4 -0
- package/components/p-CgbD1udy.js +4 -0
- package/components/p-CjlmHeGM.js +4 -0
- package/components/p-ClTdIlic.js +4 -0
- package/components/p-CstXr-x9.js +4 -0
- package/components/{p-DzRT60Tw.js → p-Cu8FoYIJ.js} +1 -1
- package/components/p-CxhjkdQ_.js +4 -0
- package/components/p-D0Iqw6OZ.js +4 -0
- package/components/p-D12Xsfh7.js +4 -0
- package/components/p-DExJ63jR.js +4 -0
- package/components/p-DHvfufkW.js +4 -0
- package/components/p-DRUGmlKi.js +4 -0
- package/components/p-DYq-5riI.js +4 -0
- package/components/p-DaJxRxSQ.js +4 -0
- package/components/p-Db3A3kHi.js +4 -0
- package/components/p-Df6AAcu8.js +4 -0
- package/components/p-Dh1f5tAK.js +4 -0
- package/components/{p-63OhffQv.js → p-Di8NbWfs.js} +1 -1
- package/components/p-DqkLOArC.js +4 -0
- package/components/p-DriGEn08.js +4 -0
- package/components/p-DylrHLJF.js +4 -0
- package/components/p-WeNgVmOy.js +4 -0
- package/components/p-Wn4ujuPW.js +4 -0
- package/components/p-X6YgGSBf.js +4 -0
- package/components/p-dLA3JnNJ.js +4 -0
- package/components/p-eRqVSlkn.js +4 -0
- package/components/p-fUXE2zLc.js +4 -0
- package/components/p-o8OKV5aD.js +4 -0
- package/components/p-pztWcmzj.js +4 -0
- package/components/p-vXpMhGrs.js +4 -0
- package/css/core.css +1 -1
- package/css/core.css.map +1 -1
- package/css/display.css +1 -1
- package/css/display.css.map +1 -1
- package/css/flex-utils.css +1 -1
- package/css/flex-utils.css.map +1 -1
- package/css/float-elements.css.map +1 -1
- package/css/global.bundle.css.map +1 -1
- package/css/ionic/bundle.ionic.css +1 -0
- package/css/ionic/bundle.ionic.css.map +1 -0
- package/css/ionic/core.ionic.css +1 -0
- package/css/ionic/core.ionic.css.map +1 -0
- package/css/ionic/global.bundle.ionic.css +1 -0
- package/css/ionic/global.bundle.ionic.css.map +1 -0
- package/css/ionic/ionic-swiper.ionic.css +1 -0
- package/css/ionic/ionic-swiper.ionic.css.map +1 -0
- package/css/ionic/link.ionic.css +1 -0
- package/css/ionic/link.ionic.css.map +1 -0
- package/css/ionic/structure.ionic.css +1 -0
- package/css/ionic/structure.ionic.css.map +1 -0
- package/css/ionic/typography.ionic.css +1 -0
- package/css/ionic/typography.ionic.css.map +1 -0
- package/css/ionic/utils.bundle.ionic.css +1 -0
- package/css/ionic/utils.bundle.ionic.css.map +1 -0
- package/css/ionic-swiper.css +1 -1
- package/css/ionic-swiper.css.map +1 -1
- package/css/ionic.bundle.css +1 -1
- package/css/ionic.bundle.css.map +1 -1
- package/css/normalize.css.map +1 -1
- package/css/padding.css.map +1 -1
- package/css/palettes/dark.always.css.map +1 -1
- package/css/palettes/dark.class.css.map +1 -1
- package/css/palettes/dark.system.css.map +1 -1
- package/css/palettes/high-contrast-dark.always.css.map +1 -1
- package/css/palettes/high-contrast-dark.class.css.map +1 -1
- package/css/palettes/high-contrast-dark.system.css.map +1 -1
- package/css/palettes/high-contrast.always.css.map +1 -1
- package/css/palettes/high-contrast.class.css.map +1 -1
- package/css/palettes/high-contrast.system.css.map +1 -1
- package/css/structure.css.map +1 -1
- package/css/text-alignment.css.map +1 -1
- package/css/text-transformation.css.map +1 -1
- package/css/typography.css.map +1 -1
- package/css/utils.bundle.css +1 -1
- package/css/utils.bundle.css.map +1 -1
- package/dist/cjs/{animation-C0mOHzej.js → animation-CxRPIayb.js} +6 -6
- package/dist/cjs/{app-globals-BREG4twP.js → app-globals-BwvlV6g7.js} +1 -1
- package/dist/cjs/{button-active-CVMevT9a.js → button-active-qCQDwE2m.js} +3 -3
- package/dist/cjs/{capacitor-DmA66EwP.js → capacitor-CRl0exFC.js} +3 -3
- package/dist/cjs/clear-button-press-controller-C7B9kyMa.js +45 -0
- package/dist/cjs/{config-CjUbvdPW.js → config-DWdFbSNK.js} +4 -5
- package/dist/cjs/{dir-zwDPRE5K.js → dir-DD0jPVH3.js} +3 -2
- package/dist/cjs/{focus-visible-CCvKiLh3.js → focus-visible-BIj-I3-C.js} +24 -0
- package/dist/cjs/{format-pp0Du3K-.js → format-COAsdjOc.js} +30 -40
- package/dist/cjs/{framework-delegate-Dfo5XsGv.js → framework-delegate-IvkF1VuM.js} +10 -6
- package/dist/cjs/{gesture-controller-BDUH7687.js → gesture-controller-dtqlP_q4.js} +8 -15
- package/dist/cjs/{haptic-Ch-X4gRx.js → haptic-DG25gZzb.js} +4 -3
- package/dist/cjs/{helpers-YPQybDph.js → helpers-Dhimwhpn.js} +74 -7
- package/dist/cjs/{index-DwlRtFZe.js → index-BJ2-LydH.js} +3 -9
- package/dist/cjs/{index-zVCah4Uz.js → index-Bsq0SbXc.js} +2 -2
- package/dist/cjs/{index-uvry__L4.js → index-C1knGA9x.js} +65 -33
- package/dist/cjs/{index-wOmugbdg.js → index-CxDnX7hd.js} +2 -0
- package/dist/cjs/{index-DXsPSne6.js → index-DhDV4RxJ.js} +16 -15
- package/dist/cjs/{index-BLdJCcJY.js → index-DuleInoh.js} +5 -5
- package/dist/cjs/{index-B7zJsYWS.js → index-YYUVCfP-.js} +3 -3
- package/dist/cjs/{index-DDg31ZF5.js → index-yon1HGB7.js} +10 -9
- package/dist/cjs/index.cjs.js +18 -18
- package/dist/cjs/{input-shims-Cbu1fcye.js → input-shims-BgJcHtqI.js} +23 -20
- package/dist/cjs/input.utils--RmR5lVe.js +150 -0
- package/dist/cjs/ion-accordion_2.cjs.entry.js +376 -376
- package/dist/cjs/ion-action-sheet.cjs.entry.js +87 -179
- package/dist/cjs/ion-alert.cjs.entry.js +126 -251
- package/dist/cjs/ion-app_8.cjs.entry.js +608 -461
- package/dist/cjs/ion-avatar_3.cjs.entry.js +125 -19
- package/dist/cjs/ion-back-button.cjs.entry.js +49 -65
- package/dist/cjs/ion-backdrop.cjs.entry.js +22 -23
- package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +157 -210
- package/dist/cjs/ion-button_2.cjs.entry.js +118 -153
- package/dist/cjs/ion-card_5.cjs.entry.js +80 -110
- package/dist/cjs/ion-checkbox.cjs.entry.js +134 -160
- package/dist/cjs/ion-chip.cjs.entry.js +56 -21
- package/dist/cjs/ion-col_3.cjs.entry.js +61 -186
- package/dist/cjs/ion-datetime-button.cjs.entry.js +248 -256
- package/dist/cjs/ion-datetime_3.cjs.entry.js +3210 -0
- package/dist/cjs/ion-divider.cjs.entry.js +51 -0
- package/dist/cjs/ion-fab_3.cjs.entry.js +109 -155
- package/dist/cjs/ion-gallery-item.cjs.entry.js +59 -0
- package/dist/cjs/ion-gallery.cjs.entry.js +608 -0
- package/dist/cjs/ion-img.cjs.entry.js +17 -35
- package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +157 -109
- package/dist/cjs/ion-input-otp.cjs.entry.js +437 -435
- package/dist/cjs/ion-input-password-toggle.cjs.entry.js +54 -40
- package/dist/cjs/ion-input.cjs.entry.js +305 -351
- package/dist/cjs/ion-item-option_3.cjs.entry.js +512 -137
- package/dist/cjs/ion-item_8.cjs.entry.js +186 -218
- package/dist/cjs/ion-loading.cjs.entry.js +69 -152
- package/dist/cjs/ion-menu_3.cjs.entry.js +136 -182
- package/dist/cjs/ion-modal.cjs.entry.js +501 -571
- package/dist/cjs/ion-nav_2.cjs.entry.js +164 -104
- package/dist/cjs/ion-picker-column-option.cjs.entry.js +40 -40
- package/dist/cjs/ion-picker-column.cjs.entry.js +410 -422
- package/dist/cjs/ion-picker.cjs.entry.js +401 -406
- package/dist/cjs/ion-popover.cjs.entry.js +212 -324
- package/dist/cjs/ion-progress-bar.cjs.entry.js +48 -36
- package/dist/cjs/ion-radio_2.cjs.entry.js +162 -217
- package/dist/cjs/ion-range.cjs.entry.js +251 -309
- package/dist/cjs/ion-refresher_2.cjs.entry.js +127 -175
- package/dist/cjs/ion-reorder_2.cjs.entry.js +47 -60
- package/dist/cjs/ion-ripple-effect.cjs.entry.js +26 -18
- package/dist/cjs/ion-route_4.cjs.entry.js +76 -179
- package/dist/cjs/ion-searchbar.cjs.entry.js +305 -308
- package/dist/cjs/ion-segment-content.cjs.entry.js +2 -2
- package/dist/cjs/ion-segment-view.cjs.entry.js +27 -28
- package/dist/cjs/ion-segment_2.cjs.entry.js +141 -177
- package/dist/cjs/ion-select-modal.cjs.entry.js +71 -50
- package/dist/cjs/ion-select_3.cjs.entry.js +416 -507
- package/dist/cjs/ion-spinner.cjs.entry.js +36 -28
- package/dist/cjs/ion-split-pane.cjs.entry.js +25 -34
- package/dist/cjs/ion-tab-bar_2.cjs.entry.js +180 -117
- package/dist/cjs/ion-tab_2.cjs.entry.js +30 -55
- package/dist/cjs/ion-text.cjs.entry.js +7 -13
- package/dist/cjs/ion-textarea.cjs.entry.js +310 -303
- package/dist/cjs/ion-toast.cjs.entry.js +170 -265
- package/dist/cjs/ion-toggle.cjs.entry.js +172 -184
- package/dist/cjs/ionic-global-DYLhJaw7.js +519 -0
- package/dist/cjs/ionic.cjs.js +4 -4
- package/dist/cjs/{ios.transition-zTmJz8T-.js → ios.transition-Blgf-vZU.js} +21 -15
- package/dist/cjs/{item-multiple-inputs-BdYSbfKN.js → item-multiple-inputs-DKn76MYO.js} +1 -1
- package/dist/cjs/{keyboard-cHxZlTyz.js → keyboard-BgioTbwQ.js} +3 -3
- package/dist/cjs/{keyboard-Cix5TVkD.js → keyboard-Otnp8OQI.js} +5 -4
- package/dist/cjs/loader.cjs.js +4 -4
- package/dist/cjs/{md.transition-nb_4pUXu.js → md.transition-ClgvbGfq.js} +11 -9
- package/dist/cjs/notch-controller-0hkmmSGo.js +155 -0
- package/dist/cjs/{overlay-control-label-D2sdL2O8.js → overlay-control-label-DnRLQR1t.js} +13 -11
- package/dist/cjs/{overlays-KaNVDNqC.js → overlays-Bxjqh2m3.js} +336 -60
- package/dist/cjs/scroll-hide-controller-qWMU5yOk.js +345 -0
- package/dist/cjs/{select-option-render-pULCGldr.js → select-option-render-BqJEK1N1.js} +4 -3
- package/dist/cjs/{status-tap-o9IIymsP.js → status-tap-ClA8u57t.js} +5 -4
- package/dist/cjs/{swipe-back-B7X9VOlH.js → swipe-back-4vY7mi8i.js} +6 -5
- package/dist/cjs/{theme-Bw0rpaNN.js → theme-IlOsGAz7.js} +26 -7
- package/dist/cjs/validity-QmuwEptc.js +51 -0
- package/dist/collection/collection-manifest.json +13 -1
- package/dist/collection/components/accordion/accordion.ionic.css +201 -0
- package/dist/collection/components/accordion/accordion.ios.css +73 -58
- package/dist/collection/components/accordion/accordion.js +331 -324
- package/dist/collection/components/accordion/accordion.md.css +67 -59
- package/dist/collection/components/accordion-group/accordion-group.ionic.css +93 -0
- package/dist/collection/components/accordion-group/accordion-group.ios.css +16 -4
- package/dist/collection/components/accordion-group/accordion-group.js +69 -56
- package/dist/collection/components/accordion-group/accordion-group.md.css +22 -4
- package/dist/collection/components/action-sheet/action-sheet.ionic.css +494 -0
- package/dist/collection/components/action-sheet/action-sheet.ios.css +184 -54
- package/dist/collection/components/action-sheet/action-sheet.js +76 -166
- package/dist/collection/components/action-sheet/action-sheet.md.css +179 -55
- package/dist/collection/components/action-sheet/test/basic/fixture.js +0 -3
- package/dist/collection/components/alert/alert.ionic.css +787 -0
- package/dist/collection/components/alert/alert.ios.css +247 -54
- package/dist/collection/components/alert/alert.js +113 -236
- package/dist/collection/components/alert/alert.md.css +243 -56
- package/dist/collection/components/app/app.js +15 -86
- package/dist/collection/components/avatar/avatar.ionic.css +385 -0
- package/dist/collection/components/avatar/avatar.ios.css +7 -33
- package/dist/collection/components/avatar/avatar.js +120 -4
- package/dist/collection/components/avatar/avatar.md.css +51 -0
- package/dist/collection/components/back-button/back-button.ios.css +60 -48
- package/dist/collection/components/back-button/back-button.js +45 -61
- package/dist/collection/components/back-button/back-button.md.css +60 -48
- package/dist/collection/components/backdrop/backdrop.ionic.css +109 -0
- package/dist/collection/components/backdrop/backdrop.ios.css +56 -19
- package/dist/collection/components/backdrop/backdrop.js +26 -22
- package/dist/collection/components/backdrop/backdrop.md.css +56 -19
- package/dist/collection/components/badge/badge.ionic.css +272 -0
- package/dist/collection/components/badge/badge.ios.css +137 -12
- package/dist/collection/components/badge/badge.js +145 -15
- package/dist/collection/components/badge/badge.md.css +122 -12
- package/dist/collection/components/breadcrumb/breadcrumb.ios.css +20 -8
- package/dist/collection/components/breadcrumb/breadcrumb.js +60 -99
- package/dist/collection/components/breadcrumb/breadcrumb.md.css +20 -8
- package/dist/collection/components/breadcrumbs/breadcrumbs.ios.css +6 -0
- package/dist/collection/components/breadcrumbs/breadcrumbs.js +99 -112
- package/dist/collection/components/breadcrumbs/breadcrumbs.md.css +6 -0
- package/dist/collection/components/button/button.ionic.css +644 -0
- package/dist/collection/components/button/button.ios.css +154 -46
- package/dist/collection/components/button/button.js +122 -157
- package/dist/collection/components/button/button.md.css +150 -50
- package/dist/collection/components/buttons/buttons.ionic.css +97 -0
- package/dist/collection/components/buttons/buttons.ios.css +59 -7
- package/dist/collection/components/buttons/buttons.js +29 -21
- package/dist/collection/components/buttons/buttons.md.css +55 -3
- package/dist/collection/components/card/card.ionic.css +144 -0
- package/dist/collection/components/card/card.ios.css +65 -14
- package/dist/collection/components/card/card.js +61 -63
- package/dist/collection/components/card/card.md.css +65 -14
- package/dist/collection/components/card-content/card-content.ionic.css +89 -0
- package/dist/collection/components/card-content/card-content.ios.css +20 -35
- package/dist/collection/components/card-content/card-content.js +12 -10
- package/dist/collection/components/card-content/card-content.md.css +20 -35
- package/dist/collection/components/card-header/card-header.ionic.css +85 -0
- package/dist/collection/components/card-header/card-header.ios.css +27 -15
- package/dist/collection/components/card-header/card-header.js +20 -21
- package/dist/collection/components/card-header/card-header.md.css +27 -15
- package/dist/collection/components/card-subtitle/card-subtitle.ionic.css +144 -0
- package/dist/collection/components/card-subtitle/card-subtitle.ios.css +12 -0
- package/dist/collection/components/card-subtitle/card-subtitle.js +11 -14
- package/dist/collection/components/card-subtitle/card-subtitle.md.css +12 -0
- package/dist/collection/components/card-title/card-title.ios.css +73 -0
- package/dist/collection/components/card-title/card-title.js +11 -14
- package/dist/collection/components/card-title/card-title.md.css +73 -0
- package/dist/collection/components/checkbox/checkbox.ionic.css +536 -0
- package/dist/collection/components/checkbox/checkbox.ios.css +246 -115
- package/dist/collection/components/checkbox/checkbox.js +172 -157
- package/dist/collection/components/checkbox/checkbox.md.css +247 -116
- package/dist/collection/components/chip/chip.ionic.css +217 -0
- package/dist/collection/components/chip/chip.ios.css +67 -14
- package/dist/collection/components/chip/chip.js +116 -20
- package/dist/collection/components/chip/chip.md.css +67 -14
- package/dist/collection/components/col/col.css +192 -4
- package/dist/collection/components/col/col.js +212 -186
- package/dist/collection/components/content/content.css +47 -2
- package/dist/collection/components/content/content.js +78 -102
- package/dist/collection/components/datetime/datetime.ionic.css +703 -0
- package/dist/collection/components/datetime/datetime.ios.css +304 -148
- package/dist/collection/components/datetime/datetime.js +900 -1090
- package/dist/collection/components/datetime/datetime.md.css +294 -138
- package/dist/collection/components/datetime/utils/data.js +19 -18
- package/dist/collection/components/datetime/utils/format.js +11 -21
- package/dist/collection/components/datetime/utils/manipulation.js +8 -8
- package/dist/collection/components/datetime/utils/parse.js +10 -10
- package/dist/collection/components/datetime/utils/state.js +2 -8
- package/dist/collection/components/datetime/utils/validate.js +5 -4
- package/dist/collection/components/datetime-button/datetime-button.ios.css +6 -5
- package/dist/collection/components/datetime-button/datetime-button.js +246 -253
- package/dist/collection/components/datetime-button/datetime-button.md.css +6 -5
- package/dist/collection/components/divider/divider.ionic.css +148 -0
- package/dist/collection/components/divider/divider.ios.css +87 -0
- package/dist/collection/components/divider/divider.js +94 -0
- package/dist/collection/components/divider/divider.md.css +87 -0
- package/dist/collection/components/fab/fab.css +25 -1
- package/dist/collection/components/fab/fab.js +22 -25
- package/dist/collection/components/fab-button/fab-button.ios.css +18 -6
- package/dist/collection/components/fab-button/fab-button.js +79 -117
- package/dist/collection/components/fab-button/fab-button.md.css +20 -8
- package/dist/collection/components/fab-list/fab-list.css +12 -0
- package/dist/collection/components/fab-list/fab-list.js +20 -15
- package/dist/collection/components/footer/footer-interface.js +1 -0
- package/dist/collection/components/footer/footer.ios.css +33 -6
- package/dist/collection/components/footer/footer.js +151 -65
- package/dist/collection/components/footer/footer.md.css +40 -0
- package/dist/collection/components/gallery/gallery-constants.js +12 -0
- package/dist/collection/components/gallery/gallery-interface.js +1 -0
- package/dist/collection/components/gallery/gallery.css +15 -0
- package/dist/collection/components/gallery/gallery.js +679 -0
- package/dist/collection/components/gallery/test/utils.js +100 -0
- package/dist/collection/components/gallery-item/gallery-item.css +49 -0
- package/dist/collection/components/gallery-item/gallery-item.js +99 -0
- package/dist/collection/components/grid/grid.css +12 -0
- package/dist/collection/components/grid/grid.js +15 -9
- package/dist/collection/components/header/header-interface.js +1 -0
- package/dist/collection/components/header/header.ionic.css +250 -0
- package/dist/collection/components/header/header.ios.css +178 -133
- package/dist/collection/components/header/header.js +202 -70
- package/dist/collection/components/header/header.md.css +199 -9
- package/dist/collection/components/header/header.utils.js +6 -13
- package/dist/collection/components/img/img.js +16 -34
- package/dist/collection/components/infinite-scroll/infinite-scroll.js +164 -76
- package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.ios.css +12 -0
- package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.js +19 -30
- package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.md.css +12 -0
- package/dist/collection/components/input/input.ionic.css +891 -0
- package/dist/collection/components/input/input.ios.css +247 -191
- package/dist/collection/components/input/input.js +333 -357
- package/dist/collection/components/input/input.md.css +234 -285
- package/dist/collection/components/input-otp/input-otp.ionic.css +371 -0
- package/dist/collection/components/input-otp/input-otp.ios.css +105 -60
- package/dist/collection/components/input-otp/input-otp.js +437 -432
- package/dist/collection/components/input-otp/input-otp.md.css +105 -60
- package/dist/collection/components/input-password-toggle/input-password-toggle.ionic.css +78 -0
- package/dist/collection/components/input-password-toggle/input-password-toggle.js +51 -36
- package/dist/collection/components/input-password-toggle/input-password-toggle.native.css +61 -0
- package/dist/collection/components/item/item.ionic.css +496 -0
- package/dist/collection/components/item/item.ios.css +120 -80
- package/dist/collection/components/item/item.js +98 -113
- package/dist/collection/components/item/item.md.css +131 -79
- package/dist/collection/components/item-divider/item-divider.ios.css +18 -0
- package/dist/collection/components/item-divider/item-divider.js +21 -23
- package/dist/collection/components/item-divider/item-divider.md.css +18 -0
- package/dist/collection/components/item-group/item-group.ios.css +12 -0
- package/dist/collection/components/item-group/item-group.js +13 -7
- package/dist/collection/components/item-group/item-group.md.css +12 -0
- package/dist/collection/components/item-option/item-option.ionic.css +277 -0
- package/dist/collection/components/item-option/item-option.ios.css +136 -29
- package/dist/collection/components/item-option/item-option.js +92 -56
- package/dist/collection/components/item-option/item-option.md.css +136 -29
- package/dist/collection/components/item-options/item-options.ionic.css +221 -0
- package/dist/collection/components/item-options/item-options.ios.css +77 -34
- package/dist/collection/components/item-options/item-options.js +20 -17
- package/dist/collection/components/item-options/item-options.md.css +77 -34
- package/dist/collection/components/item-sliding/item-sliding.ionic.css +211 -0
- package/dist/collection/components/item-sliding/item-sliding.js +441 -61
- package/dist/collection/components/item-sliding/{item-sliding.css → item-sliding.native.css} +84 -9
- package/dist/collection/components/item-sliding/test/test.utils.js +13 -0
- package/dist/collection/components/label/label.ios.css +18 -0
- package/dist/collection/components/label/label.js +15 -32
- package/dist/collection/components/label/label.md.css +18 -0
- package/dist/collection/components/list/list.ionic.css +212 -0
- package/dist/collection/components/list/list.ios.css +54 -14
- package/dist/collection/components/list/list.js +55 -19
- package/dist/collection/components/list/list.md.css +56 -16
- package/dist/collection/components/list-header/list-header.ionic.css +190 -0
- package/dist/collection/components/list-header/list-header.ios.css +82 -38
- package/dist/collection/components/list-header/list-header.js +11 -18
- package/dist/collection/components/list-header/list-header.md.css +82 -38
- package/dist/collection/components/loading/loading.ios.css +13 -1
- package/dist/collection/components/loading/loading.js +62 -143
- package/dist/collection/components/loading/loading.md.css +13 -1
- package/dist/collection/components/menu/menu.ios.css +15 -3
- package/dist/collection/components/menu/menu.js +71 -108
- package/dist/collection/components/menu/menu.md.css +15 -3
- package/dist/collection/components/menu-button/menu-button.ionic.css +236 -0
- package/dist/collection/components/menu-button/menu-button.ios.css +48 -14
- package/dist/collection/components/menu-button/menu-button.js +43 -38
- package/dist/collection/components/menu-button/menu-button.md.css +49 -15
- package/dist/collection/components/menu-toggle/menu-toggle.js +21 -25
- package/dist/collection/components/modal/animations/ionic.enter.js +40 -0
- package/dist/collection/components/modal/animations/ionic.leave.js +28 -0
- package/dist/collection/components/modal/animations/ios.enter.js +1 -1
- package/dist/collection/components/modal/animations/md.enter.js +1 -1
- package/dist/collection/components/modal/animations/sheet.js +8 -2
- package/dist/collection/components/modal/gestures/sheet.js +86 -32
- package/dist/collection/components/modal/gestures/swipe-to-close.js +3 -15
- package/dist/collection/components/modal/modal.ionic.css +255 -0
- package/dist/collection/components/modal/modal.ios.css +178 -70
- package/dist/collection/components/modal/modal.js +272 -404
- package/dist/collection/components/modal/modal.md.css +178 -70
- package/dist/collection/components/modal/safe-area-utils.js +7 -6
- package/dist/collection/components/modal/test/fixtures.js +0 -3
- package/dist/collection/components/nav/nav.css +7 -1
- package/dist/collection/components/nav/nav.js +256 -72
- package/dist/collection/components/nav/view-controller.js +1 -7
- package/dist/collection/components/nav-link/nav-link.js +14 -21
- package/dist/collection/components/note/note.ios.css +12 -0
- package/dist/collection/components/note/note.js +11 -14
- package/dist/collection/components/note/note.md.css +12 -0
- package/dist/collection/components/picker/picker.ios.css +15 -3
- package/dist/collection/components/picker/picker.js +398 -403
- package/dist/collection/components/picker/picker.md.css +15 -3
- package/dist/collection/components/picker-column/picker-column.css +9 -5
- package/dist/collection/components/picker-column/picker-column.js +409 -418
- package/dist/collection/components/picker-column-option/picker-column-option.ios.css +6 -0
- package/dist/collection/components/picker-column-option/picker-column-option.js +42 -38
- package/dist/collection/components/picker-column-option/picker-column-option.md.css +7 -6
- package/dist/collection/components/picker-legacy/animations/ios.enter.js +27 -0
- package/dist/collection/components/picker-legacy/animations/ios.leave.js +23 -0
- package/dist/collection/components/picker-legacy/picker-interface.js +1 -0
- package/dist/collection/components/picker-legacy/picker.ios.css +312 -0
- package/dist/collection/components/picker-legacy/picker.js +891 -0
- package/dist/collection/components/picker-legacy/picker.md.css +299 -0
- package/dist/collection/components/picker-legacy-column/picker-column.ios.css +243 -0
- package/dist/collection/components/picker-legacy-column/picker-column.js +422 -0
- package/dist/collection/components/picker-legacy-column/picker-column.md.css +234 -0
- package/dist/collection/components/picker-legacy-column/test/test.utils.js +43 -0
- package/dist/collection/components/popover/animations/ios.enter.js +2 -1
- package/dist/collection/components/popover/animations/md.enter.js +2 -1
- package/dist/collection/components/popover/popover.ionic.css +290 -0
- package/dist/collection/components/popover/popover.ios.css +15 -2
- package/dist/collection/components/popover/popover.js +199 -313
- package/dist/collection/components/popover/popover.md.css +15 -2
- package/dist/collection/components/popover/test/fixture.js +0 -1
- package/dist/collection/components/popover/utils.js +6 -4
- package/dist/collection/components/progress-bar/progress-bar.ionic.css +287 -0
- package/dist/collection/components/progress-bar/progress-bar.ios.css +48 -17
- package/dist/collection/components/progress-bar/progress-bar.js +65 -33
- package/dist/collection/components/progress-bar/progress-bar.md.css +48 -17
- package/dist/collection/components/radio/radio.ionic.css +422 -0
- package/dist/collection/components/radio/radio.ios.css +207 -102
- package/dist/collection/components/radio/radio.js +77 -108
- package/dist/collection/components/radio/radio.md.css +207 -102
- package/dist/collection/components/radio-group/radio-group.ionic.css +119 -0
- package/dist/collection/components/radio-group/radio-group.ios.css +43 -19
- package/dist/collection/components/radio-group/radio-group.js +113 -107
- package/dist/collection/components/radio-group/radio-group.md.css +43 -19
- package/dist/collection/components/radio-group/test/fixtures.js +0 -2
- package/dist/collection/components/range/range.ionic.css +567 -0
- package/dist/collection/components/range/range.ios.css +128 -85
- package/dist/collection/components/range/range.js +247 -305
- package/dist/collection/components/range/range.md.css +128 -85
- package/dist/collection/components/refresher/refresher.ios.css +14 -1
- package/dist/collection/components/refresher/refresher.js +88 -117
- package/dist/collection/components/refresher/refresher.md.css +15 -2
- package/dist/collection/components/refresher-content/refresher-content.js +37 -47
- package/dist/collection/components/reorder/reorder.ios.css +6 -0
- package/dist/collection/components/reorder/reorder.js +26 -7
- package/dist/collection/components/reorder/reorder.md.css +6 -0
- package/dist/collection/components/reorder-group/reorder-group.css +6 -0
- package/dist/collection/components/reorder-group/reorder-group.js +22 -47
- package/dist/collection/components/ripple-effect/{ripple-effect.css → ripple-effect.common.css} +7 -1
- package/dist/collection/components/ripple-effect/ripple-effect.ionic.css +215 -0
- package/dist/collection/components/ripple-effect/ripple-effect.js +26 -17
- package/dist/collection/components/route/route.js +14 -39
- package/dist/collection/components/route-redirect/route-redirect.js +0 -31
- package/dist/collection/components/router/router.js +37 -37
- package/dist/collection/components/router/utils/dom.js +7 -25
- package/dist/collection/components/router/utils/matching.js +9 -7
- package/dist/collection/components/router/utils/parser.js +1 -1
- package/dist/collection/components/router/utils/path.js +1 -0
- package/dist/collection/components/router-link/router-link.css +8 -2
- package/dist/collection/components/router-link/router-link.js +19 -40
- package/dist/collection/components/router-outlet/router-outlet.css +7 -1
- package/dist/collection/components/router-outlet/router-outlet.js +25 -83
- package/dist/collection/components/row/row.css +16 -0
- package/dist/collection/components/row/row.js +9 -2
- package/dist/collection/components/searchbar/searchbar.ionic.css +622 -0
- package/dist/collection/components/searchbar/searchbar.ios.css +56 -18
- package/dist/collection/components/searchbar/searchbar.js +356 -321
- package/dist/collection/components/searchbar/searchbar.md.css +56 -18
- package/dist/collection/components/segment/segment.ionic.css +115 -0
- package/dist/collection/components/segment/segment.ios.css +45 -2
- package/dist/collection/components/segment/segment.js +94 -126
- package/dist/collection/components/segment/segment.md.css +45 -2
- package/dist/collection/components/segment-button/segment-button.ionic.css +352 -0
- package/dist/collection/components/segment-button/segment-button.ios.css +146 -105
- package/dist/collection/components/segment-button/segment-button.js +46 -49
- package/dist/collection/components/segment-button/segment-button.md.css +148 -107
- package/dist/collection/components/segment-content/segment-content.js +1 -1
- package/dist/collection/components/segment-view/segment-view.ios.css +6 -0
- package/dist/collection/components/segment-view/segment-view.js +27 -28
- package/dist/collection/components/segment-view/segment-view.md.css +6 -0
- package/dist/collection/components/select/select.ionic.css +809 -0
- package/dist/collection/components/select/select.ios.css +351 -206
- package/dist/collection/components/select/select.js +431 -431
- package/dist/collection/components/select/select.md.css +383 -230
- package/dist/collection/components/select-modal/select-modal.ionic.css +257 -0
- package/dist/collection/components/select-modal/select-modal.ios.css +293 -45
- package/dist/collection/components/select-modal/select-modal.js +81 -37
- package/dist/collection/components/select-modal/select-modal.md.css +273 -43
- package/dist/collection/components/select-modal/test/fixtures.js +1 -8
- package/dist/collection/components/select-option/select-option.js +15 -48
- package/dist/collection/components/select-popover/select-popover.ionic.css +255 -0
- package/dist/collection/components/select-popover/select-popover.ios.css +188 -124
- package/dist/collection/components/select-popover/select-popover.js +37 -44
- package/dist/collection/components/select-popover/select-popover.md.css +228 -47
- package/dist/collection/components/select-popover/test/fixtures.js +1 -8
- package/dist/collection/components/skeleton-text/skeleton-text.css +6 -0
- package/dist/collection/components/skeleton-text/skeleton-text.js +15 -15
- package/dist/collection/components/spinner/{spinner.css → spinner.ionic.css} +78 -10
- package/dist/collection/components/spinner/spinner.js +55 -26
- package/dist/collection/components/spinner/spinner.native.css +199 -0
- package/dist/collection/components/split-pane/split-pane.ios.css +20 -2
- package/dist/collection/components/split-pane/split-pane.js +28 -33
- package/dist/collection/components/split-pane/split-pane.md.css +20 -2
- package/dist/collection/components/tab/tab.js +10 -17
- package/dist/collection/components/tab-bar/tab-bar.ionic.css +249 -0
- package/dist/collection/components/tab-bar/tab-bar.ios.css +86 -43
- package/dist/collection/components/tab-bar/tab-bar.js +190 -44
- package/dist/collection/components/tab-bar/tab-bar.md.css +86 -43
- package/dist/collection/components/tab-button/tab-button.ionic.css +373 -0
- package/dist/collection/components/tab-button/tab-button.ios.css +171 -95
- package/dist/collection/components/tab-button/tab-button.js +74 -68
- package/dist/collection/components/tab-button/tab-button.md.css +137 -93
- package/dist/collection/components/tabs/tabs.css +7 -1
- package/dist/collection/components/tabs/tabs.js +23 -33
- package/dist/collection/components/text/text.css +6 -0
- package/dist/collection/components/text/text.js +7 -12
- package/dist/collection/components/textarea/textarea.ionic.css +898 -0
- package/dist/collection/components/textarea/textarea.ios.css +329 -221
- package/dist/collection/components/textarea/textarea.js +334 -302
- package/dist/collection/components/textarea/textarea.md.css +358 -231
- package/dist/collection/components/thumbnail/thumbnail.css +6 -0
- package/dist/collection/components/thumbnail/thumbnail.js +9 -2
- package/dist/collection/components/title/title.ionic.css +127 -0
- package/dist/collection/components/title/title.ios.css +32 -4
- package/dist/collection/components/title/title.js +13 -23
- package/dist/collection/components/title/title.md.css +39 -4
- package/dist/collection/components/toast/animations/utils.js +1 -1
- package/dist/collection/components/toast/toast.ionic.css +394 -0
- package/dist/collection/components/toast/toast.ios.css +84 -45
- package/dist/collection/components/toast/toast.js +178 -232
- package/dist/collection/components/toast/toast.md.css +84 -45
- package/dist/collection/components/toggle/toggle.ionic.css +512 -0
- package/dist/collection/components/toggle/toggle.ios.css +247 -127
- package/dist/collection/components/toggle/toggle.js +164 -175
- package/dist/collection/components/toggle/toggle.md.css +245 -127
- package/dist/collection/components/toolbar/test/image.svg +1 -0
- package/dist/collection/components/toolbar/toolbar.ionic.css +249 -0
- package/dist/collection/components/toolbar/toolbar.ios.css +90 -47
- package/dist/collection/components/toolbar/toolbar.js +222 -25
- package/dist/collection/components/toolbar/toolbar.md.css +90 -47
- package/dist/collection/global/config.js +6 -4
- package/dist/collection/global/ionic-global.js +242 -20
- package/dist/collection/index.js +1 -1
- package/dist/collection/utils/animation/animation.js +3 -3
- package/dist/collection/utils/config.js +4 -5
- package/dist/collection/utils/css-value-validation.js +39 -0
- package/dist/collection/utils/focus-controller/index.js +1 -1
- package/dist/collection/utils/focus-trap.js +16 -5
- package/dist/collection/utils/focus-visible.js +22 -0
- package/dist/collection/utils/forms/clear-button-press-controller.js +40 -0
- package/dist/collection/utils/forms/index.js +1 -1
- package/dist/collection/utils/forms/validity.js +31 -0
- package/dist/collection/utils/framework-delegate.js +9 -5
- package/dist/collection/utils/gesture/gesture-controller.js +8 -15
- package/dist/collection/utils/gesture/index.js +2 -10
- package/dist/collection/utils/hardware-back-button.js +18 -3
- package/dist/collection/utils/helpers.js +72 -5
- package/dist/collection/utils/input-shims/hacks/scroll-assist.js +5 -4
- package/dist/collection/utils/input-shims/hacks/scroll-data.js +2 -1
- package/dist/collection/utils/keyboard/keyboard-controller.js +8 -6
- package/dist/collection/utils/keyboard/keyboard.js +1 -1
- package/dist/collection/utils/logging/index.js +4 -23
- package/dist/collection/utils/media.js +1 -0
- package/dist/collection/utils/menu-controller/animations/overlay.js +3 -3
- package/dist/collection/utils/menu-controller/animations/push.js +2 -1
- package/dist/collection/utils/menu-controller/animations/reveal.js +2 -1
- package/dist/collection/utils/menu-controller/index.js +2 -1
- package/dist/collection/utils/native/haptic.js +3 -2
- package/dist/collection/utils/native/keyboard.js +2 -2
- package/dist/collection/utils/native/status-bar.js +1 -1
- package/dist/collection/utils/overlay-control-label.js +13 -11
- package/dist/collection/utils/overlays.js +312 -45
- package/dist/collection/utils/platform.js +5 -4
- package/dist/collection/utils/rtl/dir.js +3 -2
- package/dist/collection/utils/sanitization/index.js +2 -2
- package/dist/collection/utils/scroll-hide-controller.js +178 -0
- package/dist/collection/utils/select-option-render.js +2 -1
- package/dist/collection/utils/slot-mutation-controller.js +2 -1
- package/dist/collection/utils/test/playwright/apply-keyboard-focus.js +1 -1
- package/dist/collection/utils/test/playwright/drag-element.js +35 -11
- package/dist/collection/utils/test/playwright/generator.js +51 -25
- package/dist/collection/utils/test/playwright/page/event-spy.js +12 -11
- package/dist/collection/utils/test/playwright/page/utils/goto.js +15 -5
- package/dist/collection/utils/test/playwright/page/utils/set-content.js +27 -4
- package/dist/collection/utils/test/playwright/page/utils/set-ion-viewport.js +3 -2
- package/dist/collection/utils/test/press-keys.js +17 -10
- package/dist/collection/utils/theme.js +26 -7
- package/dist/collection/utils/transition/ios.transition.js +14 -9
- package/dist/collection/utils/transition/md.transition.js +4 -3
- package/dist/docs.json +10054 -537
- package/dist/esm/{animation-CGFdmGk9.js → animation-BsVixxLP.js} +5 -5
- package/dist/esm/{app-globals-CYmMeGdU.js → app-globals-rPvWQFXp.js} +1 -1
- package/dist/esm/{button-active-BDOsVAiZ.js → button-active-BS8YgJRD.js} +3 -3
- package/dist/esm/{capacitor-CFERIeaU.js → capacitor-BnXrCBvt.js} +1 -1
- package/dist/esm/clear-button-press-controller-Ci6Q_x5-.js +43 -0
- package/dist/esm/{config-DWCzVL3Y.js → config-BwKpO3Is.js} +4 -5
- package/dist/esm/{dir-Dojwmvde.js → dir-o8OKV5aD.js} +3 -2
- package/dist/esm/{focus-visible-BmVRXR1y.js → focus-visible-vXpMhGrs.js} +23 -1
- package/dist/esm/{format-Dcwga61t.js → format-2WlZcMvG.js} +31 -41
- package/dist/esm/{framework-delegate-BHTU2Ip9.js → framework-delegate-P5K_3uYw.js} +10 -6
- package/dist/esm/{gesture-controller-TXPDHL13.js → gesture-controller-BTEOs1at.js} +8 -15
- package/dist/esm/{haptic-Cq4UAeka.js → haptic-ByW74Ow9.js} +4 -3
- package/dist/esm/{helpers-CAGf8Wgp.js → helpers-ChPZH7zh.js} +74 -8
- package/dist/esm/{index-DcPaH5uL.js → index-Bck1OwMs.js} +3 -9
- package/dist/esm/{index-ChhhtsGZ.js → index-C0EQceqV.js} +66 -34
- package/dist/esm/{index-Clc-28O1.js → index-C7EAbm0C.js} +5 -4
- package/dist/esm/{index-CqneaaGd.js → index-C7F1yJyV.js} +13 -12
- package/dist/esm/{index-WlteAIqz.js → index-CXSPjEca.js} +5 -5
- package/dist/esm/{index-CKM1DdGm.js → index-Mq5pCWmZ.js} +3 -3
- package/dist/esm/{index-BvabGprD.js → index-PnwG0glX.js} +2 -1
- package/dist/esm/{index-T0JxBI8V.js → index-niemeDYi.js} +2 -2
- package/dist/esm/index.js +17 -18
- package/dist/esm/{input-shims-B8sfni1e.js → input-shims-CM5m0K8T.js} +15 -12
- package/dist/esm/input.utils-DhJNJPiU.js +147 -0
- package/dist/esm/ion-accordion_2.entry.js +376 -376
- package/dist/esm/ion-action-sheet.entry.js +87 -179
- package/dist/esm/ion-alert.entry.js +126 -251
- package/dist/esm/ion-app_8.entry.js +607 -460
- package/dist/esm/ion-avatar_3.entry.js +125 -19
- package/dist/esm/ion-back-button.entry.js +49 -65
- package/dist/esm/ion-backdrop.entry.js +22 -23
- package/dist/esm/ion-breadcrumb_2.entry.js +157 -210
- package/dist/esm/ion-button_2.entry.js +118 -153
- package/dist/esm/ion-card_5.entry.js +80 -110
- package/dist/esm/ion-checkbox.entry.js +134 -160
- package/dist/esm/ion-chip.entry.js +56 -21
- package/dist/esm/ion-col_3.entry.js +61 -186
- package/dist/esm/ion-datetime-button.entry.js +248 -256
- package/dist/esm/ion-datetime_3.entry.js +3206 -0
- package/dist/esm/ion-divider.entry.js +49 -0
- package/dist/esm/ion-fab_3.entry.js +109 -155
- package/dist/esm/ion-gallery-item.entry.js +57 -0
- package/dist/esm/ion-gallery.entry.js +606 -0
- package/dist/esm/ion-img.entry.js +17 -35
- package/dist/esm/ion-infinite-scroll_2.entry.js +157 -109
- package/dist/esm/ion-input-otp.entry.js +437 -435
- package/dist/esm/ion-input-password-toggle.entry.js +54 -40
- package/dist/esm/ion-input.entry.js +303 -349
- package/dist/esm/ion-item-option_3.entry.js +512 -137
- package/dist/esm/ion-item_8.entry.js +186 -218
- package/dist/esm/ion-loading.entry.js +69 -152
- package/dist/esm/ion-menu_3.entry.js +136 -182
- package/dist/esm/ion-modal.entry.js +459 -529
- package/dist/esm/ion-nav_2.entry.js +164 -104
- package/dist/esm/ion-picker-column-option.entry.js +40 -40
- package/dist/esm/ion-picker-column.entry.js +410 -422
- package/dist/esm/ion-picker.entry.js +401 -406
- package/dist/esm/ion-popover.entry.js +212 -324
- package/dist/esm/ion-progress-bar.entry.js +48 -36
- package/dist/esm/ion-radio_2.entry.js +162 -217
- package/dist/esm/ion-range.entry.js +251 -309
- package/dist/esm/ion-refresher_2.entry.js +127 -175
- package/dist/esm/ion-reorder_2.entry.js +47 -60
- package/dist/esm/ion-ripple-effect.entry.js +26 -18
- package/dist/esm/ion-route_4.entry.js +76 -179
- package/dist/esm/ion-searchbar.entry.js +305 -308
- package/dist/esm/ion-segment-content.entry.js +2 -2
- package/dist/esm/ion-segment-view.entry.js +27 -28
- package/dist/esm/ion-segment_2.entry.js +141 -177
- package/dist/esm/ion-select-modal.entry.js +71 -50
- package/dist/esm/ion-select_3.entry.js +416 -507
- package/dist/esm/ion-spinner.entry.js +36 -28
- package/dist/esm/ion-split-pane.entry.js +25 -34
- package/dist/esm/ion-tab-bar_2.entry.js +179 -116
- package/dist/esm/ion-tab_2.entry.js +30 -55
- package/dist/esm/ion-text.entry.js +7 -13
- package/dist/esm/ion-textarea.entry.js +309 -302
- package/dist/esm/ion-toast.entry.js +149 -244
- package/dist/esm/ion-toggle.entry.js +172 -184
- package/dist/esm/ionic-global-BJDU78B6.js +508 -0
- package/dist/esm/ionic.js +5 -5
- package/dist/esm/{ios.transition-DXRCmcbC.js → ios.transition-6oGu53GR.js} +21 -15
- package/dist/esm/{item-multiple-inputs-rU8VaNNg.js → item-multiple-inputs-C6onMFOo.js} +1 -1
- package/dist/esm/{keyboard-Cj8mLJeq.js → keyboard-XukEYIFf.js} +5 -4
- package/dist/esm/{keyboard-DAF8GNJ9.js → keyboard-x-uHYVoq.js} +3 -3
- package/dist/esm/loader.js +5 -5
- package/dist/esm/{md.transition-BMngO4i_.js → md.transition-Dy5HxiSE.js} +11 -9
- package/dist/esm/notch-controller-BYB7mUMg.js +153 -0
- package/dist/esm/{overlay-control-label-BSQPZ79H.js → overlay-control-label-CODBQrPj.js} +13 -11
- package/dist/esm/{overlays-CPmIs9Ls.js → overlays-C3YvaMgX.js} +333 -57
- package/dist/esm/scroll-hide-controller-B3MRYNXh.js +342 -0
- package/dist/esm/{select-option-render-C4m76VGH.js → select-option-render-BlKZ2H83.js} +4 -3
- package/dist/esm/{status-tap-CHB7KwIb.js → status-tap-DK-ylvU7.js} +5 -4
- package/dist/esm/{swipe-back-C9HW1bug.js → swipe-back-DFICtpMC.js} +6 -5
- package/dist/esm/theme-DaJxRxSQ.js +67 -0
- package/dist/esm/validity-BjW8SOqw.js +48 -0
- package/dist/html.html-data.json +2690 -123
- package/dist/ionic/index.esm.js +1 -1
- package/dist/ionic/ionic.esm.js +1 -1
- package/dist/ionic/p--sroV-k-.js +4 -0
- package/dist/ionic/p-0115c2fa.entry.js +4 -0
- package/dist/ionic/p-0ac15b5f.entry.js +4 -0
- package/dist/ionic/p-0b2c58e0.entry.js +4 -0
- package/dist/ionic/p-0bfb8d9e.entry.js +4 -0
- package/dist/ionic/p-1147fa06.entry.js +4 -0
- package/dist/ionic/p-1e45586e.entry.js +4 -0
- package/dist/ionic/p-1febf200.entry.js +4 -0
- package/dist/ionic/p-208cecae.entry.js +4 -0
- package/dist/ionic/p-29f69d29.entry.js +4 -0
- package/dist/ionic/p-2b5e04c5.entry.js +4 -0
- package/dist/ionic/p-311ef139.entry.js +4 -0
- package/dist/ionic/p-3eff3411.entry.js +4 -0
- package/dist/ionic/p-3f17704b.entry.js +4 -0
- package/dist/ionic/p-46e754ae.entry.js +4 -0
- package/dist/ionic/p-4901a10b.entry.js +4 -0
- package/dist/ionic/p-4c8178d8.entry.js +4 -0
- package/dist/ionic/p-5196bee9.entry.js +4 -0
- package/dist/ionic/p-5386b094.entry.js +4 -0
- package/dist/ionic/p-54579b68.entry.js +4 -0
- package/dist/ionic/p-54baa1af.entry.js +4 -0
- package/dist/ionic/p-59e59209.entry.js +4 -0
- package/dist/ionic/p-5ad0c670.entry.js +4 -0
- package/dist/ionic/p-62602fbd.entry.js +4 -0
- package/dist/ionic/p-6b86cb62.entry.js +4 -0
- package/dist/ionic/p-7134537b.entry.js +4 -0
- package/dist/ionic/p-72eacca0.entry.js +4 -0
- package/dist/ionic/p-7ae06f6f.entry.js +4 -0
- package/dist/ionic/p-7bde9ee1.entry.js +4 -0
- package/dist/ionic/p-7f59020c.entry.js +4 -0
- package/dist/ionic/p-7k7Q1A38.js +4 -0
- package/dist/ionic/p-87ab986c.entry.js +4 -0
- package/dist/ionic/p-9dff6288.entry.js +4 -0
- package/dist/ionic/p-9e09cb80.entry.js +4 -0
- package/dist/ionic/p-BFhQ1N-L.js +4 -0
- package/dist/ionic/p-BG7tpRhR.js +4 -0
- package/dist/ionic/p-BITyMTKr.js +4 -0
- package/dist/ionic/p-BRPONI7N.js +4 -0
- package/dist/ionic/p-BTEOs1at.js +4 -0
- package/dist/ionic/p-BVdSuKmt.js +4 -0
- package/dist/ionic/p-BYRVyMu9.js +4 -0
- package/dist/ionic/p-BjW8SOqw.js +4 -0
- package/dist/ionic/p-Bpx1lBiP.js +4 -0
- package/dist/ionic/p-BwKpO3Is.js +4 -0
- package/dist/ionic/p-C-BLhfUi.js +4 -0
- package/dist/ionic/p-C-aO35cw.js +4 -0
- package/dist/ionic/p-C0EQceqV.js +5 -0
- package/dist/ionic/p-CDrQfM-I.js +4 -0
- package/dist/ionic/p-CODBQrPj.js +4 -0
- package/dist/ionic/p-CTSaffvS.js +4 -0
- package/dist/ionic/p-CaM5HwzM.js +4 -0
- package/dist/ionic/p-CgaW5Zy8.js +4 -0
- package/dist/ionic/p-Cipl19Qe.js +4 -0
- package/dist/ionic/p-CnBfCmL2.js +4 -0
- package/dist/ionic/p-D-Xit5Ye.js +4 -0
- package/dist/ionic/p-D7LIC84Z.js +4 -0
- package/dist/ionic/p-D844sgjq.js +4 -0
- package/dist/ionic/p-DWDKFjrH.js +4 -0
- package/dist/ionic/p-DaJxRxSQ.js +4 -0
- package/dist/ionic/p-DhyWlGap.js +4 -0
- package/dist/ionic/p-DiyY-i-5.js +4 -0
- package/dist/ionic/p-DrxPmT9E.js +4 -0
- package/dist/ionic/p-PnwG0glX.js +4 -0
- package/dist/ionic/p-YIsE5bNG.js +4 -0
- package/dist/ionic/p-a320cdb2.entry.js +4 -0
- package/dist/ionic/p-a37444b3.entry.js +4 -0
- package/dist/ionic/p-a4bed36b.entry.js +4 -0
- package/dist/ionic/p-a7914fe5.entry.js +4 -0
- package/dist/ionic/p-aa298c58.entry.js +4 -0
- package/dist/ionic/p-ace3062d.entry.js +4 -0
- package/dist/ionic/p-b70775b0.entry.js +4 -0
- package/dist/ionic/p-b7c75507.entry.js +4 -0
- package/dist/ionic/p-b920f149.entry.js +4 -0
- package/dist/ionic/p-c39025c0.entry.js +4 -0
- package/dist/ionic/p-c9cda5ce.entry.js +4 -0
- package/dist/ionic/p-cc314123.entry.js +4 -0
- package/dist/ionic/p-d1f42864.entry.js +4 -0
- package/dist/ionic/p-d4506138.entry.js +4 -0
- package/dist/ionic/p-dbd06d8d.entry.js +4 -0
- package/dist/ionic/p-dda49380.entry.js +4 -0
- package/dist/ionic/p-de4e8418.entry.js +4 -0
- package/dist/ionic/p-e95618c4.entry.js +4 -0
- package/dist/ionic/p-f89fcf62.entry.js +4 -0
- package/dist/ionic/p-fcce2dda.entry.js +4 -0
- package/dist/ionic/p-fd2a869f.entry.js +4 -0
- package/dist/ionic/p-fd95a423.entry.js +4 -0
- package/dist/ionic/p-fe14205b.entry.js +4 -0
- package/dist/ionic/p-i6iV8hMy.js +4 -0
- package/dist/ionic/p-nUlpIttM.js +4 -0
- package/dist/ionic/p-o8OKV5aD.js +4 -0
- package/dist/ionic/p-vXpMhGrs.js +4 -0
- package/dist/ionic/p-zRFin7iz.js +4 -0
- package/dist/ionic/p-zn4qAQ_d.js +4 -0
- package/dist/types/components/accordion/accordion.d.ts +12 -3
- package/dist/types/components/accordion-group/accordion-group.d.ts +12 -1
- package/dist/types/components/action-sheet/action-sheet-interface.d.ts +3 -7
- package/dist/types/components/action-sheet/action-sheet.d.ts +3 -2
- package/dist/types/components/alert/alert-interface.d.ts +3 -7
- package/dist/types/components/alert/alert.d.ts +3 -2
- package/dist/types/components/app/app.d.ts +4 -5
- package/dist/types/components/avatar/avatar.d.ts +32 -0
- package/dist/types/components/back-button/back-button.d.ts +8 -1
- package/dist/types/components/backdrop/backdrop.d.ts +4 -0
- package/dist/types/components/badge/badge.d.ts +34 -1
- package/dist/types/components/breadcrumb/breadcrumb.d.ts +14 -1
- package/dist/types/components/breadcrumbs/breadcrumbs.d.ts +2 -2
- package/dist/types/components/button/button.d.ts +23 -8
- package/dist/types/components/buttons/buttons.d.ts +5 -1
- package/dist/types/components/card/card.d.ts +8 -1
- package/dist/types/components/card-content/card-content.d.ts +2 -1
- package/dist/types/components/card-header/card-header.d.ts +3 -2
- package/dist/types/components/card-subtitle/card-subtitle.d.ts +2 -1
- package/dist/types/components/card-title/card-title.d.ts +2 -1
- package/dist/types/components/checkbox/checkbox.d.ts +26 -5
- package/dist/types/components/chip/chip.d.ts +26 -1
- package/dist/types/components/col/col.d.ts +52 -5
- package/dist/types/components/content/content.d.ts +3 -0
- package/dist/types/components/datetime/datetime.d.ts +26 -1
- package/dist/types/components/datetime/utils/data.d.ts +5 -5
- package/dist/types/components/datetime-button/datetime-button.d.ts +2 -1
- package/dist/types/components/divider/divider.d.ts +20 -0
- package/dist/types/components/fab/fab.d.ts +4 -0
- package/dist/types/components/fab-button/fab-button.d.ts +11 -3
- package/dist/types/components/fab-list/fab-list.d.ts +4 -0
- package/dist/types/components/footer/footer-interface.d.ts +1 -0
- package/dist/types/components/footer/footer.d.ts +20 -3
- package/dist/types/components/gallery/gallery-constants.d.ts +9 -0
- package/dist/types/components/gallery/gallery-interface.d.ts +10 -0
- package/dist/types/components/gallery/gallery.d.ts +218 -0
- package/dist/types/components/gallery/test/utils.d.ts +3 -0
- package/dist/types/components/gallery-item/gallery-item.d.ts +33 -0
- package/dist/types/components/grid/grid.d.ts +4 -0
- package/dist/types/components/header/header-interface.d.ts +1 -0
- package/dist/types/components/header/header.d.ts +26 -3
- package/dist/types/components/header/header.utils.d.ts +4 -5
- package/dist/types/components/img/img.d.ts +2 -1
- package/dist/types/components/infinite-scroll/infinite-scroll.d.ts +21 -0
- package/dist/types/components/infinite-scroll-content/infinite-scroll-content.d.ts +4 -0
- package/dist/types/components/input/input.d.ts +40 -17
- package/dist/types/components/input-otp/input-otp.d.ts +37 -0
- package/dist/types/components/input-password-toggle/input-password-toggle.d.ts +14 -0
- package/dist/types/components/item/item.d.ts +17 -4
- package/dist/types/components/item-divider/item-divider.d.ts +2 -1
- package/dist/types/components/item-group/item-group.d.ts +4 -0
- package/dist/types/components/item-option/item-option.d.ts +18 -1
- package/dist/types/components/item-options/item-options.d.ts +4 -0
- package/dist/types/components/item-sliding/item-sliding.d.ts +47 -1
- package/dist/types/components/item-sliding/test/test.utils.d.ts +13 -0
- package/dist/types/components/label/label.d.ts +2 -1
- package/dist/types/components/list/list.d.ts +15 -1
- package/dist/types/components/list-header/list-header.d.ts +2 -1
- package/dist/types/components/loading/loading-interface.d.ts +2 -7
- package/dist/types/components/loading/loading.d.ts +3 -2
- package/dist/types/components/menu/menu.d.ts +3 -0
- package/dist/types/components/menu-button/menu-button.d.ts +8 -1
- package/dist/types/components/menu-toggle/menu-toggle.d.ts +3 -0
- package/dist/types/components/modal/animations/ionic.enter.d.ts +6 -0
- package/dist/types/components/modal/animations/ionic.leave.d.ts +6 -0
- package/dist/types/components/modal/gestures/sheet.d.ts +1 -1
- package/dist/types/components/modal/modal-interface.d.ts +4 -16
- package/dist/types/components/modal/modal.d.ts +15 -12
- package/dist/types/components/nav/nav-interface.d.ts +10 -1
- package/dist/types/components/nav/nav.d.ts +27 -3
- package/dist/types/components/nav-link/nav-link.d.ts +4 -0
- package/dist/types/components/note/note.d.ts +2 -1
- package/dist/types/components/picker/picker.d.ts +2 -1
- package/dist/types/components/picker-column/picker-column.d.ts +2 -1
- package/dist/types/components/picker-column-option/picker-column-option.d.ts +4 -0
- package/dist/types/components/picker-legacy/animations/ios.enter.d.ts +5 -0
- package/dist/types/components/picker-legacy/animations/ios.leave.d.ts +5 -0
- package/dist/types/components/picker-legacy/picker-interface.d.ts +52 -0
- package/dist/types/components/picker-legacy/picker.d.ts +159 -0
- package/dist/types/components/picker-legacy-column/picker-column.d.ts +46 -0
- package/dist/types/components/picker-legacy-column/test/test.utils.d.ts +9 -0
- package/dist/types/components/popover/popover-interface.d.ts +3 -6
- package/dist/types/components/popover/popover.d.ts +6 -5
- package/dist/types/components/progress-bar/progress-bar.d.ts +10 -1
- package/dist/types/components/radio/radio.d.ts +2 -1
- package/dist/types/components/radio-group/radio-group.d.ts +12 -0
- package/dist/types/components/range/range.d.ts +2 -1
- package/dist/types/components/refresher/refresher.d.ts +2 -1
- package/dist/types/components/refresher-content/refresher-content.d.ts +10 -0
- package/dist/types/components/reorder/reorder.d.ts +9 -0
- package/dist/types/components/reorder-group/reorder-group.d.ts +4 -0
- package/dist/types/components/ripple-effect/ripple-effect.d.ts +4 -0
- package/dist/types/components/route/route.d.ts +5 -1
- package/dist/types/components/router/router.d.ts +4 -0
- package/dist/types/components/router-link/router-link.d.ts +4 -0
- package/dist/types/components/router-outlet/router-outlet.d.ts +4 -8
- package/dist/types/components/row/row.d.ts +4 -0
- package/dist/types/components/searchbar/searchbar.d.ts +57 -11
- package/dist/types/components/segment/segment.d.ts +2 -1
- package/dist/types/components/segment-button/segment-button.d.ts +2 -1
- package/dist/types/components/select/select.d.ts +55 -26
- package/dist/types/components/select-modal/select-modal.d.ts +13 -0
- package/dist/types/components/select-option/select-option.d.ts +7 -4
- package/dist/types/components/select-popover/select-popover.d.ts +3 -0
- package/dist/types/components/skeleton-text/skeleton-text.d.ts +4 -0
- package/dist/types/components/spinner/spinner.d.ts +15 -0
- package/dist/types/components/split-pane/split-pane.d.ts +4 -0
- package/dist/types/components/tab/tab.d.ts +4 -0
- package/dist/types/components/tab-bar/tab-bar-interface.d.ts +1 -0
- package/dist/types/components/tab-bar/tab-bar.d.ts +41 -3
- package/dist/types/components/tab-button/tab-button.d.ts +12 -1
- package/dist/types/components/tabs/tabs.d.ts +3 -0
- package/dist/types/components/text/text.d.ts +2 -1
- package/dist/types/components/textarea/textarea.d.ts +58 -16
- package/dist/types/components/thumbnail/thumbnail.d.ts +4 -0
- package/dist/types/components/title/title.d.ts +4 -0
- package/dist/types/components/toast/animations/utils.d.ts +2 -2
- package/dist/types/components/toast/toast-interface.d.ts +3 -7
- package/dist/types/components/toast/toast.d.ts +19 -2
- package/dist/types/components/toggle/toggle.d.ts +18 -1
- package/dist/types/components/toolbar/toolbar.d.ts +43 -3
- package/dist/types/components.d.ts +2171 -263
- package/dist/types/global/ionic-global.d.ts +28 -2
- package/dist/types/index.d.ts +1 -1
- package/dist/types/interface.d.ts +4 -0
- package/dist/types/utils/config.d.ts +133 -3
- package/dist/types/utils/css-value-validation.d.ts +21 -0
- package/dist/types/utils/focus-trap.d.ts +1 -1
- package/dist/types/utils/focus-visible.d.ts +13 -0
- package/dist/types/utils/forms/clear-button-press-controller.d.ts +20 -0
- package/dist/types/utils/forms/index.d.ts +1 -1
- package/dist/types/utils/forms/validity.d.ts +7 -0
- package/dist/types/utils/helpers.d.ts +22 -0
- package/dist/types/utils/logging/index.d.ts +1 -2
- package/dist/types/utils/overlay-control-label.d.ts +11 -9
- package/dist/types/utils/overlays-interface.d.ts +31 -1
- package/dist/types/utils/overlays.d.ts +10 -12
- package/dist/types/utils/scroll-hide-controller.d.ts +56 -0
- package/dist/types/utils/test/playwright/drag-element.d.ts +16 -3
- package/dist/types/utils/test/playwright/generator.d.ts +31 -2
- package/dist/types/utils/test/playwright/playwright-page.d.ts +1 -1
- package/dist/types/utils/test/playwright/testExpect.d.ts +1 -1
- package/dist/types/utils/theme.d.ts +9 -0
- package/hydrate/index.js +12008 -10485
- package/hydrate/index.mjs +12008 -10485
- package/package.json +16 -56
- package/components/p--m5cCjbK.js +0 -4
- package/components/p-1jI5oW-W.js +0 -4
- package/components/p-8FN7p701.js +0 -4
- package/components/p-B4uHHhPK.js +0 -4
- package/components/p-BMPN55of.js +0 -4
- package/components/p-BNJOu1Q2.js +0 -4
- package/components/p-BOvLNVKq.js +0 -4
- package/components/p-BSQPZ79H.js +0 -4
- package/components/p-BeamQXHF.js +0 -4
- package/components/p-BhamHSw3.js +0 -4
- package/components/p-Bjig0DJK.js +0 -4
- package/components/p-BjluhQMI.js +0 -4
- package/components/p-BlsIikdZ.js +0 -4
- package/components/p-BmVRXR1y.js +0 -4
- package/components/p-BqPNzJf6.js +0 -4
- package/components/p-BrD9Xv62.js +0 -4
- package/components/p-BvJqoZ5R.js +0 -4
- package/components/p-Bz6z3Asd.js +0 -4
- package/components/p-C5KYjZWD.js +0 -4
- package/components/p-C6HnVvHO.js +0 -4
- package/components/p-C7jvh5Wy.js +0 -4
- package/components/p-C9BGR5fy.js +0 -4
- package/components/p-CB-y1CdP.js +0 -4
- package/components/p-CEW4RXZO.js +0 -4
- package/components/p-CHH3loEE.js +0 -4
- package/components/p-CIGNaXM1.js +0 -4
- package/components/p-CJKUWjmg.js +0 -4
- package/components/p-C_phlPMC.js +0 -4
- package/components/p-CbhUdtjf.js +0 -4
- package/components/p-CejmQs3h.js +0 -4
- package/components/p-CtZqa4HM.js +0 -4
- package/components/p-D7-vHX0A.js +0 -4
- package/components/p-D9qIVSWm.js +0 -4
- package/components/p-DD5fQ4EQ.js +0 -4
- package/components/p-DE-3iMNW.js +0 -4
- package/components/p-DFvZn99E.js +0 -4
- package/components/p-DHFt2rdc.js +0 -4
- package/components/p-DJztqcrH.js +0 -4
- package/components/p-DM-PrAoh.js +0 -4
- package/components/p-DSzSbVP2.js +0 -4
- package/components/p-DV85C0e0.js +0 -4
- package/components/p-DWCzVL3Y.js +0 -4
- package/components/p-D_RCyzwu.js +0 -4
- package/components/p-D_tD8r3L.js +0 -4
- package/components/p-DaA_8eqt.js +0 -4
- package/components/p-DjCtLZbF.js +0 -4
- package/components/p-Dmd2xqCe.js +0 -4
- package/components/p-Dojwmvde.js +0 -4
- package/components/p-G0TxqHfe.js +0 -4
- package/components/p-G6JR-cr_.js +0 -4
- package/components/p-GG5GhznE.js +0 -4
- package/components/p-LpMHEu3v.js +0 -4
- package/components/p-TXPDHL13.js +0 -4
- package/components/p-UIBJkZf8.js +0 -4
- package/components/p-ZjP4CjeZ.js +0 -4
- package/components/p-_IKFD3ID.js +0 -4
- package/components/p-byZM6qHV.js +0 -4
- package/components/p-dKq2jIum.js +0 -4
- package/components/p-fruGqVHh.js +0 -4
- package/components/p-iYhH60Tc.js +0 -4
- package/components/p-ia3IDdJS.js +0 -4
- package/dist/cjs/hardware-back-button-fqpYh-kd.js +0 -121
- package/dist/cjs/index-DkNv4J_i.js +0 -10
- package/dist/cjs/input.utils-BZdMWVrt.js +0 -35
- package/dist/cjs/ion-datetime.cjs.entry.js +0 -2770
- package/dist/cjs/ionic-global-k6hOWWpn.js +0 -156
- package/dist/cjs/keyboard-controller-PtZoN2GS.js +0 -167
- package/dist/cjs/slot-mutation-controller-DPHmqXdV.js +0 -397
- package/dist/cjs/validity-BpS37YFM.js +0 -19
- package/dist/collection/utils/forms/start-container-controller.js +0 -132
- package/dist/esm/hardware-back-button-gLJHMX_F.js +0 -115
- package/dist/esm/index-ZjP4CjeZ.js +0 -7
- package/dist/esm/input.utils-B1ValN_N.js +0 -33
- package/dist/esm/ion-datetime.entry.js +0 -2768
- package/dist/esm/ionic-global-BVB7BrLT.js +0 -151
- package/dist/esm/keyboard-controller-DEwoa1ev.js +0 -165
- package/dist/esm/slot-mutation-controller-DiE_C9un.js +0 -393
- package/dist/esm/theme-byZM6qHV.js +0 -48
- package/dist/esm/validity-DJztqcrH.js +0 -17
- package/dist/ionic/p-06ec7136.entry.js +0 -4
- package/dist/ionic/p-09fe4fa3.entry.js +0 -4
- package/dist/ionic/p-10d45a07.entry.js +0 -4
- package/dist/ionic/p-208c8a07.entry.js +0 -4
- package/dist/ionic/p-212474fa.entry.js +0 -4
- package/dist/ionic/p-2eef1396.entry.js +0 -4
- package/dist/ionic/p-347e005d.entry.js +0 -4
- package/dist/ionic/p-3a0b3f1d.entry.js +0 -4
- package/dist/ionic/p-3b071259.entry.js +0 -4
- package/dist/ionic/p-40424a88.entry.js +0 -4
- package/dist/ionic/p-4204184c.entry.js +0 -4
- package/dist/ionic/p-47464391.entry.js +0 -4
- package/dist/ionic/p-4eOQC00Z.js +0 -4
- package/dist/ionic/p-4f9c9126.entry.js +0 -4
- package/dist/ionic/p-5JsKPLJD.js +0 -4
- package/dist/ionic/p-5bc485c6.entry.js +0 -4
- package/dist/ionic/p-603a61e6.entry.js +0 -4
- package/dist/ionic/p-60576951.entry.js +0 -4
- package/dist/ionic/p-67a81d33.entry.js +0 -4
- package/dist/ionic/p-6affb775.entry.js +0 -4
- package/dist/ionic/p-6f120c25.entry.js +0 -4
- package/dist/ionic/p-71c82b60.entry.js +0 -4
- package/dist/ionic/p-79325ffe.entry.js +0 -4
- package/dist/ionic/p-7CBuOvEo.js +0 -4
- package/dist/ionic/p-7e4d51fa.entry.js +0 -4
- package/dist/ionic/p-7f5d4664.entry.js +0 -4
- package/dist/ionic/p-80ee82fc.entry.js +0 -4
- package/dist/ionic/p-84af7dbc.entry.js +0 -4
- package/dist/ionic/p-89ca830a.entry.js +0 -4
- package/dist/ionic/p-93b8ec8f.entry.js +0 -4
- package/dist/ionic/p-946f65c2.entry.js +0 -4
- package/dist/ionic/p-9c4b39fb.entry.js +0 -4
- package/dist/ionic/p-B1NEZUzQ.js +0 -4
- package/dist/ionic/p-B1ck5iy-.js +0 -4
- package/dist/ionic/p-B4FrqdW0.js +0 -4
- package/dist/ionic/p-BB0LlG4y.js +0 -4
- package/dist/ionic/p-BMPN55of.js +0 -4
- package/dist/ionic/p-BSQPZ79H.js +0 -4
- package/dist/ionic/p-BYEAtHr-.js +0 -4
- package/dist/ionic/p-BhamHSw3.js +0 -4
- package/dist/ionic/p-BmVRXR1y.js +0 -4
- package/dist/ionic/p-BvabGprD.js +0 -4
- package/dist/ionic/p-C-94tAim.js +0 -4
- package/dist/ionic/p-C-eHZMYE.js +0 -4
- package/dist/ionic/p-CBR_W98Z.js +0 -4
- package/dist/ionic/p-CBWAXjA5.js +0 -4
- package/dist/ionic/p-CIGNaXM1.js +0 -4
- package/dist/ionic/p-CMRtMbJc.js +0 -4
- package/dist/ionic/p-CPcPmkGv.js +0 -4
- package/dist/ionic/p-CaRuIadB.js +0 -4
- package/dist/ionic/p-Cdjxf_yg.js +0 -4
- package/dist/ionic/p-ChhhtsGZ.js +0 -5
- package/dist/ionic/p-CzS1qWve.js +0 -4
- package/dist/ionic/p-D5t_-oMk.js +0 -4
- package/dist/ionic/p-D94_RztK.js +0 -4
- package/dist/ionic/p-DJztqcrH.js +0 -4
- package/dist/ionic/p-DWCzVL3Y.js +0 -4
- package/dist/ionic/p-DjjfauRM.js +0 -4
- package/dist/ionic/p-DkUB-ROc.js +0 -4
- package/dist/ionic/p-Dn0mqQ_R.js +0 -4
- package/dist/ionic/p-Dojwmvde.js +0 -4
- package/dist/ionic/p-DplOqGUv.js +0 -4
- package/dist/ionic/p-Dst_XmZh.js +0 -4
- package/dist/ionic/p-T71k3C35.js +0 -4
- package/dist/ionic/p-TXPDHL13.js +0 -4
- package/dist/ionic/p-UIBJkZf8.js +0 -4
- package/dist/ionic/p-ZjP4CjeZ.js +0 -4
- package/dist/ionic/p-a438b193.entry.js +0 -4
- package/dist/ionic/p-babaaaa7.entry.js +0 -4
- package/dist/ionic/p-be08d500.entry.js +0 -4
- package/dist/ionic/p-be9a4f51.entry.js +0 -4
- package/dist/ionic/p-byZM6qHV.js +0 -4
- package/dist/ionic/p-c00d3092.entry.js +0 -4
- package/dist/ionic/p-c36dc8f5.entry.js +0 -4
- package/dist/ionic/p-c72a7e17.entry.js +0 -4
- package/dist/ionic/p-c8edd88c.entry.js +0 -4
- package/dist/ionic/p-ce0e380b.entry.js +0 -4
- package/dist/ionic/p-ce32912b.entry.js +0 -4
- package/dist/ionic/p-d07cf130.entry.js +0 -4
- package/dist/ionic/p-d27edeb3.entry.js +0 -4
- package/dist/ionic/p-d5d2c506.entry.js +0 -4
- package/dist/ionic/p-d5e31ca9.entry.js +0 -4
- package/dist/ionic/p-de91444f.entry.js +0 -4
- package/dist/ionic/p-ded69ceb.entry.js +0 -4
- package/dist/ionic/p-df72866d.entry.js +0 -4
- package/dist/ionic/p-e47e3151.entry.js +0 -4
- package/dist/ionic/p-e621e5e8.entry.js +0 -4
- package/dist/ionic/p-eea9cf93.entry.js +0 -4
- package/dist/ionic/p-f402f5a4.entry.js +0 -4
- package/dist/ionic/p-fe1bfbcf.entry.js +0 -4
- package/dist/ionic/p-ffb90460.entry.js +0 -4
- package/dist/types/utils/forms/start-container-controller.d.ts +0 -34
- /package/dist/collection/components/{input-password-toggle/input-password-toggle.css → refresher-content/refresher-content.css} +0 -0
|
@@ -3,21 +3,21 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { Build, Host, h, forceUpdate } from "@stencil/core";
|
|
5
5
|
import { ENABLE_HTML_CONTENT_DEFAULT } from "../../utils/config";
|
|
6
|
-
import { compareOptions, createNotchController,
|
|
7
|
-
import {
|
|
6
|
+
import { compareOptions, createNotchController, isOptionSelected, checkInvalidState } from "../../utils/forms/index";
|
|
7
|
+
import { suppressFocusVisible, renderHiddenInput, inheritAttributes } from "../../utils/helpers";
|
|
8
8
|
import { printIonWarning } from "../../utils/logging/index";
|
|
9
9
|
import { actionSheetController, alertController, popoverController, modalController } from "../../utils/overlays";
|
|
10
10
|
import { isRTL } from "../../utils/rtl/index";
|
|
11
11
|
import { reflectPropertiesToAttributes, sanitizeDOMTree } from "../../utils/sanitization/index";
|
|
12
|
-
import { createSlotMutationController } from "../../utils/slot-mutation-controller";
|
|
13
12
|
import { createColorClasses, hostContext } from "../../utils/theme";
|
|
14
13
|
import { watchForOptions } from "../../utils/watch-options";
|
|
15
14
|
import { caretDownSharp, chevronExpand } from "ionicons/icons";
|
|
16
15
|
import { config } from "../../global/config";
|
|
17
|
-
import {
|
|
16
|
+
import { getIonTheme } from "../../global/ionic-global";
|
|
18
17
|
// TODO(FW-2832): types
|
|
19
18
|
/**
|
|
20
|
-
* @virtualProp {"ios" | "md"} mode - The mode determines
|
|
19
|
+
* @virtualProp {"ios" | "md"} mode - The mode determines the platform behaviors of the component.
|
|
20
|
+
* @virtualProp {"ios" | "md" | "ionic"} theme - The theme determines the visual appearance of the component.
|
|
21
21
|
*
|
|
22
22
|
* @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
23
|
* @slot start - Content to display at the leading edge of the select.
|
|
@@ -33,244 +33,154 @@ import { getIonMode } from "../../global/ionic-global";
|
|
|
33
33
|
* @part error-text - Supporting text displayed beneath the select when the select is invalid and touched.
|
|
34
34
|
* @part bottom - The container element for helper text, error text, and counter.
|
|
35
35
|
* @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.
|
|
36
|
+
* @part inner - The inner element of the wrapper that manages the slots, selected values or placeholder, and toggle icons.
|
|
39
37
|
*/
|
|
40
38
|
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;
|
|
39
|
+
constructor() {
|
|
40
|
+
this.inputId = `ion-sel-${selectIds++}`;
|
|
41
|
+
this.helperTextId = `${this.inputId}-helper-text`;
|
|
42
|
+
this.errorTextId = `${this.inputId}-error-text`;
|
|
43
|
+
this.inheritedAttributes = {};
|
|
44
|
+
this.customHTMLEnabled = config.get('innerHTMLTemplatesEnabled', ENABLE_HTML_CONTENT_DEFAULT);
|
|
45
|
+
this.isExpanded = false;
|
|
46
|
+
/**
|
|
47
|
+
* The `hasFocus` state ensures the focus class is
|
|
48
|
+
* added regardless of how the element is focused.
|
|
49
|
+
* The `ion-focused` class only applies when focused
|
|
50
|
+
* via tabbing, not by clicking.
|
|
51
|
+
* The `has-focus` logic was added to ensure the class
|
|
52
|
+
* is applied in both cases.
|
|
53
|
+
*/
|
|
54
|
+
this.hasFocus = false;
|
|
55
|
+
/**
|
|
56
|
+
* Track validation state for proper aria-live announcements.
|
|
57
|
+
*/
|
|
58
|
+
this.isInvalid = false;
|
|
59
|
+
/**
|
|
60
|
+
* The text to display on the cancel button.
|
|
61
|
+
*/
|
|
62
|
+
this.cancelText = 'Cancel';
|
|
63
|
+
/**
|
|
64
|
+
* If `true`, the cancel button will display an icon instead of the `cancelText`.
|
|
65
|
+
* Only applies when `interface` is set to `"modal"`. Has no effect on `"action-sheet"`,
|
|
66
|
+
* `"alert"`, or `"popover"` interfaces.
|
|
67
|
+
* When `cancelIcon` is `true`, the `cancelText` property is ignored for display
|
|
68
|
+
* but is used as the accessible label for the icon button.
|
|
69
|
+
*/
|
|
70
|
+
this.cancelIcon = false;
|
|
71
|
+
/**
|
|
72
|
+
* If `true`, the user cannot interact with the select.
|
|
73
|
+
*/
|
|
74
|
+
this.disabled = false;
|
|
75
|
+
/**
|
|
76
|
+
* The interface the select should use: `action-sheet`, `popover`, `alert`, or `modal`.
|
|
77
|
+
*/
|
|
78
|
+
this.interface = 'alert';
|
|
79
|
+
/**
|
|
80
|
+
* Any additional options that the `alert`, `action-sheet` or `popover` interface
|
|
81
|
+
* can take. See the [ion-alert docs](./alert), the
|
|
82
|
+
* [ion-action-sheet docs](./action-sheet), the
|
|
83
|
+
* [ion-popover docs](./popover), and the [ion-modal docs](./modal) for the
|
|
84
|
+
* create options for each interface.
|
|
85
|
+
*
|
|
86
|
+
* Note: `interfaceOptions` will not override `inputs` or `buttons` with the `alert` interface.
|
|
87
|
+
*/
|
|
88
|
+
this.interfaceOptions = {};
|
|
89
|
+
/**
|
|
90
|
+
* Where to place the label relative to the select.
|
|
91
|
+
* `"start"`: The label will appear to the left of the select in LTR and to the right in RTL.
|
|
92
|
+
* `"end"`: The label will appear to the right of the select in LTR and to the left in RTL.
|
|
93
|
+
* `"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.
|
|
94
|
+
* `"stacked"`: The label will appear smaller and above the select regardless even when the select is blurred or has no value.
|
|
95
|
+
* `"fixed"`: The label has the same behavior as `"start"` except it also has a fixed width. Long text will be truncated with ellipses ("...").
|
|
96
|
+
* When using `"floating"` or `"stacked"` we recommend initializing the select with either a `value` or a `placeholder`.
|
|
97
|
+
*/
|
|
98
|
+
this.labelPlacement = 'start';
|
|
99
|
+
/**
|
|
100
|
+
* If `true`, the select can accept multiple values.
|
|
101
|
+
*/
|
|
102
|
+
this.multiple = false;
|
|
103
|
+
/**
|
|
104
|
+
* The name of the control, which is submitted with the form data.
|
|
105
|
+
*/
|
|
106
|
+
this.name = this.inputId;
|
|
107
|
+
/**
|
|
108
|
+
* The text to display on the ok button.
|
|
109
|
+
*/
|
|
110
|
+
this.okText = 'OK';
|
|
111
|
+
/**
|
|
112
|
+
* If true, screen readers will announce it as a required field. This property
|
|
113
|
+
* works only for accessibility purposes, it will not prevent the form from
|
|
114
|
+
* submitting if the value is invalid.
|
|
115
|
+
*/
|
|
116
|
+
this.required = false;
|
|
117
|
+
this.onClick = (ev) => {
|
|
118
|
+
const target = ev.target;
|
|
119
|
+
const closestSlot = target.closest('[slot="start"], [slot="end"]');
|
|
120
|
+
if (target === this.el || closestSlot === null) {
|
|
121
|
+
this.setFocus();
|
|
122
|
+
this.open(ev);
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
/**
|
|
126
|
+
* Prevent clicks to the start/end slots from opening the select.
|
|
127
|
+
* We ensure the target isn't this element in case the select is slotted
|
|
128
|
+
* in, for example, an item. This would prevent the select from ever
|
|
129
|
+
* being opened since the element itself has slot="start"/"end".
|
|
130
|
+
*
|
|
131
|
+
* Clicking a slotted element also causes a click
|
|
132
|
+
* on the <label> element (since it wraps the slots).
|
|
133
|
+
* Clicking <label> dispatches another click event on
|
|
134
|
+
* the native form control that then bubbles up to this
|
|
135
|
+
* listener. This additional event targets the host
|
|
136
|
+
* element, so the select overlay is opened.
|
|
137
|
+
*
|
|
138
|
+
* When the slotted elements are clicked (and therefore
|
|
139
|
+
* the ancestor <label> element) we want to prevent the label
|
|
140
|
+
* from dispatching another click event.
|
|
141
|
+
*
|
|
142
|
+
* Do not call stopPropagation() because this will cause
|
|
143
|
+
* click handlers on the slotted elements to never fire in React.
|
|
144
|
+
* When developers do onClick in React a native "click" listener
|
|
145
|
+
* is added on the root element, not the slotted element. When that
|
|
146
|
+
* native click listener fires, React then dispatches the synthetic
|
|
147
|
+
* click event on the slotted element. However, if stopPropagation
|
|
148
|
+
* is called then the native click event will never bubble up
|
|
149
|
+
* to the root element.
|
|
150
|
+
*/
|
|
151
|
+
ev.preventDefault();
|
|
152
|
+
}
|
|
153
|
+
};
|
|
154
|
+
this.onFocus = () => {
|
|
155
|
+
this.hasFocus = true;
|
|
156
|
+
this.ionFocus.emit();
|
|
157
|
+
};
|
|
158
|
+
this.onBlur = () => {
|
|
159
|
+
this.hasFocus = false;
|
|
160
|
+
this.ionBlur.emit();
|
|
161
|
+
};
|
|
162
|
+
/**
|
|
163
|
+
* Stops propagation when the label is clicked,
|
|
164
|
+
* otherwise, two clicks will be triggered.
|
|
165
|
+
*/
|
|
166
|
+
this.onLabelClick = (ev) => {
|
|
167
|
+
// Only stop propagation if the click was directly on the label
|
|
168
|
+
// and not on the input or other child elements
|
|
169
|
+
if (ev.target === ev.currentTarget) {
|
|
170
|
+
ev.stopPropagation();
|
|
171
|
+
}
|
|
172
|
+
};
|
|
173
|
+
}
|
|
225
174
|
styleChanged() {
|
|
226
175
|
this.emitStyle();
|
|
227
176
|
}
|
|
228
177
|
setValue(value) {
|
|
229
|
-
if (this.isValueEqual(this.value, value)) {
|
|
230
|
-
return;
|
|
231
|
-
}
|
|
232
178
|
this.value = value;
|
|
233
179
|
this.ionChange.emit({ value });
|
|
234
180
|
}
|
|
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
181
|
async connectedCallback() {
|
|
264
182
|
const { el } = this;
|
|
265
|
-
this.slotMutationController = createSlotMutationController(el, ['label', 'start', 'end'], () => {
|
|
266
|
-
this.startContainerController?.calculateStartContainerWidth();
|
|
267
|
-
forceUpdate(this);
|
|
268
|
-
});
|
|
269
183
|
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
184
|
this.updateOverlayOptions();
|
|
275
185
|
this.emitStyle();
|
|
276
186
|
this.mutationO = watchForOptions(this.el, 'ion-select-option', async () => {
|
|
@@ -342,18 +252,10 @@ export class Select {
|
|
|
342
252
|
this.mutationO.disconnect();
|
|
343
253
|
this.mutationO = undefined;
|
|
344
254
|
}
|
|
345
|
-
if (this.slotMutationController) {
|
|
346
|
-
this.slotMutationController.destroy();
|
|
347
|
-
this.slotMutationController = undefined;
|
|
348
|
-
}
|
|
349
255
|
if (this.notchController) {
|
|
350
256
|
this.notchController.destroy();
|
|
351
257
|
this.notchController = undefined;
|
|
352
258
|
}
|
|
353
|
-
if (this.startContainerController) {
|
|
354
|
-
this.startContainerController.destroy();
|
|
355
|
-
this.startContainerController = undefined;
|
|
356
|
-
}
|
|
357
259
|
// Clean up validation observer to prevent memory leaks.
|
|
358
260
|
if (this.validationObserver) {
|
|
359
261
|
this.validationObserver.disconnect();
|
|
@@ -375,44 +277,65 @@ export class Select {
|
|
|
375
277
|
// Add logic to scroll selected item into view before presenting
|
|
376
278
|
const scrollSelectedIntoView = () => {
|
|
377
279
|
const indexOfSelected = this.childOpts.findIndex((o) => o.value === this.value);
|
|
280
|
+
/**
|
|
281
|
+
* Determine which option to focus when the overlay opens: the selected
|
|
282
|
+
* option if the select has a value, otherwise the first enabled option.
|
|
283
|
+
*/
|
|
284
|
+
let optionToFocus = null;
|
|
378
285
|
if (indexOfSelected > -1) {
|
|
379
286
|
const selectedItem = overlay.querySelector(`.select-interface-option:nth-of-type(${indexOfSelected + 1})`);
|
|
287
|
+
/**
|
|
288
|
+
* If the option contains an `ion-radio` or `ion-checkbox`, focus
|
|
289
|
+
* that instead of the option element itself. This ensures that
|
|
290
|
+
* screen readers will announce the role and state of the element
|
|
291
|
+
* (e.g. "radio button, checked") rather than only the option text.
|
|
292
|
+
* Alert and action sheet options are plain buttons, so fall back to
|
|
293
|
+
* focusing the option element itself in those cases.
|
|
294
|
+
*/
|
|
380
295
|
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
296
|
const interactiveEl = selectedItem.querySelector('ion-radio, ion-checkbox');
|
|
393
297
|
if (interactiveEl) {
|
|
394
298
|
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
299
|
}
|
|
399
|
-
|
|
300
|
+
optionToFocus = interactiveEl !== null && interactiveEl !== void 0 ? interactiveEl : selectedItem;
|
|
400
301
|
}
|
|
401
302
|
}
|
|
402
303
|
else {
|
|
403
304
|
/**
|
|
404
305
|
* If no value is set then focus the first enabled option.
|
|
405
306
|
*/
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
307
|
+
optionToFocus = overlay.querySelector('ion-radio:not(.radio-disabled), ion-checkbox:not(.checkbox-disabled)');
|
|
308
|
+
}
|
|
309
|
+
if (optionToFocus) {
|
|
310
|
+
/**
|
|
311
|
+
* Focus the option directly (`setFocus()`/`focus()`) rather than
|
|
312
|
+
* with `focusVisibleElement()`. `focusVisibleElement()` forces the
|
|
313
|
+
* `ion-focused` focus ring on regardless of how the overlay was
|
|
314
|
+
* opened, whereas a plain focus lets the focus-visible utility
|
|
315
|
+
* decide: it shows the ring only when the overlay was opened with
|
|
316
|
+
* the keyboard and hides it for pointer opens.
|
|
317
|
+
*
|
|
318
|
+
* `ion-radio` and `ion-checkbox` expose `setFocus`, which correctly
|
|
319
|
+
* delegates focus to their inner focusable element. This is needed
|
|
320
|
+
* because browsers such as Firefox do not delegate focus correctly
|
|
321
|
+
* when focusing an element with delegatesFocus. When the option is
|
|
322
|
+
* a plain button it can be focused directly.
|
|
323
|
+
*/
|
|
324
|
+
if (optionToFocus.matches('ion-radio, ion-checkbox')) {
|
|
325
|
+
optionToFocus.setFocus();
|
|
326
|
+
}
|
|
327
|
+
else {
|
|
328
|
+
optionToFocus.focus();
|
|
329
|
+
}
|
|
330
|
+
/**
|
|
331
|
+
* In the alert interface, when tabbing and pressing enter to open
|
|
332
|
+
* the select, the value that is currently selected flashes the
|
|
333
|
+
* focused state briefly before moving to its wrapper. This suppresses
|
|
334
|
+
* the focus visible state, so that the option will only show as
|
|
335
|
+
* focused when navigating with the keyboard.
|
|
336
|
+
*/
|
|
337
|
+
if (this.interface === 'alert') {
|
|
338
|
+
suppressFocusVisible();
|
|
416
339
|
}
|
|
417
340
|
}
|
|
418
341
|
};
|
|
@@ -512,7 +435,8 @@ export class Select {
|
|
|
512
435
|
const isSelected = isOptionSelected(selectValue, value, this.compareWith);
|
|
513
436
|
const { content, startContent, endContent } = extractOptionContent(option, this.customHTMLEnabled);
|
|
514
437
|
return {
|
|
515
|
-
|
|
438
|
+
role: isSelected ? 'selected' : '',
|
|
439
|
+
text: content !== null && content !== void 0 ? content : '',
|
|
516
440
|
cssClass: optClass,
|
|
517
441
|
disabled: option.disabled,
|
|
518
442
|
handler: () => {
|
|
@@ -549,7 +473,7 @@ export class Select {
|
|
|
549
473
|
return {
|
|
550
474
|
type: inputType,
|
|
551
475
|
cssClass: optClass,
|
|
552
|
-
label: content
|
|
476
|
+
label: content !== null && content !== void 0 ? content : '',
|
|
553
477
|
value,
|
|
554
478
|
checked: isOptionSelected(selectValue, value, this.compareWith),
|
|
555
479
|
disabled: option.disabled,
|
|
@@ -572,7 +496,7 @@ export class Select {
|
|
|
572
496
|
const optClass = `${OPTION_CLASS} ${copyClasses}`;
|
|
573
497
|
const { content, startContent, endContent } = extractOptionContent(option, this.customHTMLEnabled);
|
|
574
498
|
return {
|
|
575
|
-
text: content
|
|
499
|
+
text: content !== null && content !== void 0 ? content : '',
|
|
576
500
|
cssClass: optClass,
|
|
577
501
|
value,
|
|
578
502
|
checked: isOptionSelected(selectValue, value, this.compareWith),
|
|
@@ -595,8 +519,8 @@ export class Select {
|
|
|
595
519
|
async openPopover(ev) {
|
|
596
520
|
const { fill, labelPlacement } = this;
|
|
597
521
|
const interfaceOptions = this.interfaceOptions;
|
|
598
|
-
const
|
|
599
|
-
const showBackdrop =
|
|
522
|
+
const theme = getIonTheme(this);
|
|
523
|
+
const showBackdrop = theme === 'md' ? false : true;
|
|
600
524
|
const multiple = this.multiple;
|
|
601
525
|
const value = this.value;
|
|
602
526
|
let event = ev;
|
|
@@ -607,7 +531,7 @@ export class Select {
|
|
|
607
531
|
* when using a fill in MD mode or if the
|
|
608
532
|
* label is floating/stacked.
|
|
609
533
|
*/
|
|
610
|
-
if (hasFloatingOrStackedLabel || (
|
|
534
|
+
if (hasFloatingOrStackedLabel || (theme === 'md' && fill !== undefined)) {
|
|
611
535
|
size = 'cover';
|
|
612
536
|
/**
|
|
613
537
|
* Otherwise the popover
|
|
@@ -616,43 +540,34 @@ export class Select {
|
|
|
616
540
|
*/
|
|
617
541
|
}
|
|
618
542
|
else {
|
|
619
|
-
event = {
|
|
620
|
-
...ev,
|
|
621
|
-
detail: {
|
|
543
|
+
event = Object.assign(Object.assign({}, ev), { detail: {
|
|
622
544
|
ionShadowTarget: this.nativeWrapperEl,
|
|
623
|
-
}
|
|
624
|
-
};
|
|
545
|
+
} });
|
|
625
546
|
}
|
|
626
547
|
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: [
|
|
548
|
+
const hasRichContent = options.some((opt) => opt.startContent || opt.endContent || opt.description);
|
|
549
|
+
const popoverOpts = Object.assign(Object.assign({ theme,
|
|
550
|
+
event, alignment: 'center', size,
|
|
551
|
+
showBackdrop }, interfaceOptions), { component: 'ion-select-popover', cssClass: [
|
|
637
552
|
'select-popover',
|
|
638
553
|
hasRichContent ? 'select-popover-rich-content' : undefined,
|
|
639
554
|
interfaceOptions.cssClass,
|
|
640
|
-
],
|
|
641
|
-
componentProps: {
|
|
555
|
+
], componentProps: {
|
|
642
556
|
header: interfaceOptions.header,
|
|
643
557
|
subHeader: interfaceOptions.subHeader,
|
|
644
558
|
message: interfaceOptions.message,
|
|
645
559
|
multiple,
|
|
646
560
|
value,
|
|
647
561
|
options,
|
|
648
|
-
}
|
|
649
|
-
};
|
|
562
|
+
} });
|
|
650
563
|
/**
|
|
651
564
|
* Workaround for Stencil to autodefine
|
|
652
565
|
* ion-select-popover and ion-popover when
|
|
653
566
|
* using Custom Elements build.
|
|
654
567
|
*/
|
|
568
|
+
// eslint-disable-next-line
|
|
655
569
|
if (false) {
|
|
570
|
+
// eslint-disable-next-line
|
|
656
571
|
// @ts-ignore
|
|
657
572
|
document.createElement('ion-select-popover');
|
|
658
573
|
document.createElement('ion-popover');
|
|
@@ -660,20 +575,17 @@ export class Select {
|
|
|
660
575
|
return popoverController.create(popoverOpts);
|
|
661
576
|
}
|
|
662
577
|
async openActionSheet() {
|
|
663
|
-
const
|
|
578
|
+
const theme = getIonTheme(this);
|
|
664
579
|
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
|
-
};
|
|
580
|
+
const actionSheetOpts = Object.assign(Object.assign({ theme }, interfaceOptions), { buttons: this.createActionSheetButtons(this.childOpts, this.value), cssClass: ['select-action-sheet', interfaceOptions.cssClass] });
|
|
671
581
|
/**
|
|
672
582
|
* Workaround for Stencil to autodefine
|
|
673
583
|
* ion-action-sheet when
|
|
674
584
|
* using Custom Elements build.
|
|
675
585
|
*/
|
|
586
|
+
// eslint-disable-next-line
|
|
676
587
|
if (false) {
|
|
588
|
+
// eslint-disable-next-line
|
|
677
589
|
// @ts-ignore
|
|
678
590
|
document.createElement('ion-action-sheet');
|
|
679
591
|
}
|
|
@@ -682,13 +594,8 @@ export class Select {
|
|
|
682
594
|
async openAlert() {
|
|
683
595
|
const interfaceOptions = this.interfaceOptions;
|
|
684
596
|
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: [
|
|
597
|
+
const theme = getIonTheme(this);
|
|
598
|
+
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
599
|
{
|
|
693
600
|
text: this.cancelText,
|
|
694
601
|
role: 'cancel',
|
|
@@ -702,19 +609,19 @@ export class Select {
|
|
|
702
609
|
this.setValue(selectedValues);
|
|
703
610
|
},
|
|
704
611
|
},
|
|
705
|
-
],
|
|
706
|
-
cssClass: [
|
|
612
|
+
], cssClass: [
|
|
707
613
|
'select-alert',
|
|
708
614
|
interfaceOptions.cssClass,
|
|
709
615
|
this.multiple ? 'multiple-select-alert' : 'single-select-alert',
|
|
710
|
-
]
|
|
711
|
-
};
|
|
616
|
+
] });
|
|
712
617
|
/**
|
|
713
618
|
* Workaround for Stencil to autodefine
|
|
714
619
|
* ion-alert when
|
|
715
620
|
* using Custom Elements build.
|
|
716
621
|
*/
|
|
622
|
+
// eslint-disable-next-line
|
|
717
623
|
if (false) {
|
|
624
|
+
// eslint-disable-next-line
|
|
718
625
|
// @ts-ignore
|
|
719
626
|
document.createElement('ion-alert');
|
|
720
627
|
}
|
|
@@ -722,26 +629,23 @@ export class Select {
|
|
|
722
629
|
}
|
|
723
630
|
openModal() {
|
|
724
631
|
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: {
|
|
632
|
+
const theme = getIonTheme(this);
|
|
633
|
+
const modalOpts = Object.assign(Object.assign({}, interfaceOptions), { mode: theme, cssClass: ['select-modal', interfaceOptions.cssClass], component: 'ion-select-modal', componentProps: {
|
|
732
634
|
header: interfaceOptions.header,
|
|
733
635
|
cancelText: this.cancelText,
|
|
636
|
+
cancelIcon: this.cancelIcon,
|
|
734
637
|
multiple,
|
|
735
638
|
value,
|
|
736
639
|
options: this.createOverlaySelectOptions(this.childOpts, value),
|
|
737
|
-
}
|
|
738
|
-
};
|
|
640
|
+
} });
|
|
739
641
|
/**
|
|
740
642
|
* Workaround for Stencil to autodefine
|
|
741
643
|
* ion-select-modal and ion-modal when
|
|
742
644
|
* using Custom Elements build.
|
|
743
645
|
*/
|
|
646
|
+
// eslint-disable-next-line
|
|
744
647
|
if (false) {
|
|
648
|
+
// eslint-disable-next-line
|
|
745
649
|
// @ts-ignore
|
|
746
650
|
document.createElement('ion-select-modal');
|
|
747
651
|
document.createElement('ion-modal');
|
|
@@ -807,51 +711,18 @@ export class Select {
|
|
|
807
711
|
};
|
|
808
712
|
this.ionStyle.emit(style);
|
|
809
713
|
}
|
|
810
|
-
|
|
811
|
-
const
|
|
812
|
-
const
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
714
|
+
getSize() {
|
|
715
|
+
const theme = getIonTheme(this);
|
|
716
|
+
const { size } = this;
|
|
717
|
+
// TODO(ROU-11370): Remove theme check when sizes are defined for all themes.
|
|
718
|
+
if (theme !== 'ionic') {
|
|
719
|
+
return undefined;
|
|
816
720
|
}
|
|
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();
|
|
721
|
+
if (size === undefined) {
|
|
722
|
+
return 'medium';
|
|
845
723
|
}
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
this.hasFocus = true;
|
|
849
|
-
this.ionFocus.emit();
|
|
850
|
-
};
|
|
851
|
-
onBlur = () => {
|
|
852
|
-
this.hasFocus = false;
|
|
853
|
-
this.ionBlur.emit();
|
|
854
|
-
};
|
|
724
|
+
return size;
|
|
725
|
+
}
|
|
855
726
|
renderLabel() {
|
|
856
727
|
const { label } = this;
|
|
857
728
|
return (h("div", { class: {
|
|
@@ -860,8 +731,8 @@ export class Select {
|
|
|
860
731
|
}, part: "label" }, label === undefined ? h("slot", { name: "label" }) : h("div", { class: "label-text" }, label)));
|
|
861
732
|
}
|
|
862
733
|
componentDidRender() {
|
|
863
|
-
|
|
864
|
-
this.
|
|
734
|
+
var _a;
|
|
735
|
+
(_a = this.notchController) === null || _a === void 0 ? void 0 : _a.calculateNotchWidth();
|
|
865
736
|
}
|
|
866
737
|
/**
|
|
867
738
|
* Gets any content passed into the `label` slot,
|
|
@@ -880,24 +751,33 @@ export class Select {
|
|
|
880
751
|
return this.label !== undefined || this.labelSlot !== null;
|
|
881
752
|
}
|
|
882
753
|
/**
|
|
883
|
-
*
|
|
884
|
-
*
|
|
885
|
-
* or mouse) and slotted content clicks to propagate so event delegation
|
|
886
|
-
* works for parent handlers.
|
|
754
|
+
* Renders the border container
|
|
755
|
+
* when fill="outline".
|
|
887
756
|
*/
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
757
|
+
renderLabelContainer() {
|
|
758
|
+
const theme = getIonTheme(this);
|
|
759
|
+
const hasOutlineFill = theme === 'md' && this.fill === 'outline';
|
|
760
|
+
if (hasOutlineFill) {
|
|
761
|
+
/**
|
|
762
|
+
* The outline fill has a special outline
|
|
763
|
+
* that appears around the select and the label.
|
|
764
|
+
* Certain stacked and floating label placements cause the
|
|
765
|
+
* label to translate up and create a "cut out"
|
|
766
|
+
* inside of that border by using the notch-spacer element.
|
|
767
|
+
*/
|
|
768
|
+
return [
|
|
769
|
+
h("div", { class: "select-outline-container" }, h("div", { class: "select-outline-start" }), h("div", { class: {
|
|
770
|
+
'select-outline-notch': true,
|
|
771
|
+
'select-outline-notch-hidden': !this.hasLabel,
|
|
772
|
+
} }, h("div", { class: "notch-spacer", "aria-hidden": "true", ref: (el) => (this.notchSpacerEl = el) }, this.label)), h("div", { class: "select-outline-end" })),
|
|
773
|
+
this.renderLabel(),
|
|
774
|
+
];
|
|
891
775
|
}
|
|
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" })));
|
|
776
|
+
/**
|
|
777
|
+
* If not using the outline style,
|
|
778
|
+
* we can render just the label.
|
|
779
|
+
*/
|
|
780
|
+
return this.renderLabel();
|
|
901
781
|
}
|
|
902
782
|
/**
|
|
903
783
|
* Wraps text nodes in the select text with span elements
|
|
@@ -917,7 +797,8 @@ export class Select {
|
|
|
917
797
|
return html;
|
|
918
798
|
}
|
|
919
799
|
Array.from(temp.childNodes).forEach((node) => {
|
|
920
|
-
|
|
800
|
+
var _a, _b, _c, _d;
|
|
801
|
+
if (node.nodeType === Node.TEXT_NODE && ((_a = node.textContent) === null || _a === void 0 ? void 0 : _a.trim())) {
|
|
921
802
|
const text = node.textContent;
|
|
922
803
|
/**
|
|
923
804
|
* Split comma separator from the text content
|
|
@@ -928,12 +809,12 @@ export class Select {
|
|
|
928
809
|
const commaNode = document.createTextNode(commaMatch[1]);
|
|
929
810
|
const wrapper = document.createElement('span');
|
|
930
811
|
wrapper.textContent = commaMatch[2];
|
|
931
|
-
node.parentNode
|
|
932
|
-
wrapper.parentNode
|
|
812
|
+
(_b = node.parentNode) === null || _b === void 0 ? void 0 : _b.replaceChild(wrapper, node);
|
|
813
|
+
(_c = wrapper.parentNode) === null || _c === void 0 ? void 0 : _c.insertBefore(commaNode, wrapper);
|
|
933
814
|
return;
|
|
934
815
|
}
|
|
935
816
|
const wrapper = document.createElement('span');
|
|
936
|
-
node.parentNode
|
|
817
|
+
(_d = node.parentNode) === null || _d === void 0 ? void 0 : _d.replaceChild(wrapper, node);
|
|
937
818
|
wrapper.appendChild(node);
|
|
938
819
|
}
|
|
939
820
|
});
|
|
@@ -969,24 +850,20 @@ export class Select {
|
|
|
969
850
|
* next to the select text.
|
|
970
851
|
*/
|
|
971
852
|
renderSelectIcon() {
|
|
972
|
-
const
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
icon = expandedIcon;
|
|
977
|
-
}
|
|
978
|
-
else {
|
|
979
|
-
const defaultIcon = mode === 'ios' ? chevronExpand : caretDownSharp;
|
|
980
|
-
icon = toggleIcon ?? defaultIcon;
|
|
853
|
+
const { isExpanded, selectExpandedIcon, selectCollapsedIcon } = this;
|
|
854
|
+
let icon = selectCollapsedIcon;
|
|
855
|
+
if (isExpanded) {
|
|
856
|
+
icon = selectExpandedIcon;
|
|
981
857
|
}
|
|
982
858
|
return h("ion-icon", { class: "select-icon", part: "icon", "aria-hidden": "true", icon: icon });
|
|
983
859
|
}
|
|
984
860
|
get ariaLabel() {
|
|
861
|
+
var _a;
|
|
985
862
|
const { placeholder, inheritedAttributes } = this;
|
|
986
863
|
// Get the plain text from the selected text
|
|
987
864
|
const displayValue = this.getText();
|
|
988
865
|
// The aria label should be preferred over visible text if both are specified
|
|
989
|
-
const definedLabel = inheritedAttributes['aria-label']
|
|
866
|
+
const definedLabel = (_a = inheritedAttributes['aria-label']) !== null && _a !== void 0 ? _a : this.labelText;
|
|
990
867
|
/**
|
|
991
868
|
* If developer has specified a placeholder
|
|
992
869
|
* and there is nothing selected, the selectText
|
|
@@ -1012,6 +889,51 @@ export class Select {
|
|
|
1012
889
|
const { disabled, inputId, isExpanded, required } = this;
|
|
1013
890
|
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
891
|
}
|
|
892
|
+
getShape() {
|
|
893
|
+
const theme = getIonTheme(this);
|
|
894
|
+
const { shape } = this;
|
|
895
|
+
// TODO(ROU-11366): Remove theme check when shapes are defined for all themes.
|
|
896
|
+
if (theme === 'ionic' && shape === undefined) {
|
|
897
|
+
return 'round';
|
|
898
|
+
}
|
|
899
|
+
return shape;
|
|
900
|
+
}
|
|
901
|
+
/**
|
|
902
|
+
* Get the icon to use for the expand icon.
|
|
903
|
+
* If an icon is set on the component, use that.
|
|
904
|
+
* Otherwise, use the icon set in the config.
|
|
905
|
+
* If no icon is set in the config, use the default icon.
|
|
906
|
+
*/
|
|
907
|
+
get selectExpandedIcon() {
|
|
908
|
+
// Return the expandedIcon or toggleIcon if either is explicitly set
|
|
909
|
+
if (this.expandedIcon != null) {
|
|
910
|
+
return this.expandedIcon;
|
|
911
|
+
}
|
|
912
|
+
else if (this.toggleIcon != null) {
|
|
913
|
+
return this.toggleIcon;
|
|
914
|
+
}
|
|
915
|
+
// Determine the theme and map to the default icon
|
|
916
|
+
const theme = getIonTheme(this);
|
|
917
|
+
const defaultIcon = theme === 'ios' ? chevronExpand : caretDownSharp;
|
|
918
|
+
// Return the configured select expanded icon or the default icon
|
|
919
|
+
return config.get('selectExpandedIcon', defaultIcon);
|
|
920
|
+
}
|
|
921
|
+
/**
|
|
922
|
+
* Get the icon to use for the collapsed icon.
|
|
923
|
+
* If an icon is set on the component, use that.
|
|
924
|
+
* Otherwise, use the icon set in the config.
|
|
925
|
+
* If no icon is set in the config, use the default icon.
|
|
926
|
+
*/
|
|
927
|
+
get selectCollapsedIcon() {
|
|
928
|
+
// Return the toggleIcon if it is explicitly set
|
|
929
|
+
if (this.toggleIcon) {
|
|
930
|
+
return this.toggleIcon;
|
|
931
|
+
}
|
|
932
|
+
// Determine the theme and map to the default icon
|
|
933
|
+
const theme = getIonTheme(this);
|
|
934
|
+
const defaultIcon = theme === 'ios' ? chevronExpand : caretDownSharp;
|
|
935
|
+
return config.get('selectCollapsedIcon', defaultIcon);
|
|
936
|
+
}
|
|
1015
937
|
getHintTextId() {
|
|
1016
938
|
const { helperText, errorText, helperTextId, errorTextId, isInvalid } = this;
|
|
1017
939
|
if (isInvalid && errorText) {
|
|
@@ -1049,19 +971,41 @@ export class Select {
|
|
|
1049
971
|
return (h("div", { class: "select-bottom", part: "bottom" }, this.renderHintText()));
|
|
1050
972
|
}
|
|
1051
973
|
render() {
|
|
1052
|
-
const { disabled, el, isExpanded, expandedIcon, labelPlacement, justify, placeholder, fill,
|
|
1053
|
-
const
|
|
974
|
+
const { disabled, el, isExpanded, expandedIcon, labelPlacement, justify, placeholder, fill, name, value, hasFocus, } = this;
|
|
975
|
+
const theme = getIonTheme(this);
|
|
976
|
+
const shape = this.getShape();
|
|
1054
977
|
const hasFloatingOrStackedLabel = labelPlacement === 'floating' || labelPlacement === 'stacked';
|
|
978
|
+
const shouldRenderOuterIcon = theme !== 'ionic' && hasFloatingOrStackedLabel;
|
|
979
|
+
const shouldRenderInnerIcon = theme === 'ionic' || !hasFloatingOrStackedLabel;
|
|
1055
980
|
const justifyEnabled = !hasFloatingOrStackedLabel && justify !== undefined;
|
|
1056
981
|
const rtl = isRTL(el) ? 'rtl' : 'ltr';
|
|
1057
982
|
const inItem = hostContext('ion-item', this.el);
|
|
1058
|
-
const
|
|
983
|
+
const size = this.getSize();
|
|
984
|
+
const shouldRenderHighlight = theme === 'md' && fill !== 'outline' && !inItem;
|
|
1059
985
|
const hasValue = this.hasValue();
|
|
1060
|
-
const
|
|
986
|
+
const hasStartEndSlots = el.querySelector('[slot="start"], [slot="end"]') !== null;
|
|
1061
987
|
renderHiddenInput(true, el, name, parseValue(value), disabled);
|
|
1062
|
-
|
|
1063
|
-
|
|
1064
|
-
|
|
988
|
+
/**
|
|
989
|
+
* If the label is stacked, it should always sit above the select.
|
|
990
|
+
* For floating labels, the label should move above the select if
|
|
991
|
+
* the select has a value, is open, or has anything in either
|
|
992
|
+
* the start or end slot.
|
|
993
|
+
*
|
|
994
|
+
* If there is content in the start slot, the label would overlap
|
|
995
|
+
* it if not forced to float. This is also applied to the end slot
|
|
996
|
+
* because with the default or solid fills, the select is not
|
|
997
|
+
* vertically centered in the container, but the label is. This
|
|
998
|
+
* causes the slots and label to appear vertically offset from each
|
|
999
|
+
* other when the label isn't floating above the input. This doesn't
|
|
1000
|
+
* apply to the outline fill, but this was not accounted for to keep
|
|
1001
|
+
* things consistent.
|
|
1002
|
+
*
|
|
1003
|
+
* TODO(FW-5592): Remove hasStartEndSlots condition
|
|
1004
|
+
*/
|
|
1005
|
+
const labelShouldFloat = labelPlacement === 'stacked' ||
|
|
1006
|
+
(labelPlacement === 'floating' && (hasValue || hasFocus || isExpanded || hasStartEndSlots));
|
|
1007
|
+
return (h(Host, { key: '421ff485c68f19ae1a0002360fb844d64e26341b', onClick: this.onClick, class: createColorClasses(this.color, {
|
|
1008
|
+
[theme]: true,
|
|
1065
1009
|
'in-item': inItem,
|
|
1066
1010
|
'in-item-color': hostContext('ion-item.ion-color', el),
|
|
1067
1011
|
'select-disabled': disabled,
|
|
@@ -1078,20 +1022,33 @@ export class Select {
|
|
|
1078
1022
|
[`select-justify-${justify}`]: justifyEnabled,
|
|
1079
1023
|
[`select-shape-${shape}`]: shape !== undefined,
|
|
1080
1024
|
[`select-label-placement-${labelPlacement}`]: true,
|
|
1081
|
-
|
|
1025
|
+
[`select-size-${size}`]: size !== undefined,
|
|
1026
|
+
}) }, h("label", { key: '3a3fa4c1cdac0bf4d8e1751df28d84cb98125db3', class: "select-wrapper", id: "select-label", onClick: this.onLabelClick, part: "wrapper" }, this.renderLabelContainer(), h("div", { key: 'f4b74cf2fb4c844570c9c6a4856e4dae9fa08546', class: "select-wrapper-inner", part: "inner" },
|
|
1027
|
+
/**
|
|
1028
|
+
* For the ionic theme, we render the outline container here
|
|
1029
|
+
* instead of higher up, so it can be positioned relative to
|
|
1030
|
+
* the native wrapper instead of the <label> element or the
|
|
1031
|
+
* entire component. This allows the label text to be positioned
|
|
1032
|
+
* above the outline, while staying within the bounds of the
|
|
1033
|
+
* <label> element, ensuring that clicking the label text
|
|
1034
|
+
* focuses the select.
|
|
1035
|
+
*/
|
|
1036
|
+
theme === 'ionic' && fill === 'outline' && h("div", { key: '79f6cf63866b2cc95b3404db5b7146215876a9ef', class: "select-outline" }), h("slot", { key: '9effed7b9be2ff2efc195365ba076a51aefdff12', name: "start" }), h("div", { key: 'd46086c58ab4a036d90a040754658de96a7b954a', class: "native-wrapper", ref: (el) => (this.nativeWrapperEl = el), part: "container" }, this.renderSelectText(), this.renderListbox()), h("slot", { key: '444888068450fc299780e48c8f9208cb0918ca81', name: "end" }), shouldRenderInnerIcon && this.renderSelectIcon()), shouldRenderOuterIcon && this.renderSelectIcon(), shouldRenderHighlight && h("div", { key: 'e005924ae26585279f58fce726f6f14b3076d255', class: "select-highlight" })), this.renderBottomContent()));
|
|
1082
1037
|
}
|
|
1083
1038
|
static get is() { return "ion-select"; }
|
|
1084
1039
|
static get encapsulation() { return "shadow"; }
|
|
1085
1040
|
static get originalStyleUrls() {
|
|
1086
1041
|
return {
|
|
1087
1042
|
"ios": ["select.ios.scss"],
|
|
1088
|
-
"md": ["select.md.scss"]
|
|
1043
|
+
"md": ["select.md.scss"],
|
|
1044
|
+
"ionic": ["select.ionic.scss"]
|
|
1089
1045
|
};
|
|
1090
1046
|
}
|
|
1091
1047
|
static get styleUrls() {
|
|
1092
1048
|
return {
|
|
1093
1049
|
"ios": ["select.ios.css"],
|
|
1094
|
-
"md": ["select.md.css"]
|
|
1050
|
+
"md": ["select.md.css"],
|
|
1051
|
+
"ionic": ["select.ionic.css"]
|
|
1095
1052
|
};
|
|
1096
1053
|
}
|
|
1097
1054
|
static get properties() {
|
|
@@ -1116,6 +1073,26 @@ export class Select {
|
|
|
1116
1073
|
"attribute": "cancel-text",
|
|
1117
1074
|
"defaultValue": "'Cancel'"
|
|
1118
1075
|
},
|
|
1076
|
+
"cancelIcon": {
|
|
1077
|
+
"type": "boolean",
|
|
1078
|
+
"mutable": false,
|
|
1079
|
+
"complexType": {
|
|
1080
|
+
"original": "boolean",
|
|
1081
|
+
"resolved": "boolean",
|
|
1082
|
+
"references": {}
|
|
1083
|
+
},
|
|
1084
|
+
"required": false,
|
|
1085
|
+
"optional": false,
|
|
1086
|
+
"docs": {
|
|
1087
|
+
"tags": [],
|
|
1088
|
+
"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."
|
|
1089
|
+
},
|
|
1090
|
+
"getter": false,
|
|
1091
|
+
"setter": false,
|
|
1092
|
+
"reflect": false,
|
|
1093
|
+
"attribute": "cancel-icon",
|
|
1094
|
+
"defaultValue": "false"
|
|
1095
|
+
},
|
|
1119
1096
|
"color": {
|
|
1120
1097
|
"type": "string",
|
|
1121
1098
|
"mutable": false,
|
|
@@ -1200,7 +1177,7 @@ export class Select {
|
|
|
1200
1177
|
"optional": true,
|
|
1201
1178
|
"docs": {
|
|
1202
1179
|
"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
|
|
1180
|
+
"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
1181
|
},
|
|
1205
1182
|
"getter": false,
|
|
1206
1183
|
"setter": false,
|
|
@@ -1460,7 +1437,7 @@ export class Select {
|
|
|
1460
1437
|
"optional": true,
|
|
1461
1438
|
"docs": {
|
|
1462
1439
|
"tags": [],
|
|
1463
|
-
"text": "The toggle icon to use. Defaults to
|
|
1440
|
+
"text": "The toggle icon to use. Defaults to `\"chevronExpand\"` for the `\"ios\"` theme,\nor `\"caretDownSharp\"` for the `\"md\"` and `\"ionic\"` themes."
|
|
1464
1441
|
},
|
|
1465
1442
|
"getter": false,
|
|
1466
1443
|
"setter": false,
|
|
@@ -1479,70 +1456,89 @@ export class Select {
|
|
|
1479
1456
|
"optional": true,
|
|
1480
1457
|
"docs": {
|
|
1481
1458
|
"tags": [],
|
|
1482
|
-
"text": "The toggle icon to show when the select is open. If defined, the icon\nrotation behavior in
|
|
1459
|
+
"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
1460
|
},
|
|
1484
1461
|
"getter": false,
|
|
1485
1462
|
"setter": false,
|
|
1486
1463
|
"reflect": false,
|
|
1487
1464
|
"attribute": "expanded-icon"
|
|
1488
1465
|
},
|
|
1466
|
+
"required": {
|
|
1467
|
+
"type": "boolean",
|
|
1468
|
+
"mutable": false,
|
|
1469
|
+
"complexType": {
|
|
1470
|
+
"original": "boolean",
|
|
1471
|
+
"resolved": "boolean",
|
|
1472
|
+
"references": {}
|
|
1473
|
+
},
|
|
1474
|
+
"required": false,
|
|
1475
|
+
"optional": false,
|
|
1476
|
+
"docs": {
|
|
1477
|
+
"tags": [],
|
|
1478
|
+
"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."
|
|
1479
|
+
},
|
|
1480
|
+
"getter": false,
|
|
1481
|
+
"setter": false,
|
|
1482
|
+
"reflect": false,
|
|
1483
|
+
"attribute": "required",
|
|
1484
|
+
"defaultValue": "false"
|
|
1485
|
+
},
|
|
1489
1486
|
"shape": {
|
|
1490
1487
|
"type": "string",
|
|
1491
1488
|
"mutable": false,
|
|
1492
1489
|
"complexType": {
|
|
1493
|
-
"original": "'round'",
|
|
1494
|
-
"resolved": "\"round\" | undefined",
|
|
1490
|
+
"original": "'soft' | 'round' | 'rectangular'",
|
|
1491
|
+
"resolved": "\"rectangular\" | \"round\" | \"soft\" | undefined",
|
|
1495
1492
|
"references": {}
|
|
1496
1493
|
},
|
|
1497
1494
|
"required": false,
|
|
1498
1495
|
"optional": true,
|
|
1499
1496
|
"docs": {
|
|
1500
1497
|
"tags": [],
|
|
1501
|
-
"text": "
|
|
1498
|
+
"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
1499
|
},
|
|
1503
1500
|
"getter": false,
|
|
1504
1501
|
"setter": false,
|
|
1505
1502
|
"reflect": false,
|
|
1506
1503
|
"attribute": "shape"
|
|
1507
1504
|
},
|
|
1508
|
-
"
|
|
1509
|
-
"type": "
|
|
1510
|
-
"mutable":
|
|
1505
|
+
"size": {
|
|
1506
|
+
"type": "string",
|
|
1507
|
+
"mutable": false,
|
|
1511
1508
|
"complexType": {
|
|
1512
|
-
"original": "
|
|
1513
|
-
"resolved": "
|
|
1509
|
+
"original": "'small' | 'medium' | 'large'",
|
|
1510
|
+
"resolved": "\"large\" | \"medium\" | \"small\" | undefined",
|
|
1514
1511
|
"references": {}
|
|
1515
1512
|
},
|
|
1516
1513
|
"required": false,
|
|
1517
1514
|
"optional": true,
|
|
1518
1515
|
"docs": {
|
|
1519
1516
|
"tags": [],
|
|
1520
|
-
"text": "The
|
|
1517
|
+
"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
1518
|
},
|
|
1522
1519
|
"getter": false,
|
|
1523
1520
|
"setter": false,
|
|
1524
1521
|
"reflect": false,
|
|
1525
|
-
"attribute": "
|
|
1522
|
+
"attribute": "size"
|
|
1526
1523
|
},
|
|
1527
|
-
"
|
|
1528
|
-
"type": "
|
|
1529
|
-
"mutable":
|
|
1524
|
+
"value": {
|
|
1525
|
+
"type": "any",
|
|
1526
|
+
"mutable": true,
|
|
1530
1527
|
"complexType": {
|
|
1531
|
-
"original": "
|
|
1532
|
-
"resolved": "
|
|
1528
|
+
"original": "any | null",
|
|
1529
|
+
"resolved": "any",
|
|
1533
1530
|
"references": {}
|
|
1534
1531
|
},
|
|
1535
1532
|
"required": false,
|
|
1536
|
-
"optional":
|
|
1533
|
+
"optional": true,
|
|
1537
1534
|
"docs": {
|
|
1538
1535
|
"tags": [],
|
|
1539
|
-
"text": "
|
|
1536
|
+
"text": "The value of the select."
|
|
1540
1537
|
},
|
|
1541
1538
|
"getter": false,
|
|
1542
1539
|
"setter": false,
|
|
1543
1540
|
"reflect": false,
|
|
1544
|
-
"attribute": "
|
|
1545
|
-
"defaultValue": "false"
|
|
1541
|
+
"attribute": "value"
|
|
1546
1542
|
}
|
|
1547
1543
|
};
|
|
1548
1544
|
}
|
|
@@ -1791,7 +1787,7 @@ const textForValue = (opts, value, compareWith, useHTML = false) => {
|
|
|
1791
1787
|
*/
|
|
1792
1788
|
if (content) {
|
|
1793
1789
|
const texts = Array.from(content.childNodes)
|
|
1794
|
-
.map((n) => n.textContent
|
|
1790
|
+
.map((n) => { var _a; return (_a = n.textContent) === null || _a === void 0 ? void 0 : _a.trim(); })
|
|
1795
1791
|
.filter((t) => t);
|
|
1796
1792
|
return texts.join(' ') || null;
|
|
1797
1793
|
}
|
|
@@ -1811,8 +1807,9 @@ const textForValue = (opts, value, compareWith, useHTML = false) => {
|
|
|
1811
1807
|
*/
|
|
1812
1808
|
const trimTextNodes = (node) => {
|
|
1813
1809
|
node.childNodes.forEach((child) => {
|
|
1810
|
+
var _a;
|
|
1814
1811
|
if (child.nodeType === Node.TEXT_NODE) {
|
|
1815
|
-
child.textContent = child.textContent
|
|
1812
|
+
child.textContent = ((_a = child.textContent) === null || _a === void 0 ? void 0 : _a.trim()) || '';
|
|
1816
1813
|
}
|
|
1817
1814
|
else if (child.nodeType === Node.ELEMENT_NODE) {
|
|
1818
1815
|
trimTextNodes(child);
|
|
@@ -1840,13 +1837,14 @@ const getOptionContent = (option, slotName, useHTML = false) => {
|
|
|
1840
1837
|
// Default slot: get nodes without a slot attribute
|
|
1841
1838
|
const defaultSlot = getOptionDefaultSlot(option) || [];
|
|
1842
1839
|
nodes = defaultSlot.filter((node) => {
|
|
1840
|
+
var _a;
|
|
1843
1841
|
/**
|
|
1844
1842
|
* Exclude whitespace-only text nodes (newline noise between
|
|
1845
1843
|
* markup elements). Element nodes are always kept, even when
|
|
1846
1844
|
* their textContent is empty (e.g. <svg>, <img>).
|
|
1847
1845
|
*/
|
|
1848
1846
|
if (node.nodeType === Node.TEXT_NODE) {
|
|
1849
|
-
return node.textContent
|
|
1847
|
+
return ((_a = node.textContent) === null || _a === void 0 ? void 0 : _a.trim().length) !== 0;
|
|
1850
1848
|
}
|
|
1851
1849
|
return true;
|
|
1852
1850
|
});
|
|
@@ -1856,7 +1854,7 @@ const getOptionContent = (option, slotName, useHTML = false) => {
|
|
|
1856
1854
|
}
|
|
1857
1855
|
// Return plain text if no elements are found
|
|
1858
1856
|
if (!slotName && nodes.every((n) => n.nodeType === Node.TEXT_NODE)) {
|
|
1859
|
-
return nodes.map((n) => n.textContent
|
|
1857
|
+
return nodes.map((n) => { var _a; return (_a = n.textContent) === null || _a === void 0 ? void 0 : _a.trim(); }).join(' ') || null;
|
|
1860
1858
|
}
|
|
1861
1859
|
/**
|
|
1862
1860
|
* Mirror known custom-element properties (e.g. ion-icon's `icon`)
|
|
@@ -1872,9 +1870,10 @@ const getOptionContent = (option, slotName, useHTML = false) => {
|
|
|
1872
1870
|
// Clone each node into a temporary container
|
|
1873
1871
|
const container = document.createElement('div');
|
|
1874
1872
|
nodes.forEach((n) => {
|
|
1873
|
+
var _a;
|
|
1875
1874
|
const clone = n.cloneNode(true);
|
|
1876
1875
|
if (clone.nodeType === Node.TEXT_NODE) {
|
|
1877
|
-
clone.textContent = clone.textContent
|
|
1876
|
+
clone.textContent = ((_a = clone.textContent) === null || _a === void 0 ? void 0 : _a.trim()) || '';
|
|
1878
1877
|
}
|
|
1879
1878
|
else {
|
|
1880
1879
|
trimTextNodes(clone);
|
|
@@ -1925,7 +1924,7 @@ const getDefaultSlotPlainText = (option) => {
|
|
|
1925
1924
|
return node.nodeType === Node.TEXT_NODE;
|
|
1926
1925
|
})
|
|
1927
1926
|
.filter((node) => node.nodeType === Node.TEXT_NODE)
|
|
1928
|
-
.map((n) => n.textContent
|
|
1927
|
+
.map((n) => { var _a; return (_a = n.textContent) === null || _a === void 0 ? void 0 : _a.trim(); })
|
|
1929
1928
|
.filter((t) => t);
|
|
1930
1929
|
return texts.join(' ');
|
|
1931
1930
|
};
|
|
@@ -1939,6 +1938,7 @@ const getDefaultSlotPlainText = (option) => {
|
|
|
1939
1938
|
* via the `innerHTMLTemplatesEnabled` config.
|
|
1940
1939
|
*/
|
|
1941
1940
|
const extractOptionContent = (option, customHTMLEnabled) => {
|
|
1941
|
+
var _a, _b;
|
|
1942
1942
|
if (!customHTMLEnabled) {
|
|
1943
1943
|
return {
|
|
1944
1944
|
content: getDefaultSlotPlainText(option),
|
|
@@ -1948,8 +1948,8 @@ const extractOptionContent = (option, customHTMLEnabled) => {
|
|
|
1948
1948
|
}
|
|
1949
1949
|
return {
|
|
1950
1950
|
content: getOptionContent(option),
|
|
1951
|
-
startContent: getOptionContent(option, 'start')
|
|
1952
|
-
endContent: getOptionContent(option, 'end')
|
|
1951
|
+
startContent: (_a = getOptionContent(option, 'start')) !== null && _a !== void 0 ? _a : undefined,
|
|
1952
|
+
endContent: (_b = getOptionContent(option, 'end')) !== null && _b !== void 0 ? _b : undefined,
|
|
1953
1953
|
};
|
|
1954
1954
|
};
|
|
1955
1955
|
let selectIds = 0;
|