@ionic/core 8.8.19-dev.11786610762.137bbb21 → 8.8.19-dev.11786735826.1fad7c0a
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-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-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.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--m5cCjbK.js +4 -0
- package/components/{p-CpHPq11n.js → p-30_sZS2V.js} +1 -1
- package/components/p-8FN7p701.js +4 -0
- package/components/p-B-FxiyeI.js +4 -0
- package/components/p-B4uHHhPK.js +4 -0
- package/components/p-BMPN55of.js +4 -0
- package/components/p-BMS4t-kJ.js +4 -0
- package/components/p-BOvLNVKq.js +4 -0
- package/components/p-BSQPZ79H.js +4 -0
- package/components/p-BWBigMsI.js +4 -0
- package/components/p-BZ4-QTes.js +4 -0
- package/components/p-BhamHSw3.js +4 -0
- package/components/p-BjluhQMI.js +4 -0
- package/components/p-BlsIikdZ.js +4 -0
- package/components/p-Blug1Vxu.js +4 -0
- package/components/p-BmVRXR1y.js +4 -0
- package/components/p-BpG8kBfD.js +4 -0
- package/components/p-BqPNzJf6.js +4 -0
- package/components/p-C5KYjZWD.js +4 -0
- package/components/p-C91npEel.js +4 -0
- package/components/p-C9BGR5fy.js +4 -0
- package/components/p-CD4fmpem.js +4 -0
- package/components/p-CEW4RXZO.js +4 -0
- package/components/p-CIGNaXM1.js +4 -0
- package/components/p-CKhiNOEg.js +4 -0
- package/components/p-CO2zzh3W.js +4 -0
- package/components/p-CVb3x_r3.js +4 -0
- package/components/p-CWLrHG8Y.js +4 -0
- package/components/p-CbhUdtjf.js +4 -0
- package/components/p-CejmQs3h.js +4 -0
- package/components/p-CfnNZz_d.js +4 -0
- package/components/p-CmKf4pgI.js +4 -0
- package/components/p-Cs5f-uOS.js +4 -0
- package/components/p-D7-vHX0A.js +4 -0
- package/components/p-DJztqcrH.js +4 -0
- package/components/p-DKrhJJV0.js +4 -0
- package/components/p-DRfgH82D.js +4 -0
- package/components/p-DSzSbVP2.js +4 -0
- package/components/p-DV85C0e0.js +4 -0
- package/components/p-DVKS-ovH.js +4 -0
- package/components/p-DWCzVL3Y.js +4 -0
- package/components/p-Dd8ajo9a.js +4 -0
- package/components/p-DdnhY_oj.js +4 -0
- package/components/p-DgZOZQjJ.js +4 -0
- package/components/p-Dmd2xqCe.js +4 -0
- package/components/{p-B2SvA6NE.js → p-DwpKZ6rl.js} +1 -1
- package/components/p-G0TxqHfe.js +4 -0
- package/components/p-GG5GhznE.js +4 -0
- package/components/{p-Ch8jco3x.js → p-J-p0EtHR.js} +1 -1
- package/components/p-LXu5-6Ti.js +4 -0
- package/components/p-LpMHEu3v.js +4 -0
- package/components/p-TXPDHL13.js +4 -0
- package/components/p-UQSiXX2Z.js +4 -0
- package/components/p-UuPYCOZE.js +4 -0
- package/components/p-WeeS7GvC.js +4 -0
- package/components/p-ZjP4CjeZ.js +4 -0
- package/components/{p-CzlL9T_X.js → p-_0JhwClE.js} +1 -1
- package/components/p-_IKFD3ID.js +4 -0
- package/components/p-byZM6qHV.js +4 -0
- package/components/p-hh7qIC-X.js +4 -0
- package/components/p-idq4JFo2.js +4 -0
- package/components/p-qT1szVjw.js +4 -0
- package/components/{p-BZwQa9ey.js → p-ryyf_ItD.js} +1 -1
- package/components/p-wzAhIh03.js +4 -0
- package/components/p-ypuYdSDB.js +4 -0
- package/components/{p-Dovs7FIs.js → p-yuj4Nkm_.js} +1 -1
- 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-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-qlGmEn5Y.js → animation-C0mOHzej.js} +6 -6
- package/dist/cjs/{app-globals-CtK-3pCu.js → app-globals-BREG4twP.js} +1 -1
- package/dist/cjs/{button-active-CugpWmFI.js → button-active-BKj1rdFx.js} +3 -3
- package/dist/cjs/{capacitor-BixsAzyb.js → capacitor-DmA66EwP.js} +3 -3
- package/dist/cjs/{config-DWdFbSNK.js → config-CjUbvdPW.js} +5 -4
- package/dist/cjs/{dir-Cn0z1rJH.js → dir-Brx7VkvP.js} +1 -1
- package/dist/{esm/focus-visible-vXpMhGrs.js → cjs/focus-visible-CCvKiLh3.js} +3 -23
- package/dist/cjs/{format-COAsdjOc.js → format-pp0Du3K-.js} +40 -30
- package/dist/cjs/{framework-delegate-CJT_QJQI.js → framework-delegate-NTLQ5YzV.js} +6 -10
- package/dist/cjs/{gesture-controller-dtqlP_q4.js → gesture-controller-BDUH7687.js} +15 -8
- package/dist/cjs/{haptic-BFgF-QCg.js → haptic-Ch-X4gRx.js} +3 -4
- package/dist/cjs/hardware-back-button-fqpYh-kd.js +121 -0
- package/dist/cjs/{helpers-Fh1iXsX9.js → helpers-CaLhEmTE.js} +6 -73
- package/dist/cjs/{index-YYUVCfP-.js → index-B7zJsYWS.js} +3 -3
- package/dist/cjs/{index-CNicxECl.js → index-BlshL9ib.js} +8 -9
- package/dist/cjs/{index-D94mERjz.js → index-Ck9advCT.js} +5 -5
- package/dist/cjs/{index-CM8iGvyx.js → index-D2X6b92x.js} +15 -16
- package/dist/cjs/{index-DRFkZu3V.js → index-D48vawBq.js} +2 -2
- package/dist/cjs/index-DkNv4J_i.js +10 -0
- package/dist/cjs/{index-CAvQ7Tka.js → index-P1nQxrpZ.js} +10 -4
- package/dist/cjs/{index-C1knGA9x.js → index-uvry__L4.js} +33 -65
- package/dist/cjs/{index-CxDnX7hd.js → index-wOmugbdg.js} +0 -2
- package/dist/cjs/index.cjs.js +17 -17
- package/dist/cjs/{input-shims-C8NCYfWv.js → input-shims-DvHAFqiP.js} +19 -22
- package/dist/cjs/input.utils-BZdMWVrt.js +35 -0
- package/dist/cjs/ion-accordion_2.cjs.entry.js +378 -382
- package/dist/cjs/ion-action-sheet.cjs.entry.js +178 -86
- package/dist/cjs/ion-alert.cjs.entry.js +250 -125
- package/dist/cjs/ion-app_8.cjs.entry.js +461 -608
- package/dist/cjs/ion-avatar_3.cjs.entry.js +19 -125
- package/dist/cjs/ion-back-button.cjs.entry.js +64 -49
- package/dist/cjs/ion-backdrop.cjs.entry.js +23 -22
- package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +211 -169
- package/dist/cjs/ion-button_2.cjs.entry.js +152 -117
- package/dist/cjs/ion-card_5.cjs.entry.js +109 -79
- package/dist/cjs/ion-checkbox.cjs.entry.js +163 -129
- package/dist/cjs/ion-chip.cjs.entry.js +21 -56
- package/dist/cjs/ion-col_3.cjs.entry.js +186 -61
- package/dist/cjs/ion-datetime-button.cjs.entry.js +255 -247
- package/dist/cjs/ion-datetime.cjs.entry.js +2770 -0
- package/dist/cjs/ion-fab_3.cjs.entry.js +154 -112
- package/dist/cjs/ion-img.cjs.entry.js +34 -16
- package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +108 -156
- package/dist/cjs/ion-input-otp.cjs.entry.js +435 -437
- package/dist/cjs/ion-input-password-toggle.cjs.entry.js +40 -64
- package/dist/cjs/ion-input.cjs.entry.js +351 -311
- package/dist/cjs/ion-item-option_3.cjs.entry.js +136 -511
- package/dist/cjs/ion-item_8.cjs.entry.js +217 -189
- package/dist/cjs/ion-loading.cjs.entry.js +151 -68
- package/dist/cjs/ion-menu_3.cjs.entry.js +181 -137
- package/dist/cjs/ion-modal.cjs.entry.js +570 -500
- package/dist/cjs/ion-nav_2.cjs.entry.js +103 -163
- package/dist/cjs/ion-picker-column-option.cjs.entry.js +39 -39
- package/dist/cjs/ion-picker-column.cjs.entry.js +421 -409
- package/dist/cjs/ion-picker.cjs.entry.js +405 -400
- package/dist/cjs/ion-popover.cjs.entry.js +323 -211
- package/dist/cjs/ion-progress-bar.cjs.entry.js +35 -47
- package/dist/cjs/ion-radio_2.cjs.entry.js +216 -161
- package/dist/cjs/ion-range.cjs.entry.js +307 -249
- package/dist/cjs/ion-refresher_2.cjs.entry.js +174 -121
- package/dist/cjs/ion-reorder_2.cjs.entry.js +59 -53
- package/dist/cjs/ion-ripple-effect.cjs.entry.js +18 -26
- package/dist/cjs/ion-route_4.cjs.entry.js +178 -75
- package/dist/cjs/ion-searchbar.cjs.entry.js +308 -331
- package/dist/cjs/ion-segment-content.cjs.entry.js +2 -2
- package/dist/cjs/ion-segment-view.cjs.entry.js +28 -27
- package/dist/cjs/ion-segment_2.cjs.entry.js +177 -141
- package/dist/cjs/ion-select-modal.cjs.entry.js +49 -69
- package/dist/cjs/ion-select_3.cjs.entry.js +507 -429
- package/dist/cjs/ion-spinner.cjs.entry.js +28 -36
- package/dist/cjs/ion-split-pane.cjs.entry.js +34 -25
- package/dist/cjs/ion-tab-bar_2.cjs.entry.js +116 -179
- package/dist/cjs/ion-tab_2.cjs.entry.js +54 -29
- package/dist/cjs/ion-text.cjs.entry.js +13 -7
- package/dist/cjs/ion-textarea.cjs.entry.js +303 -309
- package/dist/cjs/ion-toast.cjs.entry.js +264 -169
- package/dist/cjs/ion-toggle.cjs.entry.js +184 -187
- package/dist/cjs/ionic-global-k6hOWWpn.js +156 -0
- package/dist/cjs/ionic.cjs.js +4 -4
- package/dist/cjs/{ios.transition-BgDCUY4Y.js → ios.transition-KvuRAe2W.js} +14 -20
- package/dist/cjs/{item-multiple-inputs-DKn76MYO.js → item-multiple-inputs-BdYSbfKN.js} +1 -1
- package/dist/cjs/{keyboard-nne7rvBK.js → keyboard-Cix5TVkD.js} +4 -5
- package/dist/cjs/{keyboard-BbZXOwZg.js → keyboard-cHxZlTyz.js} +3 -3
- package/dist/cjs/keyboard-controller-PtZoN2GS.js +167 -0
- package/dist/cjs/loader.cjs.js +4 -4
- package/dist/cjs/{md.transition-Debf4tYr.js → md.transition-Bjl5Ozph.js} +8 -10
- package/dist/cjs/{overlay-control-label-DnRLQR1t.js → overlay-control-label-D2sdL2O8.js} +11 -13
- package/dist/cjs/{overlays-DYBUkNQu.js → overlays-IlP4H2Gn.js} +60 -336
- package/dist/cjs/{select-option-render-BqJEK1N1.js → select-option-render-pULCGldr.js} +3 -4
- package/dist/cjs/slot-mutation-controller-CgTGFqlW.js +397 -0
- package/dist/cjs/{status-tap-hwqc0yb_.js → status-tap-BR_ujYHg.js} +3 -4
- package/dist/cjs/{swipe-back-DqQx5QCp.js → swipe-back-DzQKEl5g.js} +5 -6
- package/dist/cjs/{theme-IlOsGAz7.js → theme-Bw0rpaNN.js} +7 -26
- package/dist/cjs/validity-BpS37YFM.js +19 -0
- package/dist/collection/collection-manifest.json +1 -13
- package/dist/collection/components/accordion/accordion.ios.css +58 -73
- package/dist/collection/components/accordion/accordion.js +327 -338
- package/dist/collection/components/accordion/accordion.md.css +59 -67
- package/dist/collection/components/accordion-group/accordion-group.ios.css +4 -16
- package/dist/collection/components/accordion-group/accordion-group.js +56 -69
- package/dist/collection/components/accordion-group/accordion-group.md.css +4 -22
- package/dist/collection/components/action-sheet/action-sheet.ios.css +54 -184
- package/dist/collection/components/action-sheet/action-sheet.js +166 -76
- package/dist/collection/components/action-sheet/action-sheet.md.css +55 -179
- package/dist/collection/components/action-sheet/test/basic/fixture.js +3 -0
- package/dist/collection/components/alert/alert.ios.css +54 -247
- package/dist/collection/components/alert/alert.js +236 -113
- package/dist/collection/components/alert/alert.md.css +56 -243
- package/dist/collection/components/app/app.js +86 -15
- package/dist/collection/components/avatar/avatar.ios.css +33 -7
- package/dist/collection/components/avatar/avatar.js +4 -120
- package/dist/collection/components/avatar/avatar.md.css +0 -51
- package/dist/collection/components/back-button/back-button.ios.css +48 -60
- package/dist/collection/components/back-button/back-button.js +61 -46
- package/dist/collection/components/back-button/back-button.md.css +48 -60
- package/dist/collection/components/backdrop/backdrop.ios.css +19 -56
- package/dist/collection/components/backdrop/backdrop.js +22 -26
- package/dist/collection/components/backdrop/backdrop.md.css +19 -56
- package/dist/collection/components/badge/badge.ios.css +12 -137
- package/dist/collection/components/badge/badge.js +15 -145
- package/dist/collection/components/badge/badge.md.css +12 -122
- package/dist/collection/components/breadcrumb/breadcrumb.ios.css +8 -20
- package/dist/collection/components/breadcrumb/breadcrumb.js +101 -72
- package/dist/collection/components/breadcrumb/breadcrumb.md.css +8 -20
- package/dist/collection/components/breadcrumbs/breadcrumbs.ios.css +0 -6
- package/dist/collection/components/breadcrumbs/breadcrumbs.js +112 -99
- package/dist/collection/components/breadcrumbs/breadcrumbs.md.css +0 -6
- package/dist/collection/components/button/button.ios.css +46 -154
- package/dist/collection/components/button/button.js +157 -122
- package/dist/collection/components/button/button.md.css +50 -150
- package/dist/collection/components/buttons/buttons.ios.css +7 -59
- package/dist/collection/components/buttons/buttons.js +21 -29
- package/dist/collection/components/buttons/buttons.md.css +3 -55
- package/dist/collection/components/card/card.ios.css +14 -65
- package/dist/collection/components/card/card.js +63 -61
- package/dist/collection/components/card/card.md.css +14 -65
- package/dist/collection/components/card-content/card-content.ios.css +35 -20
- package/dist/collection/components/card-content/card-content.js +10 -12
- package/dist/collection/components/card-content/card-content.md.css +35 -20
- package/dist/collection/components/card-header/card-header.ios.css +15 -27
- package/dist/collection/components/card-header/card-header.js +21 -20
- package/dist/collection/components/card-header/card-header.md.css +15 -27
- package/dist/collection/components/card-subtitle/card-subtitle.ios.css +0 -12
- package/dist/collection/components/card-subtitle/card-subtitle.js +14 -11
- package/dist/collection/components/card-subtitle/card-subtitle.md.css +0 -12
- package/dist/collection/components/card-title/card-title.ios.css +0 -73
- package/dist/collection/components/card-title/card-title.js +14 -11
- package/dist/collection/components/card-title/card-title.md.css +0 -73
- package/dist/collection/components/checkbox/checkbox.ios.css +117 -242
- package/dist/collection/components/checkbox/checkbox.js +160 -165
- package/dist/collection/components/checkbox/checkbox.md.css +118 -243
- package/dist/collection/components/chip/chip.ios.css +14 -67
- package/dist/collection/components/chip/chip.js +20 -116
- package/dist/collection/components/chip/chip.md.css +14 -67
- package/dist/collection/components/col/col.css +4 -192
- package/dist/collection/components/col/col.js +186 -212
- package/dist/collection/components/content/content.css +2 -47
- package/dist/collection/components/content/content.js +102 -78
- package/dist/collection/components/datetime/datetime.ios.css +148 -304
- package/dist/collection/components/datetime/datetime.js +1068 -910
- package/dist/collection/components/datetime/datetime.md.css +138 -294
- package/dist/collection/components/datetime/utils/data.js +18 -19
- package/dist/collection/components/datetime/utils/format.js +21 -11
- 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 +8 -2
- package/dist/collection/components/datetime/utils/validate.js +4 -5
- package/dist/collection/components/datetime-button/datetime-button.ios.css +5 -6
- package/dist/collection/components/datetime-button/datetime-button.js +253 -246
- package/dist/collection/components/datetime-button/datetime-button.md.css +5 -6
- package/dist/collection/components/fab/fab.css +1 -25
- package/dist/collection/components/fab/fab.js +25 -22
- package/dist/collection/components/fab-button/fab-button.ios.css +6 -18
- package/dist/collection/components/fab-button/fab-button.js +117 -83
- package/dist/collection/components/fab-button/fab-button.md.css +8 -20
- package/dist/collection/components/fab-list/fab-list.css +0 -12
- package/dist/collection/components/fab-list/fab-list.js +15 -20
- package/dist/collection/components/footer/footer.ios.css +6 -33
- package/dist/collection/components/footer/footer.js +65 -151
- package/dist/collection/components/footer/footer.md.css +0 -40
- package/dist/collection/components/grid/grid.css +0 -12
- package/dist/collection/components/grid/grid.js +9 -15
- package/dist/collection/components/header/header.ios.css +133 -178
- package/dist/collection/components/header/header.js +70 -202
- package/dist/collection/components/header/header.md.css +9 -199
- package/dist/collection/components/header/header.utils.js +13 -6
- package/dist/collection/components/img/img.js +34 -16
- package/dist/collection/components/infinite-scroll/infinite-scroll.js +76 -164
- package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.ios.css +0 -12
- package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.js +30 -19
- package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.md.css +0 -12
- package/dist/collection/components/input/input.ios.css +191 -247
- package/dist/collection/components/input/input.js +357 -340
- package/dist/collection/components/input/input.md.css +285 -234
- package/dist/collection/components/input-otp/input-otp.ios.css +60 -105
- package/dist/collection/components/input-otp/input-otp.js +432 -437
- package/dist/collection/components/input-otp/input-otp.md.css +60 -105
- package/dist/collection/components/input-password-toggle/input-password-toggle.js +37 -60
- package/dist/collection/components/item/item.ios.css +80 -120
- package/dist/collection/components/item/item.js +113 -102
- package/dist/collection/components/item/item.md.css +79 -131
- package/dist/collection/components/item-divider/item-divider.ios.css +0 -18
- package/dist/collection/components/item-divider/item-divider.js +23 -21
- package/dist/collection/components/item-divider/item-divider.md.css +0 -18
- package/dist/collection/components/item-group/item-group.ios.css +0 -12
- package/dist/collection/components/item-group/item-group.js +7 -13
- package/dist/collection/components/item-group/item-group.md.css +0 -12
- package/dist/collection/components/item-option/item-option.ios.css +29 -136
- package/dist/collection/components/item-option/item-option.js +56 -92
- package/dist/collection/components/item-option/item-option.md.css +29 -136
- package/dist/collection/components/item-options/item-options.ios.css +34 -77
- package/dist/collection/components/item-options/item-options.js +17 -20
- package/dist/collection/components/item-options/item-options.md.css +34 -77
- package/dist/collection/components/item-sliding/{item-sliding.native.css → item-sliding.css} +9 -84
- package/dist/collection/components/item-sliding/item-sliding.js +61 -441
- package/dist/collection/components/item-sliding/test/test.utils.js +0 -13
- package/dist/collection/components/label/label.ios.css +0 -18
- package/dist/collection/components/label/label.js +32 -15
- package/dist/collection/components/label/label.md.css +0 -18
- package/dist/collection/components/list/list.ios.css +14 -54
- package/dist/collection/components/list/list.js +19 -55
- package/dist/collection/components/list/list.md.css +16 -56
- package/dist/collection/components/list-header/list-header.ios.css +38 -82
- package/dist/collection/components/list-header/list-header.js +18 -11
- package/dist/collection/components/list-header/list-header.md.css +38 -82
- package/dist/collection/components/loading/loading.ios.css +1 -13
- package/dist/collection/components/loading/loading.js +143 -62
- package/dist/collection/components/loading/loading.md.css +1 -13
- package/dist/collection/components/menu/menu.ios.css +3 -15
- package/dist/collection/components/menu/menu.js +108 -71
- package/dist/collection/components/menu/menu.md.css +3 -15
- package/dist/collection/components/menu-button/menu-button.ios.css +14 -48
- package/dist/collection/components/menu-button/menu-button.js +38 -45
- package/dist/collection/components/menu-button/menu-button.md.css +15 -49
- package/dist/collection/components/menu-toggle/menu-toggle.js +25 -21
- 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 +2 -8
- package/dist/collection/components/modal/gestures/sheet.js +32 -86
- package/dist/collection/components/modal/gestures/swipe-to-close.js +15 -3
- package/dist/collection/components/modal/modal.ios.css +70 -178
- package/dist/collection/components/modal/modal.js +404 -272
- package/dist/collection/components/modal/modal.md.css +70 -178
- package/dist/collection/components/modal/safe-area-utils.js +6 -7
- package/dist/collection/components/modal/test/fixtures.js +3 -0
- package/dist/collection/components/nav/nav.css +1 -7
- package/dist/collection/components/nav/nav.js +72 -256
- package/dist/collection/components/nav/view-controller.js +7 -1
- package/dist/collection/components/nav-link/nav-link.js +21 -14
- package/dist/collection/components/note/note.ios.css +0 -12
- package/dist/collection/components/note/note.js +14 -11
- package/dist/collection/components/note/note.md.css +0 -12
- package/dist/collection/components/picker/picker.ios.css +3 -15
- package/dist/collection/components/picker/picker.js +403 -398
- package/dist/collection/components/picker/picker.md.css +3 -15
- package/dist/collection/components/picker-column/picker-column.css +5 -9
- package/dist/collection/components/picker-column/picker-column.js +418 -409
- package/dist/collection/components/picker-column-option/picker-column-option.ios.css +0 -6
- package/dist/collection/components/picker-column-option/picker-column-option.js +38 -42
- package/dist/collection/components/picker-column-option/picker-column-option.md.css +6 -7
- package/dist/collection/components/popover/animations/ios.enter.js +1 -2
- package/dist/collection/components/popover/animations/md.enter.js +1 -2
- package/dist/collection/components/popover/popover.ios.css +2 -15
- package/dist/collection/components/popover/popover.js +313 -199
- package/dist/collection/components/popover/popover.md.css +2 -15
- package/dist/collection/components/popover/test/fixture.js +1 -0
- package/dist/collection/components/popover/utils.js +4 -6
- package/dist/collection/components/progress-bar/progress-bar.ios.css +17 -48
- package/dist/collection/components/progress-bar/progress-bar.js +33 -65
- package/dist/collection/components/progress-bar/progress-bar.md.css +17 -48
- package/dist/collection/components/radio/radio.ios.css +102 -207
- package/dist/collection/components/radio/radio.js +108 -77
- package/dist/collection/components/radio/radio.md.css +102 -207
- package/dist/collection/components/radio-group/radio-group.ios.css +19 -43
- package/dist/collection/components/radio-group/radio-group.js +107 -113
- package/dist/collection/components/radio-group/radio-group.md.css +19 -43
- package/dist/collection/components/radio-group/test/fixtures.js +2 -0
- package/dist/collection/components/range/range.ios.css +85 -128
- package/dist/collection/components/range/range.js +303 -245
- package/dist/collection/components/range/range.md.css +85 -128
- package/dist/collection/components/refresher/refresher.ios.css +1 -14
- package/dist/collection/components/refresher/refresher.js +117 -88
- package/dist/collection/components/refresher/refresher.md.css +2 -15
- package/dist/collection/components/refresher-content/refresher-content.js +47 -31
- package/dist/collection/components/reorder/reorder.ios.css +0 -6
- package/dist/collection/components/reorder/reorder.js +7 -33
- package/dist/collection/components/reorder/reorder.md.css +0 -6
- package/dist/collection/components/reorder-group/reorder-group.css +0 -6
- package/dist/collection/components/reorder-group/reorder-group.js +47 -22
- package/dist/collection/components/ripple-effect/{ripple-effect.common.css → ripple-effect.css} +1 -7
- package/dist/collection/components/ripple-effect/ripple-effect.js +17 -26
- package/dist/collection/components/route/route.js +39 -14
- package/dist/collection/components/route-redirect/route-redirect.js +31 -0
- package/dist/collection/components/router/router.js +37 -37
- package/dist/collection/components/router/utils/dom.js +25 -7
- package/dist/collection/components/router/utils/matching.js +7 -9
- package/dist/collection/components/router/utils/parser.js +1 -1
- package/dist/collection/components/router/utils/path.js +0 -1
- package/dist/collection/components/router-link/router-link.css +2 -8
- package/dist/collection/components/router-link/router-link.js +40 -19
- package/dist/collection/components/router-outlet/router-outlet.css +1 -7
- package/dist/collection/components/router-outlet/router-outlet.js +83 -25
- package/dist/collection/components/row/row.css +0 -16
- package/dist/collection/components/row/row.js +2 -9
- package/dist/collection/components/searchbar/searchbar.ios.css +18 -56
- package/dist/collection/components/searchbar/searchbar.js +321 -380
- package/dist/collection/components/searchbar/searchbar.md.css +18 -56
- package/dist/collection/components/segment/segment.ios.css +2 -45
- package/dist/collection/components/segment/segment.js +126 -94
- package/dist/collection/components/segment/segment.md.css +2 -45
- package/dist/collection/components/segment-button/segment-button.ios.css +105 -146
- package/dist/collection/components/segment-button/segment-button.js +49 -46
- package/dist/collection/components/segment-button/segment-button.md.css +107 -148
- package/dist/collection/components/segment-content/segment-content.js +1 -1
- package/dist/collection/components/segment-view/segment-view.ios.css +0 -6
- package/dist/collection/components/segment-view/segment-view.js +28 -27
- package/dist/collection/components/segment-view/segment-view.md.css +0 -6
- package/dist/collection/components/select/select.ios.css +206 -351
- package/dist/collection/components/select/select.js +431 -444
- package/dist/collection/components/select/select.md.css +230 -383
- package/dist/collection/components/select-modal/select-modal.ios.css +45 -293
- package/dist/collection/components/select-modal/select-modal.js +37 -79
- package/dist/collection/components/select-modal/select-modal.md.css +43 -273
- package/dist/collection/components/select-modal/test/fixtures.js +8 -1
- package/dist/collection/components/select-option/select-option.js +48 -15
- package/dist/collection/components/select-popover/select-popover.ios.css +124 -188
- package/dist/collection/components/select-popover/select-popover.js +44 -37
- package/dist/collection/components/select-popover/select-popover.md.css +47 -228
- package/dist/collection/components/select-popover/test/fixtures.js +8 -1
- package/dist/collection/components/skeleton-text/skeleton-text.css +0 -6
- package/dist/collection/components/skeleton-text/skeleton-text.js +15 -15
- package/dist/collection/components/spinner/{spinner.ionic.css → spinner.css} +10 -78
- package/dist/collection/components/spinner/spinner.js +26 -55
- package/dist/collection/components/split-pane/split-pane.ios.css +2 -20
- package/dist/collection/components/split-pane/split-pane.js +33 -28
- package/dist/collection/components/split-pane/split-pane.md.css +2 -20
- package/dist/collection/components/tab/tab.js +17 -10
- package/dist/collection/components/tab-bar/tab-bar.ios.css +43 -86
- package/dist/collection/components/tab-bar/tab-bar.js +44 -190
- package/dist/collection/components/tab-bar/tab-bar.md.css +43 -86
- package/dist/collection/components/tab-button/tab-button.ios.css +95 -171
- package/dist/collection/components/tab-button/tab-button.js +68 -74
- package/dist/collection/components/tab-button/tab-button.md.css +93 -137
- package/dist/collection/components/tabs/tabs.css +1 -7
- package/dist/collection/components/tabs/tabs.js +33 -23
- package/dist/collection/components/text/text.css +0 -6
- package/dist/collection/components/text/text.js +12 -7
- package/dist/collection/components/textarea/textarea.ios.css +221 -329
- package/dist/collection/components/textarea/textarea.js +302 -334
- package/dist/collection/components/textarea/textarea.md.css +231 -358
- package/dist/collection/components/thumbnail/thumbnail.css +0 -6
- package/dist/collection/components/thumbnail/thumbnail.js +2 -9
- package/dist/collection/components/title/title.ios.css +4 -32
- package/dist/collection/components/title/title.js +23 -13
- package/dist/collection/components/title/title.md.css +4 -39
- package/dist/collection/components/toast/animations/utils.js +1 -1
- package/dist/collection/components/toast/toast.ios.css +45 -84
- package/dist/collection/components/toast/toast.js +232 -178
- package/dist/collection/components/toast/toast.md.css +45 -84
- package/dist/collection/components/toggle/toggle.ios.css +127 -247
- package/dist/collection/components/toggle/toggle.js +175 -177
- package/dist/collection/components/toggle/toggle.md.css +127 -245
- package/dist/collection/components/toolbar/toolbar.ios.css +47 -90
- package/dist/collection/components/toolbar/toolbar.js +25 -222
- package/dist/collection/components/toolbar/toolbar.md.css +47 -90
- package/dist/collection/global/config.js +4 -6
- package/dist/collection/global/ionic-global.js +20 -242
- package/dist/collection/index.js +1 -1
- package/dist/collection/utils/animation/animation.js +3 -3
- package/dist/collection/utils/config.js +5 -4
- package/dist/collection/utils/focus-controller/index.js +1 -1
- package/dist/collection/utils/focus-trap.js +5 -16
- package/dist/collection/utils/focus-visible.js +0 -22
- package/dist/collection/utils/forms/index.js +1 -1
- package/dist/collection/utils/forms/start-container-controller.js +132 -0
- package/dist/collection/utils/forms/validity.js +0 -31
- package/dist/collection/utils/framework-delegate.js +5 -9
- package/dist/collection/utils/gesture/gesture-controller.js +15 -8
- package/dist/collection/utils/gesture/index.js +10 -2
- package/dist/collection/utils/gesture/listener.js +1 -1
- package/dist/collection/utils/hardware-back-button.js +3 -18
- package/dist/collection/utils/helpers.js +5 -72
- package/dist/collection/utils/input-shims/hacks/scroll-assist.js +4 -5
- package/dist/collection/utils/input-shims/hacks/scroll-data.js +1 -2
- package/dist/collection/utils/keyboard/keyboard-controller.js +6 -8
- package/dist/collection/utils/keyboard/keyboard.js +1 -1
- package/dist/collection/utils/logging/index.js +23 -4
- package/dist/collection/utils/media.js +0 -1
- package/dist/collection/utils/menu-controller/animations/overlay.js +3 -3
- package/dist/collection/utils/menu-controller/animations/push.js +1 -2
- package/dist/collection/utils/menu-controller/animations/reveal.js +1 -2
- package/dist/collection/utils/menu-controller/index.js +1 -2
- package/dist/collection/utils/native/haptic.js +2 -3
- 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 +11 -13
- package/dist/collection/utils/overlays.js +45 -312
- package/dist/collection/utils/platform.js +4 -5
- package/dist/collection/utils/rtl/dir.js +1 -1
- package/dist/collection/utils/sanitization/index.js +2 -2
- package/dist/collection/utils/select-option-render.js +1 -2
- package/dist/collection/utils/slot-mutation-controller.js +1 -2
- package/dist/collection/utils/test/playwright/apply-keyboard-focus.js +1 -1
- package/dist/collection/utils/test/playwright/drag-element.js +11 -35
- package/dist/collection/utils/test/playwright/generator.js +25 -51
- package/dist/collection/utils/test/playwright/page/event-spy.js +11 -12
- package/dist/collection/utils/test/playwright/page/utils/goto.js +5 -15
- package/dist/collection/utils/test/playwright/page/utils/set-content.js +4 -27
- package/dist/collection/utils/test/playwright/page/utils/set-ion-viewport.js +2 -3
- package/dist/collection/utils/test/press-keys.js +10 -17
- package/dist/collection/utils/theme.js +7 -26
- package/dist/collection/utils/transition/ios.transition.js +9 -14
- package/dist/collection/utils/transition/md.transition.js +3 -4
- package/dist/docs.json +524 -10028
- package/dist/esm/{animation-ChfHU0RG.js → animation-CGFdmGk9.js} +5 -5
- package/dist/esm/{app-globals-D1OOQlqq.js → app-globals-CYmMeGdU.js} +1 -1
- package/dist/esm/{button-active-CPYK0dNo.js → button-active--80YqSHA.js} +3 -3
- package/dist/esm/{capacitor-DG_4yVXz.js → capacitor-CFERIeaU.js} +1 -1
- package/dist/esm/{config-BwKpO3Is.js → config-DWCzVL3Y.js} +5 -4
- package/dist/esm/{dir-C53feagD.js → dir-B-FxiyeI.js} +1 -1
- package/dist/{cjs/focus-visible-BIj-I3-C.js → esm/focus-visible-BmVRXR1y.js} +1 -27
- package/dist/esm/{format-2WlZcMvG.js → format-Dcwga61t.js} +41 -31
- package/dist/esm/{framework-delegate-DO2QXccA.js → framework-delegate--ajhSeKH.js} +6 -10
- package/dist/esm/{gesture-controller-BTEOs1at.js → gesture-controller-TXPDHL13.js} +15 -8
- package/dist/esm/{haptic-BWlRCqa-.js → haptic-Cq4UAeka.js} +3 -4
- package/dist/esm/hardware-back-button-gLJHMX_F.js +115 -0
- package/dist/esm/{helpers-DfF5_wJc.js → helpers-DexiPLIC.js} +7 -73
- package/dist/esm/{index-BSDDOljg.js → index-8s8kZKJ7.js} +5 -5
- package/dist/esm/{index-DNY2GOUg.js → index-BCgUwrV0.js} +3 -4
- package/dist/esm/{index-B4Kq2YNk.js → index-BvabGprD.js} +1 -2
- package/dist/esm/{index-Mq5pCWmZ.js → index-CKM1DdGm.js} +3 -3
- package/dist/esm/{index-C0EQceqV.js → index-ChhhtsGZ.js} +34 -66
- package/dist/esm/{index-7eS8XtuU.js → index-CumkqGQF.js} +12 -13
- package/dist/esm/{index-CfgBF1SE.js → index-DppOcPFQ.js} +10 -4
- package/dist/esm/index-ZjP4CjeZ.js +7 -0
- package/dist/esm/{index-taYRjZGp.js → index-_Za5VB9w.js} +2 -2
- package/dist/esm/index.js +17 -16
- package/dist/esm/{input-shims-tZfqB5a5.js → input-shims-BB0AKb_k.js} +11 -14
- package/dist/esm/input.utils-B1ValN_N.js +33 -0
- package/dist/esm/ion-accordion_2.entry.js +378 -382
- package/dist/esm/ion-action-sheet.entry.js +178 -86
- package/dist/esm/ion-alert.entry.js +250 -125
- package/dist/esm/ion-app_8.entry.js +460 -607
- package/dist/esm/ion-avatar_3.entry.js +19 -125
- package/dist/esm/ion-back-button.entry.js +64 -49
- package/dist/esm/ion-backdrop.entry.js +23 -22
- package/dist/esm/ion-breadcrumb_2.entry.js +211 -169
- package/dist/esm/ion-button_2.entry.js +152 -117
- package/dist/esm/ion-card_5.entry.js +109 -79
- package/dist/esm/ion-checkbox.entry.js +163 -129
- package/dist/esm/ion-chip.entry.js +21 -56
- package/dist/esm/ion-col_3.entry.js +186 -61
- package/dist/esm/ion-datetime-button.entry.js +255 -247
- package/dist/esm/ion-datetime.entry.js +2768 -0
- package/dist/esm/ion-fab_3.entry.js +154 -112
- package/dist/esm/ion-img.entry.js +34 -16
- package/dist/esm/ion-infinite-scroll_2.entry.js +108 -156
- package/dist/esm/ion-input-otp.entry.js +435 -437
- package/dist/esm/ion-input-password-toggle.entry.js +40 -64
- package/dist/esm/ion-input.entry.js +349 -309
- package/dist/esm/ion-item-option_3.entry.js +136 -511
- package/dist/esm/ion-item_8.entry.js +217 -189
- package/dist/esm/ion-loading.entry.js +151 -68
- package/dist/esm/ion-menu_3.entry.js +181 -137
- package/dist/esm/ion-modal.entry.js +528 -458
- package/dist/esm/ion-nav_2.entry.js +103 -163
- package/dist/esm/ion-picker-column-option.entry.js +39 -39
- package/dist/esm/ion-picker-column.entry.js +421 -409
- package/dist/esm/ion-picker.entry.js +405 -400
- package/dist/esm/ion-popover.entry.js +323 -211
- package/dist/esm/ion-progress-bar.entry.js +35 -47
- package/dist/esm/ion-radio_2.entry.js +216 -161
- package/dist/esm/ion-range.entry.js +307 -249
- package/dist/esm/ion-refresher_2.entry.js +174 -121
- package/dist/esm/ion-reorder_2.entry.js +59 -53
- package/dist/esm/ion-ripple-effect.entry.js +18 -26
- package/dist/esm/ion-route_4.entry.js +178 -75
- package/dist/esm/ion-searchbar.entry.js +308 -331
- package/dist/esm/ion-segment-content.entry.js +2 -2
- package/dist/esm/ion-segment-view.entry.js +28 -27
- package/dist/esm/ion-segment_2.entry.js +177 -141
- package/dist/esm/ion-select-modal.entry.js +49 -69
- package/dist/esm/ion-select_3.entry.js +507 -429
- package/dist/esm/ion-spinner.entry.js +28 -36
- package/dist/esm/ion-split-pane.entry.js +34 -25
- package/dist/esm/ion-tab-bar_2.entry.js +115 -178
- package/dist/esm/ion-tab_2.entry.js +54 -29
- package/dist/esm/ion-text.entry.js +13 -7
- package/dist/esm/ion-textarea.entry.js +302 -308
- package/dist/esm/ion-toast.entry.js +243 -148
- package/dist/esm/ion-toggle.entry.js +184 -187
- package/dist/esm/ionic-global-BVB7BrLT.js +151 -0
- package/dist/esm/ionic.js +5 -5
- package/dist/esm/{ios.transition-C3r-0w96.js → ios.transition-BdhybwLl.js} +14 -20
- package/dist/esm/{item-multiple-inputs-C6onMFOo.js → item-multiple-inputs-rU8VaNNg.js} +1 -1
- package/dist/esm/{keyboard-BzbtCDwZ.js → keyboard-Cj8mLJeq.js} +4 -5
- package/dist/esm/{keyboard-DYGmALa7.js → keyboard-DAF8GNJ9.js} +3 -3
- package/dist/esm/keyboard-controller-DEwoa1ev.js +165 -0
- package/dist/esm/loader.js +5 -5
- package/dist/esm/{md.transition-CPHOF5T9.js → md.transition-B5lqKGCs.js} +8 -10
- package/dist/esm/{overlay-control-label-CODBQrPj.js → overlay-control-label-BSQPZ79H.js} +11 -13
- package/dist/esm/{overlays-C1NQMs9y.js → overlays-CjWwtvf1.js} +57 -333
- package/dist/esm/{select-option-render-BlKZ2H83.js → select-option-render-C4m76VGH.js} +3 -4
- package/dist/esm/slot-mutation-controller-u741eD3Z.js +393 -0
- package/dist/esm/{status-tap-BueE8Coq.js → status-tap-DpLhkDWs.js} +3 -4
- package/dist/esm/{swipe-back-qmvTRnSq.js → swipe-back-cz4-lyG3.js} +5 -6
- package/dist/esm/theme-byZM6qHV.js +48 -0
- package/dist/esm/validity-DJztqcrH.js +17 -0
- package/dist/html.html-data.json +146 -2713
- package/dist/ionic/index.esm.js +1 -1
- package/dist/ionic/ionic.esm.js +1 -1
- package/dist/ionic/p-06533d51.entry.js +4 -0
- package/dist/ionic/p-08443c08.entry.js +4 -0
- package/dist/ionic/p-0FNc80PN.js +4 -0
- package/dist/ionic/p-141f5b47.entry.js +4 -0
- package/dist/ionic/p-14a5e8f5.entry.js +4 -0
- package/dist/ionic/p-19269e04.entry.js +4 -0
- package/dist/ionic/p-19abbc33.entry.js +4 -0
- package/dist/ionic/p-1edf0573.entry.js +4 -0
- package/dist/ionic/p-40424a88.entry.js +4 -0
- package/dist/ionic/p-4204184c.entry.js +4 -0
- package/dist/ionic/p-4bc3ecdb.entry.js +4 -0
- package/dist/ionic/p-4eOQC00Z.js +4 -0
- package/dist/ionic/p-4eed9ca1.entry.js +4 -0
- package/dist/ionic/p-53bac1c9.entry.js +4 -0
- package/dist/ionic/p-5506caeb.entry.js +4 -0
- package/dist/ionic/p-5521dc1f.entry.js +4 -0
- package/dist/ionic/p-5993a77f.entry.js +4 -0
- package/dist/ionic/p-5c3626de.entry.js +4 -0
- package/dist/ionic/p-5d3b411c.entry.js +4 -0
- package/dist/ionic/p-60576951.entry.js +4 -0
- package/dist/ionic/p-7116e558.entry.js +4 -0
- package/dist/ionic/p-711a8319.entry.js +4 -0
- package/dist/ionic/p-71419a55.entry.js +4 -0
- package/dist/ionic/p-79325ffe.entry.js +4 -0
- package/dist/ionic/p-7bb3e957.entry.js +4 -0
- package/dist/ionic/p-82525fb0.entry.js +4 -0
- package/dist/ionic/p-84a38904.entry.js +4 -0
- package/dist/ionic/p-865fa114.entry.js +4 -0
- package/dist/ionic/p-8e1d9e3a.entry.js +4 -0
- package/dist/ionic/p-8f204f1e.entry.js +4 -0
- package/dist/ionic/p-9055e897.entry.js +4 -0
- package/dist/ionic/p-9658e083.entry.js +4 -0
- package/dist/ionic/p-988baee1.entry.js +4 -0
- package/dist/ionic/p-9nmHvEvw.js +4 -0
- package/dist/ionic/p-B-FxiyeI.js +4 -0
- package/dist/ionic/p-BB0LlG4y.js +4 -0
- package/dist/ionic/p-BMPN55of.js +4 -0
- package/dist/ionic/p-BQ8oNV0v.js +4 -0
- package/dist/ionic/p-BSQPZ79H.js +4 -0
- package/dist/ionic/p-BhamHSw3.js +4 -0
- package/dist/ionic/p-BjvtSsVI.js +4 -0
- package/dist/ionic/p-BkfAWuv6.js +4 -0
- package/dist/ionic/p-BmVRXR1y.js +4 -0
- package/dist/ionic/p-BvabGprD.js +4 -0
- package/{components/p-Va26YR7l.js → dist/ionic/p-BwIp10KV.js} +1 -1
- package/dist/ionic/p-C-94tAim.js +4 -0
- package/dist/ionic/p-C6eME8Ey.js +4 -0
- package/dist/ionic/p-CIGNaXM1.js +4 -0
- package/dist/ionic/p-CKUuSnDR.js +4 -0
- package/dist/ionic/p-CMRtMbJc.js +4 -0
- package/dist/ionic/p-CPcPmkGv.js +4 -0
- package/dist/ionic/p-CQ_4TirR.js +4 -0
- package/dist/ionic/p-CaRuIadB.js +4 -0
- package/dist/ionic/p-Cdjxf_yg.js +4 -0
- package/dist/ionic/p-ChhhtsGZ.js +5 -0
- package/dist/ionic/p-CmKf4pgI.js +4 -0
- package/dist/ionic/p-D5t_-oMk.js +4 -0
- package/dist/ionic/p-D94b61er.js +4 -0
- package/dist/ionic/p-DAztxQR0.js +4 -0
- package/dist/ionic/p-DCI3rXQo.js +4 -0
- package/dist/ionic/p-DDhtUaaA.js +4 -0
- package/dist/ionic/p-DJztqcrH.js +4 -0
- package/dist/ionic/p-DWCzVL3Y.js +4 -0
- package/dist/ionic/p-DkUB-ROc.js +4 -0
- package/dist/ionic/p-Dn0mqQ_R.js +4 -0
- package/dist/ionic/p-I3In7hMC.js +4 -0
- package/dist/ionic/p-T71k3C35.js +4 -0
- package/dist/ionic/p-TXPDHL13.js +4 -0
- package/dist/ionic/p-ZjP4CjeZ.js +4 -0
- package/dist/ionic/p-a71232d6.entry.js +4 -0
- package/dist/ionic/p-a73d8742.entry.js +4 -0
- package/dist/ionic/p-a8421d18.entry.js +4 -0
- package/dist/ionic/p-a8c2c343.entry.js +4 -0
- package/dist/ionic/p-acf0a6af.entry.js +4 -0
- package/dist/ionic/p-ad98e3ff.entry.js +4 -0
- package/dist/ionic/p-af5166f5.entry.js +4 -0
- package/dist/ionic/p-bc2bad5f.entry.js +4 -0
- package/dist/ionic/p-be08d500.entry.js +4 -0
- package/dist/ionic/p-be9a4f51.entry.js +4 -0
- package/dist/ionic/p-byZM6qHV.js +4 -0
- package/dist/ionic/p-ccc5044d.entry.js +4 -0
- package/dist/ionic/p-ce32912b.entry.js +4 -0
- package/dist/ionic/p-ded69ceb.entry.js +4 -0
- package/dist/ionic/p-e0c6e31e.entry.js +4 -0
- package/dist/ionic/p-e1e5b507.entry.js +4 -0
- package/dist/ionic/p-e8c3e08a.entry.js +4 -0
- package/dist/ionic/p-ed5d540d.entry.js +4 -0
- package/dist/ionic/p-f046aa37.entry.js +4 -0
- package/dist/ionic/p-f2802440.entry.js +4 -0
- package/dist/ionic/p-f402f5a4.entry.js +4 -0
- package/dist/ionic/p-fe1bfbcf.entry.js +4 -0
- package/dist/types/components/accordion/accordion.d.ts +3 -6
- package/dist/types/components/accordion-group/accordion-group.d.ts +1 -12
- package/dist/types/components/action-sheet/action-sheet-interface.d.ts +7 -3
- package/dist/types/components/action-sheet/action-sheet.d.ts +2 -3
- package/dist/types/components/alert/alert-interface.d.ts +7 -3
- package/dist/types/components/alert/alert.d.ts +2 -3
- package/dist/types/components/app/app.d.ts +5 -4
- package/dist/types/components/avatar/avatar.d.ts +0 -32
- package/dist/types/components/back-button/back-button.d.ts +1 -2
- package/dist/types/components/backdrop/backdrop.d.ts +0 -4
- package/dist/types/components/badge/badge.d.ts +1 -34
- package/dist/types/components/breadcrumb/breadcrumb.d.ts +1 -4
- package/dist/types/components/breadcrumbs/breadcrumbs.d.ts +2 -2
- package/dist/types/components/button/button.d.ts +8 -23
- package/dist/types/components/buttons/buttons.d.ts +1 -5
- package/dist/types/components/card/card.d.ts +1 -8
- package/dist/types/components/card-content/card-content.d.ts +1 -2
- package/dist/types/components/card-header/card-header.d.ts +2 -3
- package/dist/types/components/card-subtitle/card-subtitle.d.ts +1 -2
- package/dist/types/components/card-title/card-title.d.ts +1 -2
- package/dist/types/components/checkbox/checkbox.d.ts +4 -14
- package/dist/types/components/chip/chip.d.ts +1 -26
- package/dist/types/components/col/col.d.ts +5 -52
- package/dist/types/components/content/content.d.ts +0 -3
- package/dist/types/components/datetime/datetime.d.ts +1 -26
- package/dist/types/components/datetime/utils/data.d.ts +5 -5
- package/dist/types/components/datetime-button/datetime-button.d.ts +1 -2
- package/dist/types/components/fab/fab.d.ts +0 -4
- package/dist/types/components/fab-button/fab-button.d.ts +3 -5
- package/dist/types/components/fab-list/fab-list.d.ts +0 -4
- package/dist/types/components/footer/footer.d.ts +3 -20
- package/dist/types/components/grid/grid.d.ts +0 -4
- package/dist/types/components/header/header.d.ts +3 -26
- package/dist/types/components/header/header.utils.d.ts +5 -4
- package/dist/types/components/img/img.d.ts +1 -2
- package/dist/types/components/infinite-scroll/infinite-scroll.d.ts +0 -21
- package/dist/types/components/infinite-scroll-content/infinite-scroll-content.d.ts +0 -4
- package/dist/types/components/input/input.d.ts +17 -40
- package/dist/types/components/input-otp/input-otp.d.ts +0 -37
- package/dist/types/components/input-password-toggle/input-password-toggle.d.ts +0 -2
- package/dist/types/components/item/item.d.ts +4 -11
- package/dist/types/components/item-divider/item-divider.d.ts +1 -2
- package/dist/types/components/item-group/item-group.d.ts +0 -4
- package/dist/types/components/item-option/item-option.d.ts +1 -18
- package/dist/types/components/item-options/item-options.d.ts +0 -4
- package/dist/types/components/item-sliding/item-sliding.d.ts +1 -47
- package/dist/types/components/item-sliding/test/test.utils.d.ts +0 -13
- package/dist/types/components/label/label.d.ts +1 -2
- package/dist/types/components/list/list.d.ts +1 -15
- package/dist/types/components/list-header/list-header.d.ts +1 -2
- package/dist/types/components/loading/loading-interface.d.ts +7 -2
- package/dist/types/components/loading/loading.d.ts +2 -3
- package/dist/types/components/menu/menu.d.ts +0 -3
- package/dist/types/components/menu-button/menu-button.d.ts +1 -3
- package/dist/types/components/menu-toggle/menu-toggle.d.ts +0 -3
- package/dist/types/components/modal/gestures/sheet.d.ts +1 -1
- package/dist/types/components/modal/modal-interface.d.ts +16 -4
- package/dist/types/components/modal/modal.d.ts +12 -15
- package/dist/types/components/nav/nav-interface.d.ts +1 -10
- package/dist/types/components/nav/nav.d.ts +3 -27
- package/dist/types/components/nav-link/nav-link.d.ts +0 -4
- package/dist/types/components/note/note.d.ts +1 -2
- package/dist/types/components/picker/picker.d.ts +1 -2
- package/dist/types/components/picker-column/picker-column.d.ts +1 -2
- package/dist/types/components/picker-column-option/picker-column-option.d.ts +0 -4
- package/dist/types/components/popover/popover-interface.d.ts +6 -3
- package/dist/types/components/popover/popover.d.ts +5 -6
- package/dist/types/components/progress-bar/progress-bar.d.ts +1 -10
- package/dist/types/components/radio/radio.d.ts +1 -2
- package/dist/types/components/radio-group/radio-group.d.ts +0 -12
- package/dist/types/components/range/range.d.ts +1 -2
- package/dist/types/components/refresher/refresher.d.ts +1 -2
- package/dist/types/components/refresher-content/refresher-content.d.ts +0 -4
- package/dist/types/components/reorder/reorder.d.ts +0 -9
- package/dist/types/components/reorder-group/reorder-group.d.ts +0 -4
- package/dist/types/components/ripple-effect/ripple-effect.d.ts +0 -4
- package/dist/types/components/route/route.d.ts +1 -5
- package/dist/types/components/router/router.d.ts +0 -4
- package/dist/types/components/router-link/router-link.d.ts +0 -4
- package/dist/types/components/router-outlet/router-outlet.d.ts +8 -4
- package/dist/types/components/row/row.d.ts +0 -4
- package/dist/types/components/searchbar/searchbar.d.ts +11 -57
- package/dist/types/components/segment/segment.d.ts +1 -2
- package/dist/types/components/segment-button/segment-button.d.ts +1 -2
- package/dist/types/components/select/select.d.ts +26 -55
- package/dist/types/components/select-modal/select-modal.d.ts +0 -8
- package/dist/types/components/select-option/select-option.d.ts +4 -7
- package/dist/types/components/select-popover/select-popover.d.ts +0 -3
- package/dist/types/components/skeleton-text/skeleton-text.d.ts +0 -4
- package/dist/types/components/spinner/spinner.d.ts +0 -15
- package/dist/types/components/split-pane/split-pane.d.ts +0 -4
- package/dist/types/components/tab/tab.d.ts +0 -4
- package/dist/types/components/tab-bar/tab-bar-interface.d.ts +0 -1
- package/dist/types/components/tab-bar/tab-bar.d.ts +3 -41
- package/dist/types/components/tab-button/tab-button.d.ts +1 -12
- package/dist/types/components/tabs/tabs.d.ts +0 -3
- package/dist/types/components/text/text.d.ts +1 -2
- package/dist/types/components/textarea/textarea.d.ts +16 -58
- package/dist/types/components/thumbnail/thumbnail.d.ts +0 -4
- package/dist/types/components/title/title.d.ts +0 -4
- package/dist/types/components/toast/animations/utils.d.ts +2 -2
- package/dist/types/components/toast/toast-interface.d.ts +7 -3
- package/dist/types/components/toast/toast.d.ts +2 -19
- package/dist/types/components/toggle/toggle.d.ts +1 -15
- package/dist/types/components/toolbar/toolbar.d.ts +3 -43
- package/dist/types/components.d.ts +263 -2171
- package/dist/types/global/ionic-global.d.ts +2 -28
- package/dist/types/index.d.ts +1 -1
- package/dist/types/interface.d.ts +0 -4
- package/dist/types/utils/config.d.ts +3 -114
- package/dist/types/utils/focus-trap.d.ts +1 -1
- package/dist/types/utils/focus-visible.d.ts +0 -13
- package/dist/types/utils/forms/index.d.ts +1 -1
- package/dist/types/utils/forms/start-container-controller.d.ts +34 -0
- package/dist/types/utils/forms/validity.d.ts +0 -7
- package/dist/types/utils/helpers.d.ts +0 -22
- package/dist/types/utils/logging/index.d.ts +2 -1
- package/dist/types/utils/overlay-control-label.d.ts +9 -11
- package/dist/types/utils/overlays-interface.d.ts +1 -31
- package/dist/types/utils/overlays.d.ts +12 -10
- package/dist/types/utils/test/playwright/drag-element.d.ts +3 -16
- package/dist/types/utils/test/playwright/generator.d.ts +2 -31
- 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 +0 -9
- package/hydrate/index.js +10577 -12217
- package/hydrate/index.mjs +10577 -12217
- package/package.json +56 -17
- package/components/ion-divider.d.ts +0 -11
- package/components/ion-divider.js +0 -4
- package/components/ion-gallery-item.d.ts +0 -11
- package/components/ion-gallery-item.js +0 -4
- package/components/ion-gallery.d.ts +0 -11
- package/components/ion-gallery.js +0 -4
- package/components/ion-picker-legacy-column.d.ts +0 -11
- package/components/ion-picker-legacy-column.js +0 -4
- package/components/ion-picker-legacy.d.ts +0 -11
- package/components/ion-picker-legacy.js +0 -4
- package/components/p-6hUZIMBp.js +0 -4
- package/components/p-9mfpAwJh.js +0 -4
- package/components/p-B2aAAEfp.js +0 -4
- package/components/p-B2lpqDWK.js +0 -4
- package/components/p-BDoEcs72.js +0 -4
- package/components/p-BDqjX7Z_.js +0 -4
- package/components/p-BE21dB_a.js +0 -4
- package/components/p-BFpXpzD-.js +0 -4
- package/components/p-BTEOs1at.js +0 -4
- package/components/p-BUNIyvqe.js +0 -4
- package/components/p-BYSs-jZz.js +0 -4
- package/components/p-BYoGvMgh.js +0 -4
- package/components/p-BYrCPOBM.js +0 -4
- package/components/p-BbVhJs-a.js +0 -4
- package/components/p-BhRXIcSN.js +0 -4
- package/components/p-BjW8SOqw.js +0 -4
- package/components/p-BsiHrVPa.js +0 -4
- package/components/p-BwKpO3Is.js +0 -4
- package/components/p-Bz8jnuiy.js +0 -4
- package/components/p-C-Ea1l5K.js +0 -4
- package/components/p-C3X10Pc6.js +0 -4
- package/components/p-C53feagD.js +0 -4
- package/components/p-CA4M5WkT.js +0 -4
- package/components/p-CH6jbAEI.js +0 -4
- package/components/p-CJE5t2qs.js +0 -4
- package/components/p-CODBQrPj.js +0 -4
- package/components/p-CUbb1HkU.js +0 -4
- package/components/p-CVYFPBs-.js +0 -4
- package/components/p-CVoLDZ7z.js +0 -4
- package/components/p-CZrORZXS.js +0 -4
- package/components/p-Cc3oC60a.js +0 -4
- package/components/p-Cl0B-RWe.js +0 -4
- package/components/p-CmoUesXp.js +0 -4
- package/components/p-CyNW8ypn.js +0 -4
- package/components/p-CzxyxYID.js +0 -4
- package/components/p-D0Iqw6OZ.js +0 -4
- package/components/p-D0LT3Z3i.js +0 -4
- package/components/p-D1t981Ih.js +0 -4
- package/components/p-D6tqrIYY.js +0 -4
- package/components/p-D9C5yWpF.js +0 -4
- package/components/p-DCRXgAoM.js +0 -4
- package/components/p-DL5wyRub.js +0 -4
- package/components/p-DQlXUUDh.js +0 -4
- package/components/p-DRWN7QM2.js +0 -4
- package/components/p-DaJxRxSQ.js +0 -4
- package/components/p-DbmfFkd1.js +0 -4
- package/components/p-Dhi5xtNS.js +0 -4
- package/components/p-DnwLgh9U.js +0 -4
- package/components/p-DoZB3DcY.js +0 -4
- package/components/p-DrrpZB81.js +0 -4
- package/components/p-DrzWRqnG.js +0 -4
- package/components/p-DylrHLJF.js +0 -4
- package/components/p-Dypq4kXE.js +0 -4
- package/components/p-DzeMJvWL.js +0 -4
- package/components/p-Dzk4Tr0X.js +0 -4
- package/components/p-Rkm2AOZ2.js +0 -4
- package/components/p-UYngqo1f.js +0 -4
- package/components/p-asUhrzOB.js +0 -4
- package/components/p-fIOYmaqA.js +0 -4
- package/components/p-jlwpz7Ms.js +0 -4
- package/components/p-kInyVu79.js +0 -4
- package/components/p-miSYSxcc.js +0 -4
- package/components/p-paDbTUL9.js +0 -4
- package/components/p-vXpMhGrs.js +0 -4
- package/components/p-znZTPd7u.js +0 -4
- package/css/ionic/bundle.ionic.css +0 -1
- package/css/ionic/bundle.ionic.css.map +0 -1
- package/css/ionic/core.ionic.css +0 -1
- package/css/ionic/core.ionic.css.map +0 -1
- package/css/ionic/global.bundle.ionic.css +0 -1
- package/css/ionic/global.bundle.ionic.css.map +0 -1
- package/css/ionic/ionic-swiper.ionic.css +0 -1
- package/css/ionic/ionic-swiper.ionic.css.map +0 -1
- package/css/ionic/link.ionic.css +0 -1
- package/css/ionic/link.ionic.css.map +0 -1
- package/css/ionic/structure.ionic.css +0 -1
- package/css/ionic/structure.ionic.css.map +0 -1
- package/css/ionic/typography.ionic.css +0 -1
- package/css/ionic/typography.ionic.css.map +0 -1
- package/css/ionic/utils.bundle.ionic.css +0 -1
- package/css/ionic/utils.bundle.ionic.css.map +0 -1
- package/dist/cjs/caret-down-vtVgfXIs.js +0 -8
- package/dist/cjs/caret-left-CxZXLRv5.js +0 -8
- package/dist/cjs/caret-right-CRCgv98E.js +0 -8
- package/dist/cjs/clear-button-press-controller-2hAy_qdm.js +0 -45
- package/dist/cjs/input.utils-CYZZsbdf.js +0 -150
- package/dist/cjs/ion-datetime_3.cjs.entry.js +0 -3242
- package/dist/cjs/ion-divider.cjs.entry.js +0 -51
- package/dist/cjs/ion-gallery-item.cjs.entry.js +0 -59
- package/dist/cjs/ion-gallery.cjs.entry.js +0 -607
- package/dist/cjs/ionic-global-DvEcO0tQ.js +0 -519
- package/dist/cjs/list-a-7GSA6K.js +0 -8
- package/dist/cjs/notch-controller-CFlPw7ER.js +0 -155
- package/dist/cjs/scroll-hide-controller-DAf_DwKc.js +0 -345
- package/dist/cjs/validity-QmuwEptc.js +0 -51
- package/dist/cjs/x-BTF99yFH.js +0 -8
- package/dist/collection/components/accordion/accordion.ionic.css +0 -201
- package/dist/collection/components/accordion-group/accordion-group.ionic.css +0 -93
- package/dist/collection/components/action-sheet/action-sheet.ionic.css +0 -494
- package/dist/collection/components/alert/alert.ionic.css +0 -787
- package/dist/collection/components/avatar/avatar.ionic.css +0 -385
- package/dist/collection/components/backdrop/backdrop.ionic.css +0 -109
- package/dist/collection/components/badge/badge.ionic.css +0 -272
- package/dist/collection/components/button/button.ionic.css +0 -644
- package/dist/collection/components/buttons/buttons.ionic.css +0 -97
- package/dist/collection/components/card/card.ionic.css +0 -144
- package/dist/collection/components/card-content/card-content.ionic.css +0 -89
- package/dist/collection/components/card-header/card-header.ionic.css +0 -85
- package/dist/collection/components/card-subtitle/card-subtitle.ionic.css +0 -144
- package/dist/collection/components/checkbox/checkbox.ionic.css +0 -543
- package/dist/collection/components/chip/chip.ionic.css +0 -217
- package/dist/collection/components/datetime/datetime.ionic.css +0 -703
- package/dist/collection/components/divider/divider.ionic.css +0 -148
- package/dist/collection/components/divider/divider.ios.css +0 -87
- package/dist/collection/components/divider/divider.js +0 -94
- package/dist/collection/components/divider/divider.md.css +0 -87
- package/dist/collection/components/footer/footer-interface.js +0 -1
- package/dist/collection/components/gallery/gallery-constants.js +0 -12
- package/dist/collection/components/gallery/gallery-interface.js +0 -1
- package/dist/collection/components/gallery/gallery.css +0 -15
- package/dist/collection/components/gallery/gallery.js +0 -679
- package/dist/collection/components/gallery/test/utils.js +0 -100
- package/dist/collection/components/gallery-item/gallery-item.css +0 -49
- package/dist/collection/components/gallery-item/gallery-item.js +0 -99
- package/dist/collection/components/header/header-interface.js +0 -1
- package/dist/collection/components/header/header.ionic.css +0 -250
- package/dist/collection/components/input/input.ionic.css +0 -891
- package/dist/collection/components/input-otp/input-otp.ionic.css +0 -371
- package/dist/collection/components/input-password-toggle/input-password-toggle.ionic.css +0 -78
- package/dist/collection/components/input-password-toggle/input-password-toggle.native.css +0 -61
- package/dist/collection/components/item/item.ionic.css +0 -496
- package/dist/collection/components/item-option/item-option.ionic.css +0 -277
- package/dist/collection/components/item-options/item-options.ionic.css +0 -221
- package/dist/collection/components/item-sliding/item-sliding.ionic.css +0 -211
- package/dist/collection/components/list/list.ionic.css +0 -212
- package/dist/collection/components/list-header/list-header.ionic.css +0 -190
- package/dist/collection/components/menu-button/menu-button.ionic.css +0 -236
- package/dist/collection/components/modal/animations/ionic.enter.js +0 -40
- package/dist/collection/components/modal/animations/ionic.leave.js +0 -28
- package/dist/collection/components/modal/modal.ionic.css +0 -255
- package/dist/collection/components/picker-legacy/animations/ios.enter.js +0 -27
- package/dist/collection/components/picker-legacy/animations/ios.leave.js +0 -23
- package/dist/collection/components/picker-legacy/picker-interface.js +0 -1
- package/dist/collection/components/picker-legacy/picker.ios.css +0 -312
- package/dist/collection/components/picker-legacy/picker.js +0 -891
- package/dist/collection/components/picker-legacy/picker.md.css +0 -299
- package/dist/collection/components/picker-legacy-column/picker-column.ios.css +0 -243
- package/dist/collection/components/picker-legacy-column/picker-column.js +0 -422
- package/dist/collection/components/picker-legacy-column/picker-column.md.css +0 -234
- package/dist/collection/components/picker-legacy-column/test/test.utils.js +0 -43
- package/dist/collection/components/popover/popover.ionic.css +0 -290
- package/dist/collection/components/progress-bar/progress-bar.ionic.css +0 -287
- package/dist/collection/components/radio/radio.ionic.css +0 -422
- package/dist/collection/components/radio-group/radio-group.ionic.css +0 -119
- package/dist/collection/components/range/range.ionic.css +0 -567
- package/dist/collection/components/ripple-effect/ripple-effect.ionic.css +0 -215
- package/dist/collection/components/searchbar/searchbar.ionic.css +0 -622
- package/dist/collection/components/segment/segment.ionic.css +0 -115
- package/dist/collection/components/segment-button/segment-button.ionic.css +0 -352
- package/dist/collection/components/select/select.ionic.css +0 -809
- package/dist/collection/components/select-modal/select-modal.ionic.css +0 -257
- package/dist/collection/components/select-popover/select-popover.ionic.css +0 -255
- package/dist/collection/components/spinner/spinner.native.css +0 -199
- package/dist/collection/components/tab-bar/tab-bar.ionic.css +0 -249
- package/dist/collection/components/tab-button/tab-button.ionic.css +0 -373
- package/dist/collection/components/textarea/textarea.ionic.css +0 -898
- package/dist/collection/components/title/title.ionic.css +0 -127
- package/dist/collection/components/toast/toast.ionic.css +0 -394
- package/dist/collection/components/toggle/toggle.ionic.css +0 -512
- package/dist/collection/components/toolbar/test/image.svg +0 -1
- package/dist/collection/components/toolbar/toolbar.ionic.css +0 -249
- package/dist/collection/utils/css-value-validation.js +0 -39
- package/dist/collection/utils/forms/clear-button-press-controller.js +0 -40
- package/dist/collection/utils/scroll-hide-controller.js +0 -178
- package/dist/esm/caret-down-D1t981Ih.js +0 -6
- package/dist/esm/caret-left-fIOYmaqA.js +0 -6
- package/dist/esm/caret-right-BYSs-jZz.js +0 -6
- package/dist/esm/clear-button-press-controller-C79TPm5p.js +0 -43
- package/dist/esm/input.utils-fs4B7WL5.js +0 -147
- package/dist/esm/ion-datetime_3.entry.js +0 -3238
- package/dist/esm/ion-divider.entry.js +0 -49
- package/dist/esm/ion-gallery-item.entry.js +0 -57
- package/dist/esm/ion-gallery.entry.js +0 -605
- package/dist/esm/ionic-global-CEwbmRLz.js +0 -508
- package/dist/esm/list-Dhi5xtNS.js +0 -6
- package/dist/esm/notch-controller-CsbpmbOz.js +0 -153
- package/dist/esm/scroll-hide-controller-CfbtPBWv.js +0 -342
- package/dist/esm/theme-DaJxRxSQ.js +0 -67
- package/dist/esm/validity-BjW8SOqw.js +0 -48
- package/dist/esm/x-BDqjX7Z_.js +0 -6
- package/dist/ionic/p--sroV-k-.js +0 -4
- package/dist/ionic/p-00731d20.entry.js +0 -4
- package/dist/ionic/p-03c20a50.entry.js +0 -4
- package/dist/ionic/p-03ec6673.entry.js +0 -4
- package/dist/ionic/p-0405ec57.entry.js +0 -4
- package/dist/ionic/p-04f16322.entry.js +0 -4
- package/dist/ionic/p-09123f89.entry.js +0 -4
- package/dist/ionic/p-15028853.entry.js +0 -4
- package/dist/ionic/p-16c5db90.entry.js +0 -4
- package/dist/ionic/p-1d1dfb68.entry.js +0 -4
- package/dist/ionic/p-231572a0.entry.js +0 -4
- package/dist/ionic/p-2740db6e.entry.js +0 -4
- package/dist/ionic/p-2a6d4601.entry.js +0 -4
- package/dist/ionic/p-2d8fe33c.entry.js +0 -4
- package/dist/ionic/p-2dbc50d9.entry.js +0 -4
- package/dist/ionic/p-32d3095c.entry.js +0 -4
- package/dist/ionic/p-356cd619.entry.js +0 -4
- package/dist/ionic/p-391bdb60.entry.js +0 -4
- package/dist/ionic/p-3b2ab5b4.entry.js +0 -4
- package/dist/ionic/p-4e3e750a.entry.js +0 -4
- package/dist/ionic/p-4fee0df6.entry.js +0 -4
- package/dist/ionic/p-547d010c.entry.js +0 -4
- package/dist/ionic/p-54895118.entry.js +0 -4
- package/dist/ionic/p-6163d04d.entry.js +0 -4
- package/dist/ionic/p-679c1448.entry.js +0 -4
- package/dist/ionic/p-6de524e5.entry.js +0 -4
- package/dist/ionic/p-764d7ea2.entry.js +0 -4
- package/dist/ionic/p-7k7Q1A38.js +0 -4
- package/dist/ionic/p-81BMEE8Q.js +0 -4
- package/dist/ionic/p-8d6d7acb.entry.js +0 -4
- package/dist/ionic/p-96732fe2.entry.js +0 -4
- package/dist/ionic/p-96c4c1b9.entry.js +0 -4
- package/dist/ionic/p-9745f518.entry.js +0 -4
- package/dist/ionic/p-9a40af3c.entry.js +0 -4
- package/dist/ionic/p-9e725104.entry.js +0 -4
- package/dist/ionic/p-B4Kq2YNk.js +0 -4
- package/dist/ionic/p-BDqjX7Z_.js +0 -4
- package/dist/ionic/p-BTEOs1at.js +0 -4
- package/dist/ionic/p-BYSs-jZz.js +0 -4
- package/dist/ionic/p-BbWo-T8F.js +0 -4
- package/dist/ionic/p-BjW8SOqw.js +0 -4
- package/dist/ionic/p-Bvz8PHo5.js +0 -4
- package/dist/ionic/p-BwKpO3Is.js +0 -4
- package/dist/ionic/p-C0EQceqV.js +0 -5
- package/dist/ionic/p-C1_a9uRb.js +0 -4
- package/dist/ionic/p-C53feagD.js +0 -4
- package/dist/ionic/p-C6WD6qSF.js +0 -4
- package/dist/ionic/p-C7urd_wE.js +0 -4
- package/dist/ionic/p-CCgRIJJv.js +0 -4
- package/dist/ionic/p-CEkwLb3L.js +0 -4
- package/dist/ionic/p-CGFf6My7.js +0 -4
- package/dist/ionic/p-CLUwRxij.js +0 -4
- package/dist/ionic/p-CODBQrPj.js +0 -4
- package/dist/ionic/p-CP_sVwEm.js +0 -4
- package/dist/ionic/p-CSMWpRc0.js +0 -4
- package/dist/ionic/p-CYYo93al.js +0 -4
- package/dist/ionic/p-Cipl19Qe.js +0 -4
- package/dist/ionic/p-Cl0B-RWe.js +0 -4
- package/dist/ionic/p-CnIzWLAn.js +0 -4
- package/dist/ionic/p-Cvvva6Z7.js +0 -4
- package/dist/ionic/p-D1t981Ih.js +0 -4
- package/dist/ionic/p-DINFwXlp.js +0 -4
- package/dist/ionic/p-DIvCXVmD.js +0 -4
- package/dist/ionic/p-DTsDGZPd.js +0 -4
- package/dist/ionic/p-DaJxRxSQ.js +0 -4
- package/dist/ionic/p-Dhi5xtNS.js +0 -4
- package/dist/ionic/p-DtQgCTtW.js +0 -4
- package/dist/ionic/p-DuRx6DeQ.js +0 -4
- package/dist/ionic/p-YGLqXqFd.js +0 -4
- package/dist/ionic/p-YIsE5bNG.js +0 -4
- package/dist/ionic/p-a61c2ace.entry.js +0 -4
- package/dist/ionic/p-abb516e3.entry.js +0 -4
- package/dist/ionic/p-b54edee6.entry.js +0 -4
- package/dist/ionic/p-c076ac5c.entry.js +0 -4
- package/dist/ionic/p-c4ff25cb.entry.js +0 -4
- package/dist/ionic/p-c7279756.entry.js +0 -4
- package/dist/ionic/p-c7ebed50.entry.js +0 -4
- package/dist/ionic/p-cd0037e4.entry.js +0 -4
- package/dist/ionic/p-d261938d.entry.js +0 -4
- package/dist/ionic/p-d33dfc12.entry.js +0 -4
- package/dist/ionic/p-d7764330.entry.js +0 -4
- package/dist/ionic/p-defb23a2.entry.js +0 -4
- package/dist/ionic/p-df642ef5.entry.js +0 -4
- package/dist/ionic/p-e2a35249.entry.js +0 -4
- package/dist/ionic/p-e2b952ef.entry.js +0 -4
- package/dist/ionic/p-e77cfd1e.entry.js +0 -4
- package/dist/ionic/p-ecb9d3d3.entry.js +0 -4
- package/dist/ionic/p-efd13adf.entry.js +0 -4
- package/dist/ionic/p-f0904c1d.entry.js +0 -4
- package/dist/ionic/p-f33689f7.entry.js +0 -4
- package/dist/ionic/p-f693efe9.entry.js +0 -4
- package/dist/ionic/p-f788396b.entry.js +0 -4
- package/dist/ionic/p-fIOYmaqA.js +0 -4
- package/dist/ionic/p-fa16fad8.entry.js +0 -4
- package/dist/ionic/p-lMb_45ax.js +0 -4
- package/dist/ionic/p-oadJNPuo.js +0 -4
- package/dist/ionic/p-vXpMhGrs.js +0 -4
- package/dist/ionic/p-wNjWCZVO.js +0 -4
- package/dist/types/components/divider/divider.d.ts +0 -20
- package/dist/types/components/footer/footer-interface.d.ts +0 -1
- package/dist/types/components/gallery/gallery-constants.d.ts +0 -9
- package/dist/types/components/gallery/gallery-interface.d.ts +0 -10
- package/dist/types/components/gallery/gallery.d.ts +0 -218
- package/dist/types/components/gallery/test/utils.d.ts +0 -3
- package/dist/types/components/gallery-item/gallery-item.d.ts +0 -33
- package/dist/types/components/header/header-interface.d.ts +0 -1
- package/dist/types/components/modal/animations/ionic.enter.d.ts +0 -6
- package/dist/types/components/modal/animations/ionic.leave.d.ts +0 -6
- package/dist/types/components/picker-legacy/animations/ios.enter.d.ts +0 -5
- package/dist/types/components/picker-legacy/animations/ios.leave.d.ts +0 -5
- package/dist/types/components/picker-legacy/picker-interface.d.ts +0 -52
- package/dist/types/components/picker-legacy/picker.d.ts +0 -159
- package/dist/types/components/picker-legacy-column/picker-column.d.ts +0 -46
- package/dist/types/components/picker-legacy-column/test/test.utils.d.ts +0 -9
- package/dist/types/utils/css-value-validation.d.ts +0 -21
- package/dist/types/utils/forms/clear-button-press-controller.d.ts +0 -20
- package/dist/types/utils/scroll-hide-controller.d.ts +0 -56
- /package/dist/collection/components/{refresher-content/refresher-content.css → input-password-toggle/input-password-toggle.css} +0 -0
|
@@ -1,24 +1,23 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
3
|
*/
|
|
4
|
-
import caretDownRegular from "@phosphor-icons/core/assets/regular/caret-down.svg";
|
|
5
4
|
import { Build, Host, h, forceUpdate } from "@stencil/core";
|
|
6
5
|
import { ENABLE_HTML_CONTENT_DEFAULT } from "../../utils/config";
|
|
7
|
-
import { compareOptions, createNotchController, isOptionSelected, checkInvalidState } from "../../utils/forms/index";
|
|
8
|
-
import {
|
|
6
|
+
import { compareOptions, createNotchController, createStartContainerController, isOptionSelected, checkInvalidState, } from "../../utils/forms/index";
|
|
7
|
+
import { focusVisibleElement, renderHiddenInput, inheritAttributes } from "../../utils/helpers";
|
|
9
8
|
import { printIonWarning } from "../../utils/logging/index";
|
|
10
9
|
import { actionSheetController, alertController, popoverController, modalController } from "../../utils/overlays";
|
|
11
10
|
import { isRTL } from "../../utils/rtl/index";
|
|
12
11
|
import { reflectPropertiesToAttributes, sanitizeDOMTree } from "../../utils/sanitization/index";
|
|
12
|
+
import { createSlotMutationController } from "../../utils/slot-mutation-controller";
|
|
13
13
|
import { createColorClasses, hostContext } from "../../utils/theme";
|
|
14
14
|
import { watchForOptions } from "../../utils/watch-options";
|
|
15
15
|
import { caretDownSharp, chevronExpand } from "ionicons/icons";
|
|
16
16
|
import { config } from "../../global/config";
|
|
17
|
-
import {
|
|
17
|
+
import { getIonMode } from "../../global/ionic-global";
|
|
18
18
|
// TODO(FW-2832): types
|
|
19
19
|
/**
|
|
20
|
-
* @virtualProp {"ios" | "md"} mode - The mode determines
|
|
21
|
-
* @virtualProp {"ios" | "md" | "ionic"} theme - The theme determines the visual appearance of the component.
|
|
20
|
+
* @virtualProp {"ios" | "md"} mode - The mode determines which platform styles to use.
|
|
22
21
|
*
|
|
23
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.
|
|
24
23
|
* @slot start - Content to display at the leading edge of the select.
|
|
@@ -34,154 +33,244 @@ import { getIonTheme } from "../../global/ionic-global";
|
|
|
34
33
|
* @part error-text - Supporting text displayed beneath the select when the select is invalid and touched.
|
|
35
34
|
* @part bottom - The container element for helper text, error text, and counter.
|
|
36
35
|
* @part wrapper - The clickable label element that wraps the entire form field (label text, slots, selected values or placeholder, and toggle icons).
|
|
37
|
-
* @part
|
|
36
|
+
* @part start - The wrapper element for the content in the start slot.
|
|
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.
|
|
38
39
|
*/
|
|
39
40
|
export class Select {
|
|
40
|
-
|
|
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
|
-
|
|
41
|
+
inputId = `ion-sel-${selectIds++}`;
|
|
42
|
+
helperTextId = `${this.inputId}-helper-text`;
|
|
43
|
+
errorTextId = `${this.inputId}-error-text`;
|
|
44
|
+
overlay;
|
|
45
|
+
focusEl;
|
|
46
|
+
mutationO;
|
|
47
|
+
inheritedAttributes = {};
|
|
48
|
+
slotMutationController;
|
|
49
|
+
nativeWrapperEl;
|
|
50
|
+
notchSpacerEl;
|
|
51
|
+
validationObserver;
|
|
52
|
+
notchController;
|
|
53
|
+
startContainerController;
|
|
54
|
+
startContainerEl;
|
|
55
|
+
customHTMLEnabled = config.get('innerHTMLTemplatesEnabled', ENABLE_HTML_CONTENT_DEFAULT);
|
|
56
|
+
el;
|
|
57
|
+
isExpanded = false;
|
|
58
|
+
/**
|
|
59
|
+
* The `hasFocus` state ensures the focus class is
|
|
60
|
+
* added regardless of how the element is focused.
|
|
61
|
+
* The `ion-focused` class only applies when focused
|
|
62
|
+
* via tabbing, not by clicking.
|
|
63
|
+
* The `has-focus` logic was added to ensure the class
|
|
64
|
+
* is applied in both cases.
|
|
65
|
+
*/
|
|
66
|
+
hasFocus = false;
|
|
67
|
+
/**
|
|
68
|
+
* Track validation state for proper aria-live announcements.
|
|
69
|
+
*/
|
|
70
|
+
isInvalid = false;
|
|
71
|
+
hintTextId;
|
|
72
|
+
/**
|
|
73
|
+
* The text to display on the cancel button.
|
|
74
|
+
*/
|
|
75
|
+
cancelText = 'Cancel';
|
|
76
|
+
/**
|
|
77
|
+
* The color to use from your application's color palette.
|
|
78
|
+
* Default options are: `"primary"`, `"secondary"`, `"tertiary"`, `"success"`, `"warning"`, `"danger"`, `"light"`, `"medium"`, and `"dark"`.
|
|
79
|
+
* For more information on colors, see [theming](/docs/theming/basics).
|
|
80
|
+
*
|
|
81
|
+
* This property is only available when using the modern select syntax.
|
|
82
|
+
*/
|
|
83
|
+
color;
|
|
84
|
+
/**
|
|
85
|
+
* This property allows developers to specify a custom function or property
|
|
86
|
+
* name for comparing objects when determining the selected option in the
|
|
87
|
+
* ion-select. When not specified, the default behavior will use strict
|
|
88
|
+
* equality (===) for comparison.
|
|
89
|
+
*/
|
|
90
|
+
compareWith;
|
|
91
|
+
/**
|
|
92
|
+
* If `true`, the user cannot interact with the select.
|
|
93
|
+
*/
|
|
94
|
+
disabled = false;
|
|
95
|
+
/**
|
|
96
|
+
* The fill for the item. If `"solid"` the item will have a background. If
|
|
97
|
+
* `"outline"` the item will be transparent with a border. Only available in `md` mode.
|
|
98
|
+
*/
|
|
99
|
+
fill;
|
|
100
|
+
/**
|
|
101
|
+
* Text that is placed under the select and displayed when an error is detected.
|
|
102
|
+
*/
|
|
103
|
+
errorText;
|
|
104
|
+
/**
|
|
105
|
+
* Text that is placed under the select and displayed when no error is detected.
|
|
106
|
+
*/
|
|
107
|
+
helperText;
|
|
108
|
+
/**
|
|
109
|
+
* The interface the select should use: `action-sheet`, `popover`, `alert`, or `modal`.
|
|
110
|
+
*/
|
|
111
|
+
interface = 'alert';
|
|
112
|
+
/**
|
|
113
|
+
* Any additional options that the `alert`, `action-sheet` or `popover` interface
|
|
114
|
+
* can take. See the [ion-alert docs](./alert), the
|
|
115
|
+
* [ion-action-sheet docs](./action-sheet), the
|
|
116
|
+
* [ion-popover docs](./popover), and the [ion-modal docs](./modal) for the
|
|
117
|
+
* create options for each interface.
|
|
118
|
+
*
|
|
119
|
+
* Note: `interfaceOptions` will not override `inputs` or `buttons` with the `alert` interface.
|
|
120
|
+
*/
|
|
121
|
+
interfaceOptions = {};
|
|
122
|
+
/**
|
|
123
|
+
* How to pack the label and select within a line.
|
|
124
|
+
* `justify` does not apply when the label and select
|
|
125
|
+
* are on different lines when `labelPlacement` is set to
|
|
126
|
+
* `"floating"` or `"stacked"`.
|
|
127
|
+
* `"start"`: The label and select will appear on the left in LTR and
|
|
128
|
+
* on the right in RTL.
|
|
129
|
+
* `"end"`: The label and select will appear on the right in LTR and
|
|
130
|
+
* on the left in RTL.
|
|
131
|
+
* `"space-between"`: The label and select will appear on opposite
|
|
132
|
+
* ends of the line with space between the two elements.
|
|
133
|
+
*/
|
|
134
|
+
justify;
|
|
135
|
+
/**
|
|
136
|
+
* The visible label associated with the select.
|
|
137
|
+
*
|
|
138
|
+
* Use this if you need to render a plaintext label.
|
|
139
|
+
*
|
|
140
|
+
* The `label` property will take priority over the `label` slot if both are used.
|
|
141
|
+
*/
|
|
142
|
+
label;
|
|
143
|
+
/**
|
|
144
|
+
* Where to place the label relative to the select.
|
|
145
|
+
* `"start"`: The label will appear to the left of the select in LTR and to the right in RTL.
|
|
146
|
+
* `"end"`: The label will appear to the right of the select in LTR and to the left in RTL.
|
|
147
|
+
* `"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.
|
|
148
|
+
* `"stacked"`: The label will appear smaller and above the select regardless even when the select is blurred or has no value.
|
|
149
|
+
* `"fixed"`: The label has the same behavior as `"start"` except it also has a fixed width. Long text will be truncated with ellipses ("...").
|
|
150
|
+
* When using `"floating"` or `"stacked"` we recommend initializing the select with either a `value` or a `placeholder`.
|
|
151
|
+
*/
|
|
152
|
+
labelPlacement = 'start';
|
|
153
|
+
/**
|
|
154
|
+
* If `true`, the select can accept multiple values.
|
|
155
|
+
*/
|
|
156
|
+
multiple = false;
|
|
157
|
+
/**
|
|
158
|
+
* The name of the control, which is submitted with the form data.
|
|
159
|
+
*/
|
|
160
|
+
name = this.inputId;
|
|
161
|
+
/**
|
|
162
|
+
* The text to display on the ok button.
|
|
163
|
+
*/
|
|
164
|
+
okText = 'OK';
|
|
165
|
+
/**
|
|
166
|
+
* The text to display when the select is empty.
|
|
167
|
+
*/
|
|
168
|
+
placeholder;
|
|
169
|
+
/**
|
|
170
|
+
* The text to display instead of the selected option's value.
|
|
171
|
+
*/
|
|
172
|
+
selectedText;
|
|
173
|
+
/**
|
|
174
|
+
* The toggle icon to use. Defaults to `chevronExpand` for `ios` mode,
|
|
175
|
+
* or `caretDownSharp` for `md` mode.
|
|
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;
|
|
175
225
|
styleChanged() {
|
|
176
226
|
this.emitStyle();
|
|
177
227
|
}
|
|
178
228
|
setValue(value) {
|
|
229
|
+
if (this.isValueEqual(this.value, value)) {
|
|
230
|
+
return;
|
|
231
|
+
}
|
|
179
232
|
this.value = value;
|
|
180
233
|
this.ionChange.emit({ value });
|
|
181
234
|
}
|
|
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
|
+
}
|
|
182
263
|
async connectedCallback() {
|
|
183
264
|
const { el } = this;
|
|
265
|
+
this.slotMutationController = createSlotMutationController(el, ['label', 'start', 'end'], () => {
|
|
266
|
+
this.startContainerController?.calculateStartContainerWidth();
|
|
267
|
+
forceUpdate(this);
|
|
268
|
+
});
|
|
184
269
|
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();
|
|
185
274
|
this.updateOverlayOptions();
|
|
186
275
|
this.emitStyle();
|
|
187
276
|
this.mutationO = watchForOptions(this.el, 'ion-select-option', async () => {
|
|
@@ -253,10 +342,18 @@ export class Select {
|
|
|
253
342
|
this.mutationO.disconnect();
|
|
254
343
|
this.mutationO = undefined;
|
|
255
344
|
}
|
|
345
|
+
if (this.slotMutationController) {
|
|
346
|
+
this.slotMutationController.destroy();
|
|
347
|
+
this.slotMutationController = undefined;
|
|
348
|
+
}
|
|
256
349
|
if (this.notchController) {
|
|
257
350
|
this.notchController.destroy();
|
|
258
351
|
this.notchController = undefined;
|
|
259
352
|
}
|
|
353
|
+
if (this.startContainerController) {
|
|
354
|
+
this.startContainerController.destroy();
|
|
355
|
+
this.startContainerController = undefined;
|
|
356
|
+
}
|
|
260
357
|
// Clean up validation observer to prevent memory leaks.
|
|
261
358
|
if (this.validationObserver) {
|
|
262
359
|
this.validationObserver.disconnect();
|
|
@@ -278,65 +375,44 @@ export class Select {
|
|
|
278
375
|
// Add logic to scroll selected item into view before presenting
|
|
279
376
|
const scrollSelectedIntoView = () => {
|
|
280
377
|
const indexOfSelected = this.childOpts.findIndex((o) => o.value === this.value);
|
|
281
|
-
/**
|
|
282
|
-
* Determine which option to focus when the overlay opens: the selected
|
|
283
|
-
* option if the select has a value, otherwise the first enabled option.
|
|
284
|
-
*/
|
|
285
|
-
let optionToFocus = null;
|
|
286
378
|
if (indexOfSelected > -1) {
|
|
287
379
|
const selectedItem = overlay.querySelector(`.select-interface-option:nth-of-type(${indexOfSelected + 1})`);
|
|
288
|
-
/**
|
|
289
|
-
* If the option contains an `ion-radio` or `ion-checkbox`, focus
|
|
290
|
-
* that instead of the option element itself. This ensures that
|
|
291
|
-
* screen readers will announce the role and state of the element
|
|
292
|
-
* (e.g. "radio button, checked") rather than only the option text.
|
|
293
|
-
* Alert and action sheet options are plain buttons, so fall back to
|
|
294
|
-
* focusing the option element itself in those cases.
|
|
295
|
-
*/
|
|
296
380
|
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
|
+
*/
|
|
297
392
|
const interactiveEl = selectedItem.querySelector('ion-radio, ion-checkbox');
|
|
298
393
|
if (interactiveEl) {
|
|
299
394
|
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();
|
|
300
398
|
}
|
|
301
|
-
|
|
399
|
+
focusVisibleElement(selectedItem);
|
|
302
400
|
}
|
|
303
401
|
}
|
|
304
402
|
else {
|
|
305
403
|
/**
|
|
306
404
|
* If no value is set then focus the first enabled option.
|
|
307
405
|
*/
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
*
|
|
319
|
-
* `ion-radio` and `ion-checkbox` expose `setFocus`, which correctly
|
|
320
|
-
* delegates focus to their inner focusable element. This is needed
|
|
321
|
-
* because browsers such as Firefox do not delegate focus correctly
|
|
322
|
-
* when focusing an element with delegatesFocus. When the option is
|
|
323
|
-
* a plain button it can be focused directly.
|
|
324
|
-
*/
|
|
325
|
-
if (optionToFocus.matches('ion-radio, ion-checkbox')) {
|
|
326
|
-
optionToFocus.setFocus();
|
|
327
|
-
}
|
|
328
|
-
else {
|
|
329
|
-
optionToFocus.focus();
|
|
330
|
-
}
|
|
331
|
-
/**
|
|
332
|
-
* In the alert interface, when tabbing and pressing enter to open
|
|
333
|
-
* the select, the value that is currently selected flashes the
|
|
334
|
-
* focused state briefly before moving to its wrapper. This suppresses
|
|
335
|
-
* the focus visible state, so that the option will only show as
|
|
336
|
-
* focused when navigating with the keyboard.
|
|
337
|
-
*/
|
|
338
|
-
if (this.interface === 'alert') {
|
|
339
|
-
suppressFocusVisible();
|
|
406
|
+
const firstEnabledOption = overlay.querySelector('ion-radio:not(.radio-disabled), ion-checkbox:not(.checkbox-disabled)');
|
|
407
|
+
if (firstEnabledOption) {
|
|
408
|
+
/**
|
|
409
|
+
* Focus the option for the same reason as we do above.
|
|
410
|
+
*
|
|
411
|
+
* Needs to be called before `focusVisibleElement` to prevent issue with focus event bubbling
|
|
412
|
+
* and removing `ion-focused` style
|
|
413
|
+
*/
|
|
414
|
+
firstEnabledOption.setFocus();
|
|
415
|
+
focusVisibleElement(firstEnabledOption.closest('ion-item'));
|
|
340
416
|
}
|
|
341
417
|
}
|
|
342
418
|
};
|
|
@@ -436,8 +512,7 @@ export class Select {
|
|
|
436
512
|
const isSelected = isOptionSelected(selectValue, value, this.compareWith);
|
|
437
513
|
const { content, startContent, endContent } = extractOptionContent(option, this.customHTMLEnabled);
|
|
438
514
|
return {
|
|
439
|
-
|
|
440
|
-
text: content !== null && content !== void 0 ? content : '',
|
|
515
|
+
text: content ?? '',
|
|
441
516
|
cssClass: optClass,
|
|
442
517
|
disabled: option.disabled,
|
|
443
518
|
handler: () => {
|
|
@@ -474,7 +549,7 @@ export class Select {
|
|
|
474
549
|
return {
|
|
475
550
|
type: inputType,
|
|
476
551
|
cssClass: optClass,
|
|
477
|
-
label: content
|
|
552
|
+
label: content ?? '',
|
|
478
553
|
value,
|
|
479
554
|
checked: isOptionSelected(selectValue, value, this.compareWith),
|
|
480
555
|
disabled: option.disabled,
|
|
@@ -497,7 +572,7 @@ export class Select {
|
|
|
497
572
|
const optClass = `${OPTION_CLASS} ${copyClasses}`;
|
|
498
573
|
const { content, startContent, endContent } = extractOptionContent(option, this.customHTMLEnabled);
|
|
499
574
|
return {
|
|
500
|
-
text: content
|
|
575
|
+
text: content ?? '',
|
|
501
576
|
cssClass: optClass,
|
|
502
577
|
value,
|
|
503
578
|
checked: isOptionSelected(selectValue, value, this.compareWith),
|
|
@@ -520,8 +595,8 @@ export class Select {
|
|
|
520
595
|
async openPopover(ev) {
|
|
521
596
|
const { fill, labelPlacement } = this;
|
|
522
597
|
const interfaceOptions = this.interfaceOptions;
|
|
523
|
-
const
|
|
524
|
-
const showBackdrop =
|
|
598
|
+
const mode = getIonMode(this);
|
|
599
|
+
const showBackdrop = mode === 'md' ? false : true;
|
|
525
600
|
const multiple = this.multiple;
|
|
526
601
|
const value = this.value;
|
|
527
602
|
let event = ev;
|
|
@@ -532,7 +607,7 @@ export class Select {
|
|
|
532
607
|
* when using a fill in MD mode or if the
|
|
533
608
|
* label is floating/stacked.
|
|
534
609
|
*/
|
|
535
|
-
if (hasFloatingOrStackedLabel || (
|
|
610
|
+
if (hasFloatingOrStackedLabel || (mode === 'md' && fill !== undefined)) {
|
|
536
611
|
size = 'cover';
|
|
537
612
|
/**
|
|
538
613
|
* Otherwise the popover
|
|
@@ -541,34 +616,43 @@ export class Select {
|
|
|
541
616
|
*/
|
|
542
617
|
}
|
|
543
618
|
else {
|
|
544
|
-
event =
|
|
619
|
+
event = {
|
|
620
|
+
...ev,
|
|
621
|
+
detail: {
|
|
545
622
|
ionShadowTarget: this.nativeWrapperEl,
|
|
546
|
-
}
|
|
623
|
+
},
|
|
624
|
+
};
|
|
547
625
|
}
|
|
548
626
|
const options = this.createOverlaySelectOptions(this.childOpts, value);
|
|
549
|
-
const hasRichContent = options.some((opt) => opt.startContent || opt.endContent || opt.description);
|
|
550
|
-
const popoverOpts =
|
|
551
|
-
|
|
552
|
-
|
|
627
|
+
const hasRichContent = options.some((opt) => Boolean(opt.startContent) || Boolean(opt.endContent) || Boolean(opt.description));
|
|
628
|
+
const popoverOpts = {
|
|
629
|
+
mode,
|
|
630
|
+
event,
|
|
631
|
+
alignment: 'center',
|
|
632
|
+
size,
|
|
633
|
+
showBackdrop,
|
|
634
|
+
...interfaceOptions,
|
|
635
|
+
component: 'ion-select-popover',
|
|
636
|
+
cssClass: [
|
|
553
637
|
'select-popover',
|
|
554
638
|
hasRichContent ? 'select-popover-rich-content' : undefined,
|
|
555
639
|
interfaceOptions.cssClass,
|
|
556
|
-
],
|
|
640
|
+
],
|
|
641
|
+
componentProps: {
|
|
557
642
|
header: interfaceOptions.header,
|
|
558
643
|
subHeader: interfaceOptions.subHeader,
|
|
559
644
|
message: interfaceOptions.message,
|
|
560
645
|
multiple,
|
|
561
646
|
value,
|
|
562
647
|
options,
|
|
563
|
-
}
|
|
648
|
+
},
|
|
649
|
+
};
|
|
564
650
|
/**
|
|
565
651
|
* Workaround for Stencil to autodefine
|
|
566
652
|
* ion-select-popover and ion-popover when
|
|
567
653
|
* using Custom Elements build.
|
|
568
654
|
*/
|
|
569
|
-
// eslint-disable-next-line
|
|
570
655
|
if (false) {
|
|
571
|
-
// eslint-disable-next-line
|
|
572
656
|
// @ts-ignore
|
|
573
657
|
document.createElement('ion-select-popover');
|
|
574
658
|
document.createElement('ion-popover');
|
|
@@ -576,17 +660,20 @@ export class Select {
|
|
|
576
660
|
return popoverController.create(popoverOpts);
|
|
577
661
|
}
|
|
578
662
|
async openActionSheet() {
|
|
579
|
-
const
|
|
663
|
+
const mode = getIonMode(this);
|
|
580
664
|
const interfaceOptions = this.interfaceOptions;
|
|
581
|
-
const actionSheetOpts =
|
|
665
|
+
const actionSheetOpts = {
|
|
666
|
+
mode,
|
|
667
|
+
...interfaceOptions,
|
|
668
|
+
buttons: this.createActionSheetButtons(this.childOpts, this.value),
|
|
669
|
+
cssClass: ['select-action-sheet', interfaceOptions.cssClass],
|
|
670
|
+
};
|
|
582
671
|
/**
|
|
583
672
|
* Workaround for Stencil to autodefine
|
|
584
673
|
* ion-action-sheet when
|
|
585
674
|
* using Custom Elements build.
|
|
586
675
|
*/
|
|
587
|
-
// eslint-disable-next-line
|
|
588
676
|
if (false) {
|
|
589
|
-
// eslint-disable-next-line
|
|
590
677
|
// @ts-ignore
|
|
591
678
|
document.createElement('ion-action-sheet');
|
|
592
679
|
}
|
|
@@ -595,8 +682,13 @@ export class Select {
|
|
|
595
682
|
async openAlert() {
|
|
596
683
|
const interfaceOptions = this.interfaceOptions;
|
|
597
684
|
const inputType = this.multiple ? 'checkbox' : 'radio';
|
|
598
|
-
const
|
|
599
|
-
const alertOpts =
|
|
685
|
+
const mode = getIonMode(this);
|
|
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: [
|
|
600
692
|
{
|
|
601
693
|
text: this.cancelText,
|
|
602
694
|
role: 'cancel',
|
|
@@ -610,19 +702,19 @@ export class Select {
|
|
|
610
702
|
this.setValue(selectedValues);
|
|
611
703
|
},
|
|
612
704
|
},
|
|
613
|
-
],
|
|
705
|
+
],
|
|
706
|
+
cssClass: [
|
|
614
707
|
'select-alert',
|
|
615
708
|
interfaceOptions.cssClass,
|
|
616
709
|
this.multiple ? 'multiple-select-alert' : 'single-select-alert',
|
|
617
|
-
]
|
|
710
|
+
],
|
|
711
|
+
};
|
|
618
712
|
/**
|
|
619
713
|
* Workaround for Stencil to autodefine
|
|
620
714
|
* ion-alert when
|
|
621
715
|
* using Custom Elements build.
|
|
622
716
|
*/
|
|
623
|
-
// eslint-disable-next-line
|
|
624
717
|
if (false) {
|
|
625
|
-
// eslint-disable-next-line
|
|
626
718
|
// @ts-ignore
|
|
627
719
|
document.createElement('ion-alert');
|
|
628
720
|
}
|
|
@@ -630,23 +722,26 @@ export class Select {
|
|
|
630
722
|
}
|
|
631
723
|
openModal() {
|
|
632
724
|
const { multiple, value, interfaceOptions } = this;
|
|
633
|
-
const
|
|
634
|
-
const modalOpts =
|
|
725
|
+
const mode = getIonMode(this);
|
|
726
|
+
const modalOpts = {
|
|
727
|
+
...interfaceOptions,
|
|
728
|
+
mode,
|
|
729
|
+
cssClass: ['select-modal', interfaceOptions.cssClass],
|
|
730
|
+
component: 'ion-select-modal',
|
|
731
|
+
componentProps: {
|
|
635
732
|
header: interfaceOptions.header,
|
|
636
733
|
cancelText: this.cancelText,
|
|
637
|
-
cancelIcon: this.cancelIcon,
|
|
638
734
|
multiple,
|
|
639
735
|
value,
|
|
640
736
|
options: this.createOverlaySelectOptions(this.childOpts, value),
|
|
641
|
-
}
|
|
737
|
+
},
|
|
738
|
+
};
|
|
642
739
|
/**
|
|
643
740
|
* Workaround for Stencil to autodefine
|
|
644
741
|
* ion-select-modal and ion-modal when
|
|
645
742
|
* using Custom Elements build.
|
|
646
743
|
*/
|
|
647
|
-
// eslint-disable-next-line
|
|
648
744
|
if (false) {
|
|
649
|
-
// eslint-disable-next-line
|
|
650
745
|
// @ts-ignore
|
|
651
746
|
document.createElement('ion-select-modal');
|
|
652
747
|
document.createElement('ion-modal');
|
|
@@ -712,18 +807,51 @@ export class Select {
|
|
|
712
807
|
};
|
|
713
808
|
this.ionStyle.emit(style);
|
|
714
809
|
}
|
|
715
|
-
|
|
716
|
-
const
|
|
717
|
-
const
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
810
|
+
onClick = (ev) => {
|
|
811
|
+
const target = ev.target;
|
|
812
|
+
const closestSlot = target.closest('[slot="start"], [slot="end"]');
|
|
813
|
+
if (target === this.el || closestSlot === null) {
|
|
814
|
+
this.setFocus();
|
|
815
|
+
this.open(ev);
|
|
721
816
|
}
|
|
722
|
-
|
|
723
|
-
|
|
817
|
+
else {
|
|
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();
|
|
724
845
|
}
|
|
725
|
-
|
|
726
|
-
|
|
846
|
+
};
|
|
847
|
+
onFocus = () => {
|
|
848
|
+
this.hasFocus = true;
|
|
849
|
+
this.ionFocus.emit();
|
|
850
|
+
};
|
|
851
|
+
onBlur = () => {
|
|
852
|
+
this.hasFocus = false;
|
|
853
|
+
this.ionBlur.emit();
|
|
854
|
+
};
|
|
727
855
|
renderLabel() {
|
|
728
856
|
const { label } = this;
|
|
729
857
|
return (h("div", { class: {
|
|
@@ -732,8 +860,8 @@ export class Select {
|
|
|
732
860
|
}, part: "label" }, label === undefined ? h("slot", { name: "label" }) : h("div", { class: "label-text" }, label)));
|
|
733
861
|
}
|
|
734
862
|
componentDidRender() {
|
|
735
|
-
|
|
736
|
-
|
|
863
|
+
this.notchController?.calculateNotchWidth();
|
|
864
|
+
this.startContainerController?.calculateStartContainerWidth();
|
|
737
865
|
}
|
|
738
866
|
/**
|
|
739
867
|
* Gets any content passed into the `label` slot,
|
|
@@ -752,33 +880,24 @@ export class Select {
|
|
|
752
880
|
return this.label !== undefined || this.labelSlot !== null;
|
|
753
881
|
}
|
|
754
882
|
/**
|
|
755
|
-
*
|
|
756
|
-
*
|
|
883
|
+
* Stops propagation for re-dispatched clicks (when already expanded) to
|
|
884
|
+
* prevent double-click events. Allows initial button clicks (from keyboard
|
|
885
|
+
* or mouse) and slotted content clicks to propagate so event delegation
|
|
886
|
+
* works for parent handlers.
|
|
757
887
|
*/
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
if (hasOutlineFill) {
|
|
762
|
-
/**
|
|
763
|
-
* The outline fill has a special outline
|
|
764
|
-
* that appears around the select and the label.
|
|
765
|
-
* Certain stacked and floating label placements cause the
|
|
766
|
-
* label to translate up and create a "cut out"
|
|
767
|
-
* inside of that border by using the notch-spacer element.
|
|
768
|
-
*/
|
|
769
|
-
return [
|
|
770
|
-
h("div", { class: "select-outline-container" }, h("div", { class: "select-outline-start" }), h("div", { class: {
|
|
771
|
-
'select-outline-notch': true,
|
|
772
|
-
'select-outline-notch-hidden': !this.hasLabel,
|
|
773
|
-
} }, h("div", { class: "notch-spacer", "aria-hidden": "true", ref: (el) => (this.notchSpacerEl = el) }, this.label)), h("div", { class: "select-outline-end" })),
|
|
774
|
-
this.renderLabel(),
|
|
775
|
-
];
|
|
888
|
+
onLabelClick = (ev) => {
|
|
889
|
+
if (ev.target === this.focusEl && this.isExpanded) {
|
|
890
|
+
ev.stopPropagation();
|
|
776
891
|
}
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
892
|
+
};
|
|
893
|
+
/**
|
|
894
|
+
* Renders the outline border with a notch for the label.
|
|
895
|
+
*/
|
|
896
|
+
renderOutlineContainer() {
|
|
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" })));
|
|
782
901
|
}
|
|
783
902
|
/**
|
|
784
903
|
* Wraps text nodes in the select text with span elements
|
|
@@ -798,8 +917,7 @@ export class Select {
|
|
|
798
917
|
return html;
|
|
799
918
|
}
|
|
800
919
|
Array.from(temp.childNodes).forEach((node) => {
|
|
801
|
-
|
|
802
|
-
if (node.nodeType === Node.TEXT_NODE && ((_a = node.textContent) === null || _a === void 0 ? void 0 : _a.trim())) {
|
|
920
|
+
if (node.nodeType === Node.TEXT_NODE && node.textContent?.trim()) {
|
|
803
921
|
const text = node.textContent;
|
|
804
922
|
/**
|
|
805
923
|
* Split comma separator from the text content
|
|
@@ -810,12 +928,12 @@ export class Select {
|
|
|
810
928
|
const commaNode = document.createTextNode(commaMatch[1]);
|
|
811
929
|
const wrapper = document.createElement('span');
|
|
812
930
|
wrapper.textContent = commaMatch[2];
|
|
813
|
-
|
|
814
|
-
|
|
931
|
+
node.parentNode?.replaceChild(wrapper, node);
|
|
932
|
+
wrapper.parentNode?.insertBefore(commaNode, wrapper);
|
|
815
933
|
return;
|
|
816
934
|
}
|
|
817
935
|
const wrapper = document.createElement('span');
|
|
818
|
-
|
|
936
|
+
node.parentNode?.replaceChild(wrapper, node);
|
|
819
937
|
wrapper.appendChild(node);
|
|
820
938
|
}
|
|
821
939
|
});
|
|
@@ -851,20 +969,24 @@ export class Select {
|
|
|
851
969
|
* next to the select text.
|
|
852
970
|
*/
|
|
853
971
|
renderSelectIcon() {
|
|
854
|
-
const
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
972
|
+
const mode = getIonMode(this);
|
|
973
|
+
const { isExpanded, toggleIcon, expandedIcon } = this;
|
|
974
|
+
let icon;
|
|
975
|
+
if (isExpanded && expandedIcon !== undefined) {
|
|
976
|
+
icon = expandedIcon;
|
|
977
|
+
}
|
|
978
|
+
else {
|
|
979
|
+
const defaultIcon = mode === 'ios' ? chevronExpand : caretDownSharp;
|
|
980
|
+
icon = toggleIcon ?? defaultIcon;
|
|
858
981
|
}
|
|
859
982
|
return h("ion-icon", { class: "select-icon", part: "icon", "aria-hidden": "true", icon: icon });
|
|
860
983
|
}
|
|
861
984
|
get ariaLabel() {
|
|
862
|
-
var _a;
|
|
863
985
|
const { placeholder, inheritedAttributes } = this;
|
|
864
986
|
// Get the plain text from the selected text
|
|
865
987
|
const displayValue = this.getText();
|
|
866
988
|
// The aria label should be preferred over visible text if both are specified
|
|
867
|
-
const definedLabel =
|
|
989
|
+
const definedLabel = inheritedAttributes['aria-label'] ?? this.labelText;
|
|
868
990
|
/**
|
|
869
991
|
* If developer has specified a placeholder
|
|
870
992
|
* and there is nothing selected, the selectText
|
|
@@ -890,63 +1012,6 @@ export class Select {
|
|
|
890
1012
|
const { disabled, inputId, isExpanded, required } = this;
|
|
891
1013
|
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) }));
|
|
892
1014
|
}
|
|
893
|
-
getShape() {
|
|
894
|
-
const theme = getIonTheme(this);
|
|
895
|
-
const { shape } = this;
|
|
896
|
-
// TODO(ROU-11366): Remove theme check when shapes are defined for all themes.
|
|
897
|
-
if (theme === 'ionic' && shape === undefined) {
|
|
898
|
-
return 'round';
|
|
899
|
-
}
|
|
900
|
-
return shape;
|
|
901
|
-
}
|
|
902
|
-
/**
|
|
903
|
-
* Get the icon to use for the expand icon.
|
|
904
|
-
* If an icon is set on the component, use that.
|
|
905
|
-
* Otherwise, use the icon set in the config.
|
|
906
|
-
* If no icon is set in the config, use the default icon.
|
|
907
|
-
*/
|
|
908
|
-
get selectExpandedIcon() {
|
|
909
|
-
// Return the expandedIcon or toggleIcon if either is explicitly set
|
|
910
|
-
if (this.expandedIcon != null) {
|
|
911
|
-
return this.expandedIcon;
|
|
912
|
-
}
|
|
913
|
-
else if (this.toggleIcon != null) {
|
|
914
|
-
return this.toggleIcon;
|
|
915
|
-
}
|
|
916
|
-
// Determine the theme and map to default icons
|
|
917
|
-
const theme = getIonTheme(this);
|
|
918
|
-
const defaultIcons = {
|
|
919
|
-
ios: chevronExpand,
|
|
920
|
-
ionic: caretDownRegular,
|
|
921
|
-
md: caretDownSharp,
|
|
922
|
-
};
|
|
923
|
-
// Get the default icon based on the theme, falling back to 'md' icon if necessary
|
|
924
|
-
const defaultIcon = defaultIcons[theme] || defaultIcons.md;
|
|
925
|
-
// Return the configured select expanded icon or the default icon
|
|
926
|
-
return config.get('selectExpandedIcon', defaultIcon);
|
|
927
|
-
}
|
|
928
|
-
/**
|
|
929
|
-
* Get the icon to use for the collapsed icon.
|
|
930
|
-
* If an icon is set on the component, use that.
|
|
931
|
-
* Otherwise, use the icon set in the config.
|
|
932
|
-
* If no icon is set in the config, use the default icon.
|
|
933
|
-
*/
|
|
934
|
-
get selectCollapsedIcon() {
|
|
935
|
-
// Return the toggleIcon if it is explicitly set
|
|
936
|
-
if (this.toggleIcon) {
|
|
937
|
-
return this.toggleIcon;
|
|
938
|
-
}
|
|
939
|
-
// Determine the theme and map to default icons
|
|
940
|
-
const theme = getIonTheme(this);
|
|
941
|
-
const defaultIcons = {
|
|
942
|
-
ios: chevronExpand,
|
|
943
|
-
ionic: caretDownRegular,
|
|
944
|
-
md: caretDownSharp,
|
|
945
|
-
};
|
|
946
|
-
// Get the default icon based on the theme, falling back to 'md' icon if necessary
|
|
947
|
-
const defaultIcon = defaultIcons[theme] || defaultIcons.md;
|
|
948
|
-
return config.get('selectCollapsedIcon', defaultIcon);
|
|
949
|
-
}
|
|
950
1015
|
getHintTextId() {
|
|
951
1016
|
const { helperText, errorText, helperTextId, errorTextId, isInvalid } = this;
|
|
952
1017
|
if (isInvalid && errorText) {
|
|
@@ -984,41 +1049,19 @@ export class Select {
|
|
|
984
1049
|
return (h("div", { class: "select-bottom", part: "bottom" }, this.renderHintText()));
|
|
985
1050
|
}
|
|
986
1051
|
render() {
|
|
987
|
-
const { disabled, el, isExpanded, expandedIcon, labelPlacement, justify, placeholder, fill, name, value, hasFocus, } = this;
|
|
988
|
-
const
|
|
989
|
-
const shape = this.getShape();
|
|
1052
|
+
const { disabled, el, isExpanded, expandedIcon, labelPlacement, justify, placeholder, fill, shape, name, value, hasFocus, } = this;
|
|
1053
|
+
const mode = getIonMode(this);
|
|
990
1054
|
const hasFloatingOrStackedLabel = labelPlacement === 'floating' || labelPlacement === 'stacked';
|
|
991
|
-
const shouldRenderOuterIcon = theme !== 'ionic' && hasFloatingOrStackedLabel;
|
|
992
|
-
const shouldRenderInnerIcon = theme === 'ionic' || !hasFloatingOrStackedLabel;
|
|
993
1055
|
const justifyEnabled = !hasFloatingOrStackedLabel && justify !== undefined;
|
|
994
1056
|
const rtl = isRTL(el) ? 'rtl' : 'ltr';
|
|
995
1057
|
const inItem = hostContext('ion-item', this.el);
|
|
996
|
-
const
|
|
997
|
-
const shouldRenderHighlight = theme === 'md' && fill !== 'outline' && !inItem;
|
|
1058
|
+
const shouldRenderHighlight = mode === 'md' && fill !== 'outline' && !inItem;
|
|
998
1059
|
const hasValue = this.hasValue();
|
|
999
|
-
const
|
|
1060
|
+
const hasOutlineFill = mode === 'md' && fill === 'outline';
|
|
1000
1061
|
renderHiddenInput(true, el, name, parseValue(value), disabled);
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
* the select has a value, is open, or has anything in either
|
|
1005
|
-
* the start or end slot.
|
|
1006
|
-
*
|
|
1007
|
-
* If there is content in the start slot, the label would overlap
|
|
1008
|
-
* it if not forced to float. This is also applied to the end slot
|
|
1009
|
-
* because with the default or solid fills, the select is not
|
|
1010
|
-
* vertically centered in the container, but the label is. This
|
|
1011
|
-
* causes the slots and label to appear vertically offset from each
|
|
1012
|
-
* other when the label isn't floating above the input. This doesn't
|
|
1013
|
-
* apply to the outline fill, but this was not accounted for to keep
|
|
1014
|
-
* things consistent.
|
|
1015
|
-
*
|
|
1016
|
-
* TODO(FW-5592): Remove hasStartEndSlots condition
|
|
1017
|
-
*/
|
|
1018
|
-
const labelShouldFloat = labelPlacement === 'stacked' ||
|
|
1019
|
-
(labelPlacement === 'floating' && (hasValue || hasFocus || isExpanded || hasStartEndSlots));
|
|
1020
|
-
return (h(Host, { key: '9339cb236070c47333154d96c336dc1df9a11e1c', onClick: this.onClick, class: createColorClasses(this.color, {
|
|
1021
|
-
[theme]: true,
|
|
1062
|
+
const labelShouldFloat = labelPlacement === 'stacked' || (labelPlacement === 'floating' && (hasValue || hasFocus || isExpanded));
|
|
1063
|
+
return (h(Host, { key: '5d1e5bf46d0f204efdcb55cc42cfde52e6db304b', onClick: this.onClick, class: createColorClasses(this.color, {
|
|
1064
|
+
[mode]: true,
|
|
1022
1065
|
'in-item': inItem,
|
|
1023
1066
|
'in-item-color': hostContext('ion-item.ion-color', el),
|
|
1024
1067
|
'select-disabled': disabled,
|
|
@@ -1035,33 +1078,20 @@ export class Select {
|
|
|
1035
1078
|
[`select-justify-${justify}`]: justifyEnabled,
|
|
1036
1079
|
[`select-shape-${shape}`]: shape !== undefined,
|
|
1037
1080
|
[`select-label-placement-${labelPlacement}`]: true,
|
|
1038
|
-
|
|
1039
|
-
}) }, h("label", { key: 'db8f0b67592f4b99f5e16d06ee8120852a60f4d1', class: "select-wrapper", id: "select-label", onClick: this.onLabelClick, part: "wrapper" }, this.renderLabelContainer(), h("div", { key: '30313c0f3034be59605b368d15af4ba00202a5f4', class: "select-wrapper-inner", part: "inner" },
|
|
1040
|
-
/**
|
|
1041
|
-
* For the ionic theme, we render the outline container here
|
|
1042
|
-
* instead of higher up, so it can be positioned relative to
|
|
1043
|
-
* the native wrapper instead of the <label> element or the
|
|
1044
|
-
* entire component. This allows the label text to be positioned
|
|
1045
|
-
* above the outline, while staying within the bounds of the
|
|
1046
|
-
* <label> element, ensuring that clicking the label text
|
|
1047
|
-
* focuses the select.
|
|
1048
|
-
*/
|
|
1049
|
-
theme === 'ionic' && fill === 'outline' && h("div", { key: '78bba2953ba88efd1189afa31e8229a8972175e5', class: "select-outline" }), h("slot", { key: '086505d193a19677d33e26a5a116783d999c6861', name: "start" }), h("div", { key: '5bb7863236596cad5c1118be1ae54898b638b760', class: "native-wrapper", ref: (el) => (this.nativeWrapperEl = el), part: "container" }, this.renderSelectText(), this.renderListbox()), h("slot", { key: '38744ee0cc6750f84d11470c09a4e950d73f1e44', name: "end" }), shouldRenderInnerIcon && this.renderSelectIcon()), shouldRenderOuterIcon && this.renderSelectIcon(), shouldRenderHighlight && h("div", { key: '4eecb0df50800d16bea58c5649e68e06b122e472', class: "select-highlight" })), this.renderBottomContent()));
|
|
1081
|
+
}) }, h("label", { key: '15fd1f8e06510ae8472c621cf8cf90e51172e0be', class: "select-wrapper", id: "select-label", onClick: this.onLabelClick, part: "wrapper" }, hasOutlineFill && this.renderOutlineContainer(), h("div", { key: '7964e3d9351671899793b117896acdda25ec24c4', class: "select-start", part: "start", ref: (el) => (this.startContainerEl = el) }, h("slot", { key: 'aa309ef155c4025acfd7ed5739b5221c85097b36', name: "start" })), h("div", { key: '23d5a9dfea64a9d81b0b36d9426b15bed98901b9', class: "select-control", part: "control" }, this.renderLabel(), h("div", { key: '810da9fbfa8771e09b5fb768d64e5f04858b5833', class: "native-wrapper", ref: (el) => (this.nativeWrapperEl = el), part: "container" }, this.renderSelectText(), this.renderListbox(), !hasFloatingOrStackedLabel && this.renderSelectIcon())), h("div", { key: 'bf1c04704326ecfa14cf2e49bb76d3fb45beb08d', class: "select-end", part: "end" }, hasFloatingOrStackedLabel && this.renderSelectIcon(), h("slot", { key: '76a8bcaeefdcaa908aebd820d93171b08165cee3', name: "end" })), shouldRenderHighlight && h("div", { key: '55a9c417a82323a44e16328fd62a634d9d7c558b', class: "select-highlight" })), this.renderBottomContent()));
|
|
1050
1082
|
}
|
|
1051
1083
|
static get is() { return "ion-select"; }
|
|
1052
1084
|
static get encapsulation() { return "shadow"; }
|
|
1053
1085
|
static get originalStyleUrls() {
|
|
1054
1086
|
return {
|
|
1055
1087
|
"ios": ["select.ios.scss"],
|
|
1056
|
-
"md": ["select.md.scss"]
|
|
1057
|
-
"ionic": ["select.ionic.scss"]
|
|
1088
|
+
"md": ["select.md.scss"]
|
|
1058
1089
|
};
|
|
1059
1090
|
}
|
|
1060
1091
|
static get styleUrls() {
|
|
1061
1092
|
return {
|
|
1062
1093
|
"ios": ["select.ios.css"],
|
|
1063
|
-
"md": ["select.md.css"]
|
|
1064
|
-
"ionic": ["select.ionic.css"]
|
|
1094
|
+
"md": ["select.md.css"]
|
|
1065
1095
|
};
|
|
1066
1096
|
}
|
|
1067
1097
|
static get properties() {
|
|
@@ -1086,26 +1116,6 @@ export class Select {
|
|
|
1086
1116
|
"attribute": "cancel-text",
|
|
1087
1117
|
"defaultValue": "'Cancel'"
|
|
1088
1118
|
},
|
|
1089
|
-
"cancelIcon": {
|
|
1090
|
-
"type": "boolean",
|
|
1091
|
-
"mutable": false,
|
|
1092
|
-
"complexType": {
|
|
1093
|
-
"original": "boolean",
|
|
1094
|
-
"resolved": "boolean",
|
|
1095
|
-
"references": {}
|
|
1096
|
-
},
|
|
1097
|
-
"required": false,
|
|
1098
|
-
"optional": false,
|
|
1099
|
-
"docs": {
|
|
1100
|
-
"tags": [],
|
|
1101
|
-
"text": "If `true`, the cancel button will display an icon instead of the `cancelText`.\nOnly applies when `interface` is set to `\"modal\"`. Has no effect on `\"action-sheet\"`,\n`\"alert\"`, or `\"popover\"` interfaces.\nWhen `cancelIcon` is `true`, the `cancelText` property is ignored for display\nbut is used as the accessible label for the icon button."
|
|
1102
|
-
},
|
|
1103
|
-
"getter": false,
|
|
1104
|
-
"setter": false,
|
|
1105
|
-
"reflect": false,
|
|
1106
|
-
"attribute": "cancel-icon",
|
|
1107
|
-
"defaultValue": "false"
|
|
1108
|
-
},
|
|
1109
1119
|
"color": {
|
|
1110
1120
|
"type": "string",
|
|
1111
1121
|
"mutable": false,
|
|
@@ -1190,7 +1200,7 @@ export class Select {
|
|
|
1190
1200
|
"optional": true,
|
|
1191
1201
|
"docs": {
|
|
1192
1202
|
"tags": [],
|
|
1193
|
-
"text": "The fill for the item. If `\"solid\"` the item will have a background. If\n`\"outline\"` the item will be transparent with a border. Only available in
|
|
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 `md` mode."
|
|
1194
1204
|
},
|
|
1195
1205
|
"getter": false,
|
|
1196
1206
|
"setter": false,
|
|
@@ -1450,7 +1460,7 @@ export class Select {
|
|
|
1450
1460
|
"optional": true,
|
|
1451
1461
|
"docs": {
|
|
1452
1462
|
"tags": [],
|
|
1453
|
-
"text": "The toggle icon to use. Defaults to
|
|
1463
|
+
"text": "The toggle icon to use. Defaults to `chevronExpand` for `ios` mode,\nor `caretDownSharp` for `md` mode."
|
|
1454
1464
|
},
|
|
1455
1465
|
"getter": false,
|
|
1456
1466
|
"setter": false,
|
|
@@ -1469,89 +1479,70 @@ export class Select {
|
|
|
1469
1479
|
"optional": true,
|
|
1470
1480
|
"docs": {
|
|
1471
1481
|
"tags": [],
|
|
1472
|
-
"text": "The toggle icon to show when the select is open. If defined, the icon\nrotation behavior in
|
|
1482
|
+
"text": "The toggle icon to show when the select is open. If defined, the icon\nrotation behavior in `md` mode will be disabled. If undefined, `toggleIcon`\nwill be used for when the select is both open and closed."
|
|
1473
1483
|
},
|
|
1474
1484
|
"getter": false,
|
|
1475
1485
|
"setter": false,
|
|
1476
1486
|
"reflect": false,
|
|
1477
1487
|
"attribute": "expanded-icon"
|
|
1478
1488
|
},
|
|
1479
|
-
"required": {
|
|
1480
|
-
"type": "boolean",
|
|
1481
|
-
"mutable": false,
|
|
1482
|
-
"complexType": {
|
|
1483
|
-
"original": "boolean",
|
|
1484
|
-
"resolved": "boolean",
|
|
1485
|
-
"references": {}
|
|
1486
|
-
},
|
|
1487
|
-
"required": false,
|
|
1488
|
-
"optional": false,
|
|
1489
|
-
"docs": {
|
|
1490
|
-
"tags": [],
|
|
1491
|
-
"text": "If true, screen readers will announce it as a required field. This property\nworks only for accessibility purposes, it will not prevent the form from\nsubmitting if the value is invalid."
|
|
1492
|
-
},
|
|
1493
|
-
"getter": false,
|
|
1494
|
-
"setter": false,
|
|
1495
|
-
"reflect": false,
|
|
1496
|
-
"attribute": "required",
|
|
1497
|
-
"defaultValue": "false"
|
|
1498
|
-
},
|
|
1499
1489
|
"shape": {
|
|
1500
1490
|
"type": "string",
|
|
1501
1491
|
"mutable": false,
|
|
1502
1492
|
"complexType": {
|
|
1503
|
-
"original": "'
|
|
1504
|
-
"resolved": "\"
|
|
1493
|
+
"original": "'round'",
|
|
1494
|
+
"resolved": "\"round\" | undefined",
|
|
1505
1495
|
"references": {}
|
|
1506
1496
|
},
|
|
1507
1497
|
"required": false,
|
|
1508
1498
|
"optional": true,
|
|
1509
1499
|
"docs": {
|
|
1510
1500
|
"tags": [],
|
|
1511
|
-
"text": "
|
|
1501
|
+
"text": "The shape of the select. If \"round\" it will have an increased border radius."
|
|
1512
1502
|
},
|
|
1513
1503
|
"getter": false,
|
|
1514
1504
|
"setter": false,
|
|
1515
1505
|
"reflect": false,
|
|
1516
1506
|
"attribute": "shape"
|
|
1517
1507
|
},
|
|
1518
|
-
"
|
|
1519
|
-
"type": "
|
|
1520
|
-
"mutable":
|
|
1508
|
+
"value": {
|
|
1509
|
+
"type": "any",
|
|
1510
|
+
"mutable": true,
|
|
1521
1511
|
"complexType": {
|
|
1522
|
-
"original": "
|
|
1523
|
-
"resolved": "
|
|
1512
|
+
"original": "any | null",
|
|
1513
|
+
"resolved": "any",
|
|
1524
1514
|
"references": {}
|
|
1525
1515
|
},
|
|
1526
1516
|
"required": false,
|
|
1527
1517
|
"optional": true,
|
|
1528
1518
|
"docs": {
|
|
1529
1519
|
"tags": [],
|
|
1530
|
-
"text": "The
|
|
1520
|
+
"text": "The value of the select."
|
|
1531
1521
|
},
|
|
1532
1522
|
"getter": false,
|
|
1533
1523
|
"setter": false,
|
|
1534
1524
|
"reflect": false,
|
|
1535
|
-
"attribute": "
|
|
1525
|
+
"attribute": "value"
|
|
1536
1526
|
},
|
|
1537
|
-
"
|
|
1538
|
-
"type": "
|
|
1539
|
-
"mutable":
|
|
1527
|
+
"required": {
|
|
1528
|
+
"type": "boolean",
|
|
1529
|
+
"mutable": false,
|
|
1540
1530
|
"complexType": {
|
|
1541
|
-
"original": "
|
|
1542
|
-
"resolved": "
|
|
1531
|
+
"original": "boolean",
|
|
1532
|
+
"resolved": "boolean",
|
|
1543
1533
|
"references": {}
|
|
1544
1534
|
},
|
|
1545
1535
|
"required": false,
|
|
1546
|
-
"optional":
|
|
1536
|
+
"optional": false,
|
|
1547
1537
|
"docs": {
|
|
1548
1538
|
"tags": [],
|
|
1549
|
-
"text": "
|
|
1539
|
+
"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."
|
|
1550
1540
|
},
|
|
1551
1541
|
"getter": false,
|
|
1552
1542
|
"setter": false,
|
|
1553
1543
|
"reflect": false,
|
|
1554
|
-
"attribute": "
|
|
1544
|
+
"attribute": "required",
|
|
1545
|
+
"defaultValue": "false"
|
|
1555
1546
|
}
|
|
1556
1547
|
};
|
|
1557
1548
|
}
|
|
@@ -1800,7 +1791,7 @@ const textForValue = (opts, value, compareWith, useHTML = false) => {
|
|
|
1800
1791
|
*/
|
|
1801
1792
|
if (content) {
|
|
1802
1793
|
const texts = Array.from(content.childNodes)
|
|
1803
|
-
.map((n) =>
|
|
1794
|
+
.map((n) => n.textContent?.trim())
|
|
1804
1795
|
.filter((t) => t);
|
|
1805
1796
|
return texts.join(' ') || null;
|
|
1806
1797
|
}
|
|
@@ -1820,9 +1811,8 @@ const textForValue = (opts, value, compareWith, useHTML = false) => {
|
|
|
1820
1811
|
*/
|
|
1821
1812
|
const trimTextNodes = (node) => {
|
|
1822
1813
|
node.childNodes.forEach((child) => {
|
|
1823
|
-
var _a;
|
|
1824
1814
|
if (child.nodeType === Node.TEXT_NODE) {
|
|
1825
|
-
child.textContent =
|
|
1815
|
+
child.textContent = child.textContent?.trim() || '';
|
|
1826
1816
|
}
|
|
1827
1817
|
else if (child.nodeType === Node.ELEMENT_NODE) {
|
|
1828
1818
|
trimTextNodes(child);
|
|
@@ -1850,14 +1840,13 @@ const getOptionContent = (option, slotName, useHTML = false) => {
|
|
|
1850
1840
|
// Default slot: get nodes without a slot attribute
|
|
1851
1841
|
const defaultSlot = getOptionDefaultSlot(option) || [];
|
|
1852
1842
|
nodes = defaultSlot.filter((node) => {
|
|
1853
|
-
var _a;
|
|
1854
1843
|
/**
|
|
1855
1844
|
* Exclude whitespace-only text nodes (newline noise between
|
|
1856
1845
|
* markup elements). Element nodes are always kept, even when
|
|
1857
1846
|
* their textContent is empty (e.g. <svg>, <img>).
|
|
1858
1847
|
*/
|
|
1859
1848
|
if (node.nodeType === Node.TEXT_NODE) {
|
|
1860
|
-
return
|
|
1849
|
+
return node.textContent?.trim().length !== 0;
|
|
1861
1850
|
}
|
|
1862
1851
|
return true;
|
|
1863
1852
|
});
|
|
@@ -1867,7 +1856,7 @@ const getOptionContent = (option, slotName, useHTML = false) => {
|
|
|
1867
1856
|
}
|
|
1868
1857
|
// Return plain text if no elements are found
|
|
1869
1858
|
if (!slotName && nodes.every((n) => n.nodeType === Node.TEXT_NODE)) {
|
|
1870
|
-
return nodes.map((n) =>
|
|
1859
|
+
return nodes.map((n) => n.textContent?.trim()).join(' ') || null;
|
|
1871
1860
|
}
|
|
1872
1861
|
/**
|
|
1873
1862
|
* Mirror known custom-element properties (e.g. ion-icon's `icon`)
|
|
@@ -1883,10 +1872,9 @@ const getOptionContent = (option, slotName, useHTML = false) => {
|
|
|
1883
1872
|
// Clone each node into a temporary container
|
|
1884
1873
|
const container = document.createElement('div');
|
|
1885
1874
|
nodes.forEach((n) => {
|
|
1886
|
-
var _a;
|
|
1887
1875
|
const clone = n.cloneNode(true);
|
|
1888
1876
|
if (clone.nodeType === Node.TEXT_NODE) {
|
|
1889
|
-
clone.textContent =
|
|
1877
|
+
clone.textContent = clone.textContent?.trim() || '';
|
|
1890
1878
|
}
|
|
1891
1879
|
else {
|
|
1892
1880
|
trimTextNodes(clone);
|
|
@@ -1937,7 +1925,7 @@ const getDefaultSlotPlainText = (option) => {
|
|
|
1937
1925
|
return node.nodeType === Node.TEXT_NODE;
|
|
1938
1926
|
})
|
|
1939
1927
|
.filter((node) => node.nodeType === Node.TEXT_NODE)
|
|
1940
|
-
.map((n) =>
|
|
1928
|
+
.map((n) => n.textContent?.trim())
|
|
1941
1929
|
.filter((t) => t);
|
|
1942
1930
|
return texts.join(' ');
|
|
1943
1931
|
};
|
|
@@ -1951,7 +1939,6 @@ const getDefaultSlotPlainText = (option) => {
|
|
|
1951
1939
|
* via the `innerHTMLTemplatesEnabled` config.
|
|
1952
1940
|
*/
|
|
1953
1941
|
const extractOptionContent = (option, customHTMLEnabled) => {
|
|
1954
|
-
var _a, _b;
|
|
1955
1942
|
if (!customHTMLEnabled) {
|
|
1956
1943
|
return {
|
|
1957
1944
|
content: getDefaultSlotPlainText(option),
|
|
@@ -1961,8 +1948,8 @@ const extractOptionContent = (option, customHTMLEnabled) => {
|
|
|
1961
1948
|
}
|
|
1962
1949
|
return {
|
|
1963
1950
|
content: getOptionContent(option),
|
|
1964
|
-
startContent:
|
|
1965
|
-
endContent:
|
|
1951
|
+
startContent: getOptionContent(option, 'start') ?? undefined,
|
|
1952
|
+
endContent: getOptionContent(option, 'end') ?? undefined,
|
|
1966
1953
|
};
|
|
1967
1954
|
};
|
|
1968
1955
|
let selectIds = 0;
|