@ionic/core 8.8.19-dev.11787076261.138d5922 → 8.8.19-dev.11787084784.17cf25cf
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-legacy-column.d.ts +11 -0
- package/components/ion-picker-legacy-column.js +4 -0
- package/components/ion-picker-legacy.d.ts +11 -0
- package/components/ion-picker-legacy.js +4 -0
- package/components/ion-picker.js +1 -1
- package/components/ion-popover.js +1 -1
- package/components/ion-progress-bar.js +1 -1
- package/components/ion-radio-group.js +1 -1
- package/components/ion-radio.js +1 -1
- package/components/ion-range.js +1 -1
- package/components/ion-refresher-content.js +1 -1
- package/components/ion-refresher.js +1 -1
- package/components/ion-reorder-group.js +1 -1
- package/components/ion-reorder.js +1 -1
- package/components/ion-ripple-effect.js +1 -1
- package/components/ion-route-redirect.js +1 -1
- package/components/ion-route.js +1 -1
- package/components/ion-router-link.js +1 -1
- package/components/ion-router-outlet.js +1 -1
- package/components/ion-router.js +1 -1
- package/components/ion-row.js +1 -1
- package/components/ion-searchbar.js +1 -1
- package/components/ion-segment-button.js +1 -1
- package/components/ion-segment-content.js +1 -1
- package/components/ion-segment-view.js +1 -1
- package/components/ion-segment.js +1 -1
- package/components/ion-select-modal.js +1 -1
- package/components/ion-select-option.js +1 -1
- package/components/ion-select-popover.js +1 -1
- package/components/ion-select.js +1 -1
- package/components/ion-skeleton-text.js +1 -1
- package/components/ion-spinner.js +1 -1
- package/components/ion-split-pane.js +1 -1
- package/components/ion-tab-bar.js +1 -1
- package/components/ion-tab-button.js +1 -1
- package/components/ion-tab.js +1 -1
- package/components/ion-tabs.js +1 -1
- package/components/ion-text.js +1 -1
- package/components/ion-textarea.js +1 -1
- package/components/ion-thumbnail.js +1 -1
- package/components/ion-title.js +1 -1
- package/components/ion-toast.js +1 -1
- package/components/ion-toggle.js +1 -1
- package/components/ion-toolbar.js +1 -1
- package/components/{p-DV85C0e0.js → p--JUspHvy.js} +1 -1
- package/components/p-A3O24YmY.js +4 -0
- package/components/p-ABkNVeU9.js +4 -0
- package/components/p-B-JJgYSG.js +4 -0
- package/components/p-B9jFTlwE.js +4 -0
- package/components/p-BLmJ0zRm.js +4 -0
- package/components/p-BMI53wYL.js +4 -0
- package/components/p-BSEgsdFI.js +4 -0
- package/components/p-BTEOs1at.js +4 -0
- package/components/{p-DwpKZ6rl.js → p-BkKAANMJ.js} +1 -1
- package/components/p-BlIAuGv2.js +4 -0
- package/components/p-Bnsn6KaP.js +4 -0
- package/components/p-BsBCoGa-.js +4 -0
- package/components/p-Bz0dSlXZ.js +4 -0
- package/components/p-C53feagD.js +4 -0
- package/components/p-CHqRYvYm.js +4 -0
- package/components/p-CQGnMY3n.js +4 -0
- package/components/p-CSZf8_j0.js +4 -0
- package/components/{p-30_sZS2V.js → p-C_hpsif8.js} +1 -1
- package/components/p-C_xFdyXe.js +4 -0
- package/components/p-Cf2jSDS8.js +4 -0
- package/components/p-Cfx4M1Bn.js +4 -0
- package/components/{p-J-p0EtHR.js → p-ChIZKXUu.js} +1 -1
- package/components/p-CkMSOsFF.js +4 -0
- package/components/p-Cl0B-RWe.js +4 -0
- package/components/p-CmR5uXej.js +4 -0
- package/components/p-Cp4GRDqq.js +4 -0
- package/components/p-CsNJ1ULL.js +4 -0
- package/components/p-CtWGkNnJ.js +4 -0
- package/components/p-CzCbeKys.js +4 -0
- package/components/p-D-aHdMxW.js +4 -0
- package/components/p-D0d8qTwj.js +4 -0
- package/components/p-D13Eaw-8.js +4 -0
- package/components/{p-BpG8kBfD.js → p-D3xo7hqU.js} +1 -1
- package/components/p-D6Ynv7Xh.js +4 -0
- package/components/{p-_0JhwClE.js → p-D7uN07a3.js} +1 -1
- package/components/p-DCnGU1fF.js +4 -0
- package/components/p-DGvrK8dD.js +4 -0
- package/components/p-DOFCbuQR.js +4 -0
- package/components/p-DRxvM2Ic.js +4 -0
- package/components/p-DV5mPYQS.js +4 -0
- package/components/p-DWkAgceV.js +4 -0
- package/components/p-DiVJyqlX.js +4 -0
- package/components/{p-ryyf_ItD.js → p-DqLB8yFQ.js} +1 -1
- package/components/p-DqZAXv2t.js +4 -0
- package/components/p-Osve4qkc.js +4 -0
- package/components/p-R8zmRi4c.js +4 -0
- package/components/p-SLS1rDZM.js +4 -0
- package/components/p-aJ6PBUvj.js +4 -0
- package/components/p-cyNmxje6.js +4 -0
- package/components/p-gAg0kXZp.js +4 -0
- package/components/p-gYiraiT_.js +4 -0
- package/components/p-j5IxBIan.js +4 -0
- package/components/p-k_E4tX5Z.js +4 -0
- package/components/p-oD4kcBRX.js +4 -0
- package/components/p-rCa2eL0j.js +4 -0
- package/components/p-vRBNsYbs.js +4 -0
- package/components/p-yEQxMl70.js +4 -0
- package/components/p-yzCsOZE2.js +4 -0
- package/dist/cjs/{animation-C0mOHzej.js → animation-Ch16T-Nb.js} +4 -4
- package/dist/cjs/{app-globals-BREG4twP.js → app-globals-Dd89e0MR.js} +1 -1
- package/dist/cjs/{button-active-BKj1rdFx.js → button-active-COnxOe4X.js} +3 -3
- package/dist/cjs/config-D6C-KlA9.js +201 -0
- package/dist/cjs/{dir-Brx7VkvP.js → dir-Cn0z1rJH.js} +1 -1
- package/dist/cjs/{format-pp0Du3K-.js → format-BUFWn4Bn.js} +30 -40
- package/dist/cjs/{framework-delegate-NTLQ5YzV.js → framework-delegate-BgU6U9Ez.js} +7 -5
- package/dist/cjs/{gesture-controller-BDUH7687.js → gesture-controller-dtqlP_q4.js} +8 -15
- package/dist/cjs/{haptic-Ch-X4gRx.js → haptic-ClPPQ_PS.js} +3 -2
- package/dist/cjs/{hardware-back-button-fqpYh-kd.js → hardware-back-button-CXmUnTJC.js} +4 -4
- package/dist/cjs/{helpers-CaLhEmTE.js → helpers-gntk8bfm.js} +3 -3
- package/dist/cjs/{index-Ck9advCT.js → index-BS2uhvhT.js} +5 -5
- package/dist/cjs/{index-uvry__L4.js → index-BfaXsATC.js} +14 -31
- package/dist/cjs/{index-BlshL9ib.js → index-BhhuJ1Yx.js} +2 -2
- package/dist/cjs/{index-D48vawBq.js → index-BiRrzGDi.js} +2 -2
- package/dist/cjs/{index-P1nQxrpZ.js → index-CAvQ7Tka.js} +4 -10
- package/dist/cjs/{index-wOmugbdg.js → index-DqmRDbxg.js} +1 -1
- package/dist/cjs/{index-D2X6b92x.js → index-ooS8B4p9.js} +7 -6
- package/dist/cjs/index.cjs.js +18 -18
- package/dist/cjs/{input-shims-DvHAFqiP.js → input-shims-Bn1cXfCM.js} +11 -9
- package/dist/cjs/input.utils-BwhxZooW.js +150 -0
- package/dist/cjs/ion-accordion_2.cjs.entry.js +340 -368
- package/dist/cjs/ion-action-sheet.cjs.entry.js +76 -187
- package/dist/cjs/ion-alert.cjs.entry.js +111 -273
- package/dist/cjs/ion-app_8.cjs.entry.js +190 -307
- package/dist/cjs/ion-avatar_3.cjs.entry.js +4 -10
- package/dist/cjs/ion-back-button.cjs.entry.js +23 -47
- package/dist/cjs/ion-backdrop.cjs.entry.js +14 -18
- package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +121 -199
- package/dist/cjs/ion-button_2.cjs.entry.js +66 -138
- package/dist/cjs/ion-card_5.cjs.entry.js +30 -82
- package/dist/cjs/ion-checkbox.cjs.entry.js +101 -152
- package/dist/cjs/ion-chip.cjs.entry.js +11 -17
- package/dist/cjs/ion-col_3.cjs.entry.js +10 -134
- package/dist/cjs/ion-datetime-button.cjs.entry.js +241 -253
- package/dist/cjs/ion-datetime_3.cjs.entry.js +3167 -0
- package/dist/cjs/ion-fab_3.cjs.entry.js +81 -139
- package/dist/cjs/ion-img.cjs.entry.js +12 -34
- package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +72 -100
- package/dist/cjs/ion-input-otp.cjs.entry.js +372 -435
- package/dist/cjs/ion-input-password-toggle.cjs.entry.js +22 -36
- package/dist/cjs/ion-input.cjs.entry.js +211 -343
- package/dist/cjs/ion-item-option_3.cjs.entry.js +54 -94
- package/dist/cjs/ion-item_8.cjs.entry.js +92 -191
- package/dist/cjs/ion-loading.cjs.entry.js +60 -146
- package/dist/cjs/ion-menu_3.cjs.entry.js +106 -168
- package/dist/cjs/ion-modal.cjs.entry.js +261 -455
- package/dist/cjs/ion-nav_2.cjs.entry.js +158 -101
- package/dist/cjs/ion-picker-column-option.cjs.entry.js +33 -37
- package/dist/cjs/ion-picker-column.cjs.entry.js +405 -417
- package/dist/cjs/ion-picker.cjs.entry.js +392 -401
- package/dist/cjs/ion-popover.cjs.entry.js +205 -319
- package/dist/cjs/ion-progress-bar.cjs.entry.js +25 -31
- package/dist/cjs/ion-radio_2.cjs.entry.js +134 -207
- package/dist/cjs/ion-range.cjs.entry.js +245 -302
- package/dist/cjs/ion-refresher_2.cjs.entry.js +93 -165
- package/dist/cjs/ion-reorder_2.cjs.entry.js +23 -53
- package/dist/cjs/ion-ripple-effect.cjs.entry.js +14 -14
- package/dist/cjs/ion-route_4.cjs.entry.js +71 -175
- package/dist/cjs/ion-searchbar.cjs.entry.js +200 -291
- package/dist/cjs/ion-segment-content.cjs.entry.js +2 -2
- package/dist/cjs/ion-segment-view.cjs.entry.js +17 -28
- package/dist/cjs/ion-segment_2.cjs.entry.js +126 -169
- package/dist/cjs/ion-select-modal.cjs.entry.js +48 -104
- package/dist/cjs/ion-select_3.cjs.entry.js +260 -787
- package/dist/cjs/ion-spinner.cjs.entry.js +10 -24
- package/dist/cjs/ion-split-pane.cjs.entry.js +16 -29
- package/dist/cjs/ion-tab-bar_2.cjs.entry.js +41 -100
- package/dist/cjs/ion-tab_2.cjs.entry.js +27 -53
- package/dist/cjs/ion-text.cjs.entry.js +5 -11
- package/dist/cjs/ion-textarea.cjs.entry.js +188 -296
- package/dist/cjs/ion-toast.cjs.entry.js +117 -236
- package/dist/cjs/ion-toggle.cjs.entry.js +122 -175
- package/dist/cjs/{ionic-global-k6hOWWpn.js → ionic-global-BerQGEpE.js} +8 -13
- package/dist/cjs/ionic.cjs.js +4 -4
- package/dist/cjs/{ios.transition-KvuRAe2W.js → ios.transition-IMJRwn29.js} +17 -13
- package/dist/cjs/{item-multiple-inputs-BdYSbfKN.js → item-multiple-inputs-jOJZE_I0.js} +1 -1
- package/dist/cjs/{keyboard-cHxZlTyz.js → keyboard-UuAS4D_9.js} +2 -2
- package/dist/cjs/{keyboard-controller-PtZoN2GS.js → keyboard-controller-GXBiBRKS.js} +6 -6
- package/dist/cjs/{keyboard-Cix5TVkD.js → keyboard-hHzlEQpk.js} +2 -2
- package/dist/cjs/loader.cjs.js +4 -4
- package/dist/cjs/{md.transition-Bjl5Ozph.js → md.transition-CgQZxcoT.js} +8 -7
- package/dist/cjs/notch-controller-_SwR025y.js +155 -0
- package/dist/cjs/{overlays-IlP4H2Gn.js → overlays-DuSEMhIW.js} +33 -48
- package/dist/cjs/{status-tap-BR_ujYHg.js → status-tap-CSvBT7FV.js} +3 -3
- package/dist/cjs/{swipe-back-DzQKEl5g.js → swipe-back-CuIiziaa.js} +5 -5
- package/dist/cjs/{theme-Bw0rpaNN.js → theme-CeDs6Hcv.js} +1 -6
- package/dist/collection/collection-manifest.json +10 -6
- package/dist/collection/components/accordion/accordion.js +312 -315
- package/dist/collection/components/accordion-group/accordion-group.js +25 -48
- package/dist/collection/components/action-sheet/action-sheet.ios.css +2 -228
- package/dist/collection/components/action-sheet/action-sheet.js +64 -173
- package/dist/collection/components/action-sheet/action-sheet.md.css +2 -174
- package/dist/collection/components/action-sheet/test/basic/fixture.js +0 -3
- package/dist/collection/components/alert/alert.ios.css +10 -279
- package/dist/collection/components/alert/alert.js +97 -257
- package/dist/collection/components/alert/alert.md.css +20 -268
- package/dist/collection/components/app/app.js +0 -3
- package/dist/collection/components/back-button/back-button.js +19 -42
- package/dist/collection/components/backdrop/backdrop.js +14 -16
- package/dist/collection/components/badge/badge.js +0 -6
- package/dist/collection/components/breadcrumb/breadcrumb.js +30 -91
- package/dist/collection/components/breadcrumbs/breadcrumbs.js +88 -103
- package/dist/collection/components/button/button.js +61 -132
- package/dist/collection/components/buttons/buttons.js +15 -13
- package/dist/collection/components/card/card.js +21 -54
- package/dist/collection/components/card-header/card-header.js +8 -12
- package/dist/collection/components/card-subtitle/card-subtitle.js +0 -6
- package/dist/collection/components/card-title/card-title.js +0 -6
- package/dist/collection/components/checkbox/checkbox.js +97 -147
- package/dist/collection/components/chip/chip.js +10 -14
- package/dist/collection/components/col/col.js +3 -127
- package/dist/collection/components/content/content.js +64 -93
- package/dist/collection/components/datetime/datetime.ios.css +2 -42
- package/dist/collection/components/datetime/datetime.js +816 -1051
- package/dist/collection/components/datetime/datetime.md.css +1 -42
- package/dist/collection/components/datetime/utils/data.js +14 -13
- package/dist/collection/components/datetime/utils/format.js +11 -21
- package/dist/collection/components/datetime/utils/manipulation.js +8 -8
- package/dist/collection/components/datetime/utils/parse.js +10 -10
- package/dist/collection/components/datetime/utils/state.js +2 -8
- package/dist/collection/components/datetime/utils/validate.js +5 -4
- package/dist/collection/components/datetime-button/datetime-button.ios.css +0 -5
- package/dist/collection/components/datetime-button/datetime-button.js +237 -247
- package/dist/collection/components/datetime-button/datetime-button.md.css +0 -5
- package/dist/collection/components/fab/fab.js +13 -20
- package/dist/collection/components/fab-button/fab-button.js +55 -104
- package/dist/collection/components/fab-list/fab-list.js +11 -10
- package/dist/collection/components/footer/footer.js +44 -50
- package/dist/collection/components/grid/grid.js +6 -4
- package/dist/collection/components/header/header.js +25 -35
- package/dist/collection/components/img/img.js +10 -34
- package/dist/collection/components/infinite-scroll/infinite-scroll.js +66 -73
- package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.js +3 -20
- package/dist/collection/components/input/input.ios.css +26 -57
- package/dist/collection/components/input/input.js +206 -336
- package/dist/collection/components/input/input.md.css +43 -79
- package/dist/collection/components/input-otp/input-otp.js +368 -430
- package/dist/collection/components/input-password-toggle/input-password-toggle.js +19 -32
- package/dist/collection/components/item/item.js +53 -99
- package/dist/collection/components/item-divider/item-divider.js +12 -17
- package/dist/collection/components/item-group/item-group.js +1 -1
- package/dist/collection/components/item-option/item-option.js +22 -50
- package/dist/collection/components/item-options/item-options.js +8 -11
- package/dist/collection/components/item-sliding/item-sliding.js +21 -27
- package/dist/collection/components/label/label.js +6 -26
- package/dist/collection/components/list/list.js +8 -11
- package/dist/collection/components/list-header/list-header.js +2 -12
- package/dist/collection/components/loading/loading.js +51 -135
- package/dist/collection/components/menu/menu.js +61 -103
- package/dist/collection/components/menu-button/menu-button.js +21 -30
- package/dist/collection/components/menu-toggle/menu-toggle.js +15 -22
- 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/gestures/sheet.js +10 -22
- package/dist/collection/components/modal/gestures/swipe-to-close.js +3 -15
- package/dist/collection/components/modal/modal.js +228 -398
- package/dist/collection/components/modal/safe-area-utils.js +7 -6
- package/dist/collection/components/modal/test/fixtures.js +0 -3
- package/dist/collection/components/nav/nav.js +247 -69
- package/dist/collection/components/nav/view-controller.js +1 -7
- package/dist/collection/components/nav-link/nav-link.js +10 -21
- package/dist/collection/components/note/note.js +2 -8
- package/dist/collection/components/picker/picker.js +390 -398
- package/dist/collection/components/picker-column/picker-column.css +0 -3
- package/dist/collection/components/picker-column/picker-column.js +404 -414
- package/dist/collection/components/picker-column-option/picker-column-option.js +31 -33
- package/dist/collection/components/picker-column-option/picker-column-option.md.css +1 -6
- package/dist/collection/components/picker-legacy/animations/ios.enter.js +27 -0
- package/dist/collection/components/picker-legacy/animations/ios.leave.js +23 -0
- package/dist/collection/components/picker-legacy/picker-interface.js +1 -0
- package/dist/collection/components/picker-legacy/picker.ios.css +300 -0
- package/dist/collection/components/picker-legacy/picker.js +890 -0
- package/dist/collection/components/picker-legacy/picker.md.css +287 -0
- package/dist/collection/components/picker-legacy-column/picker-column.ios.css +231 -0
- package/dist/collection/components/picker-legacy-column/picker-column.js +422 -0
- package/dist/collection/components/picker-legacy-column/picker-column.md.css +222 -0
- package/dist/collection/components/picker-legacy-column/test/test.utils.js +43 -0
- package/dist/collection/components/popover/animations/ios.enter.js +2 -1
- package/dist/collection/components/popover/animations/md.enter.js +2 -1
- package/dist/collection/components/popover/popover.ios.css +0 -15
- package/dist/collection/components/popover/popover.js +185 -302
- package/dist/collection/components/popover/popover.md.css +0 -15
- package/dist/collection/components/popover/test/fixture.js +0 -1
- package/dist/collection/components/popover/utils.js +6 -4
- package/dist/collection/components/progress-bar/progress-bar.js +23 -27
- package/dist/collection/components/radio/radio.js +66 -102
- package/dist/collection/components/radio-group/radio-group.js +66 -101
- package/dist/collection/components/radio-group/test/fixtures.js +0 -2
- package/dist/collection/components/range/range.js +240 -296
- package/dist/collection/components/refresher/refresher.js +78 -110
- package/dist/collection/components/refresher-content/refresher-content.js +4 -41
- package/dist/collection/components/reorder/reorder.js +1 -2
- package/dist/collection/components/reorder-group/reorder-group.js +15 -44
- package/dist/collection/components/ripple-effect/ripple-effect.js +13 -12
- package/dist/collection/components/route/route.js +10 -39
- package/dist/collection/components/route-redirect/route-redirect.js +0 -31
- package/dist/collection/components/router/router.js +33 -37
- package/dist/collection/components/router/utils/dom.js +7 -25
- package/dist/collection/components/router/utils/matching.js +9 -7
- package/dist/collection/components/router/utils/parser.js +1 -1
- package/dist/collection/components/router/utils/path.js +1 -0
- package/dist/collection/components/router-link/router-link.js +12 -37
- package/dist/collection/components/router-outlet/router-outlet.js +21 -82
- package/dist/collection/components/row/row.js +1 -1
- package/dist/collection/components/searchbar/searchbar.js +199 -289
- package/dist/collection/components/segment/segment.js +85 -120
- package/dist/collection/components/segment-button/segment-button.js +37 -43
- package/dist/collection/components/segment-content/segment-content.js +1 -1
- package/dist/collection/components/segment-view/segment-view.js +16 -26
- package/dist/collection/components/select/select.ios.css +69 -96
- package/dist/collection/components/select/select.js +213 -629
- package/dist/collection/components/select/select.md.css +85 -118
- package/dist/collection/components/select-modal/select-modal.ios.css +0 -218
- package/dist/collection/components/select-modal/select-modal.js +38 -92
- package/dist/collection/components/select-modal/select-modal.md.css +0 -164
- package/dist/collection/components/select-modal/test/fixtures.js +1 -8
- package/dist/collection/components/select-option/select-option.js +9 -110
- package/dist/collection/components/select-popover/select-popover.ios.css +0 -218
- package/dist/collection/components/select-popover/select-popover.js +36 -103
- package/dist/collection/components/select-popover/select-popover.md.css +0 -164
- package/dist/collection/components/select-popover/test/fixtures.js +1 -8
- package/dist/collection/components/skeleton-text/skeleton-text.js +8 -12
- package/dist/collection/components/spinner/spinner.js +9 -21
- package/dist/collection/components/split-pane/split-pane.js +15 -27
- package/dist/collection/components/tab/tab.js +6 -17
- package/dist/collection/components/tab-bar/tab-bar.js +14 -32
- package/dist/collection/components/tab-button/tab-button.js +23 -62
- package/dist/collection/components/tabs/tabs.js +20 -33
- package/dist/collection/components/text/text.js +2 -8
- package/dist/collection/components/textarea/textarea.ios.css +62 -94
- package/dist/collection/components/textarea/textarea.js +181 -287
- package/dist/collection/components/textarea/textarea.md.css +77 -103
- package/dist/collection/components/thumbnail/thumbnail.js +1 -1
- package/dist/collection/components/title/title.js +2 -18
- package/dist/collection/components/toast/toast.js +106 -223
- package/dist/collection/components/toggle/toggle.js +115 -167
- package/dist/collection/components/toolbar/toolbar.js +7 -15
- package/dist/collection/global/config.js +6 -4
- package/dist/collection/global/ionic-global.js +2 -8
- package/dist/collection/index.js +1 -1
- package/dist/collection/utils/animation/animation.js +3 -3
- package/dist/collection/utils/config.js +4 -5
- package/dist/collection/utils/focus-controller/index.js +1 -1
- package/dist/collection/utils/focus-trap.js +3 -3
- package/dist/collection/utils/forms/index.js +0 -1
- package/dist/collection/utils/framework-delegate.js +6 -4
- package/dist/collection/utils/gesture/gesture-controller.js +8 -15
- package/dist/collection/utils/gesture/index.js +2 -10
- package/dist/collection/utils/gesture/listener.js +1 -1
- package/dist/collection/utils/hardware-back-button.js +3 -3
- package/dist/collection/utils/helpers.js +2 -2
- package/dist/collection/utils/input-shims/hacks/scroll-assist.js +5 -4
- package/dist/collection/utils/input-shims/hacks/scroll-data.js +2 -1
- package/dist/collection/utils/keyboard/keyboard-controller.js +5 -5
- package/dist/collection/utils/keyboard/keyboard.js +1 -1
- package/dist/collection/utils/logging/index.js +4 -23
- package/dist/collection/utils/menu-controller/index.js +2 -1
- package/dist/collection/utils/native/haptic.js +3 -2
- package/dist/collection/utils/native/keyboard.js +2 -2
- package/dist/collection/utils/native/status-bar.js +1 -1
- package/dist/collection/utils/overlays.js +23 -38
- package/dist/collection/utils/platform.js +5 -4
- package/dist/collection/utils/rtl/dir.js +1 -1
- package/dist/collection/utils/sanitization/index.js +20 -276
- package/dist/collection/utils/slot-mutation-controller.js +2 -1
- package/dist/collection/utils/test/playwright/apply-keyboard-focus.js +1 -1
- package/dist/collection/utils/test/playwright/drag-element.js +3 -2
- package/dist/collection/utils/test/playwright/generator.js +4 -3
- package/dist/collection/utils/test/playwright/page/event-spy.js +12 -11
- package/dist/collection/utils/test/playwright/page/utils/goto.js +5 -4
- package/dist/collection/utils/test/playwright/page/utils/set-content.js +1 -1
- package/dist/collection/utils/test/playwright/page/utils/set-ion-viewport.js +3 -2
- package/dist/collection/utils/test/press-keys.js +17 -10
- package/dist/collection/utils/theme.js +1 -6
- package/dist/collection/utils/transition/ios.transition.js +13 -9
- package/dist/collection/utils/transition/md.transition.js +4 -3
- package/dist/docs.json +1256 -556
- package/dist/esm/{animation-CGFdmGk9.js → animation-DLJpuoEz.js} +4 -4
- package/dist/esm/{app-globals-CYmMeGdU.js → app-globals-D0C5S4hU.js} +1 -1
- package/dist/esm/{button-active--80YqSHA.js → button-active-BSpTQmS9.js} +3 -3
- package/dist/esm/config-DQCONYYp.js +195 -0
- package/dist/esm/{dir-B-FxiyeI.js → dir-C53feagD.js} +1 -1
- package/dist/esm/{format-Dcwga61t.js → format-CAmvpAez.js} +31 -41
- package/dist/esm/{framework-delegate--ajhSeKH.js → framework-delegate-FnPGymXL.js} +7 -5
- package/dist/esm/{gesture-controller-TXPDHL13.js → gesture-controller-BTEOs1at.js} +8 -15
- package/dist/esm/{haptic-Cq4UAeka.js → haptic-DzAMWJuk.js} +3 -2
- package/dist/esm/{hardware-back-button-gLJHMX_F.js → hardware-back-button-B93Gru0Y.js} +4 -4
- package/dist/esm/{helpers-DexiPLIC.js → helpers-HEqiOzXb.js} +3 -3
- package/dist/esm/{index-BCgUwrV0.js → index-BRHzoo00.js} +2 -2
- package/dist/esm/{index-8s8kZKJ7.js → index-B_dQk_WE.js} +5 -5
- package/dist/esm/{index-DppOcPFQ.js → index-CfgBF1SE.js} +4 -10
- package/dist/esm/{index-BvabGprD.js → index-DV3sJJW8.js} +2 -2
- package/dist/esm/{index-_Za5VB9w.js → index-Dw-wN0Ja.js} +2 -2
- package/dist/esm/{index-CumkqGQF.js → index-Q6UPU0Ay.js} +7 -6
- package/dist/esm/{index-ChhhtsGZ.js → index-tcQvqkiX.js} +15 -32
- package/dist/esm/index.js +15 -16
- package/dist/esm/{input-shims-BB0AKb_k.js → input-shims-LXhI7LEx.js} +11 -9
- package/dist/esm/input.utils-Y6NgW8bw.js +147 -0
- package/dist/esm/ion-accordion_2.entry.js +340 -368
- package/dist/esm/ion-action-sheet.entry.js +76 -187
- package/dist/esm/ion-alert.entry.js +110 -272
- package/dist/esm/ion-app_8.entry.js +190 -307
- package/dist/esm/ion-avatar_3.entry.js +4 -10
- package/dist/esm/ion-back-button.entry.js +23 -47
- package/dist/esm/ion-backdrop.entry.js +14 -18
- package/dist/esm/ion-breadcrumb_2.entry.js +121 -199
- package/dist/esm/ion-button_2.entry.js +66 -138
- package/dist/esm/ion-card_5.entry.js +30 -82
- package/dist/esm/ion-checkbox.entry.js +101 -152
- package/dist/esm/ion-chip.entry.js +11 -17
- package/dist/esm/ion-col_3.entry.js +10 -134
- package/dist/esm/ion-datetime-button.entry.js +241 -253
- package/dist/esm/ion-datetime_3.entry.js +3163 -0
- package/dist/esm/ion-fab_3.entry.js +81 -139
- package/dist/esm/ion-img.entry.js +12 -34
- package/dist/esm/ion-infinite-scroll_2.entry.js +71 -99
- package/dist/esm/ion-input-otp.entry.js +372 -435
- package/dist/esm/ion-input-password-toggle.entry.js +22 -36
- package/dist/esm/ion-input.entry.js +209 -341
- package/dist/esm/ion-item-option_3.entry.js +54 -94
- package/dist/esm/ion-item_8.entry.js +92 -191
- package/dist/esm/ion-loading.entry.js +59 -145
- package/dist/esm/ion-menu_3.entry.js +106 -168
- package/dist/esm/ion-modal.entry.js +261 -455
- package/dist/esm/ion-nav_2.entry.js +158 -101
- package/dist/esm/ion-picker-column-option.entry.js +33 -37
- package/dist/esm/ion-picker-column.entry.js +405 -417
- package/dist/esm/ion-picker.entry.js +392 -401
- package/dist/esm/ion-popover.entry.js +205 -319
- package/dist/esm/ion-progress-bar.entry.js +25 -31
- package/dist/esm/ion-radio_2.entry.js +134 -207
- package/dist/esm/ion-range.entry.js +245 -302
- package/dist/esm/ion-refresher_2.entry.js +91 -163
- package/dist/esm/ion-reorder_2.entry.js +23 -53
- package/dist/esm/ion-ripple-effect.entry.js +14 -14
- package/dist/esm/ion-route_4.entry.js +71 -175
- package/dist/esm/ion-searchbar.entry.js +200 -291
- package/dist/esm/ion-segment-content.entry.js +2 -2
- package/dist/esm/ion-segment-view.entry.js +17 -28
- package/dist/esm/ion-segment_2.entry.js +126 -169
- package/dist/esm/ion-select-modal.entry.js +48 -104
- package/dist/esm/ion-select_3.entry.js +260 -787
- package/dist/esm/ion-spinner.entry.js +10 -24
- package/dist/esm/ion-split-pane.entry.js +16 -29
- package/dist/esm/ion-tab-bar_2.entry.js +41 -100
- package/dist/esm/ion-tab_2.entry.js +27 -53
- package/dist/esm/ion-text.entry.js +5 -11
- package/dist/esm/ion-textarea.entry.js +187 -295
- package/dist/esm/ion-toast.entry.js +116 -235
- package/dist/esm/ion-toggle.entry.js +122 -175
- package/dist/esm/{ionic-global-BVB7BrLT.js → ionic-global-Cp_eT4sZ.js} +8 -13
- package/dist/esm/ionic.js +5 -5
- package/dist/esm/{ios.transition-BdhybwLl.js → ios.transition-ClFrsIrS.js} +17 -13
- package/dist/esm/{item-multiple-inputs-rU8VaNNg.js → item-multiple-inputs-DlNuqNJm.js} +1 -1
- package/dist/esm/{keyboard-DAF8GNJ9.js → keyboard-CUw4ekVy.js} +2 -2
- package/dist/esm/{keyboard-controller-DEwoa1ev.js → keyboard-controller-BaaVITYt.js} +6 -6
- package/dist/esm/{keyboard-Cj8mLJeq.js → keyboard-ywgs5efA.js} +2 -2
- package/dist/esm/loader.js +5 -5
- package/dist/esm/{md.transition-B5lqKGCs.js → md.transition-D0msQmzI.js} +8 -7
- package/dist/esm/notch-controller-DKDjU_O7.js +153 -0
- package/dist/esm/{overlays-CjWwtvf1.js → overlays-Dg0q2_tJ.js} +33 -48
- package/dist/esm/{status-tap-DpLhkDWs.js → status-tap-vO-6s4Yp.js} +3 -3
- package/dist/esm/{swipe-back-cz4-lyG3.js → swipe-back-DQ1q5MgD.js} +5 -5
- package/dist/esm/{theme-byZM6qHV.js → theme-DiVJyqlX.js} +1 -6
- package/dist/html.html-data.json +80 -52
- package/dist/ionic/index.esm.js +1 -1
- package/dist/ionic/ionic.esm.js +1 -1
- package/dist/ionic/p-01f81ea5.entry.js +4 -0
- package/dist/ionic/p-06c232a4.entry.js +4 -0
- package/dist/ionic/p-0caa922c.entry.js +4 -0
- package/dist/ionic/p-0dc33652.entry.js +4 -0
- package/dist/ionic/p-0fa9c382.entry.js +4 -0
- package/dist/ionic/p-10e833ef.entry.js +4 -0
- package/dist/ionic/p-21eb76d5.entry.js +4 -0
- package/dist/ionic/p-27d30585.entry.js +4 -0
- package/dist/ionic/p-2a05aa64.entry.js +4 -0
- package/dist/ionic/p-2b204c59.entry.js +4 -0
- package/dist/ionic/p-2bb2cb18.entry.js +4 -0
- package/dist/ionic/p-2fa58e80.entry.js +4 -0
- package/dist/ionic/p-3353c229.entry.js +4 -0
- package/dist/ionic/p-34586ead.entry.js +4 -0
- package/dist/ionic/p-37e720da.entry.js +4 -0
- package/dist/ionic/p-390ca786.entry.js +4 -0
- package/dist/ionic/p-3ae5f277.entry.js +4 -0
- package/dist/ionic/p-4654ae1c.entry.js +4 -0
- package/dist/ionic/p-4745f534.entry.js +4 -0
- package/dist/ionic/p-4858af1f.entry.js +4 -0
- package/dist/ionic/p-4baa5b82.entry.js +4 -0
- package/dist/ionic/p-4e92a11f.entry.js +4 -0
- package/dist/ionic/p-50e1194a.entry.js +4 -0
- package/dist/ionic/p-5d1da0a2.entry.js +4 -0
- package/dist/ionic/p-5e2f73ee.entry.js +4 -0
- package/dist/ionic/p-5eb8e86d.entry.js +4 -0
- package/dist/ionic/p-65ebdf1b.entry.js +4 -0
- package/dist/ionic/p-696bdcf6.entry.js +4 -0
- package/dist/ionic/p-746fa988.entry.js +4 -0
- package/dist/ionic/p-75dc25ba.entry.js +4 -0
- package/dist/ionic/p-7c319341.entry.js +4 -0
- package/dist/ionic/p-829367ed.entry.js +4 -0
- package/dist/ionic/p-84d5ce05.entry.js +4 -0
- package/dist/ionic/p-874b4bd8.entry.js +4 -0
- package/dist/ionic/p-8eb8ee76.entry.js +4 -0
- package/dist/ionic/p-9eeaBrnk.js +4 -0
- package/dist/ionic/p-9f9db3a2.entry.js +4 -0
- package/dist/ionic/p-9fa3c405.entry.js +4 -0
- package/dist/ionic/p-BGqMS-oh.js +4 -0
- package/dist/ionic/p-BTEOs1at.js +4 -0
- package/dist/ionic/p-BUFIpxKM.js +4 -0
- package/dist/ionic/p-C0eMdTCW.js +4 -0
- package/dist/ionic/p-C53feagD.js +4 -0
- package/dist/ionic/p-CFlfIb2g.js +4 -0
- package/dist/ionic/p-CKvCXMs9.js +4 -0
- package/dist/ionic/p-Cl0B-RWe.js +4 -0
- package/dist/ionic/p-CmcFnK-B.js +4 -0
- package/dist/ionic/p-CtWGkNnJ.js +4 -0
- package/dist/ionic/p-Cx3IXROA.js +4 -0
- package/dist/ionic/p-D-3ycHmd.js +4 -0
- package/dist/ionic/p-D13Eaw-8.js +4 -0
- package/dist/ionic/p-D4uTWt4-.js +4 -0
- package/dist/ionic/p-DC3RagnA.js +4 -0
- package/dist/ionic/{p-CKUuSnDR.js → p-DIuEbVLu.js} +1 -1
- package/dist/ionic/{p-BvabGprD.js → p-DV3sJJW8.js} +1 -1
- package/dist/ionic/p-DiVJyqlX.js +4 -0
- package/dist/ionic/p-DoJvtrbw.js +4 -0
- package/dist/ionic/p-DqN5EA2O.js +4 -0
- package/dist/ionic/p-DzWaWHGc.js +4 -0
- package/dist/ionic/{p-I3In7hMC.js → p-KjNvRoEp.js} +1 -1
- package/dist/ionic/p-Nqf6uvGh.js +4 -0
- package/dist/ionic/p-SNAkTDfm.js +4 -0
- package/dist/ionic/p-VAemlbDS.js +4 -0
- package/dist/ionic/p-a3bdcae6.entry.js +4 -0
- package/dist/ionic/p-aaeedb6b.entry.js +4 -0
- package/dist/ionic/p-af55a72f.entry.js +4 -0
- package/dist/ionic/p-b2020591.entry.js +4 -0
- package/dist/ionic/p-b9fadbfe.entry.js +4 -0
- package/dist/ionic/{p-CQ_4TirR.js → p-biz8zWmJ.js} +1 -1
- package/dist/ionic/p-c0fb8edd.entry.js +4 -0
- package/dist/ionic/p-c38b648e.entry.js +4 -0
- package/dist/ionic/p-c4d8641b.entry.js +4 -0
- package/dist/ionic/{p-40424a88.entry.js → p-c6e49f3f.entry.js} +1 -1
- package/dist/ionic/p-ca2ab74d.entry.js +4 -0
- package/dist/ionic/p-d889ff6d.entry.js +4 -0
- package/dist/ionic/p-dfa8d673.entry.js +4 -0
- package/dist/ionic/p-ea56626d.entry.js +4 -0
- package/dist/ionic/p-ef4c3bee.entry.js +4 -0
- package/dist/ionic/p-f386f6ae.entry.js +4 -0
- package/dist/ionic/p-mjKAFv89.js +4 -0
- package/dist/ionic/p-tcQvqkiX.js +5 -0
- package/dist/ionic/p-uWtqTrG8.js +4 -0
- package/dist/ionic/p-viFHDgRs.js +4 -0
- package/dist/ionic/p-xWb6fgfq.js +4 -0
- package/dist/types/components/img/img.d.ts +0 -2
- package/dist/types/components/input/input.d.ts +6 -12
- package/dist/types/components/modal/modal-interface.d.ts +0 -9
- package/dist/types/components/modal/modal.d.ts +4 -11
- package/dist/types/components/nav/nav-interface.d.ts +1 -0
- package/dist/types/components/nav/nav.d.ts +22 -2
- package/dist/types/components/picker-legacy/animations/ios.enter.d.ts +5 -0
- package/dist/types/components/picker-legacy/animations/ios.leave.d.ts +5 -0
- package/dist/types/components/picker-legacy/picker-interface.d.ts +52 -0
- package/dist/types/components/picker-legacy/picker.d.ts +158 -0
- package/dist/types/components/picker-legacy-column/picker-column.d.ts +46 -0
- package/dist/types/components/picker-legacy-column/test/test.utils.d.ts +9 -0
- package/dist/types/components/range/range.d.ts +1 -0
- package/dist/types/components/route/route.d.ts +1 -1
- package/dist/types/components/router-outlet/router-outlet.d.ts +0 -7
- package/dist/types/components/searchbar/searchbar.d.ts +1 -1
- package/dist/types/components/select/select-interface.d.ts +0 -31
- package/dist/types/components/select/select.d.ts +6 -30
- package/dist/types/components/select-option/select-option.d.ts +1 -42
- package/dist/types/components/textarea/textarea.d.ts +5 -12
- package/dist/types/components.d.ts +311 -74
- package/dist/types/index.d.ts +1 -1
- package/dist/types/interface.d.ts +1 -0
- package/dist/types/utils/config.d.ts +8 -1
- package/dist/types/utils/forms/index.d.ts +0 -1
- package/dist/types/utils/logging/index.d.ts +1 -2
- package/dist/types/utils/overlays.d.ts +9 -11
- package/dist/types/utils/sanitization/index.d.ts +2 -58
- package/dist/types/utils/test/playwright/playwright-page.d.ts +1 -1
- package/dist/types/utils/test/playwright/testExpect.d.ts +1 -1
- package/hydrate/index.js +7322 -10670
- package/hydrate/index.mjs +7322 -10670
- package/package.json +12 -55
- package/components/p--m5cCjbK.js +0 -4
- package/components/p-8FN7p701.js +0 -4
- package/components/p-B-FxiyeI.js +0 -4
- package/components/p-B4uHHhPK.js +0 -4
- package/components/p-BMPN55of.js +0 -4
- package/components/p-BMS4t-kJ.js +0 -4
- package/components/p-BOvLNVKq.js +0 -4
- package/components/p-BSQPZ79H.js +0 -4
- package/components/p-BWBigMsI.js +0 -4
- package/components/p-BZ4-QTes.js +0 -4
- package/components/p-BhamHSw3.js +0 -4
- package/components/p-BjluhQMI.js +0 -4
- package/components/p-BlsIikdZ.js +0 -4
- package/components/p-Blug1Vxu.js +0 -4
- package/components/p-BqPNzJf6.js +0 -4
- package/components/p-C5KYjZWD.js +0 -4
- package/components/p-C91npEel.js +0 -4
- package/components/p-C9BGR5fy.js +0 -4
- package/components/p-CD4fmpem.js +0 -4
- package/components/p-CEW4RXZO.js +0 -4
- package/components/p-CKhiNOEg.js +0 -4
- package/components/p-CO2zzh3W.js +0 -4
- package/components/p-CVb3x_r3.js +0 -4
- package/components/p-CWLrHG8Y.js +0 -4
- package/components/p-CbhUdtjf.js +0 -4
- package/components/p-CejmQs3h.js +0 -4
- package/components/p-CfnNZz_d.js +0 -4
- package/components/p-CmKf4pgI.js +0 -4
- package/components/p-Cs5f-uOS.js +0 -4
- package/components/p-D7-vHX0A.js +0 -4
- package/components/p-DKrhJJV0.js +0 -4
- package/components/p-DRfgH82D.js +0 -4
- package/components/p-DSzSbVP2.js +0 -4
- package/components/p-DVKS-ovH.js +0 -4
- package/components/p-DWCzVL3Y.js +0 -4
- package/components/p-Dd8ajo9a.js +0 -4
- package/components/p-DdnhY_oj.js +0 -4
- package/components/p-DgZOZQjJ.js +0 -4
- package/components/p-Dmd2xqCe.js +0 -4
- package/components/p-G0TxqHfe.js +0 -4
- package/components/p-GG5GhznE.js +0 -4
- package/components/p-LXu5-6Ti.js +0 -4
- package/components/p-TXPDHL13.js +0 -4
- package/components/p-UQSiXX2Z.js +0 -4
- package/components/p-UuPYCOZE.js +0 -4
- package/components/p-WeeS7GvC.js +0 -4
- package/components/p-_IKFD3ID.js +0 -4
- package/components/p-byZM6qHV.js +0 -4
- package/components/p-hh7qIC-X.js +0 -4
- package/components/p-idq4JFo2.js +0 -4
- package/components/p-qT1szVjw.js +0 -4
- package/components/p-wzAhIh03.js +0 -4
- package/components/p-ypuYdSDB.js +0 -4
- package/components/p-yuj4Nkm_.js +0 -4
- package/dist/cjs/config-CjUbvdPW.js +0 -36
- package/dist/cjs/index-B7zJsYWS.js +0 -429
- package/dist/cjs/input.utils-BZdMWVrt.js +0 -35
- package/dist/cjs/ion-datetime.cjs.entry.js +0 -2770
- package/dist/cjs/overlay-control-label-D2sdL2O8.js +0 -50
- package/dist/cjs/select-option-render-pULCGldr.js +0 -123
- package/dist/cjs/slot-mutation-controller-CgTGFqlW.js +0 -397
- package/dist/collection/utils/forms/start-container-controller.js +0 -132
- package/dist/collection/utils/overlay-control-label.js +0 -45
- package/dist/collection/utils/select-option-render.js +0 -118
- package/dist/esm/config-DWCzVL3Y.js +0 -32
- package/dist/esm/index-CKM1DdGm.js +0 -424
- package/dist/esm/input.utils-B1ValN_N.js +0 -33
- package/dist/esm/ion-datetime.entry.js +0 -2768
- package/dist/esm/overlay-control-label-BSQPZ79H.js +0 -47
- package/dist/esm/select-option-render-C4m76VGH.js +0 -121
- package/dist/esm/slot-mutation-controller-u741eD3Z.js +0 -393
- package/dist/ionic/p-06533d51.entry.js +0 -4
- package/dist/ionic/p-08443c08.entry.js +0 -4
- package/dist/ionic/p-0FNc80PN.js +0 -4
- package/dist/ionic/p-141f5b47.entry.js +0 -4
- package/dist/ionic/p-14a5e8f5.entry.js +0 -4
- package/dist/ionic/p-19269e04.entry.js +0 -4
- package/dist/ionic/p-19abbc33.entry.js +0 -4
- package/dist/ionic/p-1edf0573.entry.js +0 -4
- package/dist/ionic/p-4204184c.entry.js +0 -4
- package/dist/ionic/p-4bc3ecdb.entry.js +0 -4
- package/dist/ionic/p-4eOQC00Z.js +0 -4
- package/dist/ionic/p-4eed9ca1.entry.js +0 -4
- package/dist/ionic/p-53bac1c9.entry.js +0 -4
- package/dist/ionic/p-5506caeb.entry.js +0 -4
- package/dist/ionic/p-5521dc1f.entry.js +0 -4
- package/dist/ionic/p-5993a77f.entry.js +0 -4
- package/dist/ionic/p-5c3626de.entry.js +0 -4
- package/dist/ionic/p-5d3b411c.entry.js +0 -4
- package/dist/ionic/p-60576951.entry.js +0 -4
- package/dist/ionic/p-7116e558.entry.js +0 -4
- package/dist/ionic/p-711a8319.entry.js +0 -4
- package/dist/ionic/p-71419a55.entry.js +0 -4
- package/dist/ionic/p-79325ffe.entry.js +0 -4
- package/dist/ionic/p-7bb3e957.entry.js +0 -4
- package/dist/ionic/p-82525fb0.entry.js +0 -4
- package/dist/ionic/p-84a38904.entry.js +0 -4
- package/dist/ionic/p-865fa114.entry.js +0 -4
- package/dist/ionic/p-8e1d9e3a.entry.js +0 -4
- package/dist/ionic/p-8f204f1e.entry.js +0 -4
- package/dist/ionic/p-9055e897.entry.js +0 -4
- package/dist/ionic/p-9658e083.entry.js +0 -4
- package/dist/ionic/p-988baee1.entry.js +0 -4
- package/dist/ionic/p-9nmHvEvw.js +0 -4
- package/dist/ionic/p-B-FxiyeI.js +0 -4
- package/dist/ionic/p-BB0LlG4y.js +0 -4
- package/dist/ionic/p-BMPN55of.js +0 -4
- package/dist/ionic/p-BQ8oNV0v.js +0 -4
- package/dist/ionic/p-BSQPZ79H.js +0 -4
- package/dist/ionic/p-BhamHSw3.js +0 -4
- package/dist/ionic/p-BjvtSsVI.js +0 -4
- package/dist/ionic/p-BkfAWuv6.js +0 -4
- package/dist/ionic/p-BwIp10KV.js +0 -4
- package/dist/ionic/p-C-94tAim.js +0 -4
- package/dist/ionic/p-C6eME8Ey.js +0 -4
- package/dist/ionic/p-CMRtMbJc.js +0 -4
- package/dist/ionic/p-CPcPmkGv.js +0 -4
- package/dist/ionic/p-CaRuIadB.js +0 -4
- package/dist/ionic/p-Cdjxf_yg.js +0 -4
- package/dist/ionic/p-ChhhtsGZ.js +0 -5
- package/dist/ionic/p-CmKf4pgI.js +0 -4
- package/dist/ionic/p-D5t_-oMk.js +0 -4
- package/dist/ionic/p-D94b61er.js +0 -4
- package/dist/ionic/p-DAztxQR0.js +0 -4
- package/dist/ionic/p-DCI3rXQo.js +0 -4
- package/dist/ionic/p-DDhtUaaA.js +0 -4
- package/dist/ionic/p-DWCzVL3Y.js +0 -4
- package/dist/ionic/p-DkUB-ROc.js +0 -4
- package/dist/ionic/p-Dn0mqQ_R.js +0 -4
- package/dist/ionic/p-T71k3C35.js +0 -4
- package/dist/ionic/p-TXPDHL13.js +0 -4
- package/dist/ionic/p-a71232d6.entry.js +0 -4
- package/dist/ionic/p-a73d8742.entry.js +0 -4
- package/dist/ionic/p-a8421d18.entry.js +0 -4
- package/dist/ionic/p-a8c2c343.entry.js +0 -4
- package/dist/ionic/p-acf0a6af.entry.js +0 -4
- package/dist/ionic/p-ad98e3ff.entry.js +0 -4
- package/dist/ionic/p-af5166f5.entry.js +0 -4
- package/dist/ionic/p-bc2bad5f.entry.js +0 -4
- package/dist/ionic/p-be08d500.entry.js +0 -4
- package/dist/ionic/p-be9a4f51.entry.js +0 -4
- package/dist/ionic/p-byZM6qHV.js +0 -4
- package/dist/ionic/p-ccc5044d.entry.js +0 -4
- package/dist/ionic/p-ce32912b.entry.js +0 -4
- package/dist/ionic/p-ded69ceb.entry.js +0 -4
- package/dist/ionic/p-e0c6e31e.entry.js +0 -4
- package/dist/ionic/p-e1e5b507.entry.js +0 -4
- package/dist/ionic/p-e8c3e08a.entry.js +0 -4
- package/dist/ionic/p-ed5d540d.entry.js +0 -4
- package/dist/ionic/p-f046aa37.entry.js +0 -4
- package/dist/ionic/p-f2802440.entry.js +0 -4
- package/dist/ionic/p-f402f5a4.entry.js +0 -4
- package/dist/ionic/p-fe1bfbcf.entry.js +0 -4
- package/dist/types/utils/forms/start-container-controller.d.ts +0 -34
- package/dist/types/utils/overlay-control-label.d.ts +0 -32
- package/dist/types/utils/select-option-render.d.ts +0 -53
- /package/components/{p-LpMHEu3v.js → p-CO7fmmxt.js} +0 -0
|
@@ -1,29 +1,25 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
3
|
*/
|
|
4
|
-
import { r as registerInstance, c as createEvent,
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import { c as compareOptions, i as isOptionSelected } from './compare-with-utils-sObYyvOy.js';
|
|
4
|
+
import { r as registerInstance, c as createEvent, f as printIonWarning, h, d as Host, g as getElement, i as forceUpdate } from './index-tcQvqkiX.js';
|
|
5
|
+
import { c as createNotchController } from './notch-controller-DKDjU_O7.js';
|
|
6
|
+
import { i as isOptionSelected, c as compareOptions } from './compare-with-utils-sObYyvOy.js';
|
|
8
7
|
import { c as checkInvalidState } from './validity-DJztqcrH.js';
|
|
9
|
-
import { b as inheritAttributes, a as renderHiddenInput, n as focusVisibleElement } from './helpers-
|
|
10
|
-
import {
|
|
11
|
-
import { i as isRTL } from './dir-
|
|
12
|
-
import {
|
|
13
|
-
import { h as hostContext, c as createColorClasses, g as getClassMap } from './theme-byZM6qHV.js';
|
|
8
|
+
import { b as inheritAttributes, a as renderHiddenInput, n as focusVisibleElement } from './helpers-HEqiOzXb.js';
|
|
9
|
+
import { c as popoverController, b as actionSheetController, a as alertController, m as modalController, s as safeCall } from './overlays-Dg0q2_tJ.js';
|
|
10
|
+
import { i as isRTL } from './dir-C53feagD.js';
|
|
11
|
+
import { h as hostContext, c as createColorClasses, g as getClassMap } from './theme-DiVJyqlX.js';
|
|
14
12
|
import { w as watchForOptions } from './watch-options-Dtdm8lKC.js';
|
|
15
|
-
import { w as chevronExpand,
|
|
16
|
-
import { b as getIonMode } from './ionic-global-
|
|
17
|
-
import { a as getOverlayLabelPlacement, g as getOverlayLabelJustify } from './overlay-control-label-BSQPZ79H.js';
|
|
18
|
-
import { r as renderOptionLabel } from './select-option-render-C4m76VGH.js';
|
|
13
|
+
import { w as chevronExpand, q as caretDownSharp } from './index-DV3sJJW8.js';
|
|
14
|
+
import { b as getIonMode } from './ionic-global-Cp_eT4sZ.js';
|
|
19
15
|
import './index-ZjP4CjeZ.js';
|
|
20
|
-
import './hardware-back-button-
|
|
21
|
-
import './framework-delegate
|
|
22
|
-
import './gesture-controller-
|
|
16
|
+
import './hardware-back-button-B93Gru0Y.js';
|
|
17
|
+
import './framework-delegate-FnPGymXL.js';
|
|
18
|
+
import './gesture-controller-BTEOs1at.js';
|
|
23
19
|
|
|
24
|
-
const selectIosCss = () => `:host{--padding-top:0px;--padding-end:0px;--padding-bottom:0px;--padding-start:0px;--placeholder-color:currentColor;--placeholder-opacity:var(--ion-placeholder-opacity, 0.6);--background:transparent;--border-style:solid;--highlight-color-focused:var(--ion-color-primary, #0054e9);--highlight-color-valid:var(--ion-color-success, #2dd55b);--highlight-color-invalid:var(--ion-color-danger, #c5000f);--
|
|
20
|
+
const selectIosCss = () => `:host{--padding-top:0px;--padding-end:0px;--padding-bottom:0px;--padding-start:0px;--placeholder-color:currentColor;--placeholder-opacity:var(--ion-placeholder-opacity, 0.6);--background:transparent;--border-style:solid;--highlight-color-focused:var(--ion-color-primary, #0054e9);--highlight-color-valid:var(--ion-color-success, #2dd55b);--highlight-color-invalid:var(--ion-color-danger, #c5000f);--highlight-color:var(--highlight-color-focused);display:block;position:relative;width:100%;min-height:44px;font-family:var(--ion-font-family, inherit);white-space:nowrap;cursor:pointer;z-index:2}:host(.select-label-placement-floating),:host(.select-label-placement-stacked){min-height:56px}:host(.ion-color){--highlight-color-focused:var(--ion-color-base)}:host(.in-item){-ms-flex:1 1 0px;flex:1 1 0}:host(.select-disabled){pointer-events:none}:host(.has-focus) button{border:2px solid #5e9ed6}:host([slot=start]),:host([slot=end]){-ms-flex:initial;flex:initial;width:auto}.select-placeholder{color:var(--placeholder-color);opacity:var(--placeholder-opacity)}button{position:absolute;top:0;left:0;right:0;bottom:0;width:100%;height:100%;margin:0;padding:0;border:0;outline:0;clip:rect(0 0 0 0);opacity:0;overflow:hidden;-webkit-appearance:none;-moz-appearance:none}.select-icon{-webkit-margin-start:4px;margin-inline-start:4px;-webkit-margin-end:0;margin-inline-end:0;margin-top:0;margin-bottom:0;position:relative;-ms-flex-negative:0;flex-shrink:0}:host(.in-item-color) .select-icon{color:inherit}:host(.select-label-placement-stacked) .select-icon,:host(.select-label-placement-floating) .select-icon{position:absolute;height:100%}:host(.select-ltr.select-label-placement-stacked) .select-icon,:host(.select-ltr.select-label-placement-floating) .select-icon{right:var(--padding-end, 0)}:host(.select-rtl.select-label-placement-stacked) .select-icon,:host(.select-rtl.select-label-placement-floating) .select-icon{left:var(--padding-start, 0)}.select-text{-ms-flex:1;flex:1;min-width:16px;font-size:inherit;text-overflow:ellipsis;white-space:inherit;overflow:hidden}.select-wrapper{-webkit-padding-start:var(--padding-start);padding-inline-start:var(--padding-start);-webkit-padding-end:var(--padding-end);padding-inline-end:var(--padding-end);padding-top:var(--padding-top);padding-bottom:var(--padding-bottom);border-radius:var(--border-radius);display:-ms-flexbox;display:flex;position:relative;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;height:inherit;min-height:inherit;-webkit-transition:background-color 15ms linear;transition:background-color 15ms linear;background:var(--background);line-height:normal;cursor:inherit;-webkit-box-sizing:border-box;box-sizing:border-box}.select-wrapper .select-placeholder{-webkit-transition:opacity 150ms cubic-bezier(0.4, 0, 0.2, 1);transition:opacity 150ms cubic-bezier(0.4, 0, 0.2, 1)}.select-wrapper-inner{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;overflow:hidden}:host(.select-label-placement-stacked) .select-wrapper-inner,:host(.select-label-placement-floating) .select-wrapper-inner{-ms-flex-positive:1;flex-grow:1}:host(.ion-touched.ion-invalid){--highlight-color:var(--highlight-color-invalid)}:host(.ion-valid){--highlight-color:var(--highlight-color-valid)}.select-bottom{-webkit-padding-start:var(--padding-start);padding-inline-start:var(--padding-start);-webkit-padding-end:var(--padding-end);padding-inline-end:var(--padding-end);padding-top:5px;padding-bottom:0;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;border-top:var(--border-width) var(--border-style) var(--border-color);font-size:0.75rem;white-space:normal}:host(.has-focus.ion-valid),:host(.select-expanded.ion-valid),:host(.ion-touched.ion-invalid),:host(.select-expanded.ion-touched.ion-invalid){--border-color:var(--highlight-color)}.select-bottom .error-text{display:none;color:var(--highlight-color-invalid)}.select-bottom .helper-text{display:block;color:var(--ion-color-step-700, var(--ion-text-color-step-300, #4d4d4d))}:host(.ion-touched.ion-invalid) .select-bottom .error-text{display:block}:host(.ion-touched.ion-invalid) .select-bottom .helper-text{display:none}.label-text-wrapper{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;max-width:200px;-webkit-transition:color 150ms cubic-bezier(0.4, 0, 0.2, 1), -webkit-transform 150ms cubic-bezier(0.4, 0, 0.2, 1);transition:color 150ms cubic-bezier(0.4, 0, 0.2, 1), -webkit-transform 150ms cubic-bezier(0.4, 0, 0.2, 1);transition:color 150ms cubic-bezier(0.4, 0, 0.2, 1), transform 150ms cubic-bezier(0.4, 0, 0.2, 1);transition:color 150ms cubic-bezier(0.4, 0, 0.2, 1), transform 150ms cubic-bezier(0.4, 0, 0.2, 1), -webkit-transform 150ms cubic-bezier(0.4, 0, 0.2, 1);pointer-events:none}.label-text,::slotted([slot=label]){text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.label-text-wrapper-hidden,.select-outline-notch-hidden{display:none}.native-wrapper{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-webkit-transition:opacity 150ms cubic-bezier(0.4, 0, 0.2, 1);transition:opacity 150ms cubic-bezier(0.4, 0, 0.2, 1);overflow:hidden}:host(.select-justify-space-between) .select-wrapper{-ms-flex-pack:justify;justify-content:space-between}:host(.select-justify-start) .select-wrapper{-ms-flex-pack:start;justify-content:start}:host(.select-justify-end) .select-wrapper{-ms-flex-pack:end;justify-content:end}:host(.select-label-placement-start) .select-wrapper{-ms-flex-direction:row;flex-direction:row}:host(.select-label-placement-start) .label-text-wrapper{-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:16px;margin-inline-end:16px;margin-top:0;margin-bottom:0}:host(.select-label-placement-end) .select-wrapper{-ms-flex-direction:row-reverse;flex-direction:row-reverse}:host(.select-label-placement-end) .label-text-wrapper{-webkit-margin-start:16px;margin-inline-start:16px;-webkit-margin-end:0;margin-inline-end:0;margin-top:0;margin-bottom:0}:host(.select-label-placement-fixed) .label-text-wrapper{-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:16px;margin-inline-end:16px;margin-top:0;margin-bottom:0}:host(.select-label-placement-fixed) .label-text-wrapper{-ms-flex:0 0 100px;flex:0 0 100px;width:100px;min-width:100px;max-width:200px}:host(.select-label-placement-stacked) .select-wrapper,:host(.select-label-placement-floating) .select-wrapper{-ms-flex-direction:column;flex-direction:column;-ms-flex-align:start;align-items:start}:host(.select-label-placement-stacked) .label-text-wrapper,:host(.select-label-placement-floating) .label-text-wrapper{max-width:100%}:host(.select-ltr.select-label-placement-stacked) .label-text-wrapper,:host(.select-ltr.select-label-placement-floating) .label-text-wrapper{-webkit-transform-origin:left top;transform-origin:left top}:host(.select-rtl.select-label-placement-stacked) .label-text-wrapper,:host(.select-rtl.select-label-placement-floating) .label-text-wrapper{-webkit-transform-origin:right top;transform-origin:right top}:host(.select-label-placement-stacked) .native-wrapper,:host(.select-label-placement-floating) .native-wrapper{margin-left:0;margin-right:0;margin-top:1px;margin-bottom:0;-ms-flex-positive:1;flex-grow:1;width:100%}:host(.select-label-placement-floating) .label-text-wrapper{-webkit-transform:translateY(100%) scale(1);transform:translateY(100%) scale(1)}:host(.select-label-placement-floating:not(.label-floating)) .native-wrapper .select-placeholder{opacity:0}:host(.select-expanded.select-label-placement-floating) .native-wrapper .select-placeholder,:host(.has-focus.select-label-placement-floating) .native-wrapper .select-placeholder,:host(.has-value.select-label-placement-floating) .native-wrapper .select-placeholder{opacity:1}:host(.label-floating) .label-text-wrapper{-webkit-transform:translateY(50%) scale(0.75);transform:translateY(50%) scale(0.75);max-width:calc(100% / 0.75)}::slotted([slot=start]),::slotted([slot=end]){-ms-flex-negative:0;flex-shrink:0}::slotted([slot=start]:last-of-type){-webkit-margin-end:16px;margin-inline-end:16px;-webkit-margin-start:0;margin-inline-start:0}::slotted([slot=end]:first-of-type){-webkit-margin-start:16px;margin-inline-start:16px;-webkit-margin-end:0;margin-inline-end:0}:host{--border-width:0.55px;--border-color:var(--ion-item-border-color, var(--ion-border-color, var(--ion-color-step-250, var(--ion-background-color-step-250, #c8c7cc))));--highlight-height:0px}.select-icon{width:1.125rem;height:1.125rem;color:var(--ion-color-step-650, var(--ion-text-color-step-350, #595959))}:host(.select-label-placement-stacked) .select-wrapper-inner,:host(.select-label-placement-floating) .select-wrapper-inner{width:calc(100% - 1.125rem - 4px)}:host(.select-disabled){opacity:0.3}::slotted(ion-button[slot=start].button-has-icon-only),::slotted(ion-button[slot=end].button-has-icon-only){--border-radius:50%;--padding-start:0;--padding-end:0;--padding-top:0;--padding-bottom:0;aspect-ratio:1}`;
|
|
25
21
|
|
|
26
|
-
const selectMdCss = () => `:host{--padding-top:0px;--padding-end:0px;--padding-bottom:0px;--padding-start:0px;--placeholder-color:currentColor;--placeholder-opacity:var(--ion-placeholder-opacity, 0.6);--background:transparent;--border-style:solid;--highlight-color-focused:var(--ion-color-primary, #0054e9);--highlight-color-valid:var(--ion-color-success, #2dd55b);--highlight-color-invalid:var(--ion-color-danger, #c5000f);--select-text-media-height:1.5em;--select-text-media-width:1.5em;--select-text-gap:12px;--highlight-color:var(--highlight-color-focused);display:block;position:relative;width:100%;min-height:44px;font-family:var(--ion-font-family, inherit);white-space:nowrap;cursor:pointer;z-index:2}:host(.select-label-placement-floating),:host(.select-label-placement-stacked){min-height:56px}:host(.ion-color){--highlight-color-focused:var(--ion-color-base)}:host(.in-item){-ms-flex:1 1 0px;flex:1 1 0}:host(.select-disabled){pointer-events:none}:host(.has-focus) button{border:2px solid #5e9ed6}:host([slot=start]),:host([slot=end]){-ms-flex:initial;flex:initial;width:auto}.select-placeholder{color:var(--placeholder-color);opacity:var(--placeholder-opacity)}button{position:absolute;top:0;left:0;right:0;bottom:0;width:100%;height:100%;margin:0;padding:0;border:0;outline:0;clip:rect(0 0 0 0);opacity:0;overflow:hidden;-webkit-appearance:none;-moz-appearance:none}.select-icon{-webkit-margin-start:4px;margin-inline-start:4px;-webkit-margin-end:0;margin-inline-end:0;margin-top:0;margin-bottom:0;position:relative;-ms-flex-negative:0;flex-shrink:0}:host(.in-item-color) .select-icon{color:inherit}.select-text{-ms-flex:1;flex:1;min-width:16px;font-size:inherit;text-overflow:ellipsis;white-space:inherit;overflow:hidden}.select-text>*+*{-webkit-margin-start:var(--select-text-gap);margin-inline-start:var(--select-text-gap)}.select-text img,.select-text ion-img,.select-text ion-icon,.select-text ion-thumbnail,.select-text ion-avatar{border-radius:var(--select-text-media-border-radius);width:var(--select-text-media-width);height:var(--select-text-media-height);border-width:var(--select-text-media-border-width);border-style:var(--select-text-media-border-style);border-color:var(--select-text-media-border-color)}.select-wrapper{-webkit-padding-start:var(--padding-start);padding-inline-start:var(--padding-start);-webkit-padding-end:var(--padding-end);padding-inline-end:var(--padding-end);padding-top:var(--padding-top);padding-bottom:var(--padding-bottom);border-radius:var(--border-radius);display:-ms-flexbox;display:flex;position:relative;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:stretch;align-items:stretch;-ms-flex-pack:justify;justify-content:space-between;height:inherit;min-height:inherit;-webkit-transition:background-color 15ms linear;transition:background-color 15ms linear;background:var(--background);line-height:normal;cursor:inherit;-webkit-box-sizing:border-box;box-sizing:border-box}.select-wrapper .select-placeholder{-webkit-transition:opacity 150ms cubic-bezier(0.4, 0, 0.2, 1);transition:opacity 150ms cubic-bezier(0.4, 0, 0.2, 1)}.select-control{display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;-ms-flex-direction:inherit;flex-direction:inherit;-ms-flex-align:center;align-items:center;-ms-flex-pack:inherit;justify-content:inherit;min-width:0}:host(.ion-touched.ion-invalid){--highlight-color:var(--highlight-color-invalid)}:host(.ion-valid){--highlight-color:var(--highlight-color-valid)}.select-bottom{-webkit-padding-start:var(--padding-start);padding-inline-start:var(--padding-start);-webkit-padding-end:var(--padding-end);padding-inline-end:var(--padding-end);padding-top:5px;padding-bottom:0;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;border-top:var(--border-width) var(--border-style) var(--border-color);font-size:0.75rem;white-space:normal}:host(.has-focus.ion-valid),:host(.select-expanded.ion-valid),:host(.ion-touched.ion-invalid),:host(.select-expanded.ion-touched.ion-invalid){--border-color:var(--highlight-color)}.select-bottom .error-text{display:none;color:var(--highlight-color-invalid)}.select-bottom .helper-text{display:block;color:var(--ion-color-step-700, var(--ion-text-color-step-300, #4d4d4d))}:host(.ion-touched.ion-invalid) .select-bottom .error-text{display:block}:host(.ion-touched.ion-invalid) .select-bottom .helper-text{display:none}.label-text-wrapper{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;min-width:0;max-width:200px;-webkit-transition:color 150ms cubic-bezier(0.4, 0, 0.2, 1), -webkit-transform 150ms cubic-bezier(0.4, 0, 0.2, 1);transition:color 150ms cubic-bezier(0.4, 0, 0.2, 1), -webkit-transform 150ms cubic-bezier(0.4, 0, 0.2, 1);transition:color 150ms cubic-bezier(0.4, 0, 0.2, 1), transform 150ms cubic-bezier(0.4, 0, 0.2, 1);transition:color 150ms cubic-bezier(0.4, 0, 0.2, 1), transform 150ms cubic-bezier(0.4, 0, 0.2, 1), -webkit-transform 150ms cubic-bezier(0.4, 0, 0.2, 1);pointer-events:none}:host(.skip-label-transition) .label-text-wrapper{-webkit-transition:none;transition:none}.label-text,::slotted([slot=label]){text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.label-text-wrapper-hidden,.select-outline-notch-hidden{display:none}.native-wrapper{display:-ms-flexbox;display:flex;-ms-flex-negative:100000;flex-shrink:100000;-ms-flex-align:center;align-items:center;-webkit-transition:opacity 150ms cubic-bezier(0.4, 0, 0.2, 1);transition:opacity 150ms cubic-bezier(0.4, 0, 0.2, 1);overflow:hidden}:host(.select-justify-space-between) .select-wrapper{-ms-flex-pack:justify;justify-content:space-between}:host(.select-justify-start) .select-wrapper{-ms-flex-pack:start;justify-content:start}:host(.select-justify-end) .select-wrapper{-ms-flex-pack:end;justify-content:end}:host(.select-label-placement-start) .select-wrapper{-ms-flex-direction:row;flex-direction:row}:host(.select-label-placement-start) .label-text-wrapper{-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:16px;margin-inline-end:16px;margin-top:0;margin-bottom:0}:host(.select-label-placement-end) .select-wrapper{-ms-flex-direction:row-reverse;flex-direction:row-reverse}:host(.select-label-placement-end) .label-text-wrapper{-webkit-margin-start:16px;margin-inline-start:16px;-webkit-margin-end:0;margin-inline-end:0;margin-top:0;margin-bottom:0}:host(.select-label-placement-fixed) .label-text-wrapper{-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:16px;margin-inline-end:16px;margin-top:0;margin-bottom:0}:host(.select-label-placement-fixed) .label-text-wrapper{-ms-flex:0 0 100px;flex:0 0 100px;width:100px;min-width:100px;max-width:200px}:host(.select-label-placement-stacked) .select-control,:host(.select-label-placement-floating) .select-control{-ms-flex-direction:column;flex-direction:column;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:start;align-items:start}:host(.select-label-placement-stacked) .label-text-wrapper,:host(.select-label-placement-floating) .label-text-wrapper{max-width:100%}:host(.select-ltr.select-label-placement-stacked) .label-text-wrapper,:host(.select-ltr.select-label-placement-floating) .label-text-wrapper{-webkit-transform-origin:left top;transform-origin:left top}:host(.select-rtl.select-label-placement-stacked) .label-text-wrapper,:host(.select-rtl.select-label-placement-floating) .label-text-wrapper{-webkit-transform-origin:right top;transform-origin:right top}:host(.select-label-placement-stacked) .native-wrapper,:host(.select-label-placement-floating) .native-wrapper{-ms-flex-positive:1;flex-grow:1;width:100%}:host(.select-label-placement-floating) .label-text-wrapper{-webkit-transform:translateY(100%) scale(1);transform:translateY(100%) scale(1)}:host(.select-label-placement-floating) .native-wrapper .select-placeholder{opacity:0}:host(.label-floating.select-label-placement-floating) .native-wrapper .select-placeholder{opacity:var(--placeholder-opacity)}:host(.label-floating) .label-text-wrapper{-webkit-transform:translateY(50%) scale(0.75);transform:translateY(50%) scale(0.75);max-width:calc(100% / 0.75)}.select-start,.select-end{display:-ms-flexbox;display:flex;position:relative;-ms-flex-negative:0;flex-shrink:0;-ms-flex-align:center;align-items:center}::slotted([slot=start]),::slotted([slot=end]){-ms-flex-negative:0;flex-shrink:0}::slotted([slot=start]:last-of-type){-webkit-margin-end:16px;margin-inline-end:16px;-webkit-margin-start:0;margin-inline-start:0}::slotted([slot=end]:first-of-type){-webkit-margin-start:16px;margin-inline-start:16px;-webkit-margin-end:0;margin-inline-end:0}:host(.select-fill-solid){--background:var(--ion-color-step-50, var(--ion-background-color-step-50, #f2f2f2));--border-color:var(--ion-color-step-500, var(--ion-background-color-step-500, gray));--border-radius:4px;--padding-start:16px;--padding-end:16px;min-height:56px}:host(.select-fill-solid) .select-wrapper{border-bottom:var(--border-width) var(--border-style) var(--border-color)}:host(.select-expanded.select-fill-solid.ion-valid),:host(.has-focus.select-fill-solid.ion-valid),:host(.select-fill-solid.ion-touched.ion-invalid){--border-color:var(--highlight-color)}:host(.select-fill-solid) .select-bottom{border-top:none}@media (any-hover: hover){:host(.select-fill-solid:hover){--background:var(--ion-color-step-100, var(--ion-background-color-step-100, #e6e6e6));--border-color:var(--ion-color-step-750, var(--ion-background-color-step-750, #404040))}}:host(.select-fill-solid.select-expanded),:host(.select-fill-solid.has-focus){--background:var(--ion-color-step-150, var(--ion-background-color-step-150, #d9d9d9));--border-color:var(--highlight-color)}:host(.select-fill-solid) .select-wrapper{border-start-start-radius:var(--border-radius);border-start-end-radius:var(--border-radius);border-end-end-radius:0px;border-end-start-radius:0px}:host(.label-floating.select-fill-solid) .label-text-wrapper{max-width:calc(100% / 0.75)}:host(.in-item.select-expanded.select-fill-solid) .select-wrapper .select-icon,:host(.in-item.has-focus.select-fill-solid) .select-wrapper .select-icon,:host(.in-item.has-focus.ion-valid.select-fill-solid) .select-wrapper .select-icon,:host(.in-item.ion-touched.ion-invalid.select-fill-solid) .select-wrapper .select-icon{color:var(--highlight-color)}:host(.select-fill-outline){--border-color:var(--ion-color-step-300, var(--ion-background-color-step-300, #b3b3b3));--border-radius:4px;--padding-start:16px;--padding-end:16px;--internal-start-container-adjustment:0px;min-height:56px}:host(.select-fill-outline.select-shape-round){--border-radius:28px;--padding-start:32px;--padding-end:32px}:host(.has-focus.select-fill-outline.ion-valid),:host(.select-fill-outline.ion-touched.ion-invalid){--border-color:var(--highlight-color)}@media (any-hover: hover){:host(.select-fill-outline:hover){--border-color:var(--ion-color-step-750, var(--ion-background-color-step-750, #404040))}}:host(.select-fill-outline.select-expanded),:host(.select-fill-outline.has-focus){--border-width:var(--highlight-height);--border-color:var(--highlight-color)}:host(.select-fill-outline) .select-bottom{border-top:none}:host(.select-fill-outline) .select-wrapper{border-bottom:none}:host(.select-ltr.select-fill-outline.select-label-placement-stacked) .label-text-wrapper,:host(.select-ltr.select-fill-outline.select-label-placement-floating) .label-text-wrapper{-webkit-transform-origin:left top;transform-origin:left top}:host(.select-rtl.select-fill-outline.select-label-placement-stacked) .label-text-wrapper,:host(.select-rtl.select-fill-outline.select-label-placement-floating) .label-text-wrapper{-webkit-transform-origin:right top;transform-origin:right top}:host(.select-fill-outline.select-label-placement-stacked) .label-text-wrapper,:host(.select-fill-outline.select-label-placement-floating) .label-text-wrapper{position:absolute;max-width:100%}:host(.select-fill-outline) .label-text-wrapper{position:relative;z-index:1}:host(.select-fill-outline:not(.label-floating)) .select-control{position:relative}:host(.label-floating.select-fill-outline) .label-text-wrapper{-webkit-transform:translate(var(--internal-start-container-adjustment, 0px), -32%) scale(0.75);transform:translate(var(--internal-start-container-adjustment, 0px), -32%) scale(0.75);margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;max-width:calc((100% - var(--padding-start) - var(--padding-end) - 8px) / 0.75)}:host(.select-fill-outline.select-label-placement-stacked) select,:host(.select-fill-outline.select-label-placement-floating) select{margin-left:0;margin-right:0;margin-top:6px;margin-bottom:6px}:host(.select-fill-outline) .select-outline-container{left:0;right:0;top:0;bottom:0;display:-ms-flexbox;display:flex;position:absolute;width:100%;height:100%}:host(.select-fill-outline) .select-outline-start,:host(.select-fill-outline) .select-outline-end{pointer-events:none}:host(.select-fill-outline) .select-outline-start,:host(.select-fill-outline) .select-outline-notch,:host(.select-fill-outline) .select-outline-end{border-top:var(--border-width) var(--border-style) var(--border-color);border-bottom:var(--border-width) var(--border-style) var(--border-color);-webkit-box-sizing:border-box;box-sizing:border-box}:host(.select-fill-outline) .select-outline-notch{max-width:calc(100% - var(--padding-start) - var(--padding-end))}:host(.select-fill-outline) .notch-spacer{-webkit-padding-end:8px;padding-inline-end:8px;font-size:calc(1em * 0.75);opacity:0;pointer-events:none}:host(.select-fill-outline) .select-outline-start{-webkit-border-start:var(--border-width) var(--border-style) var(--border-color);border-inline-start:var(--border-width) var(--border-style) var(--border-color);border-start-start-radius:var(--border-radius);border-start-end-radius:0px;border-end-end-radius:0px;border-end-start-radius:var(--border-radius);width:calc(var(--padding-start) - 4px)}:host(.select-fill-outline) .select-outline-end{-webkit-border-end:var(--border-width) var(--border-style) var(--border-color);border-inline-end:var(--border-width) var(--border-style) var(--border-color);border-start-start-radius:0px;border-start-end-radius:var(--border-radius);border-end-end-radius:var(--border-radius);border-end-start-radius:0px;-ms-flex-positive:1;flex-grow:1}:host(.label-floating.select-fill-outline) .select-outline-notch{border-top:none}:host(.in-item.select-expanded.select-fill-outline) .select-wrapper .select-icon,:host(.in-item.has-focus.select-fill-outline) .select-wrapper .select-icon,:host(.in-item.has-focus.ion-valid.select-fill-outline) .select-wrapper .select-icon,:host(.in-item.ion-touched.ion-invalid.select-fill-outline) .select-wrapper .select-icon{color:var(--highlight-color)}:host{--border-width:1px;--border-color:var(--ion-item-border-color, var(--ion-border-color, var(--ion-color-step-150, var(--ion-background-color-step-150, rgba(0, 0, 0, 0.13)))));--highlight-height:2px}:host(.select-label-placement-floating.select-expanded) .label-text-wrapper,:host(.select-label-placement-floating.has-focus) .label-text-wrapper,:host(.select-label-placement-stacked.select-expanded) .label-text-wrapper,:host(.select-label-placement-stacked.has-focus) .label-text-wrapper{color:var(--highlight-color)}:host(.has-focus.select-label-placement-floating.ion-valid) .label-text-wrapper,:host(.select-label-placement-floating.ion-touched.ion-invalid) .label-text-wrapper,:host(.has-focus.select-label-placement-stacked.ion-valid) .label-text-wrapper,:host(.select-label-placement-stacked.ion-touched.ion-invalid) .label-text-wrapper{color:var(--highlight-color)}.select-highlight{bottom:-1px;position:absolute;width:100%;height:var(--highlight-height);-webkit-transform:scale(0);transform:scale(0);-webkit-transition:-webkit-transform 200ms;transition:-webkit-transform 200ms;transition:transform 200ms;transition:transform 200ms, -webkit-transform 200ms;background:var(--highlight-color)}.select-highlight{inset-inline-start:0}:host(.select-expanded) .select-highlight,:host(.has-focus) .select-highlight{-webkit-transform:scale(1);transform:scale(1)}:host(.in-item) .select-highlight{bottom:0}:host(.in-item) .select-highlight{inset-inline-start:0}.select-icon{width:0.8125rem;-webkit-transition:-webkit-transform 0.15s cubic-bezier(0.4, 0, 0.2, 1);transition:-webkit-transform 0.15s cubic-bezier(0.4, 0, 0.2, 1);transition:transform 0.15s cubic-bezier(0.4, 0, 0.2, 1);transition:transform 0.15s cubic-bezier(0.4, 0, 0.2, 1), -webkit-transform 0.15s cubic-bezier(0.4, 0, 0.2, 1);color:var(--ion-color-step-500, var(--ion-text-color-step-500, gray))}:host(.select-expanded:not(.has-expanded-icon)) .select-icon{-webkit-transform:rotate(180deg);transform:rotate(180deg)}:host(.in-item.select-expanded) .select-wrapper .select-icon,:host(.in-item.has-focus) .select-wrapper .select-icon,:host(.in-item.has-focus.ion-valid) .select-wrapper .select-icon,:host(.in-item.ion-touched.ion-invalid) .select-wrapper .select-icon{color:var(--ion-color-step-500, var(--ion-text-color-step-500, gray))}:host(.select-expanded) .select-wrapper .select-icon,:host(.has-focus.ion-valid) .select-wrapper .select-icon,:host(.ion-touched.ion-invalid) .select-wrapper .select-icon,:host(.has-focus) .select-wrapper .select-icon{color:var(--highlight-color)}:host(.select-shape-round){--border-radius:16px}:host(.select-disabled){opacity:0.38}::slotted(ion-button[slot=start].button-has-icon-only),::slotted(ion-button[slot=end].button-has-icon-only){--border-radius:50%;--padding-start:8px;--padding-end:8px;--padding-top:8px;--padding-bottom:8px;aspect-ratio:1;min-height:40px}`;
|
|
22
|
+
const selectMdCss = () => `:host{--padding-top:0px;--padding-end:0px;--padding-bottom:0px;--padding-start:0px;--placeholder-color:currentColor;--placeholder-opacity:var(--ion-placeholder-opacity, 0.6);--background:transparent;--border-style:solid;--highlight-color-focused:var(--ion-color-primary, #0054e9);--highlight-color-valid:var(--ion-color-success, #2dd55b);--highlight-color-invalid:var(--ion-color-danger, #c5000f);--highlight-color:var(--highlight-color-focused);display:block;position:relative;width:100%;min-height:44px;font-family:var(--ion-font-family, inherit);white-space:nowrap;cursor:pointer;z-index:2}:host(.select-label-placement-floating),:host(.select-label-placement-stacked){min-height:56px}:host(.ion-color){--highlight-color-focused:var(--ion-color-base)}:host(.in-item){-ms-flex:1 1 0px;flex:1 1 0}:host(.select-disabled){pointer-events:none}:host(.has-focus) button{border:2px solid #5e9ed6}:host([slot=start]),:host([slot=end]){-ms-flex:initial;flex:initial;width:auto}.select-placeholder{color:var(--placeholder-color);opacity:var(--placeholder-opacity)}button{position:absolute;top:0;left:0;right:0;bottom:0;width:100%;height:100%;margin:0;padding:0;border:0;outline:0;clip:rect(0 0 0 0);opacity:0;overflow:hidden;-webkit-appearance:none;-moz-appearance:none}.select-icon{-webkit-margin-start:4px;margin-inline-start:4px;-webkit-margin-end:0;margin-inline-end:0;margin-top:0;margin-bottom:0;position:relative;-ms-flex-negative:0;flex-shrink:0}:host(.in-item-color) .select-icon{color:inherit}:host(.select-label-placement-stacked) .select-icon,:host(.select-label-placement-floating) .select-icon{position:absolute;height:100%}:host(.select-ltr.select-label-placement-stacked) .select-icon,:host(.select-ltr.select-label-placement-floating) .select-icon{right:var(--padding-end, 0)}:host(.select-rtl.select-label-placement-stacked) .select-icon,:host(.select-rtl.select-label-placement-floating) .select-icon{left:var(--padding-start, 0)}.select-text{-ms-flex:1;flex:1;min-width:16px;font-size:inherit;text-overflow:ellipsis;white-space:inherit;overflow:hidden}.select-wrapper{-webkit-padding-start:var(--padding-start);padding-inline-start:var(--padding-start);-webkit-padding-end:var(--padding-end);padding-inline-end:var(--padding-end);padding-top:var(--padding-top);padding-bottom:var(--padding-bottom);border-radius:var(--border-radius);display:-ms-flexbox;display:flex;position:relative;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;height:inherit;min-height:inherit;-webkit-transition:background-color 15ms linear;transition:background-color 15ms linear;background:var(--background);line-height:normal;cursor:inherit;-webkit-box-sizing:border-box;box-sizing:border-box}.select-wrapper .select-placeholder{-webkit-transition:opacity 150ms cubic-bezier(0.4, 0, 0.2, 1);transition:opacity 150ms cubic-bezier(0.4, 0, 0.2, 1)}.select-wrapper-inner{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;overflow:hidden}:host(.select-label-placement-stacked) .select-wrapper-inner,:host(.select-label-placement-floating) .select-wrapper-inner{-ms-flex-positive:1;flex-grow:1}:host(.ion-touched.ion-invalid){--highlight-color:var(--highlight-color-invalid)}:host(.ion-valid){--highlight-color:var(--highlight-color-valid)}.select-bottom{-webkit-padding-start:var(--padding-start);padding-inline-start:var(--padding-start);-webkit-padding-end:var(--padding-end);padding-inline-end:var(--padding-end);padding-top:5px;padding-bottom:0;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;border-top:var(--border-width) var(--border-style) var(--border-color);font-size:0.75rem;white-space:normal}:host(.has-focus.ion-valid),:host(.select-expanded.ion-valid),:host(.ion-touched.ion-invalid),:host(.select-expanded.ion-touched.ion-invalid){--border-color:var(--highlight-color)}.select-bottom .error-text{display:none;color:var(--highlight-color-invalid)}.select-bottom .helper-text{display:block;color:var(--ion-color-step-700, var(--ion-text-color-step-300, #4d4d4d))}:host(.ion-touched.ion-invalid) .select-bottom .error-text{display:block}:host(.ion-touched.ion-invalid) .select-bottom .helper-text{display:none}.label-text-wrapper{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;max-width:200px;-webkit-transition:color 150ms cubic-bezier(0.4, 0, 0.2, 1), -webkit-transform 150ms cubic-bezier(0.4, 0, 0.2, 1);transition:color 150ms cubic-bezier(0.4, 0, 0.2, 1), -webkit-transform 150ms cubic-bezier(0.4, 0, 0.2, 1);transition:color 150ms cubic-bezier(0.4, 0, 0.2, 1), transform 150ms cubic-bezier(0.4, 0, 0.2, 1);transition:color 150ms cubic-bezier(0.4, 0, 0.2, 1), transform 150ms cubic-bezier(0.4, 0, 0.2, 1), -webkit-transform 150ms cubic-bezier(0.4, 0, 0.2, 1);pointer-events:none}.label-text,::slotted([slot=label]){text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.label-text-wrapper-hidden,.select-outline-notch-hidden{display:none}.native-wrapper{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-webkit-transition:opacity 150ms cubic-bezier(0.4, 0, 0.2, 1);transition:opacity 150ms cubic-bezier(0.4, 0, 0.2, 1);overflow:hidden}:host(.select-justify-space-between) .select-wrapper{-ms-flex-pack:justify;justify-content:space-between}:host(.select-justify-start) .select-wrapper{-ms-flex-pack:start;justify-content:start}:host(.select-justify-end) .select-wrapper{-ms-flex-pack:end;justify-content:end}:host(.select-label-placement-start) .select-wrapper{-ms-flex-direction:row;flex-direction:row}:host(.select-label-placement-start) .label-text-wrapper{-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:16px;margin-inline-end:16px;margin-top:0;margin-bottom:0}:host(.select-label-placement-end) .select-wrapper{-ms-flex-direction:row-reverse;flex-direction:row-reverse}:host(.select-label-placement-end) .label-text-wrapper{-webkit-margin-start:16px;margin-inline-start:16px;-webkit-margin-end:0;margin-inline-end:0;margin-top:0;margin-bottom:0}:host(.select-label-placement-fixed) .label-text-wrapper{-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:16px;margin-inline-end:16px;margin-top:0;margin-bottom:0}:host(.select-label-placement-fixed) .label-text-wrapper{-ms-flex:0 0 100px;flex:0 0 100px;width:100px;min-width:100px;max-width:200px}:host(.select-label-placement-stacked) .select-wrapper,:host(.select-label-placement-floating) .select-wrapper{-ms-flex-direction:column;flex-direction:column;-ms-flex-align:start;align-items:start}:host(.select-label-placement-stacked) .label-text-wrapper,:host(.select-label-placement-floating) .label-text-wrapper{max-width:100%}:host(.select-ltr.select-label-placement-stacked) .label-text-wrapper,:host(.select-ltr.select-label-placement-floating) .label-text-wrapper{-webkit-transform-origin:left top;transform-origin:left top}:host(.select-rtl.select-label-placement-stacked) .label-text-wrapper,:host(.select-rtl.select-label-placement-floating) .label-text-wrapper{-webkit-transform-origin:right top;transform-origin:right top}:host(.select-label-placement-stacked) .native-wrapper,:host(.select-label-placement-floating) .native-wrapper{margin-left:0;margin-right:0;margin-top:1px;margin-bottom:0;-ms-flex-positive:1;flex-grow:1;width:100%}:host(.select-label-placement-floating) .label-text-wrapper{-webkit-transform:translateY(100%) scale(1);transform:translateY(100%) scale(1)}:host(.select-label-placement-floating:not(.label-floating)) .native-wrapper .select-placeholder{opacity:0}:host(.select-expanded.select-label-placement-floating) .native-wrapper .select-placeholder,:host(.has-focus.select-label-placement-floating) .native-wrapper .select-placeholder,:host(.has-value.select-label-placement-floating) .native-wrapper .select-placeholder{opacity:1}:host(.label-floating) .label-text-wrapper{-webkit-transform:translateY(50%) scale(0.75);transform:translateY(50%) scale(0.75);max-width:calc(100% / 0.75)}::slotted([slot=start]),::slotted([slot=end]){-ms-flex-negative:0;flex-shrink:0}::slotted([slot=start]:last-of-type){-webkit-margin-end:16px;margin-inline-end:16px;-webkit-margin-start:0;margin-inline-start:0}::slotted([slot=end]:first-of-type){-webkit-margin-start:16px;margin-inline-start:16px;-webkit-margin-end:0;margin-inline-end:0}:host(.select-fill-solid){--background:var(--ion-color-step-50, var(--ion-background-color-step-50, #f2f2f2));--border-color:var(--ion-color-step-500, var(--ion-background-color-step-500, gray));--border-radius:4px;--padding-start:16px;--padding-end:16px;min-height:56px}:host(.select-fill-solid) .select-wrapper{border-bottom:var(--border-width) var(--border-style) var(--border-color)}:host(.select-expanded.select-fill-solid.ion-valid),:host(.has-focus.select-fill-solid.ion-valid),:host(.select-fill-solid.ion-touched.ion-invalid){--border-color:var(--highlight-color)}:host(.select-fill-solid) .select-bottom{border-top:none}@media (any-hover: hover){:host(.select-fill-solid:hover){--background:var(--ion-color-step-100, var(--ion-background-color-step-100, #e6e6e6));--border-color:var(--ion-color-step-750, var(--ion-background-color-step-750, #404040))}}:host(.select-fill-solid.select-expanded),:host(.select-fill-solid.has-focus){--background:var(--ion-color-step-150, var(--ion-background-color-step-150, #d9d9d9));--border-color:var(--highlight-color)}:host(.select-fill-solid) .select-wrapper{border-start-start-radius:var(--border-radius);border-start-end-radius:var(--border-radius);border-end-end-radius:0px;border-end-start-radius:0px}:host(.label-floating.select-fill-solid) .label-text-wrapper{max-width:calc(100% / 0.75)}:host(.in-item.select-expanded.select-fill-solid) .select-wrapper .select-icon,:host(.in-item.has-focus.select-fill-solid) .select-wrapper .select-icon,:host(.in-item.has-focus.ion-valid.select-fill-solid) .select-wrapper .select-icon,:host(.in-item.ion-touched.ion-invalid.select-fill-solid) .select-wrapper .select-icon{color:var(--highlight-color)}:host(.select-fill-outline){--border-color:var(--ion-color-step-300, var(--ion-background-color-step-300, #b3b3b3));--border-radius:4px;--padding-start:16px;--padding-end:16px;min-height:56px}:host(.select-fill-outline.select-shape-round){--border-radius:28px;--padding-start:32px;--padding-end:32px}:host(.has-focus.select-fill-outline.ion-valid),:host(.select-fill-outline.ion-touched.ion-invalid){--border-color:var(--highlight-color)}@media (any-hover: hover){:host(.select-fill-outline:hover){--border-color:var(--ion-color-step-750, var(--ion-background-color-step-750, #404040))}}:host(.select-fill-outline.select-expanded),:host(.select-fill-outline.has-focus){--border-width:var(--highlight-height);--border-color:var(--highlight-color)}:host(.select-fill-outline) .select-bottom{border-top:none}:host(.select-fill-outline) .select-wrapper{border-bottom:none}:host(.select-ltr.select-fill-outline.select-label-placement-stacked) .label-text-wrapper,:host(.select-ltr.select-fill-outline.select-label-placement-floating) .label-text-wrapper{-webkit-transform-origin:left top;transform-origin:left top}:host(.select-rtl.select-fill-outline.select-label-placement-stacked) .label-text-wrapper,:host(.select-rtl.select-fill-outline.select-label-placement-floating) .label-text-wrapper{-webkit-transform-origin:right top;transform-origin:right top}:host(.select-fill-outline.select-label-placement-stacked) .label-text-wrapper,:host(.select-fill-outline.select-label-placement-floating) .label-text-wrapper{position:absolute;max-width:calc(100% - var(--padding-start) - var(--padding-end))}:host(.select-fill-outline) .label-text-wrapper{position:relative;z-index:1}:host(.label-floating.select-fill-outline) .label-text-wrapper{-webkit-transform:translateY(-32%) scale(0.75);transform:translateY(-32%) scale(0.75);margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;max-width:calc((100% - var(--padding-start) - var(--padding-end) - 8px) / 0.75)}:host(.select-fill-outline.select-label-placement-stacked) select,:host(.select-fill-outline.select-label-placement-floating) select{margin-left:0;margin-right:0;margin-top:6px;margin-bottom:6px}:host(.select-fill-outline) .select-outline-container{left:0;right:0;top:0;bottom:0;display:-ms-flexbox;display:flex;position:absolute;width:100%;height:100%}:host(.select-fill-outline) .select-outline-start,:host(.select-fill-outline) .select-outline-end{pointer-events:none}:host(.select-fill-outline) .select-outline-start,:host(.select-fill-outline) .select-outline-notch,:host(.select-fill-outline) .select-outline-end{border-top:var(--border-width) var(--border-style) var(--border-color);border-bottom:var(--border-width) var(--border-style) var(--border-color);-webkit-box-sizing:border-box;box-sizing:border-box}:host(.select-fill-outline) .select-outline-notch{max-width:calc(100% - var(--padding-start) - var(--padding-end))}:host(.select-fill-outline) .notch-spacer{-webkit-padding-end:8px;padding-inline-end:8px;font-size:calc(1em * 0.75);opacity:0;pointer-events:none}:host(.select-fill-outline) .select-outline-start{-webkit-border-start:var(--border-width) var(--border-style) var(--border-color);border-inline-start:var(--border-width) var(--border-style) var(--border-color)}:host(.select-fill-outline) .select-outline-start{border-start-start-radius:var(--border-radius);border-start-end-radius:0px;border-end-end-radius:0px;border-end-start-radius:var(--border-radius)}:host(.select-fill-outline) .select-outline-start{width:calc(var(--padding-start) - 4px)}:host(.select-fill-outline) .select-outline-end{-webkit-border-end:var(--border-width) var(--border-style) var(--border-color);border-inline-end:var(--border-width) var(--border-style) var(--border-color)}:host(.select-fill-outline) .select-outline-end{border-start-start-radius:0px;border-start-end-radius:var(--border-radius);border-end-end-radius:var(--border-radius);border-end-start-radius:0px}:host(.select-fill-outline) .select-outline-end{-ms-flex-positive:1;flex-grow:1}:host(.label-floating.select-fill-outline) .select-outline-notch{border-top:none}:host(.in-item.select-expanded.select-fill-outline) .select-wrapper .select-icon,:host(.in-item.has-focus.select-fill-outline) .select-wrapper .select-icon,:host(.in-item.has-focus.ion-valid.select-fill-outline) .select-wrapper .select-icon,:host(.in-item.ion-touched.ion-invalid.select-fill-outline) .select-wrapper .select-icon{color:var(--highlight-color)}:host{--border-width:1px;--border-color:var(--ion-item-border-color, var(--ion-border-color, var(--ion-color-step-150, var(--ion-background-color-step-150, rgba(0, 0, 0, 0.13)))));--highlight-height:2px}:host(.select-label-placement-floating.select-expanded) .label-text-wrapper,:host(.select-label-placement-floating.has-focus) .label-text-wrapper,:host(.select-label-placement-stacked.select-expanded) .label-text-wrapper,:host(.select-label-placement-stacked.has-focus) .label-text-wrapper{color:var(--highlight-color)}:host(.has-focus.select-label-placement-floating.ion-valid) .label-text-wrapper,:host(.select-label-placement-floating.ion-touched.ion-invalid) .label-text-wrapper,:host(.has-focus.select-label-placement-stacked.ion-valid) .label-text-wrapper,:host(.select-label-placement-stacked.ion-touched.ion-invalid) .label-text-wrapper{color:var(--highlight-color)}.select-highlight{bottom:-1px;position:absolute;width:100%;height:var(--highlight-height);-webkit-transform:scale(0);transform:scale(0);-webkit-transition:-webkit-transform 200ms;transition:-webkit-transform 200ms;transition:transform 200ms;transition:transform 200ms, -webkit-transform 200ms;background:var(--highlight-color)}.select-highlight{inset-inline-start:0}:host(.select-expanded) .select-highlight,:host(.has-focus) .select-highlight{-webkit-transform:scale(1);transform:scale(1)}:host(.in-item) .select-highlight{bottom:0}:host(.in-item) .select-highlight{inset-inline-start:0}.select-icon{width:0.8125rem;-webkit-transition:-webkit-transform 0.15s cubic-bezier(0.4, 0, 0.2, 1);transition:-webkit-transform 0.15s cubic-bezier(0.4, 0, 0.2, 1);transition:transform 0.15s cubic-bezier(0.4, 0, 0.2, 1);transition:transform 0.15s cubic-bezier(0.4, 0, 0.2, 1), -webkit-transform 0.15s cubic-bezier(0.4, 0, 0.2, 1);color:var(--ion-color-step-500, var(--ion-text-color-step-500, gray))}:host(.select-expanded:not(.has-expanded-icon)) .select-icon{-webkit-transform:rotate(180deg);transform:rotate(180deg)}:host(.in-item.select-expanded) .select-wrapper .select-icon,:host(.in-item.has-focus) .select-wrapper .select-icon,:host(.in-item.has-focus.ion-valid) .select-wrapper .select-icon,:host(.in-item.ion-touched.ion-invalid) .select-wrapper .select-icon{color:var(--ion-color-step-500, var(--ion-text-color-step-500, gray))}:host(.select-expanded) .select-wrapper .select-icon,:host(.has-focus.ion-valid) .select-wrapper .select-icon,:host(.ion-touched.ion-invalid) .select-wrapper .select-icon,:host(.has-focus) .select-wrapper .select-icon{color:var(--highlight-color)}:host(.select-shape-round){--border-radius:16px}:host(.select-label-placement-stacked) .select-wrapper-inner,:host(.select-label-placement-floating) .select-wrapper-inner{width:calc(100% - 0.8125rem - 4px)}:host(.select-disabled){opacity:0.38}::slotted(ion-button[slot=start].button-has-icon-only),::slotted(ion-button[slot=end].button-has-icon-only){--border-radius:50%;--padding-start:8px;--padding-end:8px;--padding-top:8px;--padding-bottom:8px;aspect-ratio:1;min-height:40px}`;
|
|
27
23
|
|
|
28
24
|
const Select = class {
|
|
29
25
|
constructor(hostRef) {
|
|
@@ -34,240 +30,141 @@ const Select = class {
|
|
|
34
30
|
this.ionFocus = createEvent(this, "ionFocus", 7);
|
|
35
31
|
this.ionBlur = createEvent(this, "ionBlur", 7);
|
|
36
32
|
this.ionStyle = createEvent(this, "ionStyle", 7);
|
|
33
|
+
this.inputId = `ion-sel-${selectIds++}`;
|
|
34
|
+
this.helperTextId = `${this.inputId}-helper-text`;
|
|
35
|
+
this.errorTextId = `${this.inputId}-error-text`;
|
|
36
|
+
this.inheritedAttributes = {};
|
|
37
|
+
this.isExpanded = false;
|
|
38
|
+
/**
|
|
39
|
+
* The `hasFocus` state ensures the focus class is
|
|
40
|
+
* added regardless of how the element is focused.
|
|
41
|
+
* The `ion-focused` class only applies when focused
|
|
42
|
+
* via tabbing, not by clicking.
|
|
43
|
+
* The `has-focus` logic was added to ensure the class
|
|
44
|
+
* is applied in both cases.
|
|
45
|
+
*/
|
|
46
|
+
this.hasFocus = false;
|
|
47
|
+
/**
|
|
48
|
+
* Track validation state for proper aria-live announcements.
|
|
49
|
+
*/
|
|
50
|
+
this.isInvalid = false;
|
|
51
|
+
/**
|
|
52
|
+
* The text to display on the cancel button.
|
|
53
|
+
*/
|
|
54
|
+
this.cancelText = 'Cancel';
|
|
55
|
+
/**
|
|
56
|
+
* If `true`, the user cannot interact with the select.
|
|
57
|
+
*/
|
|
58
|
+
this.disabled = false;
|
|
59
|
+
/**
|
|
60
|
+
* The interface the select should use: `action-sheet`, `popover`, `alert`, or `modal`.
|
|
61
|
+
*/
|
|
62
|
+
this.interface = 'alert';
|
|
63
|
+
/**
|
|
64
|
+
* Any additional options that the `alert`, `action-sheet` or `popover` interface
|
|
65
|
+
* can take. See the [ion-alert docs](./alert), the
|
|
66
|
+
* [ion-action-sheet docs](./action-sheet), the
|
|
67
|
+
* [ion-popover docs](./popover), and the [ion-modal docs](./modal) for the
|
|
68
|
+
* create options for each interface.
|
|
69
|
+
*
|
|
70
|
+
* Note: `interfaceOptions` will not override `inputs` or `buttons` with the `alert` interface.
|
|
71
|
+
*/
|
|
72
|
+
this.interfaceOptions = {};
|
|
73
|
+
/**
|
|
74
|
+
* Where to place the label relative to the select.
|
|
75
|
+
* `"start"`: The label will appear to the left of the select in LTR and to the right in RTL.
|
|
76
|
+
* `"end"`: The label will appear to the right of the select in LTR and to the left in RTL.
|
|
77
|
+
* `"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.
|
|
78
|
+
* `"stacked"`: The label will appear smaller and above the select regardless even when the select is blurred or has no value.
|
|
79
|
+
* `"fixed"`: The label has the same behavior as `"start"` except it also has a fixed width. Long text will be truncated with ellipses ("...").
|
|
80
|
+
* When using `"floating"` or `"stacked"` we recommend initializing the select with either a `value` or a `placeholder`.
|
|
81
|
+
*/
|
|
82
|
+
this.labelPlacement = 'start';
|
|
83
|
+
/**
|
|
84
|
+
* If `true`, the select can accept multiple values.
|
|
85
|
+
*/
|
|
86
|
+
this.multiple = false;
|
|
87
|
+
/**
|
|
88
|
+
* The name of the control, which is submitted with the form data.
|
|
89
|
+
*/
|
|
90
|
+
this.name = this.inputId;
|
|
91
|
+
/**
|
|
92
|
+
* The text to display on the ok button.
|
|
93
|
+
*/
|
|
94
|
+
this.okText = 'OK';
|
|
95
|
+
/**
|
|
96
|
+
* If true, screen readers will announce it as a required field. This property
|
|
97
|
+
* works only for accessibility purposes, it will not prevent the form from
|
|
98
|
+
* submitting if the value is invalid.
|
|
99
|
+
*/
|
|
100
|
+
this.required = false;
|
|
101
|
+
this.onClick = (ev) => {
|
|
102
|
+
const target = ev.target;
|
|
103
|
+
const closestSlot = target.closest('[slot="start"], [slot="end"]');
|
|
104
|
+
if (target === this.el || closestSlot === null) {
|
|
105
|
+
this.setFocus();
|
|
106
|
+
this.open(ev);
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
/**
|
|
110
|
+
* Prevent clicks to the start/end slots from opening the select.
|
|
111
|
+
* We ensure the target isn't this element in case the select is slotted
|
|
112
|
+
* in, for example, an item. This would prevent the select from ever
|
|
113
|
+
* being opened since the element itself has slot="start"/"end".
|
|
114
|
+
*
|
|
115
|
+
* Clicking a slotted element also causes a click
|
|
116
|
+
* on the <label> element (since it wraps the slots).
|
|
117
|
+
* Clicking <label> dispatches another click event on
|
|
118
|
+
* the native form control that then bubbles up to this
|
|
119
|
+
* listener. This additional event targets the host
|
|
120
|
+
* element, so the select overlay is opened.
|
|
121
|
+
*
|
|
122
|
+
* When the slotted elements are clicked (and therefore
|
|
123
|
+
* the ancestor <label> element) we want to prevent the label
|
|
124
|
+
* from dispatching another click event.
|
|
125
|
+
*
|
|
126
|
+
* Do not call stopPropagation() because this will cause
|
|
127
|
+
* click handlers on the slotted elements to never fire in React.
|
|
128
|
+
* When developers do onClick in React a native "click" listener
|
|
129
|
+
* is added on the root element, not the slotted element. When that
|
|
130
|
+
* native click listener fires, React then dispatches the synthetic
|
|
131
|
+
* click event on the slotted element. However, if stopPropagation
|
|
132
|
+
* is called then the native click event will never bubble up
|
|
133
|
+
* to the root element.
|
|
134
|
+
*/
|
|
135
|
+
ev.preventDefault();
|
|
136
|
+
}
|
|
137
|
+
};
|
|
138
|
+
this.onFocus = () => {
|
|
139
|
+
this.hasFocus = true;
|
|
140
|
+
this.ionFocus.emit();
|
|
141
|
+
};
|
|
142
|
+
this.onBlur = () => {
|
|
143
|
+
this.hasFocus = false;
|
|
144
|
+
this.ionBlur.emit();
|
|
145
|
+
};
|
|
146
|
+
/**
|
|
147
|
+
* Stops propagation when the label is clicked,
|
|
148
|
+
* otherwise, two clicks will be triggered.
|
|
149
|
+
*/
|
|
150
|
+
this.onLabelClick = (ev) => {
|
|
151
|
+
// Only stop propagation if the click was directly on the label
|
|
152
|
+
// and not on the input or other child elements
|
|
153
|
+
if (ev.target === ev.currentTarget) {
|
|
154
|
+
ev.stopPropagation();
|
|
155
|
+
}
|
|
156
|
+
};
|
|
37
157
|
}
|
|
38
|
-
inputId = `ion-sel-${selectIds++}`;
|
|
39
|
-
helperTextId = `${this.inputId}-helper-text`;
|
|
40
|
-
errorTextId = `${this.inputId}-error-text`;
|
|
41
|
-
overlay;
|
|
42
|
-
focusEl;
|
|
43
|
-
mutationO;
|
|
44
|
-
inheritedAttributes = {};
|
|
45
|
-
slotMutationController;
|
|
46
|
-
nativeWrapperEl;
|
|
47
|
-
notchSpacerEl;
|
|
48
|
-
validationObserver;
|
|
49
|
-
notchController;
|
|
50
|
-
startContainerController;
|
|
51
|
-
startContainerEl;
|
|
52
|
-
customHTMLEnabled = config.get('innerHTMLTemplatesEnabled', ENABLE_HTML_CONTENT_DEFAULT);
|
|
53
|
-
get el() { return getElement(this); }
|
|
54
|
-
isExpanded = false;
|
|
55
|
-
/**
|
|
56
|
-
* The `hasFocus` state ensures the focus class is
|
|
57
|
-
* added regardless of how the element is focused.
|
|
58
|
-
* The `ion-focused` class only applies when focused
|
|
59
|
-
* via tabbing, not by clicking.
|
|
60
|
-
* The `has-focus` logic was added to ensure the class
|
|
61
|
-
* is applied in both cases.
|
|
62
|
-
*/
|
|
63
|
-
hasFocus = false;
|
|
64
|
-
/**
|
|
65
|
-
* Track validation state for proper aria-live announcements.
|
|
66
|
-
*/
|
|
67
|
-
isInvalid = false;
|
|
68
|
-
hintTextId;
|
|
69
|
-
/**
|
|
70
|
-
* The text to display on the cancel button.
|
|
71
|
-
*/
|
|
72
|
-
cancelText = 'Cancel';
|
|
73
|
-
/**
|
|
74
|
-
* The color to use from your application's color palette.
|
|
75
|
-
* Default options are: `"primary"`, `"secondary"`, `"tertiary"`, `"success"`, `"warning"`, `"danger"`, `"light"`, `"medium"`, and `"dark"`.
|
|
76
|
-
* For more information on colors, see [theming](/docs/theming/basics).
|
|
77
|
-
*
|
|
78
|
-
* This property is only available when using the modern select syntax.
|
|
79
|
-
*/
|
|
80
|
-
color;
|
|
81
|
-
/**
|
|
82
|
-
* This property allows developers to specify a custom function or property
|
|
83
|
-
* name for comparing objects when determining the selected option in the
|
|
84
|
-
* ion-select. When not specified, the default behavior will use strict
|
|
85
|
-
* equality (===) for comparison.
|
|
86
|
-
*/
|
|
87
|
-
compareWith;
|
|
88
|
-
/**
|
|
89
|
-
* If `true`, the user cannot interact with the select.
|
|
90
|
-
*/
|
|
91
|
-
disabled = false;
|
|
92
|
-
/**
|
|
93
|
-
* The fill for the item. If `"solid"` the item will have a background. If
|
|
94
|
-
* `"outline"` the item will be transparent with a border. Only available in `md` mode.
|
|
95
|
-
*/
|
|
96
|
-
fill;
|
|
97
|
-
/**
|
|
98
|
-
* Text that is placed under the select and displayed when an error is detected.
|
|
99
|
-
*/
|
|
100
|
-
errorText;
|
|
101
|
-
/**
|
|
102
|
-
* Text that is placed under the select and displayed when no error is detected.
|
|
103
|
-
*/
|
|
104
|
-
helperText;
|
|
105
|
-
/**
|
|
106
|
-
* The interface the select should use: `action-sheet`, `popover`, `alert`, or `modal`.
|
|
107
|
-
*/
|
|
108
|
-
interface = 'alert';
|
|
109
|
-
/**
|
|
110
|
-
* Any additional options that the `alert`, `action-sheet` or `popover` interface
|
|
111
|
-
* can take. See the [ion-alert docs](./alert), the
|
|
112
|
-
* [ion-action-sheet docs](./action-sheet), the
|
|
113
|
-
* [ion-popover docs](./popover), and the [ion-modal docs](./modal) for the
|
|
114
|
-
* create options for each interface.
|
|
115
|
-
*
|
|
116
|
-
* Note: `interfaceOptions` will not override `inputs` or `buttons` with the `alert` interface.
|
|
117
|
-
*/
|
|
118
|
-
interfaceOptions = {};
|
|
119
|
-
/**
|
|
120
|
-
* How to pack the label and select within a line.
|
|
121
|
-
* `justify` does not apply when the label and select
|
|
122
|
-
* are on different lines when `labelPlacement` is set to
|
|
123
|
-
* `"floating"` or `"stacked"`.
|
|
124
|
-
* `"start"`: The label and select will appear on the left in LTR and
|
|
125
|
-
* on the right in RTL.
|
|
126
|
-
* `"end"`: The label and select will appear on the right in LTR and
|
|
127
|
-
* on the left in RTL.
|
|
128
|
-
* `"space-between"`: The label and select will appear on opposite
|
|
129
|
-
* ends of the line with space between the two elements.
|
|
130
|
-
*/
|
|
131
|
-
justify;
|
|
132
|
-
/**
|
|
133
|
-
* The visible label associated with the select.
|
|
134
|
-
*
|
|
135
|
-
* Use this if you need to render a plaintext label.
|
|
136
|
-
*
|
|
137
|
-
* The `label` property will take priority over the `label` slot if both are used.
|
|
138
|
-
*/
|
|
139
|
-
label;
|
|
140
|
-
/**
|
|
141
|
-
* Where to place the label relative to the select.
|
|
142
|
-
* `"start"`: The label will appear to the left of the select in LTR and to the right in RTL.
|
|
143
|
-
* `"end"`: The label will appear to the right of the select in LTR and to the left in RTL.
|
|
144
|
-
* `"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.
|
|
145
|
-
* `"stacked"`: The label will appear smaller and above the select regardless even when the select is blurred or has no value.
|
|
146
|
-
* `"fixed"`: The label has the same behavior as `"start"` except it also has a fixed width. Long text will be truncated with ellipses ("...").
|
|
147
|
-
* When using `"floating"` or `"stacked"` we recommend initializing the select with either a `value` or a `placeholder`.
|
|
148
|
-
*/
|
|
149
|
-
labelPlacement = 'start';
|
|
150
|
-
/**
|
|
151
|
-
* If `true`, the select can accept multiple values.
|
|
152
|
-
*/
|
|
153
|
-
multiple = false;
|
|
154
|
-
/**
|
|
155
|
-
* The name of the control, which is submitted with the form data.
|
|
156
|
-
*/
|
|
157
|
-
name = this.inputId;
|
|
158
|
-
/**
|
|
159
|
-
* The text to display on the ok button.
|
|
160
|
-
*/
|
|
161
|
-
okText = 'OK';
|
|
162
|
-
/**
|
|
163
|
-
* The text to display when the select is empty.
|
|
164
|
-
*/
|
|
165
|
-
placeholder;
|
|
166
|
-
/**
|
|
167
|
-
* The text to display instead of the selected option's value.
|
|
168
|
-
*/
|
|
169
|
-
selectedText;
|
|
170
|
-
/**
|
|
171
|
-
* The toggle icon to use. Defaults to `chevronExpand` for `ios` mode,
|
|
172
|
-
* or `caretDownSharp` for `md` mode.
|
|
173
|
-
*/
|
|
174
|
-
toggleIcon;
|
|
175
|
-
/**
|
|
176
|
-
* The toggle icon to show when the select is open. If defined, the icon
|
|
177
|
-
* rotation behavior in `md` mode will be disabled. If undefined, `toggleIcon`
|
|
178
|
-
* will be used for when the select is both open and closed.
|
|
179
|
-
*/
|
|
180
|
-
expandedIcon;
|
|
181
|
-
/**
|
|
182
|
-
* The shape of the select. If "round" it will have an increased border radius.
|
|
183
|
-
*/
|
|
184
|
-
shape;
|
|
185
|
-
/**
|
|
186
|
-
* The value of the select.
|
|
187
|
-
*/
|
|
188
|
-
value;
|
|
189
|
-
/**
|
|
190
|
-
* If true, screen readers will announce it as a required field. This property
|
|
191
|
-
* works only for accessibility purposes, it will not prevent the form from
|
|
192
|
-
* submitting if the value is invalid.
|
|
193
|
-
*/
|
|
194
|
-
required = false;
|
|
195
|
-
/**
|
|
196
|
-
* Emitted when the value has changed.
|
|
197
|
-
*
|
|
198
|
-
* This event will not emit when programmatically setting the `value` property.
|
|
199
|
-
*/
|
|
200
|
-
ionChange;
|
|
201
|
-
/**
|
|
202
|
-
* Emitted when the selection is cancelled.
|
|
203
|
-
*/
|
|
204
|
-
ionCancel;
|
|
205
|
-
/**
|
|
206
|
-
* Emitted when the overlay is dismissed.
|
|
207
|
-
*/
|
|
208
|
-
ionDismiss;
|
|
209
|
-
/**
|
|
210
|
-
* Emitted when the select has focus.
|
|
211
|
-
*/
|
|
212
|
-
ionFocus;
|
|
213
|
-
/**
|
|
214
|
-
* Emitted when the select loses focus.
|
|
215
|
-
*/
|
|
216
|
-
ionBlur;
|
|
217
|
-
/**
|
|
218
|
-
* Emitted when the styles change.
|
|
219
|
-
* @internal
|
|
220
|
-
*/
|
|
221
|
-
ionStyle;
|
|
222
158
|
styleChanged() {
|
|
223
159
|
this.emitStyle();
|
|
224
160
|
}
|
|
225
161
|
setValue(value) {
|
|
226
|
-
if (this.isValueEqual(this.value, value)) {
|
|
227
|
-
return;
|
|
228
|
-
}
|
|
229
162
|
this.value = value;
|
|
230
163
|
this.ionChange.emit({ value });
|
|
231
164
|
}
|
|
232
|
-
isValueEqual(currentValue, newValue) {
|
|
233
|
-
if (this.multiple) {
|
|
234
|
-
const currentArr = Array.isArray(currentValue) ? currentValue : [];
|
|
235
|
-
const newArr = Array.isArray(newValue) ? newValue : [];
|
|
236
|
-
if (currentArr.length !== newArr.length) {
|
|
237
|
-
return false;
|
|
238
|
-
}
|
|
239
|
-
// Multiset compare: each new value must match a distinct current value.
|
|
240
|
-
// A plain `every(isOptionSelected)` would accept ['a','a'] as equal to
|
|
241
|
-
// ['a','b'] when both 'a' and 'b' map to options whose values overlap.
|
|
242
|
-
const remaining = currentArr.slice();
|
|
243
|
-
return newArr.every((val) => {
|
|
244
|
-
const idx = remaining.findIndex((c) => compareOptions(c, val, this.compareWith));
|
|
245
|
-
if (idx === -1) {
|
|
246
|
-
return false;
|
|
247
|
-
}
|
|
248
|
-
remaining.splice(idx, 1);
|
|
249
|
-
return true;
|
|
250
|
-
});
|
|
251
|
-
}
|
|
252
|
-
if (currentValue == null && newValue == null) {
|
|
253
|
-
return true;
|
|
254
|
-
}
|
|
255
|
-
if (currentValue == null || newValue == null) {
|
|
256
|
-
return false;
|
|
257
|
-
}
|
|
258
|
-
return compareOptions(currentValue, newValue, this.compareWith);
|
|
259
|
-
}
|
|
260
165
|
async connectedCallback() {
|
|
261
166
|
const { el } = this;
|
|
262
|
-
this.slotMutationController = createSlotMutationController(el, ['label', 'start', 'end'], () => {
|
|
263
|
-
this.startContainerController?.calculateStartContainerWidth();
|
|
264
|
-
forceUpdate(this);
|
|
265
|
-
});
|
|
266
167
|
this.notchController = createNotchController(el, () => this.notchSpacerEl, () => this.labelSlot);
|
|
267
|
-
this.startContainerController = createStartContainerController(el, () => this.startContainerEl, () => {
|
|
268
|
-
return getIonMode(this) === 'md' && this.fill === 'outline';
|
|
269
|
-
});
|
|
270
|
-
this.startContainerController.calculateStartContainerWidth();
|
|
271
168
|
this.updateOverlayOptions();
|
|
272
169
|
this.emitStyle();
|
|
273
170
|
this.mutationO = watchForOptions(this.el, 'ion-select-option', async () => {
|
|
@@ -339,18 +236,10 @@ const Select = class {
|
|
|
339
236
|
this.mutationO.disconnect();
|
|
340
237
|
this.mutationO = undefined;
|
|
341
238
|
}
|
|
342
|
-
if (this.slotMutationController) {
|
|
343
|
-
this.slotMutationController.destroy();
|
|
344
|
-
this.slotMutationController = undefined;
|
|
345
|
-
}
|
|
346
239
|
if (this.notchController) {
|
|
347
240
|
this.notchController.destroy();
|
|
348
241
|
this.notchController = undefined;
|
|
349
242
|
}
|
|
350
|
-
if (this.startContainerController) {
|
|
351
|
-
this.startContainerController.destroy();
|
|
352
|
-
this.startContainerController = undefined;
|
|
353
|
-
}
|
|
354
243
|
// Clean up validation observer to prevent memory leaks.
|
|
355
244
|
if (this.validationObserver) {
|
|
356
245
|
this.validationObserver.disconnect();
|
|
@@ -507,11 +396,10 @@ const Select = class {
|
|
|
507
396
|
.join(' ');
|
|
508
397
|
const optClass = `${OPTION_CLASS} ${copyClasses}`;
|
|
509
398
|
const isSelected = isOptionSelected(selectValue, value, this.compareWith);
|
|
510
|
-
const { content, startContent, endContent } = extractOptionContent(option, this.customHTMLEnabled);
|
|
511
399
|
return {
|
|
512
|
-
|
|
400
|
+
role: isSelected ? 'selected' : '',
|
|
401
|
+
text: option.textContent,
|
|
513
402
|
cssClass: optClass,
|
|
514
|
-
disabled: option.disabled,
|
|
515
403
|
handler: () => {
|
|
516
404
|
this.setValue(value);
|
|
517
405
|
},
|
|
@@ -519,9 +407,6 @@ const Select = class {
|
|
|
519
407
|
'aria-checked': isSelected ? 'true' : 'false',
|
|
520
408
|
role: 'radio',
|
|
521
409
|
},
|
|
522
|
-
startContent,
|
|
523
|
-
endContent,
|
|
524
|
-
description: option.description,
|
|
525
410
|
};
|
|
526
411
|
});
|
|
527
412
|
// Add "cancel" button
|
|
@@ -542,19 +427,13 @@ const Select = class {
|
|
|
542
427
|
.filter((cls) => cls !== 'hydrated')
|
|
543
428
|
.join(' ');
|
|
544
429
|
const optClass = `${OPTION_CLASS} ${copyClasses}`;
|
|
545
|
-
const { content, startContent, endContent } = extractOptionContent(option, this.customHTMLEnabled);
|
|
546
430
|
return {
|
|
547
431
|
type: inputType,
|
|
548
432
|
cssClass: optClass,
|
|
549
|
-
label:
|
|
433
|
+
label: option.textContent || '',
|
|
550
434
|
value,
|
|
551
435
|
checked: isOptionSelected(selectValue, value, this.compareWith),
|
|
552
436
|
disabled: option.disabled,
|
|
553
|
-
startContent,
|
|
554
|
-
endContent,
|
|
555
|
-
description: option.description,
|
|
556
|
-
labelPlacement: option.labelPlacement,
|
|
557
|
-
justify: option.justify,
|
|
558
437
|
};
|
|
559
438
|
});
|
|
560
439
|
return alertInputs;
|
|
@@ -567,9 +446,8 @@ const Select = class {
|
|
|
567
446
|
.filter((cls) => cls !== 'hydrated')
|
|
568
447
|
.join(' ');
|
|
569
448
|
const optClass = `${OPTION_CLASS} ${copyClasses}`;
|
|
570
|
-
const { content, startContent, endContent } = extractOptionContent(option, this.customHTMLEnabled);
|
|
571
449
|
return {
|
|
572
|
-
text:
|
|
450
|
+
text: option.textContent || '',
|
|
573
451
|
cssClass: optClass,
|
|
574
452
|
value,
|
|
575
453
|
checked: isOptionSelected(selectValue, value, this.compareWith),
|
|
@@ -580,11 +458,6 @@ const Select = class {
|
|
|
580
458
|
this.close();
|
|
581
459
|
}
|
|
582
460
|
},
|
|
583
|
-
startContent,
|
|
584
|
-
endContent,
|
|
585
|
-
description: option.description,
|
|
586
|
-
labelPlacement: option.labelPlacement,
|
|
587
|
-
justify: option.justify,
|
|
588
461
|
};
|
|
589
462
|
});
|
|
590
463
|
return popoverOptions;
|
|
@@ -613,60 +486,33 @@ const Select = class {
|
|
|
613
486
|
*/
|
|
614
487
|
}
|
|
615
488
|
else {
|
|
616
|
-
event = {
|
|
617
|
-
...ev,
|
|
618
|
-
detail: {
|
|
489
|
+
event = Object.assign(Object.assign({}, ev), { detail: {
|
|
619
490
|
ionShadowTarget: this.nativeWrapperEl,
|
|
620
|
-
}
|
|
621
|
-
};
|
|
491
|
+
} });
|
|
622
492
|
}
|
|
623
|
-
const
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
mode,
|
|
627
|
-
event,
|
|
628
|
-
alignment: 'center',
|
|
629
|
-
size,
|
|
630
|
-
showBackdrop,
|
|
631
|
-
...interfaceOptions,
|
|
632
|
-
component: 'ion-select-popover',
|
|
633
|
-
cssClass: [
|
|
634
|
-
'select-popover',
|
|
635
|
-
hasRichContent ? 'select-popover-rich-content' : undefined,
|
|
636
|
-
interfaceOptions.cssClass,
|
|
637
|
-
],
|
|
638
|
-
componentProps: {
|
|
493
|
+
const popoverOpts = Object.assign(Object.assign({ mode,
|
|
494
|
+
event, alignment: 'center', size,
|
|
495
|
+
showBackdrop }, interfaceOptions), { component: 'ion-select-popover', cssClass: ['select-popover', interfaceOptions.cssClass], componentProps: {
|
|
639
496
|
header: interfaceOptions.header,
|
|
640
497
|
subHeader: interfaceOptions.subHeader,
|
|
641
498
|
message: interfaceOptions.message,
|
|
642
499
|
multiple,
|
|
643
500
|
value,
|
|
644
|
-
options,
|
|
645
|
-
}
|
|
646
|
-
};
|
|
501
|
+
options: this.createOverlaySelectOptions(this.childOpts, value),
|
|
502
|
+
} });
|
|
647
503
|
return popoverController.create(popoverOpts);
|
|
648
504
|
}
|
|
649
505
|
async openActionSheet() {
|
|
650
506
|
const mode = getIonMode(this);
|
|
651
507
|
const interfaceOptions = this.interfaceOptions;
|
|
652
|
-
const actionSheetOpts = {
|
|
653
|
-
mode,
|
|
654
|
-
...interfaceOptions,
|
|
655
|
-
buttons: this.createActionSheetButtons(this.childOpts, this.value),
|
|
656
|
-
cssClass: ['select-action-sheet', interfaceOptions.cssClass],
|
|
657
|
-
};
|
|
508
|
+
const actionSheetOpts = Object.assign(Object.assign({ mode }, interfaceOptions), { buttons: this.createActionSheetButtons(this.childOpts, this.value), cssClass: ['select-action-sheet', interfaceOptions.cssClass] });
|
|
658
509
|
return actionSheetController.create(actionSheetOpts);
|
|
659
510
|
}
|
|
660
511
|
async openAlert() {
|
|
661
512
|
const interfaceOptions = this.interfaceOptions;
|
|
662
513
|
const inputType = this.multiple ? 'checkbox' : 'radio';
|
|
663
514
|
const mode = getIonMode(this);
|
|
664
|
-
const alertOpts = {
|
|
665
|
-
mode,
|
|
666
|
-
...interfaceOptions,
|
|
667
|
-
header: interfaceOptions.header ? interfaceOptions.header : this.labelText,
|
|
668
|
-
inputs: this.createAlertInputs(this.childOpts, inputType, this.value),
|
|
669
|
-
buttons: [
|
|
515
|
+
const alertOpts = Object.assign(Object.assign({ mode }, interfaceOptions), { header: interfaceOptions.header ? interfaceOptions.header : this.labelText, inputs: this.createAlertInputs(this.childOpts, inputType, this.value), buttons: [
|
|
670
516
|
{
|
|
671
517
|
text: this.cancelText,
|
|
672
518
|
role: 'cancel',
|
|
@@ -680,31 +526,23 @@ const Select = class {
|
|
|
680
526
|
this.setValue(selectedValues);
|
|
681
527
|
},
|
|
682
528
|
},
|
|
683
|
-
],
|
|
684
|
-
cssClass: [
|
|
529
|
+
], cssClass: [
|
|
685
530
|
'select-alert',
|
|
686
531
|
interfaceOptions.cssClass,
|
|
687
532
|
this.multiple ? 'multiple-select-alert' : 'single-select-alert',
|
|
688
|
-
]
|
|
689
|
-
};
|
|
533
|
+
] });
|
|
690
534
|
return alertController.create(alertOpts);
|
|
691
535
|
}
|
|
692
536
|
openModal() {
|
|
693
537
|
const { multiple, value, interfaceOptions } = this;
|
|
694
538
|
const mode = getIonMode(this);
|
|
695
|
-
const modalOpts = {
|
|
696
|
-
...interfaceOptions,
|
|
697
|
-
mode,
|
|
698
|
-
cssClass: ['select-modal', interfaceOptions.cssClass],
|
|
699
|
-
component: 'ion-select-modal',
|
|
700
|
-
componentProps: {
|
|
539
|
+
const modalOpts = Object.assign(Object.assign({}, interfaceOptions), { mode, cssClass: ['select-modal', interfaceOptions.cssClass], component: 'ion-select-modal', componentProps: {
|
|
701
540
|
header: interfaceOptions.header,
|
|
702
541
|
cancelText: this.cancelText,
|
|
703
542
|
multiple,
|
|
704
543
|
value,
|
|
705
544
|
options: this.createOverlaySelectOptions(this.childOpts, value),
|
|
706
|
-
}
|
|
707
|
-
};
|
|
545
|
+
} });
|
|
708
546
|
return modalController.create(modalOpts);
|
|
709
547
|
}
|
|
710
548
|
/**
|
|
@@ -741,18 +579,12 @@ const Select = class {
|
|
|
741
579
|
}
|
|
742
580
|
return;
|
|
743
581
|
}
|
|
744
|
-
|
|
745
|
-
* Returns the text to display in the select based on the selected value.
|
|
746
|
-
*
|
|
747
|
-
* @param useHTML If `true`, the returned text will include any custom HTML content from the selected option. If `false`, the returned text will be plain text without any HTML. Defaults to `false`.
|
|
748
|
-
* @returns The text to display in the select, either with or without HTML based on the `useHTML` parameter.
|
|
749
|
-
*/
|
|
750
|
-
getText(useHTML = false) {
|
|
582
|
+
getText() {
|
|
751
583
|
const selectedText = this.selectedText;
|
|
752
584
|
if (selectedText != null && selectedText !== '') {
|
|
753
585
|
return selectedText;
|
|
754
586
|
}
|
|
755
|
-
return generateText(this.childOpts, this.value, this.compareWith
|
|
587
|
+
return generateText(this.childOpts, this.value, this.compareWith);
|
|
756
588
|
}
|
|
757
589
|
setFocus() {
|
|
758
590
|
if (this.focusEl) {
|
|
@@ -766,51 +598,6 @@ const Select = class {
|
|
|
766
598
|
};
|
|
767
599
|
this.ionStyle.emit(style);
|
|
768
600
|
}
|
|
769
|
-
onClick = (ev) => {
|
|
770
|
-
const target = ev.target;
|
|
771
|
-
const closestSlot = target.closest('[slot="start"], [slot="end"]');
|
|
772
|
-
if (target === this.el || closestSlot === null) {
|
|
773
|
-
this.setFocus();
|
|
774
|
-
this.open(ev);
|
|
775
|
-
}
|
|
776
|
-
else {
|
|
777
|
-
/**
|
|
778
|
-
* Prevent clicks to the start/end slots from opening the select.
|
|
779
|
-
* We ensure the target isn't this element in case the select is slotted
|
|
780
|
-
* in, for example, an item. This would prevent the select from ever
|
|
781
|
-
* being opened since the element itself has slot="start"/"end".
|
|
782
|
-
*
|
|
783
|
-
* Clicking a slotted element also causes a click
|
|
784
|
-
* on the <label> element (since it wraps the slots).
|
|
785
|
-
* Clicking <label> dispatches another click event on
|
|
786
|
-
* the native form control that then bubbles up to this
|
|
787
|
-
* listener. This additional event targets the host
|
|
788
|
-
* element, so the select overlay is opened.
|
|
789
|
-
*
|
|
790
|
-
* When the slotted elements are clicked (and therefore
|
|
791
|
-
* the ancestor <label> element) we want to prevent the label
|
|
792
|
-
* from dispatching another click event.
|
|
793
|
-
*
|
|
794
|
-
* Do not call stopPropagation() because this will cause
|
|
795
|
-
* click handlers on the slotted elements to never fire in React.
|
|
796
|
-
* When developers do onClick in React a native "click" listener
|
|
797
|
-
* is added on the root element, not the slotted element. When that
|
|
798
|
-
* native click listener fires, React then dispatches the synthetic
|
|
799
|
-
* click event on the slotted element. However, if stopPropagation
|
|
800
|
-
* is called then the native click event will never bubble up
|
|
801
|
-
* to the root element.
|
|
802
|
-
*/
|
|
803
|
-
ev.preventDefault();
|
|
804
|
-
}
|
|
805
|
-
};
|
|
806
|
-
onFocus = () => {
|
|
807
|
-
this.hasFocus = true;
|
|
808
|
-
this.ionFocus.emit();
|
|
809
|
-
};
|
|
810
|
-
onBlur = () => {
|
|
811
|
-
this.hasFocus = false;
|
|
812
|
-
this.ionBlur.emit();
|
|
813
|
-
};
|
|
814
601
|
renderLabel() {
|
|
815
602
|
const { label } = this;
|
|
816
603
|
return (h("div", { class: {
|
|
@@ -819,8 +606,8 @@ const Select = class {
|
|
|
819
606
|
}, part: "label" }, label === undefined ? h("slot", { name: "label" }) : h("div", { class: "label-text" }, label)));
|
|
820
607
|
}
|
|
821
608
|
componentDidRender() {
|
|
822
|
-
|
|
823
|
-
this.
|
|
609
|
+
var _a;
|
|
610
|
+
(_a = this.notchController) === null || _a === void 0 ? void 0 : _a.calculateNotchWidth();
|
|
824
611
|
}
|
|
825
612
|
/**
|
|
826
613
|
* Gets any content passed into the `label` slot,
|
|
@@ -839,64 +626,33 @@ const Select = class {
|
|
|
839
626
|
return this.label !== undefined || this.labelSlot !== null;
|
|
840
627
|
}
|
|
841
628
|
/**
|
|
842
|
-
*
|
|
843
|
-
*
|
|
844
|
-
* or mouse) and slotted content clicks to propagate so event delegation
|
|
845
|
-
* works for parent handlers.
|
|
629
|
+
* Renders the border container
|
|
630
|
+
* when fill="outline".
|
|
846
631
|
*/
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
* behavior.
|
|
866
|
-
*
|
|
867
|
-
* Only wraps when the string contains HTML elements
|
|
868
|
-
* alongside text.
|
|
869
|
-
*/
|
|
870
|
-
wrapSelectTextNodes(html) {
|
|
871
|
-
const temp = document.createElement('div');
|
|
872
|
-
temp.innerHTML = html;
|
|
873
|
-
const hasElements = Array.from(temp.childNodes).some((n) => n.nodeType === Node.ELEMENT_NODE);
|
|
874
|
-
// Return the plain text
|
|
875
|
-
if (!hasElements) {
|
|
876
|
-
return html;
|
|
632
|
+
renderLabelContainer() {
|
|
633
|
+
const mode = getIonMode(this);
|
|
634
|
+
const hasOutlineFill = mode === 'md' && this.fill === 'outline';
|
|
635
|
+
if (hasOutlineFill) {
|
|
636
|
+
/**
|
|
637
|
+
* The outline fill has a special outline
|
|
638
|
+
* that appears around the select and the label.
|
|
639
|
+
* Certain stacked and floating label placements cause the
|
|
640
|
+
* label to translate up and create a "cut out"
|
|
641
|
+
* inside of that border by using the notch-spacer element.
|
|
642
|
+
*/
|
|
643
|
+
return [
|
|
644
|
+
h("div", { class: "select-outline-container" }, h("div", { class: "select-outline-start" }), h("div", { class: {
|
|
645
|
+
'select-outline-notch': true,
|
|
646
|
+
'select-outline-notch-hidden': !this.hasLabel,
|
|
647
|
+
} }, h("div", { class: "notch-spacer", "aria-hidden": "true", ref: (el) => (this.notchSpacerEl = el) }, this.label)), h("div", { class: "select-outline-end" })),
|
|
648
|
+
this.renderLabel(),
|
|
649
|
+
];
|
|
877
650
|
}
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
* e.g., ", Bacon" becomes ", " text node + <span>Bacon</span>.
|
|
884
|
-
*/
|
|
885
|
-
const commaMatch = text.match(/^(,\s*)(.*)/);
|
|
886
|
-
if (commaMatch) {
|
|
887
|
-
const commaNode = document.createTextNode(commaMatch[1]);
|
|
888
|
-
const wrapper = document.createElement('span');
|
|
889
|
-
wrapper.textContent = commaMatch[2];
|
|
890
|
-
node.parentNode?.replaceChild(wrapper, node);
|
|
891
|
-
wrapper.parentNode?.insertBefore(commaNode, wrapper);
|
|
892
|
-
return;
|
|
893
|
-
}
|
|
894
|
-
const wrapper = document.createElement('span');
|
|
895
|
-
node.parentNode?.replaceChild(wrapper, node);
|
|
896
|
-
wrapper.appendChild(node);
|
|
897
|
-
}
|
|
898
|
-
});
|
|
899
|
-
return temp.innerHTML;
|
|
651
|
+
/**
|
|
652
|
+
* If not using the outline style,
|
|
653
|
+
* we can render just the label.
|
|
654
|
+
*/
|
|
655
|
+
return this.renderLabel();
|
|
900
656
|
}
|
|
901
657
|
/**
|
|
902
658
|
* Renders either the placeholder
|
|
@@ -905,7 +661,7 @@ const Select = class {
|
|
|
905
661
|
*/
|
|
906
662
|
renderSelectText() {
|
|
907
663
|
const { placeholder } = this;
|
|
908
|
-
const displayValue = this.getText(
|
|
664
|
+
const displayValue = this.getText();
|
|
909
665
|
let addPlaceholderClass = false;
|
|
910
666
|
let selectText = displayValue;
|
|
911
667
|
if (selectText === '' && placeholder !== undefined) {
|
|
@@ -917,10 +673,6 @@ const Select = class {
|
|
|
917
673
|
'select-placeholder': addPlaceholderClass,
|
|
918
674
|
};
|
|
919
675
|
const textPart = addPlaceholderClass ? 'placeholder' : 'text';
|
|
920
|
-
if (this.customHTMLEnabled) {
|
|
921
|
-
const wrapped = this.wrapSelectTextNodes(selectText);
|
|
922
|
-
return h("div", { "aria-hidden": "true", class: selectTextClasses, part: textPart, innerHTML: wrapped });
|
|
923
|
-
}
|
|
924
676
|
return (h("div", { "aria-hidden": "true", class: selectTextClasses, part: textPart }, selectText));
|
|
925
677
|
}
|
|
926
678
|
/**
|
|
@@ -936,16 +688,16 @@ const Select = class {
|
|
|
936
688
|
}
|
|
937
689
|
else {
|
|
938
690
|
const defaultIcon = mode === 'ios' ? chevronExpand : caretDownSharp;
|
|
939
|
-
icon = toggleIcon
|
|
691
|
+
icon = toggleIcon !== null && toggleIcon !== void 0 ? toggleIcon : defaultIcon;
|
|
940
692
|
}
|
|
941
693
|
return h("ion-icon", { class: "select-icon", part: "icon", "aria-hidden": "true", icon: icon });
|
|
942
694
|
}
|
|
943
695
|
get ariaLabel() {
|
|
696
|
+
var _a;
|
|
944
697
|
const { placeholder, inheritedAttributes } = this;
|
|
945
|
-
// Get the plain text from the selected text
|
|
946
698
|
const displayValue = this.getText();
|
|
947
699
|
// The aria label should be preferred over visible text if both are specified
|
|
948
|
-
const definedLabel = inheritedAttributes['aria-label']
|
|
700
|
+
const definedLabel = (_a = inheritedAttributes['aria-label']) !== null && _a !== void 0 ? _a : this.labelText;
|
|
949
701
|
/**
|
|
950
702
|
* If developer has specified a placeholder
|
|
951
703
|
* and there is nothing selected, the selectText
|
|
@@ -1016,10 +768,28 @@ const Select = class {
|
|
|
1016
768
|
const inItem = hostContext('ion-item', this.el);
|
|
1017
769
|
const shouldRenderHighlight = mode === 'md' && fill !== 'outline' && !inItem;
|
|
1018
770
|
const hasValue = this.hasValue();
|
|
1019
|
-
const
|
|
771
|
+
const hasStartEndSlots = el.querySelector('[slot="start"], [slot="end"]') !== null;
|
|
1020
772
|
renderHiddenInput(true, el, name, parseValue(value), disabled);
|
|
1021
|
-
|
|
1022
|
-
|
|
773
|
+
/**
|
|
774
|
+
* If the label is stacked, it should always sit above the select.
|
|
775
|
+
* For floating labels, the label should move above the select if
|
|
776
|
+
* the select has a value, is open, or has anything in either
|
|
777
|
+
* the start or end slot.
|
|
778
|
+
*
|
|
779
|
+
* If there is content in the start slot, the label would overlap
|
|
780
|
+
* it if not forced to float. This is also applied to the end slot
|
|
781
|
+
* because with the default or solid fills, the select is not
|
|
782
|
+
* vertically centered in the container, but the label is. This
|
|
783
|
+
* causes the slots and label to appear vertically offset from each
|
|
784
|
+
* other when the label isn't floating above the input. This doesn't
|
|
785
|
+
* apply to the outline fill, but this was not accounted for to keep
|
|
786
|
+
* things consistent.
|
|
787
|
+
*
|
|
788
|
+
* TODO(FW-5592): Remove hasStartEndSlots condition
|
|
789
|
+
*/
|
|
790
|
+
const labelShouldFloat = labelPlacement === 'stacked' ||
|
|
791
|
+
(labelPlacement === 'floating' && (hasValue || hasFocus || isExpanded || hasStartEndSlots));
|
|
792
|
+
return (h(Host, { key: 'f16327d6866ffee76e1618fcd3281590ca0fd56d', onClick: this.onClick, class: createColorClasses(this.color, {
|
|
1023
793
|
[mode]: true,
|
|
1024
794
|
'in-item': inItem,
|
|
1025
795
|
'in-item-color': hostContext('ion-item.ion-color', el),
|
|
@@ -1037,8 +807,9 @@ const Select = class {
|
|
|
1037
807
|
[`select-justify-${justify}`]: justifyEnabled,
|
|
1038
808
|
[`select-shape-${shape}`]: shape !== undefined,
|
|
1039
809
|
[`select-label-placement-${labelPlacement}`]: true,
|
|
1040
|
-
}) }, h("label", { key: '
|
|
810
|
+
}) }, h("label", { key: 'db13f76b384a7a7461c1ad752108eadf9c0213be', class: "select-wrapper", id: "select-label", onClick: this.onLabelClick, part: "wrapper" }, this.renderLabelContainer(), h("div", { key: '2fb0e57bd596c0f525be79293b7da4aca55a9385', class: "select-wrapper-inner", part: "inner" }, h("slot", { key: 'cd694c36242789a89461ed3412af9891ad68411b', name: "start" }), h("div", { key: 'fdf62911be54f4ab29eb3c2eb153f082e76a8f49', class: "native-wrapper", ref: (el) => (this.nativeWrapperEl = el), part: "container" }, this.renderSelectText(), this.renderListbox()), h("slot", { key: 'a32f5c4b101d4d6ad45870f4c4446960009377f5', name: "end" }), !hasFloatingOrStackedLabel && this.renderSelectIcon()), hasFloatingOrStackedLabel && this.renderSelectIcon(), shouldRenderHighlight && h("div", { key: '61f792024a5f221ef4f28a3c249bd3a0de5edeab', class: "select-highlight" })), this.renderBottomContent()));
|
|
1041
811
|
}
|
|
812
|
+
get el() { return getElement(this); }
|
|
1042
813
|
static get watchers() { return {
|
|
1043
814
|
"disabled": [{
|
|
1044
815
|
"styleChanged": 0
|
|
@@ -1067,219 +838,25 @@ const parseValue = (value) => {
|
|
|
1067
838
|
}
|
|
1068
839
|
return value.toString();
|
|
1069
840
|
};
|
|
1070
|
-
const generateText = (opts, value, compareWith
|
|
841
|
+
const generateText = (opts, value, compareWith) => {
|
|
1071
842
|
if (value === undefined) {
|
|
1072
843
|
return '';
|
|
1073
844
|
}
|
|
1074
845
|
if (Array.isArray(value)) {
|
|
1075
846
|
return value
|
|
1076
|
-
.map((v) => textForValue(opts, v, compareWith
|
|
847
|
+
.map((v) => textForValue(opts, v, compareWith))
|
|
1077
848
|
.filter((opt) => opt !== null)
|
|
1078
849
|
.join(', ');
|
|
1079
850
|
}
|
|
1080
851
|
else {
|
|
1081
|
-
return textForValue(opts, value, compareWith
|
|
852
|
+
return textForValue(opts, value, compareWith) || '';
|
|
1082
853
|
}
|
|
1083
854
|
};
|
|
1084
|
-
|
|
1085
|
-
* Returns the display text for a given value from the list of options.
|
|
1086
|
-
* When `useHTML` is true, returns sanitized HTML for the select text.
|
|
1087
|
-
* When `useHTML` is false, returns plain text for aria-label and other
|
|
1088
|
-
* text-only contexts.
|
|
1089
|
-
*
|
|
1090
|
-
* @param opts - The list of ion-select-option elements.
|
|
1091
|
-
* @param value - The value to find the matching option for.
|
|
1092
|
-
* @param compareWith - Custom comparison function or property name.
|
|
1093
|
-
* @param useHTML - If true, returns HTML string. If false, returns plain text.
|
|
1094
|
-
*/
|
|
1095
|
-
const textForValue = (opts, value, compareWith, useHTML = false) => {
|
|
855
|
+
const textForValue = (opts, value, compareWith) => {
|
|
1096
856
|
const selectOpt = opts.find((opt) => {
|
|
1097
857
|
return compareOptions(value, getOptionValue(opt), compareWith);
|
|
1098
858
|
});
|
|
1099
|
-
|
|
1100
|
-
if (!selectOpt) {
|
|
1101
|
-
return null;
|
|
1102
|
-
}
|
|
1103
|
-
// Return sanitized HTML for the select text
|
|
1104
|
-
if (customHTMLEnabled && useHTML) {
|
|
1105
|
-
return getOptionContent(selectOpt, undefined, true);
|
|
1106
|
-
}
|
|
1107
|
-
/**
|
|
1108
|
-
* When custom HTML is enabled, extract only the default slot content.
|
|
1109
|
-
* This ensures aria-label and other text-only contexts read only
|
|
1110
|
-
* the relevant option text.
|
|
1111
|
-
*/
|
|
1112
|
-
if (customHTMLEnabled) {
|
|
1113
|
-
const content = getOptionContent(selectOpt);
|
|
1114
|
-
if (typeof content === 'string') {
|
|
1115
|
-
return content;
|
|
1116
|
-
}
|
|
1117
|
-
/**
|
|
1118
|
-
* Elements were found in the default slot, extract and concatenate
|
|
1119
|
-
* their text content while trimming whitespace.
|
|
1120
|
-
*/
|
|
1121
|
-
if (content) {
|
|
1122
|
-
const texts = Array.from(content.childNodes)
|
|
1123
|
-
.map((n) => n.textContent?.trim())
|
|
1124
|
-
.filter((t) => t);
|
|
1125
|
-
return texts.join(' ') || null;
|
|
1126
|
-
}
|
|
1127
|
-
// Empty option
|
|
1128
|
-
return null;
|
|
1129
|
-
}
|
|
1130
|
-
return getDefaultSlotPlainText(selectOpt);
|
|
1131
|
-
};
|
|
1132
|
-
/**
|
|
1133
|
-
* Trims whitespace from all text nodes within a DOM tree.
|
|
1134
|
-
* This prevents invisible layout shifts and unwanted gaps between
|
|
1135
|
-
* elements when HTML content is injected via innerHTML or cloneNode,
|
|
1136
|
-
* as browsers preserve whitespace (tabs, newlines, spaces) from
|
|
1137
|
-
* the original source markup.
|
|
1138
|
-
*
|
|
1139
|
-
* @param node The root node to start trimming text nodes from.
|
|
1140
|
-
*/
|
|
1141
|
-
const trimTextNodes = (node) => {
|
|
1142
|
-
node.childNodes.forEach((child) => {
|
|
1143
|
-
if (child.nodeType === Node.TEXT_NODE) {
|
|
1144
|
-
child.textContent = child.textContent?.trim() || '';
|
|
1145
|
-
}
|
|
1146
|
-
else if (child.nodeType === Node.ELEMENT_NODE) {
|
|
1147
|
-
trimTextNodes(child);
|
|
1148
|
-
}
|
|
1149
|
-
});
|
|
1150
|
-
};
|
|
1151
|
-
/**
|
|
1152
|
-
* Extracts and clones content from an `ion-select-option` element
|
|
1153
|
-
* for rendering within overlay interfaces or the select text when `customHTMLEnabled` is `true`.
|
|
1154
|
-
*
|
|
1155
|
-
* @param option - The `ion-select-option` element to extract content from.
|
|
1156
|
-
* @param slotName - Optional slot name to extract. If omitted, extracts the default slot content.
|
|
1157
|
-
* @param useHTML - If `true`, the returned string will include any custom HTML content. If `false`, the returned string will be plain text without any HTML.
|
|
1158
|
-
* @returns When `useHTML` is `true`, a sanitized HTML string. When `false`, a
|
|
1159
|
-
* div element containing cloned child nodes. Returns `null` if no matching
|
|
1160
|
-
* content is found.
|
|
1161
|
-
*/
|
|
1162
|
-
const getOptionContent = (option, slotName, useHTML = false) => {
|
|
1163
|
-
let nodes;
|
|
1164
|
-
if (slotName) {
|
|
1165
|
-
// Named slot: get elements with matching slot attribute
|
|
1166
|
-
nodes = Array.from(option.children).filter((el) => el.getAttribute('slot') === slotName);
|
|
1167
|
-
}
|
|
1168
|
-
else {
|
|
1169
|
-
// Default slot: get nodes without a slot attribute
|
|
1170
|
-
const defaultSlot = getOptionDefaultSlot(option) || [];
|
|
1171
|
-
nodes = defaultSlot.filter((node) => {
|
|
1172
|
-
/**
|
|
1173
|
-
* Exclude whitespace-only text nodes (newline noise between
|
|
1174
|
-
* markup elements). Element nodes are always kept, even when
|
|
1175
|
-
* their textContent is empty (e.g. <svg>, <img>).
|
|
1176
|
-
*/
|
|
1177
|
-
if (node.nodeType === Node.TEXT_NODE) {
|
|
1178
|
-
return node.textContent?.trim().length !== 0;
|
|
1179
|
-
}
|
|
1180
|
-
return true;
|
|
1181
|
-
});
|
|
1182
|
-
}
|
|
1183
|
-
if (nodes.length === 0) {
|
|
1184
|
-
return null;
|
|
1185
|
-
}
|
|
1186
|
-
// Return plain text if no elements are found
|
|
1187
|
-
if (!slotName && nodes.every((n) => n.nodeType === Node.TEXT_NODE)) {
|
|
1188
|
-
return nodes.map((n) => n.textContent?.trim()).join(' ') || null;
|
|
1189
|
-
}
|
|
1190
|
-
/**
|
|
1191
|
-
* Mirror known custom-element properties (e.g. ion-icon's `icon`)
|
|
1192
|
-
* onto attributes before cloning. Frameworks like Vue set these as
|
|
1193
|
-
* DOM properties, which `cloneNode` doesn't copy, so without this
|
|
1194
|
-
* step the cloned overlay copy renders without the prop's value.
|
|
1195
|
-
*/
|
|
1196
|
-
nodes.forEach((n) => {
|
|
1197
|
-
if (n.nodeType === Node.ELEMENT_NODE) {
|
|
1198
|
-
reflectPropertiesToAttributes(n);
|
|
1199
|
-
}
|
|
1200
|
-
});
|
|
1201
|
-
// Clone each node into a temporary container
|
|
1202
|
-
const container = document.createElement('div');
|
|
1203
|
-
nodes.forEach((n) => {
|
|
1204
|
-
const clone = n.cloneNode(true);
|
|
1205
|
-
if (clone.nodeType === Node.TEXT_NODE) {
|
|
1206
|
-
clone.textContent = clone.textContent?.trim() || '';
|
|
1207
|
-
}
|
|
1208
|
-
else {
|
|
1209
|
-
trimTextNodes(clone);
|
|
1210
|
-
}
|
|
1211
|
-
container.appendChild(clone);
|
|
1212
|
-
});
|
|
1213
|
-
/**
|
|
1214
|
-
* Sanitize the cloned DOM in place. Trusted attributes (size, color,
|
|
1215
|
-
* shape, etc.) are preserved; event handlers, javascript: URLs, and
|
|
1216
|
-
* blocked tags are stripped.
|
|
1217
|
-
*/
|
|
1218
|
-
sanitizeDOMTree(container);
|
|
1219
|
-
if (useHTML) {
|
|
1220
|
-
return container.innerHTML.trim() || null;
|
|
1221
|
-
}
|
|
1222
|
-
return container;
|
|
1223
|
-
};
|
|
1224
|
-
/**
|
|
1225
|
-
* Returns the child nodes that belong to the default slot of an
|
|
1226
|
-
* option element, excluding any nodes that are assigned to named
|
|
1227
|
-
* slots.
|
|
1228
|
-
*
|
|
1229
|
-
* @param option - The `ion-select-option` element to extract default-slot nodes from.
|
|
1230
|
-
* @returns An array of default slot nodes, or `null` if none are found.
|
|
1231
|
-
*/
|
|
1232
|
-
const getOptionDefaultSlot = (option) => {
|
|
1233
|
-
const defaultSlotNodes = Array.from(option.childNodes).filter((node) => {
|
|
1234
|
-
if (node.nodeType === Node.ELEMENT_NODE) {
|
|
1235
|
-
return !node.hasAttribute('slot');
|
|
1236
|
-
}
|
|
1237
|
-
return node.nodeType === Node.TEXT_NODE;
|
|
1238
|
-
});
|
|
1239
|
-
if (defaultSlotNodes.length === 0) {
|
|
1240
|
-
return null;
|
|
1241
|
-
}
|
|
1242
|
-
return defaultSlotNodes;
|
|
1243
|
-
};
|
|
1244
|
-
/**
|
|
1245
|
-
* Extracts plain text from only the default slot of an option,
|
|
1246
|
-
* excluding content assigned to named slots (start/end).
|
|
1247
|
-
*/
|
|
1248
|
-
const getDefaultSlotPlainText = (option) => {
|
|
1249
|
-
const texts = Array.from(option.childNodes)
|
|
1250
|
-
.filter((node) => {
|
|
1251
|
-
if (node.nodeType === Node.ELEMENT_NODE) {
|
|
1252
|
-
return !node.hasAttribute('slot');
|
|
1253
|
-
}
|
|
1254
|
-
return node.nodeType === Node.TEXT_NODE;
|
|
1255
|
-
})
|
|
1256
|
-
.filter((node) => node.nodeType === Node.TEXT_NODE)
|
|
1257
|
-
.map((n) => n.textContent?.trim())
|
|
1258
|
-
.filter((t) => t);
|
|
1259
|
-
return texts.join(' ');
|
|
1260
|
-
};
|
|
1261
|
-
/**
|
|
1262
|
-
* Extracts the rich content from an `ion-select-option`.
|
|
1263
|
-
* When `customHTMLEnabled` is `false`, only the plain text from the
|
|
1264
|
-
* default slot is read and the start and end slots are skipped.
|
|
1265
|
-
*
|
|
1266
|
-
* @param option - The `ion-select-option` element to extract content from.
|
|
1267
|
-
* @param customHTMLEnabled - Whether custom HTML rendering is enabled
|
|
1268
|
-
* via the `innerHTMLTemplatesEnabled` config.
|
|
1269
|
-
*/
|
|
1270
|
-
const extractOptionContent = (option, customHTMLEnabled) => {
|
|
1271
|
-
if (!customHTMLEnabled) {
|
|
1272
|
-
return {
|
|
1273
|
-
content: getDefaultSlotPlainText(option),
|
|
1274
|
-
startContent: undefined,
|
|
1275
|
-
endContent: undefined,
|
|
1276
|
-
};
|
|
1277
|
-
}
|
|
1278
|
-
return {
|
|
1279
|
-
content: getOptionContent(option),
|
|
1280
|
-
startContent: getOptionContent(option, 'start') ?? undefined,
|
|
1281
|
-
endContent: getOptionContent(option, 'end') ?? undefined,
|
|
1282
|
-
};
|
|
859
|
+
return selectOpt ? selectOpt.textContent : null;
|
|
1283
860
|
};
|
|
1284
861
|
let selectIds = 0;
|
|
1285
862
|
const OPTION_CLASS = 'select-interface-option';
|
|
@@ -1293,91 +870,36 @@ const selectOptionCss = () => `:host{display:none}`;
|
|
|
1293
870
|
const SelectOption = class {
|
|
1294
871
|
constructor(hostRef) {
|
|
1295
872
|
registerInstance(this, hostRef);
|
|
873
|
+
this.inputId = `ion-selopt-${selectOptionIds++}`;
|
|
874
|
+
/**
|
|
875
|
+
* If `true`, the user cannot interact with the select option. This property does not apply when `interface="action-sheet"` as `ion-action-sheet` does not allow for disabled buttons.
|
|
876
|
+
*/
|
|
877
|
+
this.disabled = false;
|
|
1296
878
|
}
|
|
1297
|
-
inputId = `ion-selopt-${selectOptionIds++}`;
|
|
1298
|
-
get el() { return getElement(this); }
|
|
1299
|
-
/**
|
|
1300
|
-
* If `true`, the user cannot interact with the select option.
|
|
1301
|
-
*/
|
|
1302
|
-
disabled = false;
|
|
1303
|
-
/**
|
|
1304
|
-
* The text value of the option.
|
|
1305
|
-
*/
|
|
1306
|
-
value;
|
|
1307
|
-
/**
|
|
1308
|
-
* Text that is placed underneath the option text to provide additional details about the option.
|
|
1309
|
-
*/
|
|
1310
|
-
description;
|
|
1311
|
-
/**
|
|
1312
|
-
* Where the label is placed relative to the option's selection control
|
|
1313
|
-
* (radio circle or checkbox box) when the option is rendered in an
|
|
1314
|
-
* `alert`, `popover`, or `modal` interface.
|
|
1315
|
-
* `"start"`: The label will appear to the left of the radio in LTR and to the right in RTL.
|
|
1316
|
-
* `"end"`: The label will appear to the right of the radio in LTR and to the left in RTL.
|
|
1317
|
-
*
|
|
1318
|
-
* Applies to the `alert`, `popover`, and `modal` interfaces, but has no
|
|
1319
|
-
* visible effect on radio options in `popover` or `modal` on `md` (the radio control is hidden there).
|
|
1320
|
-
*
|
|
1321
|
-
* When unset, the interface picks a default based on mode and control
|
|
1322
|
-
* type.
|
|
1323
|
-
*/
|
|
1324
|
-
labelPlacement;
|
|
1325
|
-
/**
|
|
1326
|
-
* How to pack the label and the option's selection control within a line.
|
|
1327
|
-
* `"start"`: The label and radio will appear on the left in LTR and
|
|
1328
|
-
* on the right in RTL.
|
|
1329
|
-
* `"end"`: The label and radio will appear on the right in LTR and
|
|
1330
|
-
* on the left in RTL.
|
|
1331
|
-
* `"space-between"`: The label and radio will appear on opposite
|
|
1332
|
-
* ends of the line with space between the two elements.
|
|
1333
|
-
*
|
|
1334
|
-
* Applies to the `alert`, `popover`, and `modal` interfaces, but has no
|
|
1335
|
-
* visible effect on radio options in `popover` or `modal` on `md` (the radio control is hidden there).
|
|
1336
|
-
*
|
|
1337
|
-
* When unset, the interface picks a default based on mode and control
|
|
1338
|
-
* type.
|
|
1339
|
-
*/
|
|
1340
|
-
justify;
|
|
1341
879
|
render() {
|
|
1342
|
-
return h(Host, { key: '
|
|
880
|
+
return h(Host, { key: '824730b6c1e4f15b716e91b05840e890af5f1577', role: "option", id: this.inputId, class: getIonMode(this) });
|
|
1343
881
|
}
|
|
882
|
+
get el() { return getElement(this); }
|
|
1344
883
|
};
|
|
1345
884
|
let selectOptionIds = 0;
|
|
1346
885
|
SelectOption.style = selectOptionCss();
|
|
1347
886
|
|
|
1348
|
-
const selectPopoverIosCss = () => `.
|
|
887
|
+
const selectPopoverIosCss = () => `.sc-ion-select-popover-ios-h ion-list.sc-ion-select-popover-ios{margin-left:0;margin-right:0;margin-top:0;margin-bottom:0}ion-list-header.sc-ion-select-popover-ios,ion-label.sc-ion-select-popover-ios{margin-left:0;margin-right:0;margin-top:0;margin-bottom:0}.sc-ion-select-popover-ios-h{overflow-y:auto}`;
|
|
1349
888
|
|
|
1350
|
-
const selectPopoverMdCss = () => `.
|
|
889
|
+
const selectPopoverMdCss = () => `.sc-ion-select-popover-md-h ion-list.sc-ion-select-popover-md{margin-left:0;margin-right:0;margin-top:0;margin-bottom:0}ion-list-header.sc-ion-select-popover-md,ion-label.sc-ion-select-popover-md{margin-left:0;margin-right:0;margin-top:0;margin-bottom:0}.sc-ion-select-popover-md-h{overflow-y:auto}ion-list.sc-ion-select-popover-md ion-radio.sc-ion-select-popover-md::part(container),ion-list.sc-ion-select-popover-md ion-radio.sc-ion-select-popover-md [part~="container"]{display:none}ion-list.sc-ion-select-popover-md ion-radio.sc-ion-select-popover-md::part(label),ion-list.sc-ion-select-popover-md ion-radio.sc-ion-select-popover-md [part~="label"]{margin-left:0;margin-right:0;margin-top:0;margin-bottom:0}ion-item.sc-ion-select-popover-md{--inner-border-width:0}.item-radio-checked.sc-ion-select-popover-md{--background:rgba(var(--ion-color-primary-rgb, 0, 84, 233), 0.08);--background-focused:var(--ion-color-primary, #0054e9);--background-focused-opacity:0.2;--background-hover:var(--ion-color-primary, #0054e9);--background-hover-opacity:0.12}.item-checkbox-checked.sc-ion-select-popover-md{--background-activated:var(--ion-item-color, var(--ion-text-color, #000));--background-focused:var(--ion-item-color, var(--ion-text-color, #000));--background-hover:var(--ion-item-color, var(--ion-text-color, #000));--color:var(--ion-color-primary, #0054e9)}`;
|
|
1351
890
|
|
|
1352
891
|
const SelectPopover = class {
|
|
1353
892
|
constructor(hostRef) {
|
|
1354
893
|
registerInstance(this, hostRef);
|
|
894
|
+
// Tracks the option that received Enter-keydown so keyup only
|
|
895
|
+
// dismisses when the press started on the same option. Prevents
|
|
896
|
+
// Enter on the triggering ion-select from auto-dismissing.
|
|
897
|
+
this.pendingEnterTarget = null;
|
|
898
|
+
/**
|
|
899
|
+
* An array of options for the popover
|
|
900
|
+
*/
|
|
901
|
+
this.options = [];
|
|
1355
902
|
}
|
|
1356
|
-
get el() { return getElement(this); }
|
|
1357
|
-
// Tracks the option that received Enter-keydown so keyup only
|
|
1358
|
-
// dismisses when the press started on the same option. Prevents
|
|
1359
|
-
// Enter on the triggering ion-select from auto-dismissing.
|
|
1360
|
-
pendingEnterTarget = null;
|
|
1361
|
-
/**
|
|
1362
|
-
* The header text of the popover
|
|
1363
|
-
*/
|
|
1364
|
-
header;
|
|
1365
|
-
/**
|
|
1366
|
-
* The subheader text of the popover
|
|
1367
|
-
*/
|
|
1368
|
-
subHeader;
|
|
1369
|
-
/**
|
|
1370
|
-
* The text content of the popover body
|
|
1371
|
-
*/
|
|
1372
|
-
message;
|
|
1373
|
-
/**
|
|
1374
|
-
* If true, the select accepts multiple values
|
|
1375
|
-
*/
|
|
1376
|
-
multiple;
|
|
1377
|
-
/**
|
|
1378
|
-
* An array of options for the popover
|
|
1379
|
-
*/
|
|
1380
|
-
options = [];
|
|
1381
903
|
findOptionFromEvent(ev) {
|
|
1382
904
|
const { options } = this;
|
|
1383
905
|
return options.find((o) => o.value === ev.target.value);
|
|
@@ -1390,7 +912,7 @@ const SelectPopover = class {
|
|
|
1390
912
|
callOptionHandler(ev) {
|
|
1391
913
|
const option = this.findOptionFromEvent(ev);
|
|
1392
914
|
const values = this.getValues(ev);
|
|
1393
|
-
if (option
|
|
915
|
+
if (option === null || option === void 0 ? void 0 : option.handler) {
|
|
1394
916
|
safeCall(option.handler, values);
|
|
1395
917
|
}
|
|
1396
918
|
}
|
|
@@ -1435,94 +957,45 @@ const SelectPopover = class {
|
|
|
1435
957
|
}
|
|
1436
958
|
}
|
|
1437
959
|
renderCheckboxOptions(options) {
|
|
1438
|
-
|
|
1439
|
-
return options.map((option, index) => {
|
|
1440
|
-
/**
|
|
1441
|
-
* Cast to `SelectOverlayOption` to access rich content
|
|
1442
|
-
* fields (`startContent`, `endContent`, `description`)
|
|
1443
|
-
* that are passed through from `ion-select` but not
|
|
1444
|
-
* part of the public `SelectPopoverOption` interface.
|
|
1445
|
-
*/
|
|
1446
|
-
const richOption = option;
|
|
1447
|
-
const hasRichContent = !!richOption.startContent || !!richOption.endContent || !!richOption.description;
|
|
1448
|
-
const optionLabelOptions = {
|
|
1449
|
-
id: `popover-option-${index}`,
|
|
1450
|
-
label: richOption.text,
|
|
1451
|
-
startContent: richOption.startContent,
|
|
1452
|
-
endContent: richOption.endContent,
|
|
1453
|
-
description: richOption.description,
|
|
1454
|
-
};
|
|
1455
|
-
const defaultLabelPlacement = getOverlayLabelPlacement(mode, 'checkbox');
|
|
1456
|
-
const defaultJustify = getOverlayLabelJustify(mode, 'checkbox');
|
|
1457
|
-
return (h("ion-item", {
|
|
960
|
+
return options.map((option) => (h("ion-item", { class: Object.assign({
|
|
1458
961
|
// TODO FW-4784
|
|
1459
|
-
|
|
1460
|
-
|
|
1461
|
-
|
|
1462
|
-
|
|
1463
|
-
|
|
1464
|
-
|
|
1465
|
-
|
|
1466
|
-
}, value: option.value, disabled: option.disabled, checked: option.checked, justify: richOption.justify ?? defaultJustify, labelPlacement: richOption.labelPlacement ?? defaultLabelPlacement, onIonChange: (ev) => {
|
|
1467
|
-
this.setChecked(ev);
|
|
1468
|
-
this.callOptionHandler(ev);
|
|
1469
|
-
// TODO FW-4784
|
|
1470
|
-
forceUpdate(this);
|
|
1471
|
-
} }, renderOptionLabel(optionLabelOptions, 'select-option-label'))));
|
|
1472
|
-
});
|
|
962
|
+
'item-checkbox-checked': option.checked
|
|
963
|
+
}, getClassMap(option.cssClass)) }, h("ion-checkbox", { value: option.value, disabled: option.disabled, checked: option.checked, justify: "start", labelPlacement: "end", onIonChange: (ev) => {
|
|
964
|
+
this.setChecked(ev);
|
|
965
|
+
this.callOptionHandler(ev);
|
|
966
|
+
// TODO FW-4784
|
|
967
|
+
forceUpdate(this);
|
|
968
|
+
} }, option.text))));
|
|
1473
969
|
}
|
|
1474
970
|
renderRadioOptions(options) {
|
|
1475
|
-
const mode = getIonMode(this);
|
|
1476
971
|
const checked = options.filter((o) => o.checked).map((o) => o.value)[0];
|
|
1477
|
-
return (h("ion-radio-group", { value: checked, onIonChange: (ev) => this.callOptionHandler(ev) }, options.map((option
|
|
1478
|
-
/**
|
|
1479
|
-
* Cast to `SelectOverlayOption` to access rich content
|
|
1480
|
-
* fields (`startContent`, `endContent`, `description`)
|
|
1481
|
-
* that are passed through from `ion-select` but not
|
|
1482
|
-
* part of the public `SelectPopoverOption` interface.
|
|
1483
|
-
*/
|
|
1484
|
-
const richOption = option;
|
|
1485
|
-
const hasRichContent = !!richOption.startContent || !!richOption.endContent || !!richOption.description;
|
|
1486
|
-
const optionLabelOptions = {
|
|
1487
|
-
id: `popover-option-${index}`,
|
|
1488
|
-
label: richOption.text,
|
|
1489
|
-
startContent: richOption.startContent,
|
|
1490
|
-
endContent: richOption.endContent,
|
|
1491
|
-
description: richOption.description,
|
|
1492
|
-
};
|
|
1493
|
-
return (h("ion-item", {
|
|
972
|
+
return (h("ion-radio-group", { value: checked, onIonChange: (ev) => this.callOptionHandler(ev) }, options.map((option) => (h("ion-item", { class: Object.assign({
|
|
1494
973
|
// TODO FW-4784
|
|
1495
|
-
|
|
1496
|
-
|
|
1497
|
-
|
|
1498
|
-
|
|
974
|
+
'item-radio-checked': option.value === checked
|
|
975
|
+
}, getClassMap(option.cssClass)) }, h("ion-radio", { value: option.value, disabled: option.disabled, onClick: () => this.dismissParentPopover(), onKeyDown: (ev) => {
|
|
976
|
+
if (ev.key === 'Enter' && !ev.repeat) {
|
|
977
|
+
this.pendingEnterTarget = ev.currentTarget;
|
|
1499
978
|
}
|
|
1500
|
-
},
|
|
1501
|
-
|
|
1502
|
-
|
|
1503
|
-
|
|
1504
|
-
|
|
1505
|
-
|
|
1506
|
-
|
|
1507
|
-
|
|
1508
|
-
|
|
979
|
+
}, onKeyUp: (ev) => {
|
|
980
|
+
if (ev.key === ' ') {
|
|
981
|
+
// Space selects and dismisses in one press.
|
|
982
|
+
this.dismissParentPopover();
|
|
983
|
+
}
|
|
984
|
+
else if (ev.key === 'Enter') {
|
|
985
|
+
const shouldDismiss = this.pendingEnterTarget === ev.currentTarget;
|
|
986
|
+
this.pendingEnterTarget = null;
|
|
987
|
+
if (shouldDismiss) {
|
|
1509
988
|
this.dismissParentPopover();
|
|
1510
989
|
}
|
|
1511
|
-
|
|
1512
|
-
|
|
1513
|
-
this.pendingEnterTarget = null;
|
|
1514
|
-
if (shouldDismiss) {
|
|
1515
|
-
this.dismissParentPopover();
|
|
1516
|
-
}
|
|
1517
|
-
}
|
|
1518
|
-
} }, renderOptionLabel(optionLabelOptions, 'select-option-label'))));
|
|
1519
|
-
})));
|
|
990
|
+
}
|
|
991
|
+
} }, option.text))))));
|
|
1520
992
|
}
|
|
1521
993
|
render() {
|
|
1522
994
|
const { header, message, options, subHeader } = this;
|
|
1523
995
|
const hasSubHeaderOrMessage = subHeader !== undefined || message !== undefined;
|
|
1524
|
-
return (h(Host, { key: '
|
|
996
|
+
return (h(Host, { key: 'e7449a1ecfcdbf45a79f8e26a00253c4e146448a', class: getIonMode(this) }, h("ion-list", { key: '52abdfc8668c3429a0dcefef8ddedb6647fdd894' }, header !== undefined && h("ion-list-header", { key: '978e5c03728756feafcc60a0e10e6ec59bf2ae11' }, header), hasSubHeaderOrMessage && (h("ion-item", { key: 'e93c44e7f07a76def16e4b11f0fb4780d84ed402' }, h("ion-label", { key: 'bba1aac43b0bc7f4f00978dd8301985233f3725c', class: "ion-text-wrap" }, subHeader !== undefined && h("h3", { key: 'ad96f6017cf2cc5219540bded2c4f1ca3b532de2' }, subHeader), message !== undefined && h("p", { key: '3fd038921dc40c4d0c29734433984b279ccaeec3' }, message)))), this.renderOptions(options))));
|
|
1525
997
|
}
|
|
998
|
+
get el() { return getElement(this); }
|
|
1526
999
|
};
|
|
1527
1000
|
SelectPopover.style = {
|
|
1528
1001
|
ios: selectPopoverIosCss(),
|