@ionic/core 8.8.19 → 8.8.20-dev.11787158518.168a2fea
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/index.js +1 -1
- package/components/ion-accordion-group.js +1 -1
- package/components/ion-accordion.js +1 -1
- package/components/ion-action-sheet.js +1 -1
- package/components/ion-alert.js +1 -1
- package/components/ion-app.js +1 -1
- package/components/ion-avatar.js +1 -1
- package/components/ion-back-button.js +1 -1
- package/components/ion-backdrop.js +1 -1
- package/components/ion-badge.js +1 -1
- package/components/ion-breadcrumb.js +1 -1
- package/components/ion-breadcrumbs.js +1 -1
- package/components/ion-button.js +1 -1
- package/components/ion-buttons.js +1 -1
- package/components/ion-card-content.js +1 -1
- package/components/ion-card-header.js +1 -1
- package/components/ion-card-subtitle.js +1 -1
- package/components/ion-card-title.js +1 -1
- package/components/ion-card.js +1 -1
- package/components/ion-checkbox.js +1 -1
- package/components/ion-chip.js +1 -1
- package/components/ion-col.js +1 -1
- package/components/ion-content.js +1 -1
- package/components/ion-datetime-button.js +1 -1
- package/components/ion-datetime.js +1 -1
- package/components/ion-fab-button.js +1 -1
- package/components/ion-fab-list.js +1 -1
- package/components/ion-fab.js +1 -1
- package/components/ion-footer.js +1 -1
- package/components/ion-grid.js +1 -1
- package/components/ion-header.js +1 -1
- package/components/ion-icon.js +1 -1
- package/components/ion-img.js +1 -1
- package/components/ion-infinite-scroll-content.js +1 -1
- package/components/ion-infinite-scroll.js +1 -1
- package/components/ion-input-otp.js +1 -1
- package/components/ion-input-password-toggle.js +1 -1
- package/components/ion-input.js +1 -1
- package/components/ion-item-divider.js +1 -1
- package/components/ion-item-group.js +1 -1
- package/components/ion-item-option.js +1 -1
- package/components/ion-item-options.js +1 -1
- package/components/ion-item-sliding.js +1 -1
- package/components/ion-item.js +1 -1
- package/components/ion-label.js +1 -1
- package/components/ion-list-header.js +1 -1
- package/components/ion-list.js +1 -1
- package/components/ion-loading.js +1 -1
- package/components/ion-menu-button.js +1 -1
- package/components/ion-menu-toggle.js +1 -1
- package/components/ion-menu.js +1 -1
- package/components/ion-modal.js +1 -1
- package/components/ion-nav-link.js +1 -1
- package/components/ion-nav.js +1 -1
- package/components/ion-note.js +1 -1
- package/components/ion-picker-column-option.js +1 -1
- package/components/ion-picker-column.js +1 -1
- package/components/ion-picker.js +1 -1
- package/components/ion-popover.js +1 -1
- package/components/ion-progress-bar.js +1 -1
- package/components/ion-radio-group.js +1 -1
- package/components/ion-radio.js +1 -1
- package/components/ion-range.js +1 -1
- package/components/ion-refresher-content.js +1 -1
- package/components/ion-refresher.js +1 -1
- package/components/ion-reorder-group.js +1 -1
- package/components/ion-reorder.js +1 -1
- package/components/ion-ripple-effect.js +1 -1
- package/components/ion-route-redirect.js +1 -1
- package/components/ion-route.js +1 -1
- package/components/ion-router-link.js +1 -1
- package/components/ion-router-outlet.js +1 -1
- package/components/ion-router.js +1 -1
- package/components/ion-row.js +1 -1
- package/components/ion-searchbar.js +1 -1
- package/components/ion-segment-button.js +1 -1
- package/components/ion-segment-content.js +1 -1
- package/components/ion-segment-view.js +1 -1
- package/components/ion-segment.js +1 -1
- package/components/ion-select-modal.js +1 -1
- package/components/ion-select-option.js +1 -1
- package/components/ion-select-popover.js +1 -1
- package/components/ion-select.js +1 -1
- package/components/ion-skeleton-text.js +1 -1
- package/components/ion-spinner.js +1 -1
- package/components/ion-split-pane.js +1 -1
- package/components/ion-tab-bar.js +1 -1
- package/components/ion-tab-button.js +1 -1
- package/components/ion-tab.js +1 -1
- package/components/ion-tabs.js +1 -1
- package/components/ion-text.js +1 -1
- package/components/ion-textarea.js +1 -1
- package/components/ion-thumbnail.js +1 -1
- package/components/ion-title.js +1 -1
- package/components/ion-toast.js +1 -1
- package/components/ion-toggle.js +1 -1
- package/components/ion-toolbar.js +1 -1
- package/components/p--m5cCjbK.js +4 -0
- package/components/p-1jI5oW-W.js +4 -0
- package/components/{p-6J0vc7Z8.js → p-63OhffQv.js} +1 -1
- package/components/p-8FN7p701.js +4 -0
- package/components/p-B4uHHhPK.js +4 -0
- package/components/p-BMPN55of.js +4 -0
- package/components/p-BNJOu1Q2.js +4 -0
- package/components/p-BOvLNVKq.js +4 -0
- package/components/p-BSQPZ79H.js +4 -0
- package/components/p-BeamQXHF.js +4 -0
- package/components/p-BhamHSw3.js +4 -0
- package/components/p-Bjig0DJK.js +4 -0
- package/components/p-BjluhQMI.js +4 -0
- package/components/p-BlsIikdZ.js +4 -0
- package/components/p-BqPNzJf6.js +4 -0
- package/components/p-BrD9Xv62.js +4 -0
- package/components/p-BvJqoZ5R.js +4 -0
- package/components/p-Bz6z3Asd.js +4 -0
- package/components/p-C5KYjZWD.js +4 -0
- package/components/p-C6HnVvHO.js +4 -0
- package/components/p-C7jvh5Wy.js +4 -0
- package/components/p-C9BGR5fy.js +4 -0
- package/components/p-CB-y1CdP.js +4 -0
- package/components/p-CEW4RXZO.js +4 -0
- package/components/p-CHH3loEE.js +4 -0
- package/components/p-CJKUWjmg.js +4 -0
- package/components/{p-qMmFisyx.js → p-CMLAwl_N.js} +1 -1
- package/components/{p-C7II1iDj.js → p-C_phlPMC.js} +1 -1
- package/components/p-CbhUdtjf.js +4 -0
- package/components/p-CejmQs3h.js +4 -0
- package/components/p-CtZqa4HM.js +4 -0
- package/components/p-D7-vHX0A.js +4 -0
- package/components/p-D9qIVSWm.js +4 -0
- package/components/p-DD5fQ4EQ.js +4 -0
- package/components/p-DE-3iMNW.js +4 -0
- package/components/p-DFvZn99E.js +4 -0
- package/components/p-DHFt2rdc.js +4 -0
- package/components/p-DM-PrAoh.js +4 -0
- package/components/p-DSzSbVP2.js +4 -0
- package/components/{p--JUspHvy.js → p-DV85C0e0.js} +1 -1
- package/components/p-DWCzVL3Y.js +4 -0
- package/components/p-D_RCyzwu.js +4 -0
- package/components/p-D_tD8r3L.js +4 -0
- package/components/p-DaA_8eqt.js +4 -0
- package/components/p-DjCtLZbF.js +4 -0
- package/components/p-Dmd2xqCe.js +4 -0
- package/components/p-Dojwmvde.js +4 -0
- package/components/{p-BkKAANMJ.js → p-DwpKZ6rl.js} +1 -1
- package/components/p-DzRT60Tw.js +4 -0
- package/components/p-G0TxqHfe.js +4 -0
- package/components/p-G6JR-cr_.js +4 -0
- package/components/p-GG5GhznE.js +4 -0
- package/components/p-TXPDHL13.js +4 -0
- package/components/p-UIBJkZf8.js +4 -0
- package/components/p-_IKFD3ID.js +4 -0
- package/components/p-byZM6qHV.js +4 -0
- package/components/p-dKq2jIum.js +4 -0
- package/components/p-fruGqVHh.js +4 -0
- package/components/p-iYhH60Tc.js +4 -0
- package/components/p-ia3IDdJS.js +4 -0
- package/components/{p-DqLB8yFQ.js → p-ryyf_ItD.js} +1 -1
- package/dist/cjs/{animation-Ch16T-Nb.js → animation-C0mOHzej.js} +4 -4
- package/dist/cjs/{app-globals-Dd89e0MR.js → app-globals-BREG4twP.js} +1 -1
- package/dist/cjs/{button-active-AWp_ygDP.js → button-active-CVMevT9a.js} +3 -3
- package/dist/cjs/config-CjUbvdPW.js +36 -0
- package/dist/cjs/{dir-DD0jPVH3.js → dir-zwDPRE5K.js} +2 -3
- package/dist/cjs/{format-BUFWn4Bn.js → format-pp0Du3K-.js} +40 -30
- package/dist/cjs/{framework-delegate-CEzl4MEA.js → framework-delegate-Dfo5XsGv.js} +5 -7
- package/dist/cjs/{gesture-controller-dtqlP_q4.js → gesture-controller-BDUH7687.js} +15 -8
- package/dist/cjs/{haptic-ClPPQ_PS.js → haptic-Ch-X4gRx.js} +2 -3
- package/dist/cjs/{hardware-back-button-CXmUnTJC.js → hardware-back-button-fqpYh-kd.js} +4 -4
- package/dist/cjs/{helpers-DdZyl6WL.js → helpers-YPQybDph.js} +4 -4
- package/dist/cjs/index-B7zJsYWS.js +429 -0
- package/dist/cjs/{index-CukZnH1U.js → index-BLdJCcJY.js} +5 -5
- package/dist/cjs/{index-MWAIyVLl.js → index-DDg31ZF5.js} +3 -3
- package/dist/cjs/{index-DOiZqxWZ.js → index-DXsPSne6.js} +6 -7
- package/dist/cjs/{index-BJ2-LydH.js → index-DwlRtFZe.js} +9 -3
- package/dist/cjs/{index-BfaXsATC.js → index-uvry__L4.js} +31 -14
- package/dist/cjs/{index-DqmRDbxg.js → index-wOmugbdg.js} +1 -1
- package/dist/cjs/{index-CD92bI7B.js → index-zVCah4Uz.js} +2 -2
- package/dist/cjs/index.cjs.js +19 -19
- package/dist/cjs/{input-shims-CPKgrIe3.js → input-shims-Cbu1fcye.js} +10 -12
- package/dist/cjs/input.utils-BZdMWVrt.js +35 -0
- package/dist/cjs/ion-accordion_2.cjs.entry.js +369 -341
- package/dist/cjs/ion-action-sheet.cjs.entry.js +188 -77
- package/dist/cjs/ion-alert.cjs.entry.js +274 -112
- package/dist/cjs/ion-app_8.cjs.entry.js +307 -190
- package/dist/cjs/ion-avatar_3.cjs.entry.js +10 -4
- package/dist/cjs/ion-back-button.cjs.entry.js +48 -24
- package/dist/cjs/ion-backdrop.cjs.entry.js +18 -14
- package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +200 -122
- package/dist/cjs/ion-button_2.cjs.entry.js +139 -67
- package/dist/cjs/ion-card_5.cjs.entry.js +83 -31
- package/dist/cjs/ion-checkbox.cjs.entry.js +153 -102
- package/dist/cjs/ion-chip.cjs.entry.js +17 -11
- package/dist/cjs/ion-col_3.cjs.entry.js +134 -10
- package/dist/cjs/ion-datetime-button.cjs.entry.js +254 -242
- package/dist/cjs/ion-datetime.cjs.entry.js +2770 -0
- package/dist/cjs/ion-fab_3.cjs.entry.js +140 -82
- package/dist/cjs/ion-img.cjs.entry.js +35 -13
- package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +101 -73
- package/dist/cjs/ion-input-otp.cjs.entry.js +435 -372
- package/dist/cjs/ion-input-password-toggle.cjs.entry.js +36 -22
- package/dist/cjs/ion-input.cjs.entry.js +343 -212
- package/dist/cjs/ion-item-option_3.cjs.entry.js +95 -55
- package/dist/cjs/ion-item_8.cjs.entry.js +192 -93
- package/dist/cjs/ion-loading.cjs.entry.js +147 -61
- package/dist/cjs/ion-menu_3.cjs.entry.js +169 -107
- package/dist/cjs/ion-modal.cjs.entry.js +456 -262
- package/dist/cjs/ion-nav_2.cjs.entry.js +102 -159
- package/dist/cjs/ion-picker-column-option.cjs.entry.js +38 -34
- package/dist/cjs/ion-picker-column.cjs.entry.js +418 -406
- package/dist/cjs/ion-picker.cjs.entry.js +402 -393
- package/dist/cjs/ion-popover.cjs.entry.js +320 -206
- package/dist/cjs/ion-progress-bar.cjs.entry.js +32 -26
- package/dist/cjs/ion-radio_2.cjs.entry.js +208 -135
- package/dist/cjs/ion-range.cjs.entry.js +304 -239
- package/dist/cjs/ion-refresher_2.cjs.entry.js +166 -94
- package/dist/cjs/ion-reorder_2.cjs.entry.js +54 -24
- package/dist/cjs/ion-ripple-effect.cjs.entry.js +14 -14
- package/dist/cjs/ion-route_4.cjs.entry.js +176 -72
- package/dist/cjs/ion-searchbar.cjs.entry.js +291 -200
- package/dist/cjs/ion-segment-content.cjs.entry.js +2 -2
- package/dist/cjs/ion-segment-view.cjs.entry.js +28 -17
- package/dist/cjs/ion-segment_2.cjs.entry.js +169 -126
- package/dist/cjs/ion-select-modal.cjs.entry.js +105 -49
- package/dist/cjs/ion-select_3.cjs.entry.js +787 -260
- package/dist/cjs/ion-spinner.cjs.entry.js +24 -10
- package/dist/cjs/ion-split-pane.cjs.entry.js +29 -16
- package/dist/cjs/ion-tab-bar_2.cjs.entry.js +101 -42
- package/dist/cjs/ion-tab_2.cjs.entry.js +54 -28
- package/dist/cjs/ion-text.cjs.entry.js +11 -5
- package/dist/cjs/ion-textarea.cjs.entry.js +296 -189
- package/dist/cjs/ion-toast.cjs.entry.js +237 -118
- package/dist/cjs/ion-toggle.cjs.entry.js +175 -122
- package/dist/cjs/{ionic-global-BerQGEpE.js → ionic-global-k6hOWWpn.js} +13 -8
- package/dist/cjs/ionic.cjs.js +4 -4
- package/dist/cjs/{ios.transition-CTiTDh3m.js → ios.transition-zTmJz8T-.js} +14 -18
- package/dist/cjs/{item-multiple-inputs-jOJZE_I0.js → item-multiple-inputs-BdYSbfKN.js} +1 -1
- package/dist/cjs/{keyboard-hHzlEQpk.js → keyboard-Cix5TVkD.js} +2 -2
- package/dist/cjs/{keyboard-UuAS4D_9.js → keyboard-cHxZlTyz.js} +2 -2
- package/dist/cjs/{keyboard-controller-GXBiBRKS.js → keyboard-controller-PtZoN2GS.js} +6 -6
- package/dist/cjs/loader.cjs.js +4 -4
- package/dist/cjs/{md.transition-BpiTAaqF.js → md.transition-nb_4pUXu.js} +8 -9
- package/dist/cjs/overlay-control-label-D2sdL2O8.js +50 -0
- package/dist/cjs/{overlays-CQ_c1fko.js → overlays-KaNVDNqC.js} +48 -33
- package/dist/cjs/select-option-render-pULCGldr.js +123 -0
- package/dist/cjs/slot-mutation-controller-DPHmqXdV.js +397 -0
- package/dist/cjs/{status-tap-7FzRlXNr.js → status-tap-o9IIymsP.js} +4 -4
- package/dist/cjs/{swipe-back-DwTZiAc9.js → swipe-back-B7X9VOlH.js} +5 -5
- package/dist/cjs/{theme-CeDs6Hcv.js → theme-Bw0rpaNN.js} +6 -1
- package/dist/collection/collection-manifest.json +6 -10
- package/dist/collection/components/accordion/accordion.js +315 -312
- package/dist/collection/components/accordion-group/accordion-group.js +48 -25
- package/dist/collection/components/action-sheet/action-sheet.ios.css +228 -2
- package/dist/collection/components/action-sheet/action-sheet.js +173 -64
- package/dist/collection/components/action-sheet/action-sheet.md.css +174 -2
- package/dist/collection/components/action-sheet/test/basic/fixture.js +3 -0
- package/dist/collection/components/alert/alert.ios.css +279 -10
- package/dist/collection/components/alert/alert.js +257 -97
- package/dist/collection/components/alert/alert.md.css +268 -20
- package/dist/collection/components/app/app.js +3 -0
- package/dist/collection/components/back-button/back-button.js +42 -19
- package/dist/collection/components/backdrop/backdrop.js +16 -14
- package/dist/collection/components/badge/badge.js +6 -0
- package/dist/collection/components/breadcrumb/breadcrumb.js +91 -30
- package/dist/collection/components/breadcrumbs/breadcrumbs.js +103 -88
- package/dist/collection/components/button/button.js +132 -61
- package/dist/collection/components/buttons/buttons.js +13 -15
- package/dist/collection/components/card/card.js +54 -21
- package/dist/collection/components/card-header/card-header.js +12 -8
- package/dist/collection/components/card-subtitle/card-subtitle.js +6 -0
- package/dist/collection/components/card-title/card-title.js +6 -0
- package/dist/collection/components/checkbox/checkbox.js +147 -97
- package/dist/collection/components/chip/chip.js +14 -10
- package/dist/collection/components/col/col.js +127 -3
- package/dist/collection/components/content/content.js +93 -64
- package/dist/collection/components/datetime/datetime.ios.css +42 -2
- package/dist/collection/components/datetime/datetime.js +1042 -807
- package/dist/collection/components/datetime/datetime.md.css +42 -1
- package/dist/collection/components/datetime/utils/data.js +13 -14
- package/dist/collection/components/datetime/utils/format.js +21 -11
- package/dist/collection/components/datetime/utils/manipulation.js +8 -8
- package/dist/collection/components/datetime/utils/parse.js +10 -10
- package/dist/collection/components/datetime/utils/state.js +8 -2
- package/dist/collection/components/datetime/utils/validate.js +4 -5
- package/dist/collection/components/datetime-button/datetime-button.ios.css +5 -0
- package/dist/collection/components/datetime-button/datetime-button.js +247 -237
- package/dist/collection/components/datetime-button/datetime-button.md.css +5 -0
- package/dist/collection/components/fab/fab.js +20 -13
- package/dist/collection/components/fab-button/fab-button.js +104 -55
- package/dist/collection/components/fab-list/fab-list.js +10 -11
- package/dist/collection/components/footer/footer.js +50 -44
- package/dist/collection/components/grid/grid.js +4 -6
- package/dist/collection/components/header/header.js +35 -25
- package/dist/collection/components/img/img.js +34 -10
- package/dist/collection/components/infinite-scroll/infinite-scroll.js +73 -66
- package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.js +20 -3
- package/dist/collection/components/input/input.ios.css +57 -26
- package/dist/collection/components/input/input.js +336 -206
- package/dist/collection/components/input/input.md.css +79 -43
- package/dist/collection/components/input-otp/input-otp.js +430 -368
- package/dist/collection/components/input-password-toggle/input-password-toggle.js +32 -19
- package/dist/collection/components/item/item.js +99 -53
- package/dist/collection/components/item-divider/item-divider.js +17 -12
- package/dist/collection/components/item-group/item-group.js +1 -1
- package/dist/collection/components/item-option/item-option.js +50 -22
- package/dist/collection/components/item-options/item-options.js +11 -8
- package/dist/collection/components/item-sliding/item-sliding.js +27 -21
- package/dist/collection/components/label/label.js +26 -6
- package/dist/collection/components/list/list.js +11 -8
- package/dist/collection/components/list-header/list-header.js +12 -2
- package/dist/collection/components/loading/loading.js +135 -51
- package/dist/collection/components/menu/menu.js +103 -61
- package/dist/collection/components/menu-button/menu-button.js +30 -21
- package/dist/collection/components/menu-toggle/menu-toggle.js +22 -15
- 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 +22 -10
- package/dist/collection/components/modal/gestures/swipe-to-close.js +15 -3
- package/dist/collection/components/modal/modal.js +398 -228
- package/dist/collection/components/modal/safe-area-utils.js +6 -7
- package/dist/collection/components/modal/test/fixtures.js +3 -0
- package/dist/collection/components/nav/nav.js +69 -247
- package/dist/collection/components/nav/view-controller.js +7 -1
- package/dist/collection/components/nav-link/nav-link.js +21 -10
- package/dist/collection/components/note/note.js +8 -2
- package/dist/collection/components/picker/picker.js +398 -390
- package/dist/collection/components/picker-column/picker-column.css +3 -0
- package/dist/collection/components/picker-column/picker-column.js +414 -404
- package/dist/collection/components/picker-column-option/picker-column-option.js +33 -31
- package/dist/collection/components/picker-column-option/picker-column-option.md.css +6 -1
- package/dist/collection/components/popover/animations/ios.enter.js +1 -2
- package/dist/collection/components/popover/animations/md.enter.js +1 -2
- package/dist/collection/components/popover/popover.ios.css +15 -0
- package/dist/collection/components/popover/popover.js +302 -185
- package/dist/collection/components/popover/popover.md.css +15 -0
- package/dist/collection/components/popover/test/fixture.js +1 -0
- package/dist/collection/components/popover/utils.js +4 -6
- package/dist/collection/components/progress-bar/progress-bar.js +27 -23
- package/dist/collection/components/radio/radio.js +102 -66
- package/dist/collection/components/radio-group/radio-group.js +101 -66
- package/dist/collection/components/radio-group/test/fixtures.js +2 -0
- package/dist/collection/components/range/range.js +298 -234
- package/dist/collection/components/refresher/refresher.js +110 -78
- package/dist/collection/components/refresher-content/refresher-content.js +41 -4
- package/dist/collection/components/reorder/reorder.js +2 -1
- package/dist/collection/components/reorder-group/reorder-group.js +44 -15
- package/dist/collection/components/ripple-effect/ripple-effect.js +12 -13
- package/dist/collection/components/route/route.js +39 -10
- package/dist/collection/components/route-redirect/route-redirect.js +31 -0
- package/dist/collection/components/router/router.js +37 -33
- package/dist/collection/components/router/utils/dom.js +25 -7
- package/dist/collection/components/router/utils/matching.js +7 -9
- package/dist/collection/components/router/utils/parser.js +1 -1
- package/dist/collection/components/router/utils/path.js +0 -1
- package/dist/collection/components/router-link/router-link.js +37 -12
- package/dist/collection/components/router-outlet/router-outlet.js +82 -21
- package/dist/collection/components/row/row.js +1 -1
- package/dist/collection/components/searchbar/searchbar.js +289 -199
- package/dist/collection/components/segment/segment.js +120 -85
- package/dist/collection/components/segment-button/segment-button.js +43 -37
- package/dist/collection/components/segment-content/segment-content.js +1 -1
- package/dist/collection/components/segment-view/segment-view.js +26 -16
- package/dist/collection/components/select/select.ios.css +96 -69
- package/dist/collection/components/select/select.js +629 -213
- package/dist/collection/components/select/select.md.css +118 -85
- package/dist/collection/components/select-modal/select-modal.ios.css +218 -0
- package/dist/collection/components/select-modal/select-modal.js +92 -38
- package/dist/collection/components/select-modal/select-modal.md.css +164 -0
- package/dist/collection/components/select-modal/test/fixtures.js +8 -1
- package/dist/collection/components/select-option/select-option.js +110 -9
- package/dist/collection/components/select-popover/select-popover.ios.css +218 -0
- package/dist/collection/components/select-popover/select-popover.js +103 -36
- package/dist/collection/components/select-popover/select-popover.md.css +164 -0
- package/dist/collection/components/select-popover/test/fixtures.js +8 -1
- package/dist/collection/components/skeleton-text/skeleton-text.js +12 -8
- package/dist/collection/components/spinner/spinner.js +21 -9
- package/dist/collection/components/split-pane/split-pane.js +27 -15
- package/dist/collection/components/tab/tab.js +17 -6
- package/dist/collection/components/tab-bar/tab-bar.js +32 -14
- package/dist/collection/components/tab-button/tab-button.js +62 -23
- package/dist/collection/components/tabs/tabs.js +33 -20
- package/dist/collection/components/text/text.js +8 -2
- package/dist/collection/components/textarea/textarea.ios.css +94 -62
- package/dist/collection/components/textarea/textarea.js +287 -181
- package/dist/collection/components/textarea/textarea.md.css +103 -77
- package/dist/collection/components/thumbnail/thumbnail.js +1 -1
- package/dist/collection/components/title/title.js +18 -2
- package/dist/collection/components/toast/toast.js +223 -106
- package/dist/collection/components/toggle/toggle.js +167 -115
- package/dist/collection/components/toolbar/toolbar.js +15 -7
- package/dist/collection/global/config.js +4 -6
- package/dist/collection/global/ionic-global.js +8 -2
- package/dist/collection/index.js +1 -1
- package/dist/collection/utils/animation/animation.js +3 -3
- package/dist/collection/utils/config.js +5 -4
- package/dist/collection/utils/focus-controller/index.js +1 -1
- package/dist/collection/utils/focus-trap.js +3 -3
- package/dist/collection/utils/forms/index.js +1 -0
- package/dist/collection/utils/forms/start-container-controller.js +132 -0
- package/dist/collection/utils/framework-delegate.js +4 -6
- package/dist/collection/utils/gesture/gesture-controller.js +15 -8
- package/dist/collection/utils/gesture/index.js +10 -2
- 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 +4 -5
- package/dist/collection/utils/input-shims/hacks/scroll-data.js +1 -2
- 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 +23 -4
- package/dist/collection/utils/menu-controller/index.js +1 -2
- package/dist/collection/utils/native/haptic.js +2 -3
- package/dist/collection/utils/native/keyboard.js +2 -2
- package/dist/collection/utils/native/status-bar.js +1 -1
- package/dist/collection/utils/overlay-control-label.js +45 -0
- package/dist/collection/utils/overlays.js +38 -23
- package/dist/collection/utils/platform.js +4 -5
- package/dist/collection/utils/rtl/dir.js +2 -3
- package/dist/collection/utils/sanitization/index.js +276 -20
- package/dist/collection/utils/select-option-render.js +118 -0
- package/dist/collection/utils/slot-mutation-controller.js +1 -2
- package/dist/collection/utils/test/playwright/apply-keyboard-focus.js +1 -1
- package/dist/collection/utils/test/playwright/drag-element.js +2 -3
- package/dist/collection/utils/test/playwright/generator.js +3 -4
- package/dist/collection/utils/test/playwright/page/event-spy.js +11 -12
- package/dist/collection/utils/test/playwright/page/utils/goto.js +4 -5
- 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 +2 -3
- package/dist/collection/utils/test/press-keys.js +10 -17
- package/dist/collection/utils/theme.js +6 -1
- package/dist/collection/utils/transition/ios.transition.js +9 -13
- package/dist/collection/utils/transition/md.transition.js +3 -4
- package/dist/docs.json +557 -1257
- package/dist/esm/{animation-DLJpuoEz.js → animation-CGFdmGk9.js} +4 -4
- package/dist/esm/{app-globals-D0C5S4hU.js → app-globals-CYmMeGdU.js} +1 -1
- package/dist/esm/{button-active-CXXy0FIE.js → button-active-BDOsVAiZ.js} +3 -3
- package/dist/esm/config-DWCzVL3Y.js +32 -0
- package/dist/esm/{dir-o8OKV5aD.js → dir-Dojwmvde.js} +2 -3
- package/dist/esm/{format-CAmvpAez.js → format-Dcwga61t.js} +41 -31
- package/dist/esm/{framework-delegate-B9yvYzqV.js → framework-delegate-BHTU2Ip9.js} +5 -7
- package/dist/esm/{gesture-controller-BTEOs1at.js → gesture-controller-TXPDHL13.js} +15 -8
- package/dist/esm/{haptic-DzAMWJuk.js → haptic-Cq4UAeka.js} +2 -3
- package/dist/esm/{hardware-back-button-B93Gru0Y.js → hardware-back-button-gLJHMX_F.js} +4 -4
- package/dist/esm/{helpers-DkCLSLI9.js → helpers-CAGf8Wgp.js} +4 -4
- package/dist/esm/{index-DV3sJJW8.js → index-BvabGprD.js} +2 -2
- package/dist/esm/index-CKM1DdGm.js +424 -0
- package/dist/esm/{index-tcQvqkiX.js → index-ChhhtsGZ.js} +32 -15
- package/dist/esm/{index-DwNKJodj.js → index-Clc-28O1.js} +3 -3
- package/dist/esm/{index-DdeElWma.js → index-CqneaaGd.js} +6 -7
- package/dist/esm/{index-Bck1OwMs.js → index-DcPaH5uL.js} +9 -3
- package/dist/esm/{index-B_8X7INq.js → index-T0JxBI8V.js} +2 -2
- package/dist/esm/{index-Dsz7OTeL.js → index-WlteAIqz.js} +5 -5
- package/dist/esm/index.js +17 -16
- package/dist/esm/{input-shims-d-hDv86G.js → input-shims-B8sfni1e.js} +10 -12
- package/dist/esm/input.utils-B1ValN_N.js +33 -0
- package/dist/esm/ion-accordion_2.entry.js +369 -341
- package/dist/esm/ion-action-sheet.entry.js +188 -77
- package/dist/esm/ion-alert.entry.js +273 -111
- package/dist/esm/ion-app_8.entry.js +307 -190
- package/dist/esm/ion-avatar_3.entry.js +10 -4
- package/dist/esm/ion-back-button.entry.js +48 -24
- package/dist/esm/ion-backdrop.entry.js +18 -14
- package/dist/esm/ion-breadcrumb_2.entry.js +200 -122
- package/dist/esm/ion-button_2.entry.js +139 -67
- package/dist/esm/ion-card_5.entry.js +83 -31
- package/dist/esm/ion-checkbox.entry.js +153 -102
- package/dist/esm/ion-chip.entry.js +17 -11
- package/dist/esm/ion-col_3.entry.js +134 -10
- package/dist/esm/ion-datetime-button.entry.js +254 -242
- package/dist/esm/ion-datetime.entry.js +2768 -0
- package/dist/esm/ion-fab_3.entry.js +140 -82
- package/dist/esm/ion-img.entry.js +35 -13
- package/dist/esm/ion-infinite-scroll_2.entry.js +100 -72
- package/dist/esm/ion-input-otp.entry.js +435 -372
- package/dist/esm/ion-input-password-toggle.entry.js +36 -22
- package/dist/esm/ion-input.entry.js +341 -210
- package/dist/esm/ion-item-option_3.entry.js +95 -55
- package/dist/esm/ion-item_8.entry.js +192 -93
- package/dist/esm/ion-loading.entry.js +146 -60
- package/dist/esm/ion-menu_3.entry.js +169 -107
- package/dist/esm/ion-modal.entry.js +456 -262
- package/dist/esm/ion-nav_2.entry.js +102 -159
- package/dist/esm/ion-picker-column-option.entry.js +38 -34
- package/dist/esm/ion-picker-column.entry.js +418 -406
- package/dist/esm/ion-picker.entry.js +402 -393
- package/dist/esm/ion-popover.entry.js +320 -206
- package/dist/esm/ion-progress-bar.entry.js +32 -26
- package/dist/esm/ion-radio_2.entry.js +208 -135
- package/dist/esm/ion-range.entry.js +304 -239
- package/dist/esm/ion-refresher_2.entry.js +164 -92
- package/dist/esm/ion-reorder_2.entry.js +54 -24
- package/dist/esm/ion-ripple-effect.entry.js +14 -14
- package/dist/esm/ion-route_4.entry.js +176 -72
- package/dist/esm/ion-searchbar.entry.js +291 -200
- package/dist/esm/ion-segment-content.entry.js +2 -2
- package/dist/esm/ion-segment-view.entry.js +28 -17
- package/dist/esm/ion-segment_2.entry.js +169 -126
- package/dist/esm/ion-select-modal.entry.js +105 -49
- package/dist/esm/ion-select_3.entry.js +787 -260
- package/dist/esm/ion-spinner.entry.js +24 -10
- package/dist/esm/ion-split-pane.entry.js +29 -16
- package/dist/esm/ion-tab-bar_2.entry.js +101 -42
- package/dist/esm/ion-tab_2.entry.js +54 -28
- package/dist/esm/ion-text.entry.js +11 -5
- package/dist/esm/ion-textarea.entry.js +295 -188
- package/dist/esm/ion-toast.entry.js +236 -117
- package/dist/esm/ion-toggle.entry.js +175 -122
- package/dist/esm/{ionic-global-Cp_eT4sZ.js → ionic-global-BVB7BrLT.js} +13 -8
- package/dist/esm/ionic.js +5 -5
- package/dist/esm/{ios.transition-CxNhMt4a.js → ios.transition-DXRCmcbC.js} +14 -18
- package/dist/esm/{item-multiple-inputs-DlNuqNJm.js → item-multiple-inputs-rU8VaNNg.js} +1 -1
- package/dist/esm/{keyboard-ywgs5efA.js → keyboard-Cj8mLJeq.js} +2 -2
- package/dist/esm/{keyboard-CUw4ekVy.js → keyboard-DAF8GNJ9.js} +2 -2
- package/dist/esm/{keyboard-controller-BaaVITYt.js → keyboard-controller-DEwoa1ev.js} +6 -6
- package/dist/esm/loader.js +5 -5
- package/dist/esm/{md.transition-IE4mC3kp.js → md.transition-BMngO4i_.js} +8 -9
- package/dist/esm/overlay-control-label-BSQPZ79H.js +47 -0
- package/dist/esm/{overlays-COCl_nm9.js → overlays-CPmIs9Ls.js} +48 -33
- package/dist/esm/select-option-render-C4m76VGH.js +121 -0
- package/dist/esm/slot-mutation-controller-DiE_C9un.js +393 -0
- package/dist/esm/{status-tap-HhO5eQI9.js → status-tap-CHB7KwIb.js} +4 -4
- package/dist/esm/{swipe-back-DK6afpuO.js → swipe-back-C9HW1bug.js} +5 -5
- package/dist/esm/{theme-DiVJyqlX.js → theme-byZM6qHV.js} +6 -1
- package/dist/html.html-data.json +52 -80
- package/dist/ionic/index.esm.js +1 -1
- package/dist/ionic/ionic.esm.js +1 -1
- package/dist/ionic/p-06ec7136.entry.js +4 -0
- package/dist/ionic/p-09fe4fa3.entry.js +4 -0
- package/dist/ionic/p-10d45a07.entry.js +4 -0
- package/dist/ionic/p-208c8a07.entry.js +4 -0
- package/dist/ionic/p-212474fa.entry.js +4 -0
- package/dist/ionic/p-2eef1396.entry.js +4 -0
- package/dist/ionic/p-347e005d.entry.js +4 -0
- package/dist/ionic/p-3a0b3f1d.entry.js +4 -0
- package/dist/ionic/p-3b071259.entry.js +4 -0
- package/dist/ionic/{p-c6e49f3f.entry.js → p-40424a88.entry.js} +1 -1
- package/dist/ionic/p-4204184c.entry.js +4 -0
- package/dist/ionic/p-47464391.entry.js +4 -0
- package/dist/ionic/p-4eOQC00Z.js +4 -0
- package/dist/ionic/p-4f9c9126.entry.js +4 -0
- package/dist/ionic/p-5JsKPLJD.js +4 -0
- package/dist/ionic/p-5bc485c6.entry.js +4 -0
- package/dist/ionic/p-603a61e6.entry.js +4 -0
- package/dist/ionic/p-60576951.entry.js +4 -0
- package/dist/ionic/p-67a81d33.entry.js +4 -0
- package/dist/ionic/p-6affb775.entry.js +4 -0
- package/dist/ionic/p-6f120c25.entry.js +4 -0
- package/dist/ionic/p-71c82b60.entry.js +4 -0
- package/dist/ionic/p-79325ffe.entry.js +4 -0
- package/dist/ionic/{p-DZaO33Mw.js → p-7CBuOvEo.js} +1 -1
- package/dist/ionic/p-7e4d51fa.entry.js +4 -0
- package/dist/ionic/p-7f5d4664.entry.js +4 -0
- package/dist/ionic/p-80ee82fc.entry.js +4 -0
- package/dist/ionic/p-84af7dbc.entry.js +4 -0
- package/dist/ionic/p-89ca830a.entry.js +4 -0
- package/dist/ionic/p-93b8ec8f.entry.js +4 -0
- package/dist/ionic/p-946f65c2.entry.js +4 -0
- package/dist/ionic/p-9c4b39fb.entry.js +4 -0
- package/dist/ionic/p-B1NEZUzQ.js +4 -0
- package/dist/ionic/p-B1ck5iy-.js +4 -0
- package/dist/ionic/{p-Cd4H8ft-.js → p-B4FrqdW0.js} +1 -1
- package/dist/ionic/p-BB0LlG4y.js +4 -0
- package/dist/ionic/p-BMPN55of.js +4 -0
- package/dist/ionic/p-BSQPZ79H.js +4 -0
- package/dist/ionic/p-BYEAtHr-.js +4 -0
- package/dist/ionic/p-BhamHSw3.js +4 -0
- package/dist/ionic/{p-DV3sJJW8.js → p-BvabGprD.js} +1 -1
- package/dist/ionic/p-C-94tAim.js +4 -0
- package/dist/ionic/{p-DipZFfzN.js → p-C-eHZMYE.js} +1 -1
- package/dist/ionic/p-CBR_W98Z.js +4 -0
- package/dist/ionic/{p-ClM02LPk.js → p-CBWAXjA5.js} +1 -1
- package/dist/ionic/p-CMRtMbJc.js +4 -0
- package/dist/ionic/p-CPcPmkGv.js +4 -0
- package/dist/ionic/p-CaRuIadB.js +4 -0
- package/dist/ionic/p-Cdjxf_yg.js +4 -0
- package/dist/ionic/p-ChhhtsGZ.js +5 -0
- package/dist/ionic/p-CzS1qWve.js +4 -0
- package/dist/ionic/p-D5t_-oMk.js +4 -0
- package/dist/ionic/p-D94_RztK.js +4 -0
- package/dist/ionic/p-DWCzVL3Y.js +4 -0
- package/dist/ionic/p-DjjfauRM.js +4 -0
- package/dist/ionic/p-DkUB-ROc.js +4 -0
- package/dist/ionic/p-Dn0mqQ_R.js +4 -0
- package/dist/ionic/p-Dojwmvde.js +4 -0
- package/dist/ionic/p-DplOqGUv.js +4 -0
- package/dist/ionic/p-Dst_XmZh.js +4 -0
- package/dist/ionic/p-T71k3C35.js +4 -0
- package/dist/ionic/p-TXPDHL13.js +4 -0
- package/dist/ionic/p-UIBJkZf8.js +4 -0
- package/dist/ionic/p-a438b193.entry.js +4 -0
- package/dist/ionic/p-babaaaa7.entry.js +4 -0
- package/dist/ionic/p-be08d500.entry.js +4 -0
- package/dist/ionic/p-be9a4f51.entry.js +4 -0
- package/dist/ionic/p-byZM6qHV.js +4 -0
- package/dist/ionic/p-c00d3092.entry.js +4 -0
- package/dist/ionic/p-c36dc8f5.entry.js +4 -0
- package/dist/ionic/p-c72a7e17.entry.js +4 -0
- package/dist/ionic/p-c8edd88c.entry.js +4 -0
- package/dist/ionic/p-ce0e380b.entry.js +4 -0
- package/dist/ionic/p-ce32912b.entry.js +4 -0
- package/dist/ionic/p-d07cf130.entry.js +4 -0
- package/dist/ionic/p-d27edeb3.entry.js +4 -0
- package/dist/ionic/p-d5d2c506.entry.js +4 -0
- package/dist/ionic/p-d5e31ca9.entry.js +4 -0
- package/dist/ionic/p-de91444f.entry.js +4 -0
- package/dist/ionic/p-ded69ceb.entry.js +4 -0
- package/dist/ionic/p-df72866d.entry.js +4 -0
- package/dist/ionic/p-e47e3151.entry.js +4 -0
- package/dist/ionic/p-e621e5e8.entry.js +4 -0
- package/dist/ionic/p-eea9cf93.entry.js +4 -0
- package/dist/ionic/p-f402f5a4.entry.js +4 -0
- package/dist/ionic/p-fe1bfbcf.entry.js +4 -0
- package/{components/p-9GFIh9p1.js → dist/ionic/p-ffb90460.entry.js} +1 -1
- package/dist/types/components/img/img.d.ts +2 -0
- package/dist/types/components/input/input.d.ts +12 -6
- package/dist/types/components/modal/modal-interface.d.ts +9 -0
- package/dist/types/components/modal/modal.d.ts +11 -4
- package/dist/types/components/nav/nav-interface.d.ts +0 -1
- package/dist/types/components/nav/nav.d.ts +2 -22
- package/dist/types/components/route/route.d.ts +1 -1
- package/dist/types/components/router-outlet/router-outlet.d.ts +7 -0
- package/dist/types/components/searchbar/searchbar.d.ts +1 -1
- package/dist/types/components/select/select-interface.d.ts +31 -0
- package/dist/types/components/select/select.d.ts +30 -6
- package/dist/types/components/select-option/select-option.d.ts +42 -1
- package/dist/types/components/textarea/textarea.d.ts +12 -5
- package/dist/types/components.d.ts +74 -311
- package/dist/types/index.d.ts +1 -1
- package/dist/types/interface.d.ts +0 -1
- package/dist/types/utils/config.d.ts +1 -8
- package/dist/types/utils/forms/index.d.ts +1 -0
- package/dist/types/utils/forms/start-container-controller.d.ts +34 -0
- package/dist/types/utils/logging/index.d.ts +2 -1
- package/dist/types/utils/overlay-control-label.d.ts +32 -0
- package/dist/types/utils/overlays.d.ts +11 -9
- package/dist/types/utils/sanitization/index.d.ts +58 -2
- package/dist/types/utils/select-option-render.d.ts +53 -0
- 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 +10660 -7305
- package/hydrate/index.mjs +10660 -7305
- package/package.json +55 -12
- package/components/ion-picker-legacy-column.d.ts +0 -11
- package/components/ion-picker-legacy-column.js +0 -4
- package/components/ion-picker-legacy.d.ts +0 -11
- package/components/ion-picker-legacy.js +0 -4
- package/components/p-0LM2oPMC.js +0 -4
- package/components/p-B21528L5.js +0 -4
- package/components/p-B2nSfLHH.js +0 -4
- package/components/p-B3qf4bEn.js +0 -4
- package/components/p-B9jFTlwE.js +0 -4
- package/components/p-BDd9Zrb9.js +0 -4
- package/components/p-BLmJ0zRm.js +0 -4
- package/components/p-BMYNBJgf.js +0 -4
- package/components/p-BRYd8D-I.js +0 -4
- package/components/p-BSEgsdFI.js +0 -4
- package/components/p-BTEOs1at.js +0 -4
- package/components/p-BTJrYwxN.js +0 -4
- package/components/p-BV-zKay-.js +0 -4
- package/components/p-BYRVyMu9.js +0 -4
- package/components/p-Bmq8qlkW.js +0 -4
- package/components/p-BuxQcfHK.js +0 -4
- package/components/p-Bz0dSlXZ.js +0 -4
- package/components/p-CHqRYvYm.js +0 -4
- package/components/p-CSZf8_j0.js +0 -4
- package/components/p-CTdRooFV.js +0 -4
- package/components/p-Cf2jSDS8.js +0 -4
- package/components/p-Cfx4M1Bn.js +0 -4
- package/components/p-CgkrslTX.js +0 -4
- package/components/p-CiCzYG2V.js +0 -4
- package/components/p-Ck0lEczL.js +0 -4
- package/components/p-CmR5uXej.js +0 -4
- package/components/p-CniZht3v.js +0 -4
- package/components/p-CsaojgEs.js +0 -4
- package/components/p-CtWGkNnJ.js +0 -4
- package/components/p-D13Eaw-8.js +0 -4
- package/components/p-D4FYu-4R.js +0 -4
- package/components/p-D6Ynv7Xh.js +0 -4
- package/components/p-DARjq3GM.js +0 -4
- package/components/p-DEZ2myA3.js +0 -4
- package/components/p-DOFCbuQR.js +0 -4
- package/components/p-DVe41iHI.js +0 -4
- package/components/p-DX5m9g56.js +0 -4
- package/components/p-DboHi2CL.js +0 -4
- package/components/p-DiVJyqlX.js +0 -4
- package/components/p-DmzFY5IC.js +0 -4
- package/components/p-DqZAXv2t.js +0 -4
- package/components/p-Dv8w0kqz.js +0 -4
- package/components/p-Dw7GNDKq.js +0 -4
- package/components/p-Dww01PNs.js +0 -4
- package/components/p-Gy276IJk.js +0 -4
- package/components/p-ZzLXTvyt.js +0 -4
- package/components/p-cyNmxje6.js +0 -4
- package/components/p-j5IxBIan.js +0 -4
- package/components/p-k_E4tX5Z.js +0 -4
- package/components/p-lVAbdiAu.js +0 -4
- package/components/p-o8OKV5aD.js +0 -4
- package/components/p-rCa2eL0j.js +0 -4
- package/dist/cjs/config-D6C-KlA9.js +0 -201
- package/dist/cjs/input.utils-DQaUGGed.js +0 -150
- package/dist/cjs/ion-datetime_3.cjs.entry.js +0 -3167
- package/dist/cjs/notch-controller-aiy8aQb-.js +0 -155
- package/dist/collection/components/picker-legacy/animations/ios.enter.js +0 -27
- package/dist/collection/components/picker-legacy/animations/ios.leave.js +0 -23
- package/dist/collection/components/picker-legacy/picker-interface.js +0 -1
- package/dist/collection/components/picker-legacy/picker.ios.css +0 -300
- package/dist/collection/components/picker-legacy/picker.js +0 -890
- package/dist/collection/components/picker-legacy/picker.md.css +0 -287
- package/dist/collection/components/picker-legacy-column/picker-column.ios.css +0 -231
- package/dist/collection/components/picker-legacy-column/picker-column.js +0 -422
- package/dist/collection/components/picker-legacy-column/picker-column.md.css +0 -222
- package/dist/collection/components/picker-legacy-column/test/test.utils.js +0 -43
- package/dist/esm/config-DQCONYYp.js +0 -195
- package/dist/esm/input.utils-Cd23Gdd1.js +0 -147
- package/dist/esm/ion-datetime_3.entry.js +0 -3163
- package/dist/esm/notch-controller-Doqis1td.js +0 -153
- package/dist/ionic/p-01f81ea5.entry.js +0 -4
- package/dist/ionic/p-0283ea73.entry.js +0 -4
- package/dist/ionic/p-02ecae65.entry.js +0 -4
- package/dist/ionic/p-0672f677.entry.js +0 -4
- package/dist/ionic/p-0c06fe60.entry.js +0 -4
- package/dist/ionic/p-0fa9c382.entry.js +0 -4
- package/dist/ionic/p-1af4d74c.entry.js +0 -4
- package/dist/ionic/p-1d7ef0d2.entry.js +0 -4
- package/dist/ionic/p-26f05d3a.entry.js +0 -4
- package/dist/ionic/p-27d30585.entry.js +0 -4
- package/dist/ionic/p-2bb2cb18.entry.js +0 -4
- package/dist/ionic/p-31e7bd05.entry.js +0 -4
- package/dist/ionic/p-32f53010.entry.js +0 -4
- package/dist/ionic/p-35eb8b5c.entry.js +0 -4
- package/dist/ionic/p-37e720da.entry.js +0 -4
- package/dist/ionic/p-3efa137b.entry.js +0 -4
- package/dist/ionic/p-432bd72c.entry.js +0 -4
- package/dist/ionic/p-47214c72.entry.js +0 -4
- package/dist/ionic/p-4e172429.entry.js +0 -4
- package/dist/ionic/p-5c3da84e.entry.js +0 -4
- package/dist/ionic/p-5d1da0a2.entry.js +0 -4
- package/dist/ionic/p-5d8082fe.entry.js +0 -4
- package/dist/ionic/p-613d3c43.entry.js +0 -4
- package/dist/ionic/p-616e4d4f.entry.js +0 -4
- package/dist/ionic/p-65d611b2.entry.js +0 -4
- package/dist/ionic/p-67806e3f.entry.js +0 -4
- package/dist/ionic/p-68cbb2fc.entry.js +0 -4
- package/dist/ionic/p-737ae9eb.entry.js +0 -4
- package/dist/ionic/p-7b0d6248.entry.js +0 -4
- package/dist/ionic/p-7e71e470.entry.js +0 -4
- package/dist/ionic/p-84d5ce05.entry.js +0 -4
- package/dist/ionic/p-85d49987.entry.js +0 -4
- package/dist/ionic/p-8945088b.entry.js +0 -4
- package/dist/ionic/p-8b155568.entry.js +0 -4
- package/dist/ionic/p-90267c4b.entry.js +0 -4
- package/dist/ionic/p-92ad8a67.entry.js +0 -4
- package/dist/ionic/p-9a97d4e0.entry.js +0 -4
- package/dist/ionic/p-9e4b0894.entry.js +0 -4
- package/dist/ionic/p-9eeaBrnk.js +0 -4
- package/dist/ionic/p-B2kaj8sx.js +0 -4
- package/dist/ionic/p-B4y7nxsg.js +0 -4
- package/dist/ionic/p-B8t9Ro6f.js +0 -4
- package/dist/ionic/p-BEOxsxBw.js +0 -4
- package/dist/ionic/p-BJ2NxSHp.js +0 -4
- package/dist/ionic/p-BLiL8g0v.js +0 -4
- package/dist/ionic/p-BTEOs1at.js +0 -4
- package/dist/ionic/p-BUFIpxKM.js +0 -4
- package/dist/ionic/p-BYRVyMu9.js +0 -4
- package/dist/ionic/p-C0eMdTCW.js +0 -4
- package/dist/ionic/p-CKvCXMs9.js +0 -4
- package/dist/ionic/p-CPTv7G9B.js +0 -4
- package/dist/ionic/p-CtWGkNnJ.js +0 -4
- package/dist/ionic/p-CxMyXUtt.js +0 -4
- package/dist/ionic/p-D13Eaw-8.js +0 -4
- package/dist/ionic/p-DCoy2elM.js +0 -4
- package/dist/ionic/p-DiVJyqlX.js +0 -4
- package/dist/ionic/p-DqN5EA2O.js +0 -4
- package/dist/ionic/p-Dr9fTCb1.js +0 -4
- package/dist/ionic/p-DzWaWHGc.js +0 -4
- package/dist/ionic/p-EkpneKVM.js +0 -4
- package/dist/ionic/p-Nqf6uvGh.js +0 -4
- package/dist/ionic/p-SNAkTDfm.js +0 -4
- package/dist/ionic/p-ab00b0d8.entry.js +0 -4
- package/dist/ionic/p-c2175309.entry.js +0 -4
- package/dist/ionic/p-c4b69d9b.entry.js +0 -4
- package/dist/ionic/p-c4d8641b.entry.js +0 -4
- package/dist/ionic/p-ce637936.entry.js +0 -4
- package/dist/ionic/p-da85e958.entry.js +0 -4
- package/dist/ionic/p-dfa8d673.entry.js +0 -4
- package/dist/ionic/p-e139357c.entry.js +0 -4
- package/dist/ionic/p-e7b7a7b1.entry.js +0 -4
- package/dist/ionic/p-f37ca594.entry.js +0 -4
- package/dist/ionic/p-f8dd336e.entry.js +0 -4
- package/dist/ionic/p-f9de757b.entry.js +0 -4
- package/dist/ionic/p-fe11cf51.entry.js +0 -4
- package/dist/ionic/p-mjKAFv89.js +0 -4
- package/dist/ionic/p-o8OKV5aD.js +0 -4
- package/dist/ionic/p-tcQvqkiX.js +0 -5
- package/dist/types/components/picker-legacy/animations/ios.enter.d.ts +0 -5
- package/dist/types/components/picker-legacy/animations/ios.leave.d.ts +0 -5
- package/dist/types/components/picker-legacy/picker-interface.d.ts +0 -52
- package/dist/types/components/picker-legacy/picker.d.ts +0 -158
- package/dist/types/components/picker-legacy-column/picker-column.d.ts +0 -46
- package/dist/types/components/picker-legacy-column/test/test.utils.d.ts +0 -9
- /package/components/{p-CO7fmmxt.js → p-LpMHEu3v.js} +0 -0
|
@@ -43,240 +43,81 @@ import { roundToMaxDecimalPlaces } from "../../utils/floating-point";
|
|
|
43
43
|
* @part pressed - Added to the knob-handle, knob, and pin that is currently being pressed to drag. Only one set has this part at a time when `dualKnobs` is `true`.
|
|
44
44
|
*/
|
|
45
45
|
export class Range {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
*
|
|
89
|
-
* See https://ionicframework.com/docs/troubleshooting/runtime#accessing-this
|
|
90
|
-
* if you need to access `this` from within the callback.
|
|
91
|
-
*/
|
|
92
|
-
this.pinFormatter = (value) => Math.round(value);
|
|
93
|
-
/**
|
|
94
|
-
* If `true`, the knob snaps to tick marks evenly spaced based
|
|
95
|
-
* on the step property value.
|
|
96
|
-
*/
|
|
97
|
-
this.snaps = false;
|
|
98
|
-
/**
|
|
99
|
-
* Specifies the value granularity.
|
|
100
|
-
*/
|
|
101
|
-
this.step = 1;
|
|
102
|
-
/**
|
|
103
|
-
* If `true`, tick marks are displayed based on the step value.
|
|
104
|
-
* Only applies when `snaps` is `true`.
|
|
105
|
-
*/
|
|
106
|
-
this.ticks = true;
|
|
107
|
-
/**
|
|
108
|
-
* If `true`, the user cannot interact with the range.
|
|
109
|
-
*/
|
|
110
|
-
this.disabled = false;
|
|
111
|
-
/**
|
|
112
|
-
* the value of the range.
|
|
113
|
-
*/
|
|
114
|
-
this.value = 0;
|
|
115
|
-
/**
|
|
116
|
-
* Compares two RangeValue inputs to determine if they are different.
|
|
117
|
-
*
|
|
118
|
-
* @param newVal - The new value.
|
|
119
|
-
* @param oldVal - The old value.
|
|
120
|
-
* @returns `true` if the values are different, `false` otherwise.
|
|
121
|
-
*/
|
|
122
|
-
this.compareValues = (newVal, oldVal) => {
|
|
123
|
-
if (typeof newVal === 'object' && typeof oldVal === 'object') {
|
|
124
|
-
return newVal.lower !== oldVal.lower || newVal.upper !== oldVal.upper;
|
|
125
|
-
}
|
|
126
|
-
return newVal !== oldVal;
|
|
127
|
-
};
|
|
128
|
-
this.clampBounds = (value) => {
|
|
129
|
-
return clamp(this.min, value, this.max);
|
|
130
|
-
};
|
|
131
|
-
this.ensureValueInBounds = (value) => {
|
|
132
|
-
if (this.dualKnobs) {
|
|
133
|
-
return {
|
|
134
|
-
lower: this.clampBounds(value.lower),
|
|
135
|
-
upper: this.clampBounds(value.upper),
|
|
136
|
-
};
|
|
137
|
-
}
|
|
138
|
-
else {
|
|
139
|
-
return this.clampBounds(value);
|
|
140
|
-
}
|
|
141
|
-
};
|
|
142
|
-
/**
|
|
143
|
-
* Where to place the label relative to the range.
|
|
144
|
-
* `"start"`: The label will appear to the left of the range in LTR and to the right in RTL.
|
|
145
|
-
* `"end"`: The label will appear to the right of the range in LTR and to the left in RTL.
|
|
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
|
-
* `"stacked"`: The label will appear above the range regardless of the direction.
|
|
148
|
-
*/
|
|
149
|
-
this.labelPlacement = 'start';
|
|
150
|
-
this.setupGesture = async () => {
|
|
151
|
-
const rangeSlider = this.rangeSlider;
|
|
152
|
-
if (rangeSlider) {
|
|
153
|
-
this.gesture = (await import('../../utils/gesture')).createGesture({
|
|
154
|
-
el: rangeSlider,
|
|
155
|
-
gestureName: 'range',
|
|
156
|
-
gesturePriority: 100,
|
|
157
|
-
/**
|
|
158
|
-
* Provide a threshold since the drag movement
|
|
159
|
-
* might be a user scrolling the view.
|
|
160
|
-
* If this is true, then the range
|
|
161
|
-
* should not move.
|
|
162
|
-
*/
|
|
163
|
-
threshold: 10,
|
|
164
|
-
onStart: () => this.onStart(),
|
|
165
|
-
onMove: (ev) => this.onMove(ev),
|
|
166
|
-
onEnd: (ev) => this.onEnd(ev),
|
|
167
|
-
});
|
|
168
|
-
this.gesture.enable(!this.disabled);
|
|
169
|
-
}
|
|
170
|
-
};
|
|
171
|
-
/**
|
|
172
|
-
* Observes the knob handles for the ion-activated class and syncs
|
|
173
|
-
* activatedKnob so the activated part is correctly set on the handle,
|
|
174
|
-
* knob, and pin.
|
|
175
|
-
*/
|
|
176
|
-
this.setupActivatedObserver = () => {
|
|
177
|
-
const knobHandleA = this.el.shadowRoot.querySelector('.range-knob-handle-a');
|
|
178
|
-
const knobHandleB = this.el.shadowRoot.querySelector('.range-knob-handle-b');
|
|
179
|
-
const syncActivated = () => {
|
|
180
|
-
this.activatedKnob = (knobHandleA === null || knobHandleA === void 0 ? void 0 : knobHandleA.classList.contains('ion-activated'))
|
|
181
|
-
? 'A'
|
|
182
|
-
: (knobHandleB === null || knobHandleB === void 0 ? void 0 : knobHandleB.classList.contains('ion-activated'))
|
|
183
|
-
? 'B'
|
|
184
|
-
: undefined;
|
|
185
|
-
};
|
|
186
|
-
if (Build.isBrowser && typeof MutationObserver !== 'undefined') {
|
|
187
|
-
this.activatedObserver = new MutationObserver(syncActivated);
|
|
188
|
-
this.activatedObserver.observe(this.el.shadowRoot, {
|
|
189
|
-
attributes: true,
|
|
190
|
-
attributeFilter: ['class'],
|
|
191
|
-
subtree: true,
|
|
192
|
-
});
|
|
193
|
-
}
|
|
194
|
-
syncActivated();
|
|
195
|
-
};
|
|
196
|
-
this.handleKeyboard = (knob, isIncrease) => {
|
|
197
|
-
const { ensureValueInBounds } = this;
|
|
198
|
-
let step = this.step;
|
|
199
|
-
step = step > 0 ? step : 1;
|
|
200
|
-
step = step / (this.max - this.min);
|
|
201
|
-
if (!isIncrease) {
|
|
202
|
-
step *= -1;
|
|
203
|
-
}
|
|
204
|
-
if (knob === 'A') {
|
|
205
|
-
this.ratioA = clamp(0, this.ratioA + step, 1);
|
|
206
|
-
}
|
|
207
|
-
else {
|
|
208
|
-
this.ratioB = clamp(0, this.ratioB + step, 1);
|
|
209
|
-
}
|
|
210
|
-
this.ionKnobMoveStart.emit({ value: ensureValueInBounds(this.value) });
|
|
211
|
-
this.updateValue();
|
|
212
|
-
this.emitValueChange();
|
|
213
|
-
this.ionKnobMoveEnd.emit({ value: ensureValueInBounds(this.value) });
|
|
214
|
-
};
|
|
215
|
-
this.onBlur = () => {
|
|
216
|
-
if (this.hasFocus) {
|
|
217
|
-
this.hasFocus = false;
|
|
218
|
-
this.focusedKnob = undefined;
|
|
219
|
-
this.ionBlur.emit();
|
|
220
|
-
}
|
|
221
|
-
};
|
|
222
|
-
this.onFocus = () => {
|
|
223
|
-
if (!this.hasFocus) {
|
|
224
|
-
this.hasFocus = true;
|
|
225
|
-
this.ionFocus.emit();
|
|
226
|
-
}
|
|
227
|
-
};
|
|
228
|
-
this.onKnobFocus = (knob) => {
|
|
229
|
-
// Clicking focuses the range which is needed for the keyboard,
|
|
230
|
-
// but we only want to add the ion-focused class when focused via Tab.
|
|
231
|
-
if (!this.focusFromPointer) {
|
|
232
|
-
this.focusedKnob = knob;
|
|
233
|
-
}
|
|
234
|
-
else {
|
|
235
|
-
this.focusFromPointer = false;
|
|
236
|
-
this.focusedKnob = undefined;
|
|
237
|
-
}
|
|
238
|
-
// If the knob was not already focused, emit the focus event
|
|
239
|
-
if (!this.hasFocus) {
|
|
240
|
-
this.hasFocus = true;
|
|
241
|
-
this.ionFocus.emit();
|
|
242
|
-
}
|
|
243
|
-
};
|
|
244
|
-
this.onKnobBlur = () => {
|
|
245
|
-
// Check if focus is moving to another knob within the same range
|
|
246
|
-
// by delaying the reset to allow the new focus to register
|
|
247
|
-
setTimeout(() => {
|
|
248
|
-
var _a;
|
|
249
|
-
const activeElement = (_a = this.el.shadowRoot) === null || _a === void 0 ? void 0 : _a.activeElement;
|
|
250
|
-
const isStillFocusedOnKnob = activeElement && activeElement.classList.contains('range-knob-handle');
|
|
251
|
-
if (!isStillFocusedOnKnob) {
|
|
252
|
-
if (this.hasFocus) {
|
|
253
|
-
this.hasFocus = false;
|
|
254
|
-
this.focusedKnob = undefined;
|
|
255
|
-
this.ionBlur.emit();
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
}, 0);
|
|
259
|
-
};
|
|
260
|
-
this.onKnobMouseEnter = (knob) => {
|
|
261
|
-
this.hoveredKnob = knob;
|
|
262
|
-
};
|
|
263
|
-
this.onKnobMouseLeave = () => {
|
|
264
|
-
this.hoveredKnob = undefined;
|
|
265
|
-
};
|
|
266
|
-
}
|
|
46
|
+
rangeId = `ion-r-${rangeIds++}`;
|
|
47
|
+
didLoad = false;
|
|
48
|
+
noUpdate = false;
|
|
49
|
+
rect;
|
|
50
|
+
hasFocus = false;
|
|
51
|
+
rangeSlider;
|
|
52
|
+
gesture;
|
|
53
|
+
inheritedAttributes = {};
|
|
54
|
+
contentEl = null;
|
|
55
|
+
initialContentScrollY = true;
|
|
56
|
+
originalIonInput;
|
|
57
|
+
/**
|
|
58
|
+
* Used to avoid setting the focused state on click or tap. The focused
|
|
59
|
+
* state is only set when the focus comes from the keyboard (e.g. Tab).
|
|
60
|
+
* This is set to true on pointer down (mouse/touch).
|
|
61
|
+
*/
|
|
62
|
+
focusFromPointer = false;
|
|
63
|
+
/**
|
|
64
|
+
* Observes class changes on the knob handles to keep the activatedKnob
|
|
65
|
+
* state in sync with the ion-activated class. This is necessary to
|
|
66
|
+
* determine which knob the user is dragging when using dual knobs and
|
|
67
|
+
* apply the activated part correctly.
|
|
68
|
+
*/
|
|
69
|
+
activatedObserver;
|
|
70
|
+
el;
|
|
71
|
+
ratioA = 0;
|
|
72
|
+
ratioB = 0;
|
|
73
|
+
activatedKnob;
|
|
74
|
+
focusedKnob;
|
|
75
|
+
hoveredKnob;
|
|
76
|
+
pressedKnob;
|
|
77
|
+
/**
|
|
78
|
+
* The color to use from your application's color palette.
|
|
79
|
+
* Default options are: `"primary"`, `"secondary"`, `"tertiary"`, `"success"`, `"warning"`, `"danger"`, `"light"`, `"medium"`, and `"dark"`.
|
|
80
|
+
* For more information on colors, see [theming](/docs/theming/basics).
|
|
81
|
+
*/
|
|
82
|
+
color;
|
|
83
|
+
/**
|
|
84
|
+
* How long, in milliseconds, to wait to trigger the
|
|
85
|
+
* `ionInput` event after each change in the range value.
|
|
86
|
+
*/
|
|
87
|
+
debounce;
|
|
267
88
|
debounceChanged() {
|
|
268
89
|
const { ionInput, debounce, originalIonInput } = this;
|
|
269
90
|
/**
|
|
270
91
|
* If debounce is undefined, we have to manually revert the ionInput emitter in case
|
|
271
92
|
* debounce used to be set to a number. Otherwise, the event would stay debounced.
|
|
272
93
|
*/
|
|
273
|
-
this.ionInput = debounce === undefined ? originalIonInput
|
|
94
|
+
this.ionInput = debounce === undefined ? originalIonInput ?? ionInput : debounceEvent(ionInput, debounce);
|
|
274
95
|
}
|
|
96
|
+
/**
|
|
97
|
+
* The name of the control, which is submitted with the form data.
|
|
98
|
+
*/
|
|
99
|
+
name = this.rangeId;
|
|
100
|
+
/**
|
|
101
|
+
* The text to display as the control's label. Use this over the `label` slot if
|
|
102
|
+
* you only need plain text. The `label` property will take priority over the
|
|
103
|
+
* `label` slot if both are used.
|
|
104
|
+
*/
|
|
105
|
+
label;
|
|
106
|
+
/**
|
|
107
|
+
* If `true`, the range shows two knobs and `value` is an object with `lower`
|
|
108
|
+
* and `upper` properties. If `false`, the range shows one knob and `value` is
|
|
109
|
+
* a number.
|
|
110
|
+
*/
|
|
111
|
+
dualKnobs = false;
|
|
275
112
|
dualKnobsChanged() {
|
|
276
113
|
if (!this.noUpdate) {
|
|
277
114
|
this.updateRatio();
|
|
278
115
|
}
|
|
279
116
|
}
|
|
117
|
+
/**
|
|
118
|
+
* Minimum integer value of the range.
|
|
119
|
+
*/
|
|
120
|
+
min = 0;
|
|
280
121
|
minChanged(newValue) {
|
|
281
122
|
if (!isSafeNumber(newValue)) {
|
|
282
123
|
this.min = 0;
|
|
@@ -285,6 +126,10 @@ export class Range {
|
|
|
285
126
|
this.updateRatio();
|
|
286
127
|
}
|
|
287
128
|
}
|
|
129
|
+
/**
|
|
130
|
+
* Maximum integer value of the range.
|
|
131
|
+
*/
|
|
132
|
+
max = 100;
|
|
288
133
|
maxChanged(newValue) {
|
|
289
134
|
if (!isSafeNumber(newValue)) {
|
|
290
135
|
this.max = 100;
|
|
@@ -293,11 +138,43 @@ export class Range {
|
|
|
293
138
|
this.updateRatio();
|
|
294
139
|
}
|
|
295
140
|
}
|
|
141
|
+
/**
|
|
142
|
+
* If `true`, a pin with integer value is shown when the knob
|
|
143
|
+
* is pressed.
|
|
144
|
+
*/
|
|
145
|
+
pin = false;
|
|
146
|
+
/**
|
|
147
|
+
* A callback used to format the pin text.
|
|
148
|
+
* By default the pin text is set to `Math.round(value)`.
|
|
149
|
+
*
|
|
150
|
+
* See https://ionicframework.com/docs/troubleshooting/runtime#accessing-this
|
|
151
|
+
* if you need to access `this` from within the callback.
|
|
152
|
+
*/
|
|
153
|
+
pinFormatter = (value) => Math.round(value);
|
|
154
|
+
/**
|
|
155
|
+
* If `true`, the knob snaps to tick marks evenly spaced based
|
|
156
|
+
* on the step property value.
|
|
157
|
+
*/
|
|
158
|
+
snaps = false;
|
|
159
|
+
/**
|
|
160
|
+
* Specifies the value granularity.
|
|
161
|
+
*/
|
|
162
|
+
step = 1;
|
|
296
163
|
stepChanged(newValue) {
|
|
297
164
|
if (!isSafeNumber(newValue)) {
|
|
298
165
|
this.step = 1;
|
|
299
166
|
}
|
|
300
167
|
}
|
|
168
|
+
/**
|
|
169
|
+
* If `true`, tick marks are displayed based on the step value.
|
|
170
|
+
* Only applies when `snaps` is `true`.
|
|
171
|
+
*/
|
|
172
|
+
ticks = true;
|
|
173
|
+
/**
|
|
174
|
+
* The start position of the range active bar. This feature is only available with a single knob (dualKnobs="false").
|
|
175
|
+
* Valid values are greater than or equal to the min value and less than or equal to the max value.
|
|
176
|
+
*/
|
|
177
|
+
activeBarStart;
|
|
301
178
|
activeBarStartChanged() {
|
|
302
179
|
const { activeBarStart } = this;
|
|
303
180
|
if (activeBarStart !== undefined) {
|
|
@@ -311,11 +188,19 @@ export class Range {
|
|
|
311
188
|
}
|
|
312
189
|
}
|
|
313
190
|
}
|
|
191
|
+
/**
|
|
192
|
+
* If `true`, the user cannot interact with the range.
|
|
193
|
+
*/
|
|
194
|
+
disabled = false;
|
|
314
195
|
disabledChanged() {
|
|
315
196
|
if (this.gesture) {
|
|
316
197
|
this.gesture.enable(!this.disabled);
|
|
317
198
|
}
|
|
318
199
|
}
|
|
200
|
+
/**
|
|
201
|
+
* the value of the range.
|
|
202
|
+
*/
|
|
203
|
+
value = 0;
|
|
319
204
|
valueChanged(newValue, oldValue) {
|
|
320
205
|
const valuesChanged = this.compareValues(newValue, oldValue);
|
|
321
206
|
if (valuesChanged) {
|
|
@@ -325,6 +210,120 @@ export class Range {
|
|
|
325
210
|
this.updateRatio();
|
|
326
211
|
}
|
|
327
212
|
}
|
|
213
|
+
/**
|
|
214
|
+
* Compares two RangeValue inputs to determine if they are different.
|
|
215
|
+
*
|
|
216
|
+
* @param newVal - The new value.
|
|
217
|
+
* @param oldVal - The old value.
|
|
218
|
+
* @returns `true` if the values are different, `false` otherwise.
|
|
219
|
+
*/
|
|
220
|
+
compareValues = (newVal, oldVal) => {
|
|
221
|
+
if (typeof newVal === 'object' && typeof oldVal === 'object') {
|
|
222
|
+
return newVal.lower !== oldVal.lower || newVal.upper !== oldVal.upper;
|
|
223
|
+
}
|
|
224
|
+
return newVal !== oldVal;
|
|
225
|
+
};
|
|
226
|
+
clampBounds = (value) => {
|
|
227
|
+
return clamp(this.min, value, this.max);
|
|
228
|
+
};
|
|
229
|
+
ensureValueInBounds = (value) => {
|
|
230
|
+
if (this.dualKnobs) {
|
|
231
|
+
return {
|
|
232
|
+
lower: this.clampBounds(value.lower),
|
|
233
|
+
upper: this.clampBounds(value.upper),
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
else {
|
|
237
|
+
return this.clampBounds(value);
|
|
238
|
+
}
|
|
239
|
+
};
|
|
240
|
+
/**
|
|
241
|
+
* Where to place the label relative to the range.
|
|
242
|
+
* `"start"`: The label will appear to the left of the range in LTR and to the right in RTL.
|
|
243
|
+
* `"end"`: The label will appear to the right of the range in LTR and to the left in RTL.
|
|
244
|
+
* `"fixed"`: The label has the same behavior as `"start"` except it also has a fixed width. Long text will be truncated with ellipses ("...").
|
|
245
|
+
* `"stacked"`: The label will appear above the range regardless of the direction.
|
|
246
|
+
*/
|
|
247
|
+
labelPlacement = 'start';
|
|
248
|
+
/**
|
|
249
|
+
* The `ionChange` event is fired for `<ion-range>` elements when the user
|
|
250
|
+
* modifies the element's value:
|
|
251
|
+
* - When the user releases the knob after dragging;
|
|
252
|
+
* - When the user moves the knob with keyboard arrows
|
|
253
|
+
*
|
|
254
|
+
* This event will not emit when programmatically setting the `value` property.
|
|
255
|
+
*/
|
|
256
|
+
ionChange;
|
|
257
|
+
/**
|
|
258
|
+
* The `ionInput` event is fired for `<ion-range>` elements when the value
|
|
259
|
+
* is modified. Unlike `ionChange`, `ionInput` is fired continuously
|
|
260
|
+
* while the user is dragging the knob.
|
|
261
|
+
*/
|
|
262
|
+
ionInput;
|
|
263
|
+
/**
|
|
264
|
+
* Emitted when the range has focus.
|
|
265
|
+
*/
|
|
266
|
+
ionFocus;
|
|
267
|
+
/**
|
|
268
|
+
* Emitted when the range loses focus.
|
|
269
|
+
*/
|
|
270
|
+
ionBlur;
|
|
271
|
+
/**
|
|
272
|
+
* Emitted when the user starts moving the range knob, whether through
|
|
273
|
+
* mouse drag, touch gesture, or keyboard interaction.
|
|
274
|
+
*/
|
|
275
|
+
ionKnobMoveStart;
|
|
276
|
+
/**
|
|
277
|
+
* Emitted when the user finishes moving the range knob, whether through
|
|
278
|
+
* mouse drag, touch gesture, or keyboard interaction.
|
|
279
|
+
*/
|
|
280
|
+
ionKnobMoveEnd;
|
|
281
|
+
setupGesture = async () => {
|
|
282
|
+
const rangeSlider = this.rangeSlider;
|
|
283
|
+
if (rangeSlider) {
|
|
284
|
+
this.gesture = (await import('../../utils/gesture')).createGesture({
|
|
285
|
+
el: rangeSlider,
|
|
286
|
+
gestureName: 'range',
|
|
287
|
+
gesturePriority: 100,
|
|
288
|
+
/**
|
|
289
|
+
* Provide a threshold since the drag movement
|
|
290
|
+
* might be a user scrolling the view.
|
|
291
|
+
* If this is true, then the range
|
|
292
|
+
* should not move.
|
|
293
|
+
*/
|
|
294
|
+
threshold: 10,
|
|
295
|
+
onStart: () => this.onStart(),
|
|
296
|
+
onMove: (ev) => this.onMove(ev),
|
|
297
|
+
onEnd: (ev) => this.onEnd(ev),
|
|
298
|
+
});
|
|
299
|
+
this.gesture.enable(!this.disabled);
|
|
300
|
+
}
|
|
301
|
+
};
|
|
302
|
+
/**
|
|
303
|
+
* Observes the knob handles for the ion-activated class and syncs
|
|
304
|
+
* activatedKnob so the activated part is correctly set on the handle,
|
|
305
|
+
* knob, and pin.
|
|
306
|
+
*/
|
|
307
|
+
setupActivatedObserver = () => {
|
|
308
|
+
const knobHandleA = this.el.shadowRoot.querySelector('.range-knob-handle-a');
|
|
309
|
+
const knobHandleB = this.el.shadowRoot.querySelector('.range-knob-handle-b');
|
|
310
|
+
const syncActivated = () => {
|
|
311
|
+
this.activatedKnob = knobHandleA?.classList.contains('ion-activated')
|
|
312
|
+
? 'A'
|
|
313
|
+
: knobHandleB?.classList.contains('ion-activated')
|
|
314
|
+
? 'B'
|
|
315
|
+
: undefined;
|
|
316
|
+
};
|
|
317
|
+
if (Build.isBrowser && typeof MutationObserver !== 'undefined') {
|
|
318
|
+
this.activatedObserver = new MutationObserver(syncActivated);
|
|
319
|
+
this.activatedObserver.observe(this.el.shadowRoot, {
|
|
320
|
+
attributes: true,
|
|
321
|
+
attributeFilter: ['class'],
|
|
322
|
+
subtree: true,
|
|
323
|
+
});
|
|
324
|
+
}
|
|
325
|
+
syncActivated();
|
|
326
|
+
};
|
|
328
327
|
componentWillLoad() {
|
|
329
328
|
/**
|
|
330
329
|
* If user has custom ID set then we should
|
|
@@ -348,7 +347,6 @@ export class Range {
|
|
|
348
347
|
this.didLoad = true;
|
|
349
348
|
}
|
|
350
349
|
connectedCallback() {
|
|
351
|
-
var _a;
|
|
352
350
|
this.updateRatio();
|
|
353
351
|
this.debounceChanged();
|
|
354
352
|
this.disabledChanged();
|
|
@@ -364,7 +362,7 @@ export class Range {
|
|
|
364
362
|
this.setupActivatedObserver();
|
|
365
363
|
}
|
|
366
364
|
const ionContent = findClosestIonContent(this.el);
|
|
367
|
-
this.contentEl =
|
|
365
|
+
this.contentEl = ionContent?.querySelector('.ion-content-scroll-host') ?? ionContent;
|
|
368
366
|
}
|
|
369
367
|
disconnectedCallback() {
|
|
370
368
|
if (this.gesture) {
|
|
@@ -376,9 +374,27 @@ export class Range {
|
|
|
376
374
|
this.activatedObserver = undefined;
|
|
377
375
|
}
|
|
378
376
|
}
|
|
377
|
+
handleKeyboard = (knob, isIncrease) => {
|
|
378
|
+
const { ensureValueInBounds } = this;
|
|
379
|
+
let step = this.step;
|
|
380
|
+
step = step > 0 ? step : 1;
|
|
381
|
+
step = step / (this.max - this.min);
|
|
382
|
+
if (!isIncrease) {
|
|
383
|
+
step *= -1;
|
|
384
|
+
}
|
|
385
|
+
if (knob === 'A') {
|
|
386
|
+
this.ratioA = clamp(0, this.ratioA + step, 1);
|
|
387
|
+
}
|
|
388
|
+
else {
|
|
389
|
+
this.ratioB = clamp(0, this.ratioB + step, 1);
|
|
390
|
+
}
|
|
391
|
+
this.ionKnobMoveStart.emit({ value: ensureValueInBounds(this.value) });
|
|
392
|
+
this.updateValue();
|
|
393
|
+
this.emitValueChange();
|
|
394
|
+
this.ionKnobMoveEnd.emit({ value: ensureValueInBounds(this.value) });
|
|
395
|
+
};
|
|
379
396
|
getValue() {
|
|
380
|
-
|
|
381
|
-
const value = (_a = this.value) !== null && _a !== void 0 ? _a : 0;
|
|
397
|
+
const value = this.value ?? 0;
|
|
382
398
|
if (this.dualKnobs) {
|
|
383
399
|
if (typeof value === 'object') {
|
|
384
400
|
return value;
|
|
@@ -464,9 +480,8 @@ export class Range {
|
|
|
464
480
|
* @param detail The details of the gesture or mouse event.
|
|
465
481
|
*/
|
|
466
482
|
onEnd(detail) {
|
|
467
|
-
var _a;
|
|
468
483
|
const { contentEl, initialContentScrollY } = this;
|
|
469
|
-
const currentX =
|
|
484
|
+
const currentX = detail.currentX ?? detail.clientX;
|
|
470
485
|
/**
|
|
471
486
|
* The `pressedKnob` can be undefined if the user never
|
|
472
487
|
* dragged the knob. They just tapped on the bar.
|
|
@@ -586,6 +601,56 @@ export class Range {
|
|
|
586
601
|
};
|
|
587
602
|
this.noUpdate = false;
|
|
588
603
|
}
|
|
604
|
+
onBlur = () => {
|
|
605
|
+
if (this.hasFocus) {
|
|
606
|
+
this.hasFocus = false;
|
|
607
|
+
this.focusedKnob = undefined;
|
|
608
|
+
this.ionBlur.emit();
|
|
609
|
+
}
|
|
610
|
+
};
|
|
611
|
+
onFocus = () => {
|
|
612
|
+
if (!this.hasFocus) {
|
|
613
|
+
this.hasFocus = true;
|
|
614
|
+
this.ionFocus.emit();
|
|
615
|
+
}
|
|
616
|
+
};
|
|
617
|
+
onKnobFocus = (knob) => {
|
|
618
|
+
// Clicking focuses the range which is needed for the keyboard,
|
|
619
|
+
// but we only want to add the ion-focused class when focused via Tab.
|
|
620
|
+
if (!this.focusFromPointer) {
|
|
621
|
+
this.focusedKnob = knob;
|
|
622
|
+
}
|
|
623
|
+
else {
|
|
624
|
+
this.focusFromPointer = false;
|
|
625
|
+
this.focusedKnob = undefined;
|
|
626
|
+
}
|
|
627
|
+
// If the knob was not already focused, emit the focus event
|
|
628
|
+
if (!this.hasFocus) {
|
|
629
|
+
this.hasFocus = true;
|
|
630
|
+
this.ionFocus.emit();
|
|
631
|
+
}
|
|
632
|
+
};
|
|
633
|
+
onKnobBlur = () => {
|
|
634
|
+
// Check if focus is moving to another knob within the same range
|
|
635
|
+
// by delaying the reset to allow the new focus to register
|
|
636
|
+
setTimeout(() => {
|
|
637
|
+
const activeElement = this.el.shadowRoot?.activeElement;
|
|
638
|
+
const isStillFocusedOnKnob = activeElement && activeElement.classList.contains('range-knob-handle');
|
|
639
|
+
if (!isStillFocusedOnKnob) {
|
|
640
|
+
if (this.hasFocus) {
|
|
641
|
+
this.hasFocus = false;
|
|
642
|
+
this.focusedKnob = undefined;
|
|
643
|
+
this.ionBlur.emit();
|
|
644
|
+
}
|
|
645
|
+
}
|
|
646
|
+
}, 0);
|
|
647
|
+
};
|
|
648
|
+
onKnobMouseEnter = (knob) => {
|
|
649
|
+
this.hoveredKnob = knob;
|
|
650
|
+
};
|
|
651
|
+
onKnobMouseLeave = () => {
|
|
652
|
+
this.hoveredKnob = undefined;
|
|
653
|
+
};
|
|
589
654
|
/**
|
|
590
655
|
* Returns true if content was passed to the "start" slot
|
|
591
656
|
*/
|
|
@@ -602,7 +667,6 @@ export class Range {
|
|
|
602
667
|
return this.label !== undefined || this.el.querySelector('[slot="label"]') !== null;
|
|
603
668
|
}
|
|
604
669
|
renderRangeSlider() {
|
|
605
|
-
var _a;
|
|
606
670
|
const { min, max, step, handleKeyboard, activatedKnob, focusedKnob, hoveredKnob, pressedKnob, disabled, pin, ratioLower, ratioUpper, pinFormatter, inheritedAttributes, } = this;
|
|
607
671
|
let barStart = `${ratioLower * 100}%`;
|
|
608
672
|
let barEnd = `${100 - ratioUpper * 100}%`;
|
|
@@ -619,7 +683,7 @@ export class Range {
|
|
|
619
683
|
* When the value is less than the activeBarStart or the min value,
|
|
620
684
|
* the knob will display at the start of the active bar.
|
|
621
685
|
*/
|
|
622
|
-
if (this.valA < (
|
|
686
|
+
if (this.valA < (this.activeBarStart ?? this.min)) {
|
|
623
687
|
/**
|
|
624
688
|
* Sets the bar positions relative to the upper and lower limits.
|
|
625
689
|
* Converts the ratio values into percentages, used as offsets for left/right styles.
|
|
@@ -767,7 +831,7 @@ export class Range {
|
|
|
767
831
|
* Determine the name and position of the pressed knob to apply
|
|
768
832
|
* Host classes for styling.
|
|
769
833
|
*/
|
|
770
|
-
const pressedKnobName = dualKnobs ? pressedKnob
|
|
834
|
+
const pressedKnobName = dualKnobs ? pressedKnob?.toLowerCase() : undefined;
|
|
771
835
|
const pressedKnobPosition = dualKnobs && pressedKnob ? getKnobPosition(pressedKnob, this.ratioA, this.ratioB, dualKnobs) : undefined;
|
|
772
836
|
/**
|
|
773
837
|
* Determine if any knob is at the min or max value to
|
|
@@ -776,7 +840,7 @@ export class Range {
|
|
|
776
840
|
const valueAtMin = dualKnobs ? this.valA === min || this.valB === min : this.valA === min;
|
|
777
841
|
const valueAtMax = dualKnobs ? this.valA === max || this.valB === max : this.valA === max;
|
|
778
842
|
renderHiddenInput(true, el, this.name, JSON.stringify(this.getValue()), disabled);
|
|
779
|
-
return (h(Host, { key: '
|
|
843
|
+
return (h(Host, { key: '72f253ee1514b4c5874a6720c2f954fae7a7c4d4', onFocusin: this.onFocus, onFocusout: this.onBlur, id: rangeId, class: createColorClasses(this.color, {
|
|
780
844
|
[mode]: true,
|
|
781
845
|
'in-item': inItem,
|
|
782
846
|
'range-disabled': disabled,
|
|
@@ -790,10 +854,10 @@ export class Range {
|
|
|
790
854
|
'range-item-end-adjustment': needsEndAdjustment,
|
|
791
855
|
'range-value-min': valueAtMin,
|
|
792
856
|
'range-value-max': valueAtMax,
|
|
793
|
-
}) }, h("label", { key: '
|
|
857
|
+
}) }, h("label", { key: '9b96b83a6118ee2a79d8adbb0a58197470308179', class: "range-wrapper", id: "range-label" }, h("div", { key: 'c7b31a7c87c20857a26624bd94501df6420fceec', class: {
|
|
794
858
|
'label-text-wrapper': true,
|
|
795
859
|
'label-text-wrapper-hidden': !hasLabel,
|
|
796
|
-
}, part: "label" }, label !== undefined ? h("div", { class: "label-text" }, label) : h("slot", { name: "label" })), h("div", { key: '
|
|
860
|
+
}, part: "label" }, label !== undefined ? h("div", { class: "label-text" }, label) : h("slot", { name: "label" })), h("div", { key: '4ca15b9370097e140550489ff24979f3a959e65b', class: "native-wrapper" }, h("slot", { key: 'f110896c68741bad92239f98b6028cbe0ad5122f', name: "start" }), this.renderRangeSlider(), h("slot", { key: '5c4031c4403fa643ee2e11637b2420ddd8cbc4ce', name: "end" })))));
|
|
797
861
|
}
|
|
798
862
|
static get is() { return "ion-range"; }
|
|
799
863
|
static get encapsulation() { return "shadow"; }
|