@ionic/core 9.0.10 → 9.0.11-dev.11793705116.185a3203
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/index.js +1 -1
- package/components/ion-accordion-group.js +1 -1
- package/components/ion-accordion.js +1 -1
- package/components/ion-action-sheet.js +1 -1
- package/components/ion-alert.js +1 -1
- package/components/ion-app.js +1 -1
- package/components/ion-avatar.js +1 -1
- package/components/ion-back-button.js +1 -1
- package/components/ion-backdrop.js +1 -1
- package/components/ion-badge.js +1 -1
- package/components/ion-breadcrumb.js +1 -1
- package/components/ion-breadcrumbs.js +1 -1
- package/components/ion-button.js +1 -1
- package/components/ion-buttons.js +1 -1
- package/components/ion-card-content.js +1 -1
- package/components/ion-card-header.js +1 -1
- package/components/ion-card-subtitle.js +1 -1
- package/components/ion-card-title.js +1 -1
- package/components/ion-card.js +1 -1
- package/components/ion-checkbox.js +1 -1
- package/components/ion-chip.js +1 -1
- package/components/ion-col.js +1 -1
- package/components/ion-content.js +1 -1
- package/components/ion-datetime-button.js +1 -1
- package/components/ion-datetime.js +1 -1
- package/components/ion-divider.d.ts +11 -0
- package/components/ion-divider.js +4 -0
- package/components/ion-fab-button.js +1 -1
- package/components/ion-fab-list.js +1 -1
- package/components/ion-fab.js +1 -1
- package/components/ion-footer.js +1 -1
- package/components/ion-gallery-item.d.ts +11 -0
- package/components/ion-gallery-item.js +4 -0
- package/components/ion-gallery.d.ts +11 -0
- package/components/ion-gallery.js +4 -0
- package/components/ion-grid.js +1 -1
- package/components/ion-header.js +1 -1
- package/components/ion-icon.js +1 -1
- package/components/ion-img.js +1 -1
- package/components/ion-infinite-scroll-content.js +1 -1
- package/components/ion-infinite-scroll.js +1 -1
- package/components/ion-input-otp.js +1 -1
- package/components/ion-input-password-toggle.js +1 -1
- package/components/ion-input.js +1 -1
- package/components/ion-item-divider.js +1 -1
- package/components/ion-item-group.js +1 -1
- package/components/ion-item-option.js +1 -1
- package/components/ion-item-options.js +1 -1
- package/components/ion-item-sliding.js +1 -1
- package/components/ion-item.js +1 -1
- package/components/ion-label.js +1 -1
- package/components/ion-list-header.js +1 -1
- package/components/ion-list.js +1 -1
- package/components/ion-loading.js +1 -1
- package/components/ion-menu-button.js +1 -1
- package/components/ion-menu-toggle.js +1 -1
- package/components/ion-menu.js +1 -1
- package/components/ion-modal.js +1 -1
- package/components/ion-nav-link.js +1 -1
- package/components/ion-nav.js +1 -1
- package/components/ion-note.js +1 -1
- package/components/ion-picker-column-option.js +1 -1
- package/components/ion-picker-column.js +1 -1
- package/components/ion-picker.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-0rXxxCTt.js +4 -0
- package/components/p-3Qs1sQxU.js +4 -0
- package/components/p-3SVb97od.js +4 -0
- package/components/p-7-zF1amS.js +4 -0
- package/components/p-AgF3xGwz.js +4 -0
- package/components/{p-ChkSQqfP.js → p-B8TMb1l1.js} +1 -1
- package/{dist/ionic/p-BO10QT9r.js → components/p-BCQSEpww.js} +1 -1
- package/components/p-BCYVFy50.js +4 -0
- package/components/p-BHiggB_l.js +4 -0
- package/components/p-BNBa8_Ls.js +4 -0
- package/components/p-BNV7BMZo.js +4 -0
- package/components/p-BUF_V-Kg.js +4 -0
- package/components/p-BYk20Mf5.js +4 -0
- package/components/p-B_o50gvn.js +4 -0
- package/components/p-BfDzKnZ-.js +4 -0
- package/{dist/ionic/p-BWKtcudz.js → components/p-BmfO2-NE.js} +1 -1
- package/components/{p-BWbz71uB.js → p-BmnPbSf3.js} +1 -1
- package/components/p-ByE0slik.js +4 -0
- package/components/p-C0H1LYQ5.js +4 -0
- package/components/p-C7BPrXxF.js +4 -0
- package/components/p-C93i7QCU.js +4 -0
- package/components/p-C9qQ2zBV.js +4 -0
- package/components/p-CAekGbOf.js +4 -0
- package/components/p-CE7N7-7s.js +4 -0
- package/components/p-CL3vSQL7.js +4 -0
- package/components/p-CODBQrPj.js +4 -0
- package/components/{p-Dbi3KqKm.js → p-CSSj6cqb.js} +1 -1
- package/components/{p-ChsJlFCQ.js → p-CXzJ234J.js} +1 -1
- package/components/p-CehdCO1m.js +4 -0
- package/components/{p-CwEis84J.js → p-CiEBXUnh.js} +1 -1
- package/components/p-CvxND1-3.js +4 -0
- package/components/p-CyvtM0H1.js +4 -0
- package/components/p-CzDkZh7h.js +4 -0
- package/components/p-DEh2reav.js +4 -0
- package/components/p-DFBWAYvo.js +4 -0
- package/components/p-DFjX2uxL.js +4 -0
- package/components/p-DLXAGW46.js +4 -0
- package/components/p-DQwGbYN_.js +4 -0
- package/components/p-DRpeTf7R.js +4 -0
- package/components/p-DbKRl9BQ.js +4 -0
- package/components/{p-07wRJfkt.js → p-Dce65ayP.js} +1 -1
- package/components/p-DdOVnjsY.js +4 -0
- package/components/p-DibGn4gb.js +4 -0
- package/components/p-DktrWeJE.js +4 -0
- package/components/p-DmdTkb5k.js +4 -0
- package/components/p-DmhWSY74.js +4 -0
- package/components/p-DtZimz8H.js +4 -0
- package/components/p-ET0FZop5.js +4 -0
- package/components/p-LoXpKVmq.js +4 -0
- package/components/p-NZGZhPF5.js +4 -0
- package/components/p-NcQUGze-.js +4 -0
- package/components/p-PFwuhbqg.js +4 -0
- package/components/{p-CqvARtmt.js → p-YAWKbhjV.js} +1 -1
- package/components/{p-DHo45oj7.js → p-cm7z1a2E.js} +1 -1
- package/components/p-fU4OdAZ9.js +4 -0
- package/components/{p-CCFj0kgH.js → p-i08Rz__6.js} +1 -1
- package/components/p-iNIvlAGo.js +4 -0
- package/{dist/ionic/p-CJmyfI8x.js → components/p-o89R3aqe.js} +1 -1
- package/components/p-qbig9BW8.js +4 -0
- package/css/core.css +1 -1
- package/css/core.css.map +1 -1
- package/css/display.css +1 -1
- package/css/display.css.map +1 -1
- package/css/flex-utils.css +1 -1
- package/css/flex-utils.css.map +1 -1
- package/css/float-elements.css.map +1 -1
- package/css/global.bundle.css.map +1 -1
- package/css/ionic/bundle.ionic.css +1 -0
- package/css/ionic/bundle.ionic.css.map +1 -0
- package/css/ionic/core.ionic.css +1 -0
- package/css/ionic/core.ionic.css.map +1 -0
- package/css/ionic/global.bundle.ionic.css +1 -0
- package/css/ionic/global.bundle.ionic.css.map +1 -0
- package/css/ionic/ionic-swiper.ionic.css +1 -0
- package/css/ionic/ionic-swiper.ionic.css.map +1 -0
- package/css/ionic/link.ionic.css +1 -0
- package/css/ionic/link.ionic.css.map +1 -0
- package/css/ionic/structure.ionic.css +1 -0
- package/css/ionic/structure.ionic.css.map +1 -0
- package/css/ionic/typography.ionic.css +1 -0
- package/css/ionic/typography.ionic.css.map +1 -0
- package/css/ionic/utils.bundle.ionic.css +1 -0
- package/css/ionic/utils.bundle.ionic.css.map +1 -0
- package/css/ionic-swiper.css +1 -1
- package/css/ionic-swiper.css.map +1 -1
- package/css/ionic.bundle.css +1 -1
- package/css/ionic.bundle.css.map +1 -1
- package/css/normalize.css.map +1 -1
- package/css/padding.css.map +1 -1
- package/css/palettes/dark.always.css.map +1 -1
- package/css/palettes/dark.class.css.map +1 -1
- package/css/palettes/dark.system.css.map +1 -1
- package/css/palettes/high-contrast-dark.always.css.map +1 -1
- package/css/palettes/high-contrast-dark.class.css.map +1 -1
- package/css/palettes/high-contrast-dark.system.css.map +1 -1
- package/css/palettes/high-contrast.always.css.map +1 -1
- package/css/palettes/high-contrast.class.css.map +1 -1
- package/css/palettes/high-contrast.system.css.map +1 -1
- package/css/structure.css.map +1 -1
- package/css/text-alignment.css.map +1 -1
- package/css/text-transformation.css.map +1 -1
- package/css/typography.css.map +1 -1
- package/css/utils.bundle.css +1 -1
- package/css/utils.bundle.css.map +1 -1
- package/dist/cjs/{animation-UiXhXV49.js → animation-zKIdNEmG.js} +3 -3
- package/dist/cjs/{app-globals-BoFCZq0K.js → app-globals-BDrxn8eR.js} +1 -1
- package/dist/cjs/{attribute-controller-0-lwbVEj.js → attribute-controller-D7O2snOZ.js} +3 -2
- package/dist/cjs/{button-active-DzN1aPt-.js → button-active-CY7cZvH5.js} +2 -2
- package/dist/cjs/{capacitor-BTjfXFlK.js → capacitor-DmA66EwP.js} +3 -3
- package/dist/cjs/clear-button-press-controller-C6PTS3jC.js +45 -0
- package/dist/cjs/focus-visible-DGPRKkcx.js +151 -0
- package/dist/cjs/{format-CVjpvAl1.js → format-C6r4Asi4.js} +1 -1
- package/dist/cjs/{framework-delegate-hNMKEiQC.js → framework-delegate-CAdDEnFS.js} +4 -2
- package/dist/cjs/{haptic-BD5qPgy8.js → haptic-Ch-X4gRx.js} +1 -1
- package/dist/cjs/{helpers-BrETKUUX.js → helpers-DHNLF4fD.js} +88 -10
- package/dist/cjs/{index-B4ONUQRp.js → index-B3s1jjBU.js} +1 -1
- package/dist/cjs/{index-BTc0Jnhx.js → index-C3pmpKlo.js} +17 -15
- package/dist/cjs/{index-bwclzjks.js → index-C6QFfpm5.js} +9 -7
- package/dist/cjs/{index-BiQyIvoc.js → index-CB1PuDlX.js} +55 -5
- package/dist/cjs/{index-wOmugbdg.js → index-CxDnX7hd.js} +2 -0
- package/dist/cjs/{index-DMz2Eyis.js → index-DhGCo_n8.js} +2 -2
- package/dist/cjs/index-DkNv4J_i.js +10 -0
- package/dist/cjs/{index-DNBYnlrc.js → index-lD5wTj_b.js} +4 -4
- package/dist/cjs/index.cjs.js +20 -18
- package/dist/cjs/{input-shims-CRmdShL9.js → input-shims-CjkWx7ae.js} +18 -16
- package/dist/cjs/{input.utils-Becpo0ax.js → input.utils-CD4DNiim.js} +1 -1
- package/dist/cjs/ion-accordion_2.cjs.entry.js +57 -29
- package/dist/cjs/ion-action-sheet.cjs.entry.js +42 -37
- package/dist/cjs/ion-alert.cjs.entry.js +50 -45
- package/dist/cjs/ion-app_8.cjs.entry.js +457 -195
- package/dist/cjs/ion-avatar_3.cjs.entry.js +124 -13
- package/dist/cjs/ion-back-button.cjs.entry.js +31 -23
- package/dist/cjs/ion-backdrop.cjs.entry.js +11 -7
- package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +42 -18
- package/dist/cjs/ion-button_2.cjs.entry.js +61 -23
- package/dist/cjs/ion-card_5.cjs.entry.js +57 -34
- package/dist/cjs/ion-checkbox.cjs.entry.js +43 -17
- package/dist/cjs/ion-chip.cjs.entry.js +51 -9
- package/dist/cjs/ion-col_3.cjs.entry.js +56 -63
- package/dist/cjs/ion-datetime-button.cjs.entry.js +14 -9
- package/dist/cjs/ion-datetime.cjs.entry.js +75 -33
- package/dist/cjs/ion-divider.cjs.entry.js +52 -0
- package/dist/cjs/ion-fab_3.cjs.entry.js +40 -28
- package/dist/cjs/ion-gallery-item.cjs.entry.js +59 -0
- package/dist/cjs/ion-gallery.cjs.entry.js +608 -0
- package/dist/cjs/ion-img.cjs.entry.js +9 -4
- package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +91 -16
- package/dist/cjs/ion-input-otp.cjs.entry.js +75 -10
- package/dist/cjs/ion-input-password-toggle.cjs.entry.js +42 -14
- package/dist/cjs/ion-input.cjs.entry.js +147 -38
- package/dist/cjs/ion-item-option_3.cjs.entry.js +466 -52
- package/dist/cjs/ion-item_8.cjs.entry.js +118 -51
- package/dist/cjs/ion-loading.cjs.entry.js +33 -28
- package/dist/cjs/ion-menu_3.cjs.entry.js +54 -36
- package/dist/cjs/ion-modal.cjs.entry.js +304 -155
- package/dist/cjs/ion-nav_2.cjs.entry.js +14 -10
- package/dist/cjs/ion-picker-column-option.cjs.entry.js +13 -8
- package/dist/cjs/ion-picker-column.cjs.entry.js +17 -15
- package/dist/cjs/ion-picker.cjs.entry.js +11 -6
- package/dist/cjs/ion-popover.cjs.entry.js +33 -28
- package/dist/cjs/ion-progress-bar.cjs.entry.js +28 -9
- package/dist/cjs/ion-radio_2.cjs.entry.js +37 -18
- package/dist/cjs/ion-range.cjs.entry.js +21 -13
- package/dist/cjs/ion-refresher_2.cjs.entry.js +45 -20
- package/dist/cjs/ion-reorder_2.cjs.entry.js +31 -13
- package/dist/cjs/ion-ripple-effect.cjs.entry.js +16 -7
- package/dist/cjs/ion-route_4.cjs.entry.js +12 -10
- package/dist/cjs/ion-searchbar.cjs.entry.js +118 -32
- package/dist/cjs/ion-segment-content.cjs.entry.js +2 -2
- package/dist/cjs/ion-segment-view.cjs.entry.js +13 -3
- package/dist/cjs/ion-segment_2.cjs.entry.js +24 -16
- package/dist/cjs/ion-select-modal.cjs.entry.js +54 -25
- package/dist/cjs/ion-select_3.cjs.entry.js +203 -81
- package/dist/cjs/ion-spinner.cjs.entry.js +31 -8
- package/dist/cjs/ion-split-pane.cjs.entry.js +14 -9
- package/dist/cjs/ion-tab-bar_2.cjs.entry.js +150 -27
- package/dist/cjs/ion-tab_2.cjs.entry.js +9 -7
- package/dist/cjs/ion-text.cjs.entry.js +8 -7
- package/dist/cjs/ion-textarea.cjs.entry.js +178 -41
- package/dist/cjs/ion-toast.cjs.entry.js +86 -57
- package/dist/cjs/ion-toggle.cjs.entry.js +67 -25
- package/dist/cjs/ionic-global-CZX42KL4.js +551 -0
- package/dist/cjs/ionic.cjs.js +5 -4
- package/dist/cjs/{ios.transition-CN092Fh6.js → ios.transition-BjOYqzH0.js} +7 -4
- package/dist/cjs/{item-multiple-inputs-C-hz7xrh.js → item-multiple-inputs-D0lzjl68.js} +1 -1
- package/dist/cjs/{keyboard-4OBzkjOG.js → keyboard-Cix5TVkD.js} +3 -5
- package/dist/cjs/{keyboard-BMpscicm.js → keyboard-cHxZlTyz.js} +1 -1
- package/dist/cjs/loader.cjs.js +5 -4
- package/dist/cjs/{md.transition-B6961Ny9.js → md.transition-C4i7l6ui.js} +6 -4
- package/dist/cjs/{overlay-control-label-D2sdL2O8.js → overlay-control-label-DnRLQR1t.js} +13 -11
- package/dist/cjs/{overlays-BbVQG3UT.js → overlays-DziOxcCT.js} +314 -176
- package/dist/cjs/scroll-hide-controller-BSVBCkbw.js +345 -0
- package/dist/cjs/{select-option-render-CzyhrkOu.js → select-option-render-X_iZ-xeh.js} +2 -2
- package/dist/cjs/{slot-mutation-controller-CRa_cKOh.js → slot-mutation-controller-BS-L1szN.js} +100 -13
- package/dist/cjs/{status-tap-hRIvObiJ.js → status-tap-D5yiKwdj.js} +5 -3
- package/dist/cjs/{swipe-back-C-aigThB.js → swipe-back-xM_5R5s-.js} +4 -2
- package/dist/cjs/{theme-Bw0rpaNN.js → theme-Cy4joHPt.js} +25 -1
- package/dist/cjs/validity-CoPMWggj.js +51 -0
- package/dist/collection/collection-manifest.json +8 -0
- package/dist/collection/components/accordion/accordion.ionic.css +199 -0
- package/dist/collection/components/accordion/accordion.ios.css +73 -58
- package/dist/collection/components/accordion/accordion.js +36 -27
- package/dist/collection/components/accordion/accordion.md.css +67 -59
- package/dist/collection/components/accordion-group/accordion-group.ionic.css +93 -0
- package/dist/collection/components/accordion-group/accordion-group.ios.css +16 -4
- package/dist/collection/components/accordion-group/accordion-group.js +44 -8
- package/dist/collection/components/accordion-group/accordion-group.md.css +22 -4
- package/dist/collection/components/action-sheet/action-sheet.ionic.css +490 -0
- package/dist/collection/components/action-sheet/action-sheet.ios.css +184 -54
- package/dist/collection/components/action-sheet/action-sheet.js +16 -13
- package/dist/collection/components/action-sheet/action-sheet.md.css +179 -55
- package/dist/collection/components/alert/alert.ionic.css +779 -0
- package/dist/collection/components/alert/alert.ios.css +247 -54
- package/dist/collection/components/alert/alert.js +22 -19
- package/dist/collection/components/alert/alert.md.css +243 -56
- package/dist/collection/components/app/app.js +15 -83
- package/dist/collection/components/avatar/avatar.ionic.css +379 -0
- package/dist/collection/components/avatar/avatar.ios.css +7 -33
- package/dist/collection/components/avatar/avatar.js +120 -4
- package/dist/collection/components/avatar/avatar.md.css +51 -0
- package/dist/collection/components/back-button/back-button.ios.css +60 -48
- package/dist/collection/components/back-button/back-button.js +26 -20
- package/dist/collection/components/back-button/back-button.md.css +60 -48
- package/dist/collection/components/backdrop/backdrop.ionic.css +109 -0
- package/dist/collection/components/backdrop/backdrop.ios.css +56 -19
- package/dist/collection/components/backdrop/backdrop.js +12 -6
- package/dist/collection/components/backdrop/backdrop.md.css +56 -19
- package/dist/collection/components/badge/badge.ionic.css +269 -0
- package/dist/collection/components/badge/badge.ios.css +137 -12
- package/dist/collection/components/badge/badge.js +143 -9
- package/dist/collection/components/badge/badge.md.css +122 -12
- package/dist/collection/components/breadcrumb/breadcrumb.ios.css +20 -8
- package/dist/collection/components/breadcrumb/breadcrumb.js +31 -11
- package/dist/collection/components/breadcrumb/breadcrumb.md.css +20 -8
- package/dist/collection/components/breadcrumbs/breadcrumbs.ios.css +6 -0
- package/dist/collection/components/breadcrumbs/breadcrumbs.js +11 -9
- package/dist/collection/components/breadcrumbs/breadcrumbs.md.css +6 -0
- package/dist/collection/components/button/button.ionic.css +640 -0
- package/dist/collection/components/button/button.ios.css +154 -46
- package/dist/collection/components/button/button.js +63 -27
- package/dist/collection/components/button/button.md.css +150 -50
- package/dist/collection/components/buttons/buttons.ionic.css +97 -0
- package/dist/collection/components/buttons/buttons.ios.css +59 -7
- package/dist/collection/components/buttons/buttons.js +15 -9
- package/dist/collection/components/buttons/buttons.md.css +55 -3
- package/dist/collection/components/card/card.ionic.css +144 -0
- package/dist/collection/components/card/card.ios.css +65 -14
- package/dist/collection/components/card/card.js +41 -10
- package/dist/collection/components/card/card.md.css +65 -14
- package/dist/collection/components/card-content/card-content.ionic.css +88 -0
- package/dist/collection/components/card-content/card-content.ios.css +20 -35
- package/dist/collection/components/card-content/card-content.js +12 -10
- package/dist/collection/components/card-content/card-content.md.css +20 -35
- package/dist/collection/components/card-header/card-header.ionic.css +85 -0
- package/dist/collection/components/card-header/card-header.ios.css +27 -15
- package/dist/collection/components/card-header/card-header.js +13 -10
- package/dist/collection/components/card-header/card-header.md.css +27 -15
- package/dist/collection/components/card-subtitle/card-subtitle.ionic.css +143 -0
- package/dist/collection/components/card-subtitle/card-subtitle.ios.css +12 -0
- package/dist/collection/components/card-subtitle/card-subtitle.js +11 -8
- package/dist/collection/components/card-subtitle/card-subtitle.md.css +12 -0
- package/dist/collection/components/card-title/card-title.ios.css +73 -0
- package/dist/collection/components/card-title/card-title.js +11 -8
- package/dist/collection/components/card-title/card-title.md.css +73 -0
- package/dist/collection/components/checkbox/checkbox.ionic.css +535 -0
- package/dist/collection/components/checkbox/checkbox.ios.css +244 -115
- package/dist/collection/components/checkbox/checkbox.js +80 -15
- package/dist/collection/components/checkbox/checkbox.md.css +245 -116
- package/dist/collection/components/chip/chip.ionic.css +216 -0
- package/dist/collection/components/chip/chip.ios.css +67 -14
- package/dist/collection/components/chip/chip.js +108 -8
- package/dist/collection/components/chip/chip.md.css +67 -14
- package/dist/collection/components/col/col.css +192 -4
- package/dist/collection/components/col/col.js +210 -67
- package/dist/collection/components/content/content.css +47 -2
- package/dist/collection/components/content/content.js +16 -11
- package/dist/collection/components/datetime/datetime.ionic.css +697 -0
- package/dist/collection/components/datetime/datetime.ios.css +305 -114
- package/dist/collection/components/datetime/datetime.js +61 -20
- package/dist/collection/components/datetime/datetime.md.css +295 -103
- package/dist/collection/components/datetime/utils/data.js +5 -5
- package/dist/collection/components/datetime-button/datetime-button.ios.css +6 -0
- package/dist/collection/components/datetime-button/datetime-button.js +11 -8
- package/dist/collection/components/datetime-button/datetime-button.md.css +6 -0
- package/dist/collection/components/divider/divider.ionic.css +148 -0
- package/dist/collection/components/divider/divider.ios.css +87 -0
- package/dist/collection/components/divider/divider.js +94 -0
- package/dist/collection/components/divider/divider.md.css +87 -0
- package/dist/collection/components/fab/fab.css +25 -1
- package/dist/collection/components/fab/fab.js +9 -5
- package/dist/collection/components/fab-button/fab-button.ios.css +18 -6
- package/dist/collection/components/fab-button/fab-button.js +31 -21
- package/dist/collection/components/fab-button/fab-button.md.css +20 -8
- package/dist/collection/components/fab-list/fab-list.css +12 -0
- package/dist/collection/components/fab-list/fab-list.js +9 -5
- package/dist/collection/components/footer/footer-interface.js +1 -0
- package/dist/collection/components/footer/footer.ios.css +33 -6
- package/dist/collection/components/footer/footer.js +117 -25
- package/dist/collection/components/footer/footer.md.css +40 -0
- package/dist/collection/components/gallery/gallery-constants.js +12 -0
- package/dist/collection/components/gallery/gallery-interface.js +1 -0
- package/dist/collection/components/gallery/gallery.css +15 -0
- package/dist/collection/components/gallery/gallery.js +678 -0
- package/dist/collection/components/gallery/test/utils.js +100 -0
- package/dist/collection/components/gallery-item/gallery-item.css +49 -0
- package/dist/collection/components/gallery-item/gallery-item.js +98 -0
- package/dist/collection/components/grid/grid.css +12 -0
- package/dist/collection/components/grid/grid.js +9 -5
- package/dist/collection/components/header/header-interface.js +1 -0
- package/dist/collection/components/header/header.ionic.css +286 -0
- package/dist/collection/components/header/header.ios.css +178 -133
- package/dist/collection/components/header/header.js +180 -39
- package/dist/collection/components/header/header.md.css +199 -9
- package/dist/collection/components/header/header.utils.js +5 -13
- package/dist/collection/components/img/img.js +7 -2
- package/dist/collection/components/infinite-scroll/infinite-scroll.js +99 -5
- package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.ios.css +12 -0
- package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.js +16 -10
- package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.md.css +12 -0
- package/dist/collection/components/input/input.ionic.css +961 -0
- package/dist/collection/components/input/input.ios.css +254 -160
- package/dist/collection/components/input/input.js +172 -44
- package/dist/collection/components/input/input.md.css +224 -232
- package/dist/collection/components/input-otp/input-otp.ionic.css +369 -0
- package/dist/collection/components/input-otp/input-otp.ios.css +105 -60
- package/dist/collection/components/input-otp/input-otp.js +74 -8
- package/dist/collection/components/input-otp/input-otp.md.css +105 -60
- package/dist/collection/components/input-password-toggle/input-password-toggle.ionic.css +78 -0
- package/dist/collection/components/input-password-toggle/input-password-toggle.js +37 -10
- package/dist/collection/components/input-password-toggle/input-password-toggle.native.css +61 -0
- package/dist/collection/components/item/item.ionic.css +495 -0
- package/dist/collection/components/item/item.ios.css +120 -80
- package/dist/collection/components/item/item.js +51 -21
- package/dist/collection/components/item/item.md.css +131 -79
- package/dist/collection/components/item-divider/item-divider.ios.css +18 -0
- package/dist/collection/components/item-divider/item-divider.js +11 -8
- package/dist/collection/components/item-divider/item-divider.md.css +18 -0
- package/dist/collection/components/item-group/item-group.ios.css +12 -0
- package/dist/collection/components/item-group/item-group.js +13 -7
- package/dist/collection/components/item-group/item-group.md.css +12 -0
- package/dist/collection/components/item-option/item-option.ionic.css +276 -0
- package/dist/collection/components/item-option/item-option.ios.css +136 -29
- package/dist/collection/components/item-option/item-option.js +73 -9
- package/dist/collection/components/item-option/item-option.md.css +136 -29
- package/dist/collection/components/item-options/item-options.ionic.css +221 -0
- package/dist/collection/components/item-options/item-options.ios.css +77 -34
- package/dist/collection/components/item-options/item-options.js +13 -7
- package/dist/collection/components/item-options/item-options.md.css +77 -34
- package/dist/collection/components/item-sliding/item-sliding.ionic.css +211 -0
- package/dist/collection/components/item-sliding/item-sliding.js +419 -35
- package/dist/collection/components/item-sliding/{item-sliding.css → item-sliding.native.css} +84 -9
- package/dist/collection/components/item-sliding/test/test.utils.js +13 -0
- package/dist/collection/components/label/label.ios.css +18 -0
- package/dist/collection/components/label/label.js +11 -8
- package/dist/collection/components/label/label.md.css +18 -0
- package/dist/collection/components/list/list.ionic.css +212 -0
- package/dist/collection/components/list/list.ios.css +54 -14
- package/dist/collection/components/list/list.js +48 -9
- package/dist/collection/components/list/list.md.css +56 -16
- package/dist/collection/components/list-header/list-header.ionic.css +189 -0
- package/dist/collection/components/list-header/list-header.ios.css +82 -38
- package/dist/collection/components/list-header/list-header.js +11 -8
- package/dist/collection/components/list-header/list-header.md.css +82 -38
- package/dist/collection/components/loading/loading.ios.css +13 -1
- package/dist/collection/components/loading/loading.js +15 -12
- package/dist/collection/components/loading/loading.md.css +13 -1
- package/dist/collection/components/menu/menu.ios.css +15 -3
- package/dist/collection/components/menu/menu.js +12 -7
- package/dist/collection/components/menu/menu.md.css +15 -3
- package/dist/collection/components/menu-button/menu-button.ionic.css +236 -0
- package/dist/collection/components/menu-button/menu-button.ios.css +48 -14
- package/dist/collection/components/menu-button/menu-button.js +23 -10
- package/dist/collection/components/menu-button/menu-button.md.css +49 -15
- package/dist/collection/components/menu-toggle/menu-toggle.js +8 -5
- package/dist/collection/components/modal/animations/ionic.enter.js +40 -0
- package/dist/collection/components/modal/animations/ionic.leave.js +28 -0
- package/dist/collection/components/modal/animations/sheet.js +8 -2
- package/dist/collection/components/modal/gestures/sheet.js +96 -8
- package/dist/collection/components/modal/modal.ionic.css +266 -0
- package/dist/collection/components/modal/modal.ios.css +178 -70
- package/dist/collection/components/modal/modal.js +52 -13
- package/dist/collection/components/modal/modal.md.css +178 -70
- package/dist/collection/components/nav/nav.css +7 -1
- package/dist/collection/components/nav/nav.js +10 -4
- package/dist/collection/components/nav-link/nav-link.js +5 -1
- package/dist/collection/components/note/note.ios.css +12 -0
- package/dist/collection/components/note/note.js +11 -8
- package/dist/collection/components/note/note.md.css +12 -0
- package/dist/collection/components/picker/picker.ios.css +15 -3
- package/dist/collection/components/picker/picker.js +8 -5
- package/dist/collection/components/picker/picker.md.css +15 -3
- package/dist/collection/components/picker-column/picker-column.css +9 -2
- package/dist/collection/components/picker-column/picker-column.js +8 -7
- package/dist/collection/components/picker-column-option/picker-column-option.ios.css +6 -0
- package/dist/collection/components/picker-column-option/picker-column-option.js +13 -7
- package/dist/collection/components/picker-column-option/picker-column-option.md.css +6 -0
- package/dist/collection/components/popover/popover.ionic.css +290 -0
- package/dist/collection/components/popover/popover.ios.css +13 -1
- package/dist/collection/components/popover/popover.js +19 -16
- package/dist/collection/components/popover/popover.md.css +13 -1
- package/dist/collection/components/progress-bar/progress-bar.ionic.css +287 -0
- package/dist/collection/components/progress-bar/progress-bar.ios.css +48 -17
- package/dist/collection/components/progress-bar/progress-bar.js +43 -7
- package/dist/collection/components/progress-bar/progress-bar.md.css +48 -17
- package/dist/collection/components/radio/radio.ionic.css +421 -0
- package/dist/collection/components/radio/radio.ios.css +207 -102
- package/dist/collection/components/radio/radio.js +14 -9
- package/dist/collection/components/radio/radio.md.css +207 -102
- package/dist/collection/components/radio-group/radio-group.ionic.css +118 -0
- package/dist/collection/components/radio-group/radio-group.ios.css +43 -19
- package/dist/collection/components/radio-group/radio-group.js +48 -7
- package/dist/collection/components/radio-group/radio-group.md.css +43 -19
- package/dist/collection/components/range/range.ionic.css +566 -0
- package/dist/collection/components/range/range.ios.css +128 -85
- package/dist/collection/components/range/range.js +16 -10
- package/dist/collection/components/range/range.md.css +128 -85
- package/dist/collection/components/refresher/refresher.ios.css +14 -1
- package/dist/collection/components/refresher/refresher.js +11 -8
- package/dist/collection/components/refresher/refresher.md.css +15 -2
- package/dist/collection/components/refresher-content/refresher-content.js +34 -7
- package/dist/collection/components/reorder/reorder.ios.css +6 -0
- package/dist/collection/components/reorder/reorder.js +25 -6
- package/dist/collection/components/reorder/reorder.md.css +6 -0
- package/dist/collection/components/reorder-group/reorder-group.css +6 -0
- package/dist/collection/components/reorder-group/reorder-group.js +8 -4
- package/dist/collection/components/ripple-effect/{ripple-effect.css → ripple-effect.common.css} +7 -1
- package/dist/collection/components/ripple-effect/ripple-effect.ionic.css +215 -0
- package/dist/collection/components/ripple-effect/ripple-effect.js +14 -6
- package/dist/collection/components/route/route.js +4 -0
- package/dist/collection/components/router/router.js +4 -0
- package/dist/collection/components/router-link/router-link.css +8 -2
- package/dist/collection/components/router-link/router-link.js +9 -5
- package/dist/collection/components/router-outlet/router-outlet.css +7 -1
- package/dist/collection/components/router-outlet/router-outlet.js +6 -3
- package/dist/collection/components/row/row.css +16 -0
- package/dist/collection/components/row/row.js +9 -2
- package/dist/collection/components/searchbar/searchbar.ionic.css +621 -0
- package/dist/collection/components/searchbar/searchbar.ios.css +56 -18
- package/dist/collection/components/searchbar/searchbar.js +164 -42
- package/dist/collection/components/searchbar/searchbar.md.css +56 -18
- package/dist/collection/components/segment/segment.ionic.css +115 -0
- package/dist/collection/components/segment/segment.ios.css +45 -2
- package/dist/collection/components/segment/segment.js +11 -8
- package/dist/collection/components/segment/segment.md.css +45 -2
- package/dist/collection/components/segment-button/segment-button.ionic.css +351 -0
- package/dist/collection/components/segment-button/segment-button.ios.css +146 -105
- package/dist/collection/components/segment-button/segment-button.js +11 -8
- package/dist/collection/components/segment-button/segment-button.md.css +148 -107
- package/dist/collection/components/segment-content/segment-content.js +1 -1
- package/dist/collection/components/segment-view/segment-view.ios.css +6 -0
- package/dist/collection/components/segment-view/segment-view.js +13 -4
- package/dist/collection/components/segment-view/segment-view.md.css +6 -0
- package/dist/collection/components/select/select.ionic.css +976 -0
- package/dist/collection/components/select/select.ios.css +304 -148
- package/dist/collection/components/select/select.js +232 -82
- package/dist/collection/components/select/select.md.css +320 -150
- package/dist/collection/components/select-modal/select-modal.ionic.css +254 -0
- package/dist/collection/components/select-modal/select-modal.ios.css +293 -45
- package/dist/collection/components/select-modal/select-modal.js +63 -15
- package/dist/collection/components/select-modal/select-modal.md.css +273 -43
- package/dist/collection/components/select-option/select-option.js +8 -4
- package/dist/collection/components/select-popover/select-popover.ionic.css +253 -0
- package/dist/collection/components/select-popover/select-popover.ios.css +188 -124
- package/dist/collection/components/select-popover/select-popover.js +17 -9
- package/dist/collection/components/select-popover/select-popover.md.css +228 -47
- package/dist/collection/components/skeleton-text/skeleton-text.css +6 -0
- package/dist/collection/components/skeleton-text/skeleton-text.js +9 -5
- package/dist/collection/components/spinner/{spinner.css → spinner.ionic.css} +78 -10
- package/dist/collection/components/spinner/spinner.js +47 -6
- package/dist/collection/components/spinner/spinner.native.css +199 -0
- package/dist/collection/components/split-pane/split-pane.ios.css +20 -2
- package/dist/collection/components/split-pane/split-pane.js +15 -8
- package/dist/collection/components/split-pane/split-pane.md.css +20 -2
- package/dist/collection/components/tab/tab.js +6 -2
- package/dist/collection/components/tab-bar/tab-bar.ionic.css +249 -0
- package/dist/collection/components/tab-bar/tab-bar.ios.css +86 -43
- package/dist/collection/components/tab-bar/tab-bar.js +178 -15
- package/dist/collection/components/tab-bar/tab-bar.md.css +86 -43
- package/dist/collection/components/tab-button/tab-button.ionic.css +372 -0
- package/dist/collection/components/tab-button/tab-button.ios.css +171 -95
- package/dist/collection/components/tab-button/tab-button.js +54 -9
- package/dist/collection/components/tab-button/tab-button.md.css +137 -93
- package/dist/collection/components/tabs/tabs.css +7 -1
- package/dist/collection/components/tabs/tabs.js +4 -1
- package/dist/collection/components/text/text.css +6 -0
- package/dist/collection/components/text/text.js +7 -6
- package/dist/collection/components/textarea/textarea.ionic.css +989 -0
- package/dist/collection/components/textarea/textarea.ios.css +322 -174
- package/dist/collection/components/textarea/textarea.js +205 -43
- package/dist/collection/components/textarea/textarea.md.css +339 -176
- package/dist/collection/components/thumbnail/thumbnail.css +6 -0
- package/dist/collection/components/thumbnail/thumbnail.js +9 -2
- package/dist/collection/components/title/title.ionic.css +125 -0
- package/dist/collection/components/title/title.ios.css +32 -4
- package/dist/collection/components/title/title.js +13 -7
- package/dist/collection/components/title/title.md.css +39 -4
- package/dist/collection/components/toast/animations/utils.js +1 -1
- package/dist/collection/components/toast/toast.ionic.css +391 -0
- package/dist/collection/components/toast/toast.ios.css +84 -45
- package/dist/collection/components/toast/toast.js +79 -13
- package/dist/collection/components/toast/toast.md.css +84 -45
- package/dist/collection/components/toggle/toggle.ionic.css +510 -0
- package/dist/collection/components/toggle/toggle.ios.css +247 -127
- package/dist/collection/components/toggle/toggle.js +58 -18
- package/dist/collection/components/toggle/toggle.md.css +245 -127
- package/dist/collection/components/toolbar/test/image.svg +1 -0
- package/dist/collection/components/toolbar/toolbar.ionic.css +249 -0
- package/dist/collection/components/toolbar/toolbar.ios.css +90 -47
- package/dist/collection/components/toolbar/toolbar.js +216 -14
- package/dist/collection/components/toolbar/toolbar.md.css +90 -47
- package/dist/collection/global/ionic-global.js +239 -13
- package/dist/collection/utils/css-value-validation.js +39 -0
- package/dist/collection/utils/focus-trap.js +15 -4
- package/dist/collection/utils/focus-visible.js +73 -2
- package/dist/collection/utils/forms/clear-button-press-controller.js +40 -0
- package/dist/collection/utils/forms/click-controller.js +95 -9
- package/dist/collection/utils/forms/index.js +1 -0
- package/dist/collection/utils/forms/validity.js +31 -0
- package/dist/collection/utils/framework-delegate.js +3 -1
- package/dist/collection/utils/hardware-back-button.js +15 -0
- package/dist/collection/utils/helpers.js +84 -3
- package/dist/collection/utils/keyboard/keyboard-controller.js +3 -1
- package/dist/collection/utils/media.js +1 -0
- package/dist/collection/utils/menu-controller/animations/overlay.js +3 -3
- package/dist/collection/utils/menu-controller/animations/push.js +2 -1
- package/dist/collection/utils/menu-controller/animations/reveal.js +2 -1
- package/dist/collection/utils/overlay-control-label.js +13 -11
- package/dist/collection/utils/overlays.js +289 -10
- package/dist/collection/utils/scroll-hide-controller.js +178 -0
- package/dist/collection/utils/test/playwright/drag-element.js +32 -9
- package/dist/collection/utils/test/playwright/field-geometry.js +34 -0
- package/dist/collection/utils/test/playwright/generator.js +48 -23
- package/dist/collection/utils/test/playwright/index.js +1 -0
- package/dist/collection/utils/test/playwright/page/utils/goto.js +10 -1
- package/dist/collection/utils/test/playwright/page/utils/set-content.js +26 -3
- package/dist/collection/utils/theme.js +25 -1
- package/dist/collection/utils/transition/ios.transition.js +1 -0
- package/dist/docs.json +8889 -293
- package/dist/esm/{animation-C_V9lXzL.js → animation-GasMiLY0.js} +2 -2
- package/dist/esm/{app-globals-CNfpAPW6.js → app-globals-DbCTe1Vv.js} +1 -1
- package/dist/esm/{attribute-controller-ItNOXNp9.js → attribute-controller-CbJaN4Zr.js} +2 -1
- package/dist/esm/{button-active-rB-Ct9KZ.js → button-active-DLOYzeXl.js} +2 -2
- package/dist/esm/{capacitor-BY7l8HgR.js → capacitor-CFERIeaU.js} +1 -1
- package/dist/esm/clear-button-press-controller-6ph4kKYn.js +43 -0
- package/dist/esm/focus-visible-BYk20Mf5.js +146 -0
- package/dist/esm/{format-Ck1cw5z7.js → format-NT7iHsbA.js} +1 -1
- package/dist/esm/{framework-delegate-CW5_kWfc.js → framework-delegate-99Ms_INy.js} +4 -2
- package/dist/esm/{haptic-ES_sSPLn.js → haptic-Cq4UAeka.js} +1 -1
- package/dist/esm/{helpers-p94IkmEA.js → helpers-B_F2b1gy.js} +86 -8
- package/dist/esm/{index-CK8uF0iB.js → index-BRYliuA-.js} +1 -1
- package/dist/esm/{index-CBkVO5D0.js → index-BeR_5uou.js} +2 -2
- package/dist/esm/{index-BvabGprD.js → index-BkJpfpXI.js} +2 -1
- package/dist/esm/{index-DLDbwWW7.js → index-BoEdvSPU.js} +4 -2
- package/dist/esm/{index-vgPixHgF.js → index-D5lNz-tr.js} +4 -4
- package/dist/esm/{index-txcXIB3P.js → index-D86Q8ZLS.js} +12 -10
- package/dist/esm/index-ZjP4CjeZ.js +7 -0
- package/dist/esm/{index-BpRUsN_W.js → index-hR6kxzTq.js} +55 -5
- package/dist/esm/index.js +14 -12
- package/dist/esm/{input-shims-KNXj3DAv.js → input-shims-CJVi9djP.js} +7 -5
- package/dist/esm/{input.utils-DZY_K8Po.js → input.utils-gPgFKve4.js} +1 -1
- package/dist/esm/ion-accordion_2.entry.js +57 -29
- package/dist/esm/ion-action-sheet.entry.js +27 -22
- package/dist/esm/ion-alert.entry.js +34 -29
- package/dist/esm/ion-app_8.entry.js +455 -193
- package/dist/esm/ion-avatar_3.entry.js +124 -13
- package/dist/esm/ion-back-button.entry.js +31 -23
- package/dist/esm/ion-backdrop.entry.js +11 -7
- package/dist/esm/ion-breadcrumb_2.entry.js +42 -18
- package/dist/esm/ion-button_2.entry.js +61 -23
- package/dist/esm/ion-card_5.entry.js +57 -34
- package/dist/esm/ion-checkbox.entry.js +43 -17
- package/dist/esm/ion-chip.entry.js +51 -9
- package/dist/esm/ion-col_3.entry.js +56 -63
- package/dist/esm/ion-datetime-button.entry.js +14 -9
- package/dist/esm/ion-datetime.entry.js +74 -32
- package/dist/esm/ion-divider.entry.js +50 -0
- package/dist/esm/ion-fab_3.entry.js +40 -28
- package/dist/esm/ion-gallery-item.entry.js +57 -0
- package/dist/esm/ion-gallery.entry.js +606 -0
- package/dist/esm/ion-img.entry.js +9 -4
- package/dist/esm/ion-infinite-scroll_2.entry.js +91 -16
- package/dist/esm/ion-input-otp.entry.js +75 -10
- package/dist/esm/ion-input-password-toggle.entry.js +42 -14
- package/dist/esm/ion-input.entry.js +147 -38
- package/dist/esm/ion-item-option_3.entry.js +466 -52
- package/dist/esm/ion-item_8.entry.js +118 -51
- package/dist/esm/ion-loading.entry.js +22 -17
- package/dist/esm/ion-menu_3.entry.js +45 -27
- package/dist/esm/ion-modal.entry.js +237 -88
- package/dist/esm/ion-nav_2.entry.js +14 -10
- package/dist/esm/ion-picker-column-option.entry.js +13 -8
- package/dist/esm/ion-picker-column.entry.js +14 -12
- package/dist/esm/ion-picker.entry.js +11 -6
- package/dist/esm/ion-popover.entry.js +23 -18
- package/dist/esm/ion-progress-bar.entry.js +28 -9
- package/dist/esm/ion-radio_2.entry.js +37 -18
- package/dist/esm/ion-range.entry.js +21 -13
- package/dist/esm/ion-refresher_2.entry.js +45 -20
- package/dist/esm/ion-reorder_2.entry.js +31 -13
- package/dist/esm/ion-ripple-effect.entry.js +16 -7
- package/dist/esm/ion-route_4.entry.js +12 -10
- package/dist/esm/ion-searchbar.entry.js +118 -32
- package/dist/esm/ion-segment-content.entry.js +2 -2
- package/dist/esm/ion-segment-view.entry.js +13 -3
- package/dist/esm/ion-segment_2.entry.js +24 -16
- package/dist/esm/ion-select-modal.entry.js +53 -24
- package/dist/esm/ion-select_3.entry.js +198 -76
- package/dist/esm/ion-spinner.entry.js +31 -8
- package/dist/esm/ion-split-pane.entry.js +14 -9
- package/dist/esm/ion-tab-bar_2.entry.js +149 -26
- package/dist/esm/ion-tab_2.entry.js +9 -7
- package/dist/esm/ion-text.entry.js +8 -7
- package/dist/esm/ion-textarea.entry.js +178 -41
- package/dist/esm/ion-toast.entry.js +48 -19
- package/dist/esm/ion-toggle.entry.js +67 -25
- package/dist/esm/ionic-global-DSbFWXp3.js +540 -0
- package/dist/esm/ionic.js +6 -5
- package/dist/esm/{ios.transition-CW92wRDL.js → ios.transition-C9thfQYf.js} +7 -4
- package/dist/esm/{item-multiple-inputs-Bd2LO7qK.js → item-multiple-inputs-CSJsB7-I.js} +1 -1
- package/dist/esm/{keyboard-BumguZrM.js → keyboard-Cj8mLJeq.js} +3 -5
- package/dist/esm/{keyboard-CutS8BPd.js → keyboard-DAF8GNJ9.js} +1 -1
- package/dist/esm/loader.js +6 -5
- package/dist/esm/{md.transition-yhfkYX1P.js → md.transition-BEhPsy_z.js} +6 -4
- package/dist/esm/{overlay-control-label-BSQPZ79H.js → overlay-control-label-CODBQrPj.js} +13 -11
- package/dist/esm/{overlays-BBgMM61s.js → overlays-C8sf7PId.js} +307 -164
- package/dist/esm/scroll-hide-controller-Chts2wJU.js +342 -0
- package/dist/esm/{select-option-render-BSDT9oSA.js → select-option-render-D5kt0cO9.js} +2 -2
- package/dist/esm/{slot-mutation-controller-uKdPbY9K.js → slot-mutation-controller-DanfZTCH.js} +97 -10
- package/dist/esm/{status-tap-BskkGI4e.js → status-tap-B8UQS38n.js} +5 -3
- package/dist/esm/{swipe-back-BZdyM2Q-.js → swipe-back-Bgftkxen.js} +4 -2
- package/dist/esm/{theme-byZM6qHV.js → theme-BUF_V-Kg.js} +25 -1
- package/dist/esm/validity-NcQUGze-.js +48 -0
- package/dist/html.html-data.json +2631 -150
- package/dist/ionic/index.esm.js +1 -1
- package/dist/ionic/ionic.esm.js +1 -1
- package/dist/ionic/p-038465e3.entry.js +4 -0
- package/dist/ionic/p-0743a26a.entry.js +4 -0
- package/dist/ionic/p-0b453760.entry.js +4 -0
- package/dist/ionic/p-0bd5a7c9.entry.js +4 -0
- package/dist/ionic/p-188a2e35.entry.js +4 -0
- package/dist/ionic/p-1b045882.entry.js +4 -0
- package/dist/ionic/p-1b769779.entry.js +4 -0
- package/dist/ionic/p-1d735170.entry.js +4 -0
- package/dist/ionic/p-1d87b153.entry.js +4 -0
- package/dist/ionic/p-2b1e9500.entry.js +4 -0
- package/dist/ionic/p-2gcJ-f11.js +4 -0
- package/dist/ionic/p-308f9b89.entry.js +4 -0
- package/dist/ionic/p-338cb1e7.entry.js +4 -0
- package/dist/ionic/p-3a03d05e.entry.js +4 -0
- package/dist/ionic/p-3a54495e.entry.js +4 -0
- package/dist/ionic/p-3b47fdc7.entry.js +4 -0
- package/dist/ionic/p-3be131ed.entry.js +4 -0
- package/dist/ionic/p-3ddd32cc.entry.js +4 -0
- package/dist/ionic/p-3f15086f.entry.js +4 -0
- package/dist/ionic/p-4152cb6a.entry.js +4 -0
- package/dist/ionic/p-41680415.entry.js +4 -0
- package/dist/ionic/p-49edfb46.entry.js +4 -0
- package/dist/ionic/p-522663a4.entry.js +4 -0
- package/dist/ionic/p-561cfcc1.entry.js +4 -0
- package/dist/ionic/p-6dc9331b.entry.js +4 -0
- package/dist/ionic/p-7df4dcb4.entry.js +4 -0
- package/dist/ionic/p-8183df6b.entry.js +4 -0
- package/dist/ionic/p-8231e914.entry.js +4 -0
- package/dist/ionic/p-82efbf09.entry.js +4 -0
- package/dist/ionic/p-86bf24f4.entry.js +4 -0
- package/dist/ionic/p-8b107444.entry.js +4 -0
- package/dist/ionic/p-8ecb459a.entry.js +4 -0
- package/dist/ionic/p-8ff4bf6c.entry.js +4 -0
- package/dist/ionic/p-905c8b38.entry.js +4 -0
- package/dist/ionic/p-9613f2c3.entry.js +4 -0
- package/dist/ionic/p-973f8069.entry.js +4 -0
- package/dist/ionic/p-9b41acf3.entry.js +4 -0
- package/dist/ionic/p-B36ii-hs.js +4 -0
- package/{components/p-LkEGRiq0.js → dist/ionic/p-B7XMQegr.js} +1 -1
- package/dist/ionic/p-BKwe4f9b.js +4 -0
- package/dist/ionic/{p-5a3UxQAh.js → p-BMPN55of.js} +1 -1
- package/{components/p-D5_mEbGJ.js → dist/ionic/p-BPA4-c6T.js} +1 -1
- package/dist/ionic/p-BUF_V-Kg.js +4 -0
- package/dist/ionic/p-BXRdzJMJ.js +4 -0
- package/dist/ionic/p-BYk20Mf5.js +4 -0
- package/dist/ionic/p-BfDzKnZ-.js +4 -0
- package/dist/ionic/p-BfUzA1cP.js +4 -0
- package/dist/ionic/{p-DCmOKz8e.js → p-Bjt84heL.js} +1 -1
- package/dist/ionic/p-BkJpfpXI.js +4 -0
- package/{components/p-CdrNHfZl.js → dist/ionic/p-BtccSO5J.js} +1 -1
- package/dist/ionic/p-C3TLUO-J.js +4 -0
- package/dist/ionic/p-C4WiowQL.js +4 -0
- package/dist/ionic/p-CIGNaXM1.js +4 -0
- package/dist/ionic/p-CODBQrPj.js +4 -0
- package/dist/ionic/p-CXkgZKSx.js +4 -0
- package/dist/ionic/{p-DxftXYZp.js → p-CeHcVwSj.js} +1 -1
- package/dist/ionic/p-Co3ilg7B.js +4 -0
- package/dist/ionic/p-D5t_-oMk.js +4 -0
- package/dist/ionic/p-D7LiFzrm.js +4 -0
- package/dist/ionic/p-DOdxt_P_.js +4 -0
- package/dist/ionic/p-DRbid4Vh.js +4 -0
- package/dist/ionic/p-DsBidY1y.js +4 -0
- package/dist/ionic/{p-Cf6KtUnA.js → p-DuxayXEj.js} +1 -1
- package/dist/ionic/p-DxPRC9Jk.js +4 -0
- package/dist/ionic/p-Hb0L-KUN.js +4 -0
- package/dist/ionic/p-NcQUGze-.js +4 -0
- package/dist/ionic/{p-BBZQUbCq.js → p-T71k3C35.js} +1 -1
- package/dist/ionic/p-WdouEyt8.js +4 -0
- package/dist/ionic/p-ZjP4CjeZ.js +4 -0
- package/dist/ionic/p-a1555032.entry.js +4 -0
- package/dist/ionic/p-a4299509.entry.js +4 -0
- package/dist/ionic/p-a52cba2f.entry.js +4 -0
- package/dist/ionic/p-ad46d2fd.entry.js +4 -0
- package/dist/ionic/p-b076511a.entry.js +4 -0
- package/dist/ionic/p-b1cd18f0.entry.js +4 -0
- package/dist/ionic/p-b30b468d.entry.js +4 -0
- package/dist/ionic/p-b4de840a.entry.js +4 -0
- package/dist/ionic/p-b6e633f5.entry.js +4 -0
- package/dist/ionic/p-bf40b9eb.entry.js +4 -0
- package/dist/ionic/p-c1fc48c7.entry.js +4 -0
- package/dist/ionic/p-ce8bea16.entry.js +4 -0
- package/dist/ionic/p-dbf53341.entry.js +4 -0
- package/dist/ionic/p-de0de6a6.entry.js +4 -0
- package/dist/ionic/p-e715a580.entry.js +4 -0
- package/dist/ionic/p-f10a94a8.entry.js +4 -0
- package/dist/ionic/p-f3057b31.entry.js +4 -0
- package/dist/ionic/p-fa74dd94.entry.js +4 -0
- package/dist/ionic/p-fd00e28d.entry.js +4 -0
- package/dist/ionic/p-hR6kxzTq.js +6 -0
- package/dist/ionic/p-pVSZ4TVa.js +4 -0
- package/dist/ionic/{p-DfvWlTdB.js → p-rwBGNQHN.js} +1 -1
- package/dist/types/components/accordion/accordion.d.ts +12 -3
- package/dist/types/components/accordion-group/accordion-group.d.ts +12 -1
- package/dist/types/components/action-sheet/action-sheet-interface.d.ts +3 -7
- package/dist/types/components/action-sheet/action-sheet.d.ts +3 -2
- package/dist/types/components/alert/alert-interface.d.ts +3 -7
- package/dist/types/components/alert/alert.d.ts +3 -2
- package/dist/types/components/app/app.d.ts +4 -5
- package/dist/types/components/avatar/avatar.d.ts +32 -0
- package/dist/types/components/back-button/back-button.d.ts +10 -3
- package/dist/types/components/backdrop/backdrop.d.ts +4 -0
- package/dist/types/components/badge/badge.d.ts +34 -1
- package/dist/types/components/breadcrumb/breadcrumb.d.ts +14 -1
- package/dist/types/components/breadcrumbs/breadcrumbs.d.ts +2 -2
- package/dist/types/components/button/button.d.ts +23 -8
- package/dist/types/components/buttons/buttons.d.ts +5 -1
- package/dist/types/components/card/card.d.ts +8 -1
- package/dist/types/components/card-content/card-content.d.ts +2 -1
- package/dist/types/components/card-header/card-header.d.ts +3 -2
- package/dist/types/components/card-subtitle/card-subtitle.d.ts +2 -1
- package/dist/types/components/card-title/card-title.d.ts +2 -1
- package/dist/types/components/checkbox/checkbox.d.ts +26 -5
- package/dist/types/components/chip/chip.d.ts +26 -1
- package/dist/types/components/col/col.d.ts +52 -6
- package/dist/types/components/content/content.d.ts +3 -0
- package/dist/types/components/datetime/datetime.d.ts +26 -1
- package/dist/types/components/datetime/utils/data.d.ts +5 -5
- package/dist/types/components/datetime-button/datetime-button.d.ts +2 -1
- package/dist/types/components/divider/divider.d.ts +20 -0
- package/dist/types/components/fab/fab.d.ts +4 -0
- package/dist/types/components/fab-button/fab-button.d.ts +11 -3
- package/dist/types/components/fab-list/fab-list.d.ts +4 -0
- package/dist/types/components/footer/footer-interface.d.ts +1 -0
- package/dist/types/components/footer/footer.d.ts +20 -3
- package/dist/types/components/gallery/gallery-constants.d.ts +9 -0
- package/dist/types/components/gallery/gallery-interface.d.ts +10 -0
- package/dist/types/components/gallery/gallery.d.ts +218 -0
- package/dist/types/components/gallery/test/utils.d.ts +3 -0
- package/dist/types/components/gallery-item/gallery-item.d.ts +33 -0
- package/dist/types/components/grid/grid.d.ts +4 -0
- package/dist/types/components/header/header-interface.d.ts +1 -0
- package/dist/types/components/header/header.d.ts +26 -3
- package/dist/types/components/header/header.utils.d.ts +4 -5
- package/dist/types/components/img/img.d.ts +2 -0
- package/dist/types/components/infinite-scroll/infinite-scroll.d.ts +21 -0
- package/dist/types/components/infinite-scroll-content/infinite-scroll-content.d.ts +4 -0
- package/dist/types/components/input/input.d.ts +45 -5
- package/dist/types/components/input-otp/input-otp.d.ts +37 -0
- package/dist/types/components/input-password-toggle/input-password-toggle.d.ts +14 -0
- package/dist/types/components/item/item.d.ts +17 -4
- package/dist/types/components/item-divider/item-divider.d.ts +2 -1
- package/dist/types/components/item-group/item-group.d.ts +4 -0
- package/dist/types/components/item-option/item-option.d.ts +18 -1
- package/dist/types/components/item-options/item-options.d.ts +4 -0
- package/dist/types/components/item-sliding/item-sliding.d.ts +47 -1
- package/dist/types/components/item-sliding/test/test.utils.d.ts +13 -0
- package/dist/types/components/label/label.d.ts +2 -1
- package/dist/types/components/list/list.d.ts +15 -1
- package/dist/types/components/list-header/list-header.d.ts +2 -1
- package/dist/types/components/loading/loading-interface.d.ts +2 -7
- package/dist/types/components/loading/loading.d.ts +3 -2
- package/dist/types/components/menu/menu.d.ts +3 -0
- package/dist/types/components/menu-button/menu-button.d.ts +8 -1
- package/dist/types/components/menu-toggle/menu-toggle.d.ts +3 -0
- package/dist/types/components/modal/animations/ionic.enter.d.ts +6 -0
- package/dist/types/components/modal/animations/ionic.leave.d.ts +6 -0
- package/dist/types/components/modal/gestures/sheet.d.ts +1 -1
- package/dist/types/components/modal/modal-interface.d.ts +4 -7
- package/dist/types/components/modal/modal.d.ts +11 -1
- package/dist/types/components/nav/nav-interface.d.ts +9 -1
- package/dist/types/components/nav/nav.d.ts +5 -1
- package/dist/types/components/nav-link/nav-link.d.ts +4 -0
- package/dist/types/components/note/note.d.ts +2 -1
- package/dist/types/components/picker/picker.d.ts +2 -1
- package/dist/types/components/picker-column/picker-column.d.ts +2 -1
- package/dist/types/components/picker-column-option/picker-column-option.d.ts +4 -0
- package/dist/types/components/popover/popover-interface.d.ts +3 -6
- package/dist/types/components/popover/popover.d.ts +6 -5
- package/dist/types/components/progress-bar/progress-bar.d.ts +10 -1
- package/dist/types/components/radio/radio.d.ts +2 -1
- package/dist/types/components/radio-group/radio-group.d.ts +12 -0
- package/dist/types/components/range/range.d.ts +2 -1
- package/dist/types/components/refresher/refresher.d.ts +2 -1
- package/dist/types/components/refresher-content/refresher-content.d.ts +10 -0
- package/dist/types/components/reorder/reorder.d.ts +9 -0
- package/dist/types/components/reorder-group/reorder-group.d.ts +4 -0
- package/dist/types/components/ripple-effect/ripple-effect.d.ts +4 -0
- package/dist/types/components/route/route.d.ts +4 -0
- package/dist/types/components/router/router.d.ts +4 -0
- package/dist/types/components/router-link/router-link.d.ts +4 -0
- package/dist/types/components/router-outlet/router-outlet.d.ts +4 -1
- package/dist/types/components/row/row.d.ts +4 -0
- package/dist/types/components/searchbar/searchbar.d.ts +56 -10
- package/dist/types/components/segment/segment.d.ts +2 -1
- package/dist/types/components/segment-button/segment-button.d.ts +2 -1
- package/dist/types/components/select/select.d.ts +59 -15
- package/dist/types/components/select-modal/select-modal.d.ts +13 -0
- package/dist/types/components/select-option/select-option.d.ts +7 -4
- package/dist/types/components/select-popover/select-popover.d.ts +3 -0
- package/dist/types/components/skeleton-text/skeleton-text.d.ts +4 -0
- package/dist/types/components/spinner/spinner.d.ts +15 -0
- package/dist/types/components/split-pane/split-pane.d.ts +4 -0
- package/dist/types/components/tab/tab.d.ts +4 -0
- package/dist/types/components/tab-bar/tab-bar-interface.d.ts +1 -0
- package/dist/types/components/tab-bar/tab-bar.d.ts +41 -3
- package/dist/types/components/tab-button/tab-button.d.ts +12 -1
- package/dist/types/components/tabs/tabs.d.ts +3 -0
- package/dist/types/components/text/text.d.ts +2 -1
- package/dist/types/components/textarea/textarea.d.ts +75 -17
- package/dist/types/components/thumbnail/thumbnail.d.ts +4 -0
- package/dist/types/components/title/title.d.ts +4 -0
- package/dist/types/components/toast/animations/utils.d.ts +2 -2
- package/dist/types/components/toast/toast-interface.d.ts +3 -7
- package/dist/types/components/toast/toast.d.ts +19 -2
- package/dist/types/components/toggle/toggle.d.ts +18 -1
- package/dist/types/components/toolbar/toolbar.d.ts +43 -3
- package/dist/types/components.d.ts +1839 -211
- package/dist/types/global/ionic-global.d.ts +28 -2
- package/dist/types/interface.d.ts +3 -0
- package/dist/types/utils/config.d.ts +128 -4
- package/dist/types/utils/css-value-validation.d.ts +21 -0
- package/dist/types/utils/focus-trap.d.ts +1 -1
- package/dist/types/utils/focus-visible.d.ts +33 -0
- package/dist/types/utils/forms/clear-button-press-controller.d.ts +20 -0
- package/dist/types/utils/forms/click-controller.d.ts +16 -5
- package/dist/types/utils/forms/index.d.ts +1 -0
- package/dist/types/utils/forms/validity.d.ts +7 -0
- package/dist/types/utils/helpers.d.ts +29 -0
- package/dist/types/utils/overlay-control-label.d.ts +11 -9
- package/dist/types/utils/overlays-interface.d.ts +31 -1
- package/dist/types/utils/overlays.d.ts +1 -1
- package/dist/types/utils/scroll-hide-controller.d.ts +56 -0
- package/dist/types/utils/test/playwright/drag-element.d.ts +16 -3
- package/dist/types/utils/test/playwright/field-geometry.d.ts +13 -0
- package/dist/types/utils/test/playwright/generator.d.ts +31 -2
- package/dist/types/utils/test/playwright/index.d.ts +1 -0
- package/dist/types/utils/theme.d.ts +9 -0
- package/hydrate/index.js +5465 -1248
- package/hydrate/index.mjs +5465 -1248
- package/package.json +10 -4
- package/components/p-3avHDbEF.js +0 -4
- package/components/p-7KepMw9O.js +0 -4
- package/components/p-7NbIvzb4.js +0 -4
- package/components/p-B3dSuofL.js +0 -4
- package/components/p-BBsseItU.js +0 -4
- package/components/p-BMHdI-wb.js +0 -4
- package/components/p-BSQPZ79H.js +0 -4
- package/components/p-BT2InaHz.js +0 -4
- package/components/p-BZ1k9WL7.js +0 -4
- package/components/p-BhamHSw3.js +0 -4
- package/components/p-BmVRXR1y.js +0 -4
- package/components/p-BrrMFd9K.js +0 -4
- package/components/p-C-SO5kIs.js +0 -4
- package/components/p-C0TdbIVo.js +0 -4
- package/components/p-C6Y0cCH_.js +0 -4
- package/components/p-C8BAigo3.js +0 -4
- package/components/p-CRb2xRCz.js +0 -4
- package/components/p-CUQjkOdi.js +0 -4
- package/components/p-CW84OFQa.js +0 -4
- package/components/p-CjPRDxby.js +0 -4
- package/components/p-CohRJRIu.js +0 -4
- package/components/p-Ct2aBEue.js +0 -4
- package/components/p-CvyvLbPe.js +0 -4
- package/components/p-D8FyR2IB.js +0 -4
- package/components/p-DJztqcrH.js +0 -4
- package/components/p-DLEJ61lJ.js +0 -4
- package/components/p-DRm4t-by.js +0 -4
- package/components/p-DTGCMApY.js +0 -4
- package/components/p-D_U0pDe5.js +0 -4
- package/components/p-DaW9OZ6S.js +0 -4
- package/components/p-Dah8BCNg.js +0 -4
- package/components/p-DaojW_d_.js +0 -4
- package/components/p-DnBabjgY.js +0 -4
- package/components/p-Ds5vN3iu.js +0 -4
- package/components/p-DwTzX8Vi.js +0 -4
- package/components/p-Dy7x-KDF.js +0 -4
- package/components/p-HthJZjZ6.js +0 -4
- package/components/p-KbMCbGRA.js +0 -4
- package/components/p-LpMHEu3v.js +0 -4
- package/components/p-PkD1iLNN.js +0 -4
- package/components/p-R4UxBukQ.js +0 -4
- package/components/p-RhI78AKb.js +0 -4
- package/components/p-byZM6qHV.js +0 -4
- package/components/p-hLu-eIbb.js +0 -4
- package/components/p-kKGBuIkf.js +0 -4
- package/components/p-z-EWo6r-.js +0 -4
- package/dist/cjs/focus-visible-CCvKiLh3.js +0 -77
- package/dist/cjs/ionic-global-48ceLiJ6.js +0 -156
- package/dist/cjs/keyboard-controller-DZE97OtR.js +0 -167
- package/dist/cjs/validity-BpS37YFM.js +0 -19
- package/dist/esm/focus-visible-BmVRXR1y.js +0 -75
- package/dist/esm/ionic-global-Cep6oYzK.js +0 -151
- package/dist/esm/keyboard-controller-DqohyEsZ.js +0 -165
- package/dist/esm/validity-DJztqcrH.js +0 -17
- package/dist/ionic/p-00cd107d.entry.js +0 -4
- package/dist/ionic/p-013b9aba.entry.js +0 -4
- package/dist/ionic/p-014c3633.entry.js +0 -4
- package/dist/ionic/p-0562139b.entry.js +0 -4
- package/dist/ionic/p-0a789930.entry.js +0 -4
- package/dist/ionic/p-0f1613f2.entry.js +0 -4
- package/dist/ionic/p-1252621e.entry.js +0 -4
- package/dist/ionic/p-129f7b95.entry.js +0 -4
- package/dist/ionic/p-16de8fd9.entry.js +0 -4
- package/dist/ionic/p-1bb1be7e.entry.js +0 -4
- package/dist/ionic/p-1f342c2d.entry.js +0 -4
- package/dist/ionic/p-1ffa5577.entry.js +0 -4
- package/dist/ionic/p-210f906e.entry.js +0 -4
- package/dist/ionic/p-27960f65.entry.js +0 -4
- package/dist/ionic/p-3c6fc2e8.entry.js +0 -4
- package/dist/ionic/p-436d4ac8.entry.js +0 -4
- package/dist/ionic/p-43729675.entry.js +0 -4
- package/dist/ionic/p-4468e439.entry.js +0 -4
- package/dist/ionic/p-4e4e5919.entry.js +0 -4
- package/dist/ionic/p-51af4728.entry.js +0 -4
- package/dist/ionic/p-59e4b521.entry.js +0 -4
- package/dist/ionic/p-5b47b8d5.entry.js +0 -4
- package/dist/ionic/p-5dcddfd5.entry.js +0 -4
- package/dist/ionic/p-694f3e78.entry.js +0 -4
- package/dist/ionic/p-76c189e7.entry.js +0 -4
- package/dist/ionic/p-77252596.entry.js +0 -4
- package/dist/ionic/p-77540bcb.entry.js +0 -4
- package/dist/ionic/p-77e7b612.entry.js +0 -4
- package/dist/ionic/p-7868eb92.entry.js +0 -4
- package/dist/ionic/p-800ce1e0.entry.js +0 -4
- package/dist/ionic/p-84470714.entry.js +0 -4
- package/dist/ionic/p-87fb6d59.entry.js +0 -4
- package/dist/ionic/p-8B39TMv-.js +0 -4
- package/dist/ionic/p-8af85fa8.entry.js +0 -4
- package/dist/ionic/p-8c85e250.entry.js +0 -4
- package/dist/ionic/p-8dQB1sG_.js +0 -4
- package/dist/ionic/p-9515f840.entry.js +0 -4
- package/dist/ionic/p-96d040b0.entry.js +0 -4
- package/dist/ionic/p-9d7e5a0b.entry.js +0 -4
- package/dist/ionic/p-B0afqOUt.js +0 -4
- package/dist/ionic/p-B2JD8_LP.js +0 -4
- package/dist/ionic/p-B2y1T0dN.js +0 -4
- package/dist/ionic/p-BHBb21Hp.js +0 -4
- package/dist/ionic/p-BSQPZ79H.js +0 -4
- package/dist/ionic/p-BexAj0yw.js +0 -4
- package/dist/ionic/p-BgkRGRO3.js +0 -4
- package/dist/ionic/p-BmVRXR1y.js +0 -4
- package/dist/ionic/p-BpRUsN_W.js +0 -6
- package/dist/ionic/p-BvabGprD.js +0 -4
- package/dist/ionic/p-C4SpVvhx.js +0 -4
- package/dist/ionic/p-CNdt1FPc.js +0 -4
- package/dist/ionic/p-CfccUand.js +0 -4
- package/dist/ionic/p-DArnNWiu.js +0 -4
- package/dist/ionic/p-DBFcFCH5.js +0 -4
- package/dist/ionic/p-DFPZa_No.js +0 -4
- package/dist/ionic/p-DJztqcrH.js +0 -4
- package/dist/ionic/p-DYKDWM2f.js +0 -4
- package/dist/ionic/p-DriE1ZAo.js +0 -4
- package/dist/ionic/p-DzQk7Lu8.js +0 -4
- package/dist/ionic/p-SEecsUh7.js +0 -4
- package/dist/ionic/p-a45caa30.entry.js +0 -4
- package/dist/ionic/p-af15fc5d.entry.js +0 -4
- package/dist/ionic/p-af4b4719.entry.js +0 -4
- package/dist/ionic/p-b0faaae2.entry.js +0 -4
- package/dist/ionic/p-b3aadfe8.entry.js +0 -4
- package/dist/ionic/p-b5bcbbc1.entry.js +0 -4
- package/dist/ionic/p-byZM6qHV.js +0 -4
- package/dist/ionic/p-c293f854.entry.js +0 -4
- package/dist/ionic/p-c56c23b6.entry.js +0 -4
- package/dist/ionic/p-c7ea2647.entry.js +0 -4
- package/dist/ionic/p-c8c77f7b.entry.js +0 -4
- package/dist/ionic/p-cbc73380.entry.js +0 -4
- package/dist/ionic/p-d58e9da3.entry.js +0 -4
- package/dist/ionic/p-e1haAYzm.js +0 -4
- package/dist/ionic/p-ec08a7e6.entry.js +0 -4
- package/dist/ionic/p-f37e6ed2.entry.js +0 -4
- package/dist/ionic/p-f6a1ab48.entry.js +0 -4
- /package/dist/collection/components/{input-password-toggle/input-password-toggle.css → refresher-content/refresher-content.css} +0 -0
|
@@ -1,14 +1,153 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
3
|
*/
|
|
4
|
-
import { getMode, setMode } from "@stencil/core";
|
|
4
|
+
import { Build, getMode, setMode, getElement } from "@stencil/core";
|
|
5
5
|
import { printIonWarning } from "../utils/logging/index";
|
|
6
|
+
import { shouldUseCloseWatcher } from "../utils/hardware-back-button";
|
|
6
7
|
import { isPlatform, setupPlatforms } from "../utils/platform";
|
|
7
8
|
import { config, configFromSession, configFromURL, saveConfig } from "./config";
|
|
8
|
-
// TODO(FW-2832): types
|
|
9
9
|
let defaultMode;
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
let defaultTheme = 'md';
|
|
11
|
+
let rICHandle;
|
|
12
|
+
/**
|
|
13
|
+
* Prints a warning message to the developer to inform them of
|
|
14
|
+
* an invalid configuration of mode and theme.
|
|
15
|
+
* @param mode The invalid mode configuration.
|
|
16
|
+
* @param theme The invalid theme configuration.
|
|
17
|
+
*/
|
|
18
|
+
const printInvalidModeWarning = (mode, theme, ref) => {
|
|
19
|
+
printIonWarning(`Invalid mode and theme combination provided: mode: ${mode}, theme: ${theme}. Fallback mode ${getDefaultModeForTheme(theme)} will be used.`, ref);
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Validates if a mode is accepted for a theme configuration.
|
|
23
|
+
* @param mode The mode to validate.
|
|
24
|
+
* @param theme The theme the mode is being used with.
|
|
25
|
+
* @returns `true` if the mode is valid for the theme, `false` if invalid.
|
|
26
|
+
*/
|
|
27
|
+
export const isModeValidForTheme = (mode, theme) => {
|
|
28
|
+
if (mode === 'md') {
|
|
29
|
+
return theme === 'md' || theme === 'ionic';
|
|
30
|
+
}
|
|
31
|
+
else if (mode === 'ios') {
|
|
32
|
+
return theme === 'ios' || theme === 'ionic';
|
|
33
|
+
}
|
|
34
|
+
return false;
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Returns the default mode for a specified theme.
|
|
38
|
+
* @param theme The theme to return a default mode for.
|
|
39
|
+
* @returns The default mode, either `ios` or `md`.
|
|
40
|
+
*/
|
|
41
|
+
const getDefaultModeForTheme = (theme) => {
|
|
42
|
+
if (theme === 'ios') {
|
|
43
|
+
return 'ios';
|
|
44
|
+
}
|
|
45
|
+
return 'md';
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* Returns the default theme for a specified mode.
|
|
49
|
+
* @param mode The mode to return a default theme for.
|
|
50
|
+
* @returns The default theme.
|
|
51
|
+
*/
|
|
52
|
+
const getDefaultThemeForMode = (mode) => {
|
|
53
|
+
if (mode === 'ios') {
|
|
54
|
+
return 'ios';
|
|
55
|
+
}
|
|
56
|
+
return 'md';
|
|
57
|
+
};
|
|
58
|
+
const isModeSupported = (elmMode) => ['ios', 'md'].includes(elmMode);
|
|
59
|
+
const isThemeSupported = (theme) => ['ios', 'md', 'ionic'].includes(theme);
|
|
60
|
+
const isIonicElement = (elm) => elm.tagName?.startsWith('ION-');
|
|
61
|
+
/**
|
|
62
|
+
* Returns the mode value of the element reference or the closest
|
|
63
|
+
* parent with a valid mode.
|
|
64
|
+
* @param ref The element reference to look up the mode for.
|
|
65
|
+
* @param theme Optionally can provide the theme to avoid an additional look-up.
|
|
66
|
+
* @returns The mode value for the element reference.
|
|
67
|
+
*/
|
|
68
|
+
export const getIonMode = (ref, theme = getIonTheme(ref)) => {
|
|
69
|
+
if (ref?.mode && isModeValidForTheme(ref?.mode, theme)) {
|
|
70
|
+
/**
|
|
71
|
+
* If the reference already has a mode configuration,
|
|
72
|
+
* use it instead of performing a look-up.
|
|
73
|
+
*/
|
|
74
|
+
return ref.mode;
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
const el = getElement(ref);
|
|
78
|
+
const mode = el.closest('[mode]')?.getAttribute('mode') || defaultMode;
|
|
79
|
+
if (isModeValidForTheme(mode, theme)) {
|
|
80
|
+
/**
|
|
81
|
+
* The mode configuration is supported for the configured theme.
|
|
82
|
+
*/
|
|
83
|
+
return mode;
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
printInvalidModeWarning(mode, theme, ref);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return getDefaultModeForTheme(theme);
|
|
90
|
+
};
|
|
91
|
+
/**
|
|
92
|
+
* Returns the theme value of the element reference or the closest
|
|
93
|
+
* parent with a valid theme.
|
|
94
|
+
*
|
|
95
|
+
* @param ref The element reference to look up the theme for.
|
|
96
|
+
* @returns The theme value for the element reference, defaults to
|
|
97
|
+
* the default theme if it cannot be determined.
|
|
98
|
+
*/
|
|
99
|
+
export const getIonTheme = (ref) => {
|
|
100
|
+
const theme = ref && getMode(ref);
|
|
101
|
+
if (theme) {
|
|
102
|
+
return theme;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* If the theme cannot be detected, then fallback to using
|
|
106
|
+
* the `mode` attribute to determine the style sheets to use.
|
|
107
|
+
*/
|
|
108
|
+
const el = getElement(ref);
|
|
109
|
+
const mode = ref?.mode ?? el.closest('[mode]')?.getAttribute('mode');
|
|
110
|
+
if (mode) {
|
|
111
|
+
return getDefaultThemeForMode(mode);
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* If a mode is not detected, then fallback to using the
|
|
115
|
+
* default theme.
|
|
116
|
+
*/
|
|
117
|
+
return defaultTheme;
|
|
118
|
+
};
|
|
119
|
+
export const rIC = (callback) => {
|
|
120
|
+
if ('requestIdleCallback' in window) {
|
|
121
|
+
return window.requestIdleCallback(callback);
|
|
122
|
+
}
|
|
123
|
+
return setTimeout(callback, 32);
|
|
124
|
+
};
|
|
125
|
+
export const cIC = (id) => {
|
|
126
|
+
if ('cancelIdleCallback' in window) {
|
|
127
|
+
window.cancelIdleCallback(id);
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
clearTimeout(id);
|
|
131
|
+
}
|
|
132
|
+
};
|
|
133
|
+
export const needInputShims = () => {
|
|
134
|
+
/**
|
|
135
|
+
* iOS always needs input shims
|
|
136
|
+
*/
|
|
137
|
+
const needsShimsIOS = isPlatform(window, 'ios') && isPlatform(window, 'mobile');
|
|
138
|
+
if (needsShimsIOS) {
|
|
139
|
+
return true;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Android only needs input shims when running
|
|
143
|
+
* in the browser and only if the browser is using the
|
|
144
|
+
* new Chrome 108+ resize behavior: https://developer.chrome.com/blog/viewport-resize-behavior/
|
|
145
|
+
*/
|
|
146
|
+
const isAndroidMobileWeb = isPlatform(window, 'android') && isPlatform(window, 'mobileweb');
|
|
147
|
+
if (isAndroidMobileWeb) {
|
|
148
|
+
return true;
|
|
149
|
+
}
|
|
150
|
+
return false;
|
|
12
151
|
};
|
|
13
152
|
export const initialize = (userConfig = {}) => {
|
|
14
153
|
if (typeof window === 'undefined') {
|
|
@@ -32,33 +171,120 @@ export const initialize = (userConfig = {}) => {
|
|
|
32
171
|
}
|
|
33
172
|
// Setup platforms
|
|
34
173
|
setupPlatforms(win);
|
|
35
|
-
// first see if the mode was set as an attribute on <html>
|
|
36
|
-
// which could have been set by the user, or by pre-rendering
|
|
37
|
-
// otherwise get the mode via config settings, and fallback to md
|
|
38
174
|
Ionic.config = config;
|
|
175
|
+
/**
|
|
176
|
+
* Check if the mode was set as an attribute on <html>
|
|
177
|
+
* which could have been set by the user, or by pre-rendering
|
|
178
|
+
* otherwise get the mode via config settings, and fallback to md.
|
|
179
|
+
*/
|
|
39
180
|
Ionic.mode = defaultMode = config.get('mode', doc.documentElement.getAttribute('mode') || (isPlatform(win, 'ios') ? 'ios' : 'md'));
|
|
181
|
+
/**
|
|
182
|
+
* Check if the theme was set as an attribute on <html>
|
|
183
|
+
* which could have been set by the user, or by pre-rendering
|
|
184
|
+
* otherwise get the theme via config settings, and fallback to md.
|
|
185
|
+
*/
|
|
186
|
+
Ionic.theme = defaultTheme = config.get('theme', doc.documentElement.getAttribute('theme') || getDefaultThemeForMode(defaultMode));
|
|
187
|
+
if (!isModeValidForTheme(defaultMode, defaultTheme)) {
|
|
188
|
+
printInvalidModeWarning(defaultMode, defaultTheme, configObj);
|
|
189
|
+
defaultMode = getDefaultModeForTheme(defaultTheme);
|
|
190
|
+
}
|
|
40
191
|
config.set('mode', defaultMode);
|
|
41
192
|
doc.documentElement.setAttribute('mode', defaultMode);
|
|
42
193
|
doc.documentElement.classList.add(defaultMode);
|
|
194
|
+
config.set('theme', defaultTheme);
|
|
195
|
+
doc.documentElement.setAttribute('theme', defaultTheme);
|
|
196
|
+
doc.documentElement.classList.add(defaultTheme);
|
|
43
197
|
if (config.getBoolean('_testing')) {
|
|
44
198
|
config.set('animated', false);
|
|
45
199
|
}
|
|
46
|
-
const isIonicElement = (elm) => elm.tagName?.startsWith('ION-');
|
|
47
|
-
const isAllowedIonicModeValue = (elmMode) => ['ios', 'md'].includes(elmMode);
|
|
48
200
|
setMode((elm) => {
|
|
201
|
+
/**
|
|
202
|
+
* Iterate over all the element nodes, to both validate and
|
|
203
|
+
* set the "mode" that is used for determining the styles to
|
|
204
|
+
* apply to the element.
|
|
205
|
+
*
|
|
206
|
+
* setMode refers to Stencil's internal metadata for "mode",
|
|
207
|
+
* which is used to set the correct styleUrl for the component.
|
|
208
|
+
*
|
|
209
|
+
* If the "theme" attribute or property is set, then use it
|
|
210
|
+
* to determine the style sheets to use.
|
|
211
|
+
*
|
|
212
|
+
* If the "mode" attribute or property is set, then use it
|
|
213
|
+
* to determine the style sheets to use. This is fallback
|
|
214
|
+
* behavior for applications that are not setting the "theme".
|
|
215
|
+
*/
|
|
49
216
|
while (elm) {
|
|
50
|
-
const
|
|
217
|
+
const theme = elm.getAttribute('theme');
|
|
218
|
+
if (theme) {
|
|
219
|
+
if (isThemeSupported(theme)) {
|
|
220
|
+
return theme;
|
|
221
|
+
}
|
|
222
|
+
else if (isIonicElement(elm)) {
|
|
223
|
+
printIonWarning(`Invalid theme: "${theme}". Supported themes include: "ios" or "md".`);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* If a theme is not detected, then fallback to using the
|
|
228
|
+
* `mode` attribute to determine the style sheets to use.
|
|
229
|
+
*/
|
|
230
|
+
const elmMode = elm.getAttribute('mode');
|
|
51
231
|
if (elmMode) {
|
|
52
|
-
if (
|
|
232
|
+
if (isModeSupported(elmMode)) {
|
|
53
233
|
return elmMode;
|
|
54
234
|
}
|
|
55
235
|
else if (isIonicElement(elm)) {
|
|
56
|
-
printIonWarning(
|
|
236
|
+
printIonWarning(`Invalid mode: "${elmMode}". Ionic modes can be only "ios" or "md"`);
|
|
57
237
|
}
|
|
58
238
|
}
|
|
59
239
|
elm = elm.parentElement;
|
|
60
240
|
}
|
|
61
|
-
return
|
|
241
|
+
return defaultTheme;
|
|
62
242
|
});
|
|
243
|
+
// `IonApp` code
|
|
244
|
+
// ----------------------------------------------
|
|
245
|
+
if (Build.isBrowser) {
|
|
246
|
+
// If initialize is called again, clear the previous pending callback
|
|
247
|
+
if (rICHandle !== undefined) {
|
|
248
|
+
cIC(rICHandle);
|
|
249
|
+
}
|
|
250
|
+
rICHandle = rIC(async () => {
|
|
251
|
+
const isHybrid = isPlatform(window, 'hybrid');
|
|
252
|
+
if (!config.getBoolean('_testing')) {
|
|
253
|
+
import('../utils/tap-click').then((module) => module.startTapClick(config));
|
|
254
|
+
}
|
|
255
|
+
if (config.getBoolean('statusTap', isHybrid)) {
|
|
256
|
+
import('../utils/status-tap').then((module) => module.startStatusTap());
|
|
257
|
+
}
|
|
258
|
+
if (config.getBoolean('inputShims', needInputShims())) {
|
|
259
|
+
/**
|
|
260
|
+
* needInputShims() ensures that only iOS and Android
|
|
261
|
+
* platforms proceed into this block.
|
|
262
|
+
*/
|
|
263
|
+
const platform = isPlatform(window, 'ios') ? 'ios' : 'android';
|
|
264
|
+
import('../utils/input-shims/input-shims').then((module) => module.startInputShims(config, platform));
|
|
265
|
+
}
|
|
266
|
+
const hardwareBackButtonModule = await import('../utils/hardware-back-button');
|
|
267
|
+
const supportsHardwareBackButtonEvents = isHybrid || shouldUseCloseWatcher();
|
|
268
|
+
if (config.getBoolean('hardwareBackButton', supportsHardwareBackButtonEvents)) {
|
|
269
|
+
hardwareBackButtonModule.startHardwareBackButton();
|
|
270
|
+
}
|
|
271
|
+
else {
|
|
272
|
+
/**
|
|
273
|
+
* If an app sets hardwareBackButton: false and experimentalCloseWatcher: true
|
|
274
|
+
* then the close watcher will not be used.
|
|
275
|
+
*/
|
|
276
|
+
if (shouldUseCloseWatcher()) {
|
|
277
|
+
printIonWarning('[ion-app] - experimentalCloseWatcher was set to `true`, but hardwareBackButton was set to `false`. Both config options must be `true` for the Close Watcher API to be used.');
|
|
278
|
+
}
|
|
279
|
+
hardwareBackButtonModule.blockHardwareBackButton();
|
|
280
|
+
}
|
|
281
|
+
if (typeof window !== 'undefined') {
|
|
282
|
+
import('../utils/keyboard/keyboard').then((module) => module.startKeyboardAssist(window));
|
|
283
|
+
}
|
|
284
|
+
import('../utils/focus-visible').then((module) => module.getOrInitFocusVisibleUtility());
|
|
285
|
+
// Reset handle once executed
|
|
286
|
+
rICHandle = undefined;
|
|
287
|
+
});
|
|
288
|
+
}
|
|
63
289
|
};
|
|
64
290
|
export default initialize;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Helpers for validating user-supplied CSS values using regular expressions, without
|
|
6
|
+
* relying on browser CSS APIs.
|
|
7
|
+
*/
|
|
8
|
+
// Matches `<length>` (`<number>` + unit identifier) or `<percentage>` (`<number>%`).
|
|
9
|
+
const LENGTH_PERCENTAGE_PATTERN = /^[-+]?(?:\d+\.?\d*|\.\d+)(?:%|[a-z]+)$/i;
|
|
10
|
+
// Matches simple `calc` / `min` / `max` / `clamp(...)` functions.
|
|
11
|
+
const MATH_FUNCTION_PATTERN = /^(calc|min|max|clamp)\s*\(.+\)$/i;
|
|
12
|
+
// Matches a `var(--name)` reference with an optional fallback, e.g.
|
|
13
|
+
// `var(--my-gap)` or `var(--my-gap, 16px)`.
|
|
14
|
+
const VAR_FUNCTION_PATTERN = /^var\(\s*--[^\s,)]+\s*(?:,[\s\S]*)?\)$/i;
|
|
15
|
+
/**
|
|
16
|
+
* Returns whether `value` matches the [length-percentage](https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Values/length-percentage)
|
|
17
|
+
* syntax. Accepts `<length>` (`<number>` + unit identifier) or `<percentage>` (`<number>%`).
|
|
18
|
+
* Also supports simple `calc` / `min` / `max` / `clamp(...)` functions.
|
|
19
|
+
*
|
|
20
|
+
* @param value String value to validate.
|
|
21
|
+
*/
|
|
22
|
+
export function isValidLengthPercentage(value) {
|
|
23
|
+
const v = value.trim();
|
|
24
|
+
if (!v) {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
return MATH_FUNCTION_PATTERN.test(v) || LENGTH_PERCENTAGE_PATTERN.test(v);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Returns whether `value` is a single [`var()`](https://developer.mozilla.org/en-US/docs/Web/CSS/var)
|
|
31
|
+
* reference, e.g. `var(--my-token)` or `var(--my-token, 16px)`. The referenced
|
|
32
|
+
* custom property is resolved by the browser, so the resolved value is not
|
|
33
|
+
* validated here.
|
|
34
|
+
*
|
|
35
|
+
* @param value String value to validate.
|
|
36
|
+
*/
|
|
37
|
+
export function isCssVariable(value) {
|
|
38
|
+
return VAR_FUNCTION_PATTERN.test(value.trim());
|
|
39
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
3
|
*/
|
|
4
|
-
import {
|
|
4
|
+
import { focusRedirectedElement } from "./helpers";
|
|
5
5
|
/**
|
|
6
6
|
* This query string selects elements that
|
|
7
7
|
* are eligible to receive focus. We select
|
|
@@ -14,7 +14,7 @@ import { focusVisibleElement } from "./helpers";
|
|
|
14
14
|
* Note: We need this distinction because `disabled="false"` is
|
|
15
15
|
* valid usage for the disabled property on ion-button.
|
|
16
16
|
*/
|
|
17
|
-
export const focusableQueryString = '[tabindex]:not([tabindex^="-"]):not([hidden]):not([disabled]), input:not([type=hidden]):not([tabindex^="-"]):not([hidden]):not([disabled]), textarea:not([tabindex^="-"]):not([hidden]):not([disabled]), button:not([tabindex^="-"]):not([hidden]):not([disabled]), select:not([tabindex^="-"]):not([hidden]):not([disabled]), ion-checkbox:not([tabindex^="-"]):not([hidden]):not([disabled]), ion-radio:not([tabindex^="-"]):not([hidden]):not([disabled]), .ion-focusable:not([tabindex^="-"]):not([hidden]):not([disabled]), .ion-focusable[disabled="false"]:not([tabindex^="-"]):not([hidden])';
|
|
17
|
+
export const focusableQueryString = '[tabindex]:not([tabindex^="-"]):not([hidden]):not([disabled]), input:not([type=hidden]):not([tabindex^="-"]):not([hidden]):not([disabled]), textarea:not([tabindex^="-"]):not([hidden]):not([disabled]), button:not([tabindex^="-"]):not([hidden]):not([disabled]), select:not([tabindex^="-"]):not([hidden]):not([disabled]), ion-checkbox:not([tabindex^="-"]):not([hidden]):not([disabled]), ion-radio:not([tabindex^="-"]):not([hidden]):not([disabled]), ion-textarea:not([tabindex^="-"]):not([hidden]):not([disabled]), .ion-focusable:not([tabindex^="-"]):not([hidden]):not([disabled]), .ion-focusable[disabled="false"]:not([tabindex^="-"]):not([hidden])';
|
|
18
18
|
/**
|
|
19
19
|
* Focuses the first descendant in a context
|
|
20
20
|
* that can receive focus. If none exists,
|
|
@@ -66,7 +66,18 @@ const focusElementInContext = (hostToFocus, fallbackElement) => {
|
|
|
66
66
|
const shadowRoot = hostToFocus?.shadowRoot;
|
|
67
67
|
if (shadowRoot) {
|
|
68
68
|
// If there are no inner focusable elements, just focus the host element.
|
|
69
|
-
|
|
69
|
+
const innerFocusable = shadowRoot.querySelector(focusableQueryString);
|
|
70
|
+
// If the host has a setFocus() method, use it to delegate focus properly.
|
|
71
|
+
// This is needed for shadow DOM components like ion-textarea that override
|
|
72
|
+
// focus() to delegate to their inner native elements.
|
|
73
|
+
const hasSetFocus = typeof hostToFocus.setFocus === 'function';
|
|
74
|
+
if (innerFocusable && hasSetFocus) {
|
|
75
|
+
// Keep the host element so we can call setFocus() on it
|
|
76
|
+
elementToFocus = hostToFocus;
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
elementToFocus = innerFocusable || hostToFocus;
|
|
80
|
+
}
|
|
70
81
|
}
|
|
71
82
|
if (elementToFocus) {
|
|
72
83
|
const radioGroup = elementToFocus.closest('ion-radio-group');
|
|
@@ -74,7 +85,7 @@ const focusElementInContext = (hostToFocus, fallbackElement) => {
|
|
|
74
85
|
radioGroup.setFocus();
|
|
75
86
|
}
|
|
76
87
|
else {
|
|
77
|
-
|
|
88
|
+
focusRedirectedElement(elementToFocus);
|
|
78
89
|
}
|
|
79
90
|
}
|
|
80
91
|
else {
|
|
@@ -17,9 +17,58 @@ const FOCUS_KEYS = [
|
|
|
17
17
|
'Home',
|
|
18
18
|
'End',
|
|
19
19
|
];
|
|
20
|
+
let focusVisibleUtility = null;
|
|
21
|
+
export const getOrInitFocusVisibleUtility = () => {
|
|
22
|
+
if (!focusVisibleUtility) {
|
|
23
|
+
focusVisibleUtility = startFocusVisible();
|
|
24
|
+
}
|
|
25
|
+
return focusVisibleUtility;
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Used to set focus on an element that uses `ion-focusable`.
|
|
29
|
+
* Do not use this if focusing the element as a result of a keyboard
|
|
30
|
+
* event as the focus utility should handle this for us. This method
|
|
31
|
+
* should be used when we want to programmatically focus an element as
|
|
32
|
+
* a result of another user action. (Ex: We focus the first element
|
|
33
|
+
* inside of a popover when the user presents it, but the popover is not always
|
|
34
|
+
* presented as a result of keyboard action.)
|
|
35
|
+
*
|
|
36
|
+
* @param elements - The elements to set focus on.
|
|
37
|
+
*/
|
|
38
|
+
export const focusElements = (elements) => {
|
|
39
|
+
const focusVisible = getOrInitFocusVisibleUtility();
|
|
40
|
+
focusVisible.setFocus(elements);
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* Reports whether the most recent interaction on the page was keyboard-driven.
|
|
44
|
+
*
|
|
45
|
+
* Check this before drawing the keyboard focus indicator programmatically.
|
|
46
|
+
*
|
|
47
|
+
* @returns `true` while the user is navigating with a keyboard, and before the
|
|
48
|
+
* first interaction on the page.
|
|
49
|
+
*/
|
|
50
|
+
export const isKeyboardMode = () => getOrInitFocusVisibleUtility().isKeyboardMode();
|
|
51
|
+
/**
|
|
52
|
+
* Watches how the user is interacting with the page and marks the focused
|
|
53
|
+
* element with `ion-focused`, so the keyboard focus indicator is only drawn
|
|
54
|
+
* while the user navigates with a keyboard.
|
|
55
|
+
*
|
|
56
|
+
* @param rootEl Scopes the utility to this element's shadow root, so it only
|
|
57
|
+
* reacts to interactions inside it. Omit it to listen on the document.
|
|
58
|
+
* @returns `setFocus` to mark elements focused programmatically, and `destroy`
|
|
59
|
+
* to detach the listeners.
|
|
60
|
+
*/
|
|
20
61
|
export const startFocusVisible = (rootEl) => {
|
|
21
62
|
let currentFocus = [];
|
|
63
|
+
/*
|
|
64
|
+
* Starts as `true` so an element focused before the user has interacted,
|
|
65
|
+
* such as one focused on page load, still draws an indicator.
|
|
66
|
+
*/
|
|
22
67
|
let keyboardMode = true;
|
|
68
|
+
/*
|
|
69
|
+
* `ref` is where the listeners go and `root` is the element focus falls back
|
|
70
|
+
* to once it leaves everything inside `ref`.
|
|
71
|
+
*/
|
|
23
72
|
const ref = rootEl ? rootEl.shadowRoot : document;
|
|
24
73
|
const root = rootEl ? rootEl : document.body;
|
|
25
74
|
const setFocus = (elements) => {
|
|
@@ -31,12 +80,24 @@ export const startFocusVisible = (rootEl) => {
|
|
|
31
80
|
keyboardMode = false;
|
|
32
81
|
setFocus([]);
|
|
33
82
|
};
|
|
83
|
+
/*
|
|
84
|
+
* Only the keys that move focus keep the indicator on. Any other key means
|
|
85
|
+
* the user is typing into the focused element rather than navigating, so the
|
|
86
|
+
* indicator is dropped.
|
|
87
|
+
*/
|
|
34
88
|
const onKeydown = (ev) => {
|
|
35
89
|
keyboardMode = FOCUS_KEYS.includes(ev.key);
|
|
36
90
|
if (!keyboardMode) {
|
|
37
91
|
setFocus([]);
|
|
38
92
|
}
|
|
39
93
|
};
|
|
94
|
+
/*
|
|
95
|
+
* The indicator does not always belong to the element that took focus. The
|
|
96
|
+
* composed path is walked so every `ion-focusable` ancestor is marked too,
|
|
97
|
+
* which is how an `ion-item` draws the indicator for a checkbox slotted into
|
|
98
|
+
* it, since a checkbox in an item drops the class itself. The composed path
|
|
99
|
+
* is used because it reaches hosts across shadow boundaries.
|
|
100
|
+
*/
|
|
40
101
|
const onFocusin = (ev) => {
|
|
41
102
|
if (keyboardMode && ev.composedPath !== undefined) {
|
|
42
103
|
const toFocus = ev.composedPath().filter((el) => {
|
|
@@ -49,18 +110,27 @@ export const startFocusVisible = (rootEl) => {
|
|
|
49
110
|
setFocus(toFocus);
|
|
50
111
|
}
|
|
51
112
|
};
|
|
113
|
+
/*
|
|
114
|
+
* Focus landing back on `root` means it left every focusable element, so
|
|
115
|
+
* nothing should stay marked. Focus moving between elements is left alone
|
|
116
|
+
* because `onFocusin` marks the new one.
|
|
117
|
+
*/
|
|
52
118
|
const onFocusout = () => {
|
|
53
119
|
if (ref.activeElement === root) {
|
|
54
120
|
setFocus([]);
|
|
55
121
|
}
|
|
56
122
|
};
|
|
57
|
-
|
|
123
|
+
/*
|
|
124
|
+
* Capture phase, so the mode is current for the overlay focus trap, which
|
|
125
|
+
* intercepts Tab in its own capture listener.
|
|
126
|
+
*/
|
|
127
|
+
ref.addEventListener('keydown', onKeydown, true);
|
|
58
128
|
ref.addEventListener('focusin', onFocusin);
|
|
59
129
|
ref.addEventListener('focusout', onFocusout);
|
|
60
130
|
ref.addEventListener('touchstart', pointerDown, { passive: true });
|
|
61
131
|
ref.addEventListener('mousedown', pointerDown);
|
|
62
132
|
const destroy = () => {
|
|
63
|
-
ref.removeEventListener('keydown', onKeydown);
|
|
133
|
+
ref.removeEventListener('keydown', onKeydown, true);
|
|
64
134
|
ref.removeEventListener('focusin', onFocusin);
|
|
65
135
|
ref.removeEventListener('focusout', onFocusout);
|
|
66
136
|
ref.removeEventListener('touchstart', pointerDown);
|
|
@@ -69,5 +139,6 @@ export const startFocusVisible = (rootEl) => {
|
|
|
69
139
|
return {
|
|
70
140
|
destroy,
|
|
71
141
|
setFocus,
|
|
142
|
+
isKeyboardMode: () => keyboardMode,
|
|
72
143
|
};
|
|
73
144
|
};
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
|
+
*/
|
|
4
|
+
import { doc } from "../browser/index";
|
|
5
|
+
/**
|
|
6
|
+
* Tracks an in-flight press on a clear button so a blur landing mid-press can't
|
|
7
|
+
* hide or unmount the button before the press produces its click.
|
|
8
|
+
*
|
|
9
|
+
* Calling `preventDefault()` on `pointerdown` is meant to stop the field
|
|
10
|
+
* blurring, but not every browser honors it (iOS Safari blurs anyway). The
|
|
11
|
+
* press is released on `click` rather than `pointerup` because touch
|
|
12
|
+
* dispatches the click after the finger lifts.
|
|
13
|
+
*
|
|
14
|
+
* @internal
|
|
15
|
+
* @param onPressChange Receives the press state.
|
|
16
|
+
*/
|
|
17
|
+
export const createClearButtonPressController = (onPressChange) => {
|
|
18
|
+
const release = () => {
|
|
19
|
+
doc?.removeEventListener('click', release);
|
|
20
|
+
onPressChange(false);
|
|
21
|
+
};
|
|
22
|
+
const onPointerDown = (ev) => {
|
|
23
|
+
ev.preventDefault();
|
|
24
|
+
// Only a primary press produces a click.
|
|
25
|
+
if (ev.button !== 0) {
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
onPressChange(true);
|
|
29
|
+
doc?.addEventListener('click', release, { once: true });
|
|
30
|
+
};
|
|
31
|
+
// Teardown also clears the press, so a disconnect mid-press can't leave the button stuck visible.
|
|
32
|
+
const destroy = () => {
|
|
33
|
+
release();
|
|
34
|
+
};
|
|
35
|
+
return {
|
|
36
|
+
onPointerDown,
|
|
37
|
+
release,
|
|
38
|
+
destroy,
|
|
39
|
+
};
|
|
40
|
+
};
|
|
@@ -2,6 +2,11 @@
|
|
|
2
2
|
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
3
|
*/
|
|
4
4
|
import { raf } from "../helpers";
|
|
5
|
+
/**
|
|
6
|
+
* Content that handles its own click, so clicking it should not also activate
|
|
7
|
+
* the form control.
|
|
8
|
+
*/
|
|
9
|
+
const INTERACTIVE_CONTENT = 'a[href], button, details, embed, iframe, select, textarea, input:not([type="hidden"]), audio[controls], video[controls], [contenteditable]:not([contenteditable="false"]), .ion-activatable, .ion-focusable';
|
|
5
10
|
/**
|
|
6
11
|
* The content slotted into a form control's start or end slot that a click
|
|
7
12
|
* started on, or `null` when the click did not start on slotted content.
|
|
@@ -20,6 +25,24 @@ export const getSlottedClickContent = (ev, el) => {
|
|
|
20
25
|
* end slot.
|
|
21
26
|
*/
|
|
22
27
|
const isSlottedClick = (ev, el) => getSlottedClickContent(ev, el) !== null;
|
|
28
|
+
/**
|
|
29
|
+
* Whether a click started on slotted content that handles its own click.
|
|
30
|
+
*
|
|
31
|
+
* The composed path is used rather than `closest` so that a control which
|
|
32
|
+
* keeps its interactive element inside its own shadow root, such as
|
|
33
|
+
* `ion-datetime-button`, is still recognized.
|
|
34
|
+
*/
|
|
35
|
+
const isInteractiveSlottedClick = (ev, el) => {
|
|
36
|
+
const slotted = getSlottedClickContent(ev, el);
|
|
37
|
+
if (slotted === null) {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
const path = ev.composedPath();
|
|
41
|
+
return path.slice(0, path.indexOf(slotted) + 1).some((node) => {
|
|
42
|
+
const target = node;
|
|
43
|
+
return target.nodeType === Node.ELEMENT_NODE && target.matches(INTERACTIVE_CONTENT);
|
|
44
|
+
});
|
|
45
|
+
};
|
|
23
46
|
/**
|
|
24
47
|
* A utility for form components that wrap their content in a <label>, such as
|
|
25
48
|
* ion-input, ion-textarea and ion-select.
|
|
@@ -29,21 +52,30 @@ const isSlottedClick = (ev, el) => getSlottedClickContent(ev, el) !== null;
|
|
|
29
52
|
* the host as a duplicate, so the slotted click is remembered and the click
|
|
30
53
|
* that follows it is suppressed.
|
|
31
54
|
*
|
|
32
|
-
*
|
|
33
|
-
* such as a slotted button, so the slotted click is remembered for a
|
|
34
|
-
* rather than until a forwarded click that may never arrive.
|
|
55
|
+
* Chromium and Firefox skip the forwarding when the click lands on interactive
|
|
56
|
+
* content, such as a slotted button, so the slotted click is remembered for a
|
|
57
|
+
* frame rather than until a forwarded click that may never arrive.
|
|
58
|
+
*
|
|
59
|
+
* A native control inside the host's shadow root is found through the composed
|
|
60
|
+
* path, because its click is retargeted to the host. That click is already
|
|
61
|
+
* emitted from the host, so only the duplicate is suppressed.
|
|
62
|
+
*
|
|
63
|
+
* Components using `delegatesFocus`, such as ion-textarea, can reject the focus
|
|
64
|
+
* a press on interactive slotted content moves to the native control by calling
|
|
65
|
+
* `handleMouseDown` from the label and `rejectFocus` from the focus handler.
|
|
35
66
|
*
|
|
36
67
|
* @internal
|
|
37
68
|
* @param el - The host element.
|
|
38
69
|
* @param getNativeInput - A callback returning the native form control the
|
|
39
70
|
* label points at, for components that have one. Those components emit the
|
|
40
|
-
* click from the host rather than the control
|
|
41
|
-
* always stopped and re-dispatched from the host. Omit it for components whose
|
|
71
|
+
* click from the host rather than the control. Omit it for components whose
|
|
42
72
|
* label has no `for` attribute, such as ion-select, where the browser forwards
|
|
43
73
|
* to an internal control that already re-bubbles targeting the host.
|
|
44
74
|
*/
|
|
45
75
|
export const createClickController = (el, getNativeInput) => {
|
|
46
76
|
let hasSlottedClick = false;
|
|
77
|
+
let rejectingFocus = false;
|
|
78
|
+
let removeDisarmListeners;
|
|
47
79
|
const handleClickCapture = (ev) => {
|
|
48
80
|
if (isSlottedClick(ev, el)) {
|
|
49
81
|
hasSlottedClick = true;
|
|
@@ -58,13 +90,67 @@ export const createClickController = (el, getNativeInput) => {
|
|
|
58
90
|
return;
|
|
59
91
|
}
|
|
60
92
|
const nativeInput = getNativeInput();
|
|
61
|
-
if (nativeInput !== undefined && ev.
|
|
62
|
-
|
|
63
|
-
if (!
|
|
93
|
+
if (nativeInput !== undefined && ev.composedPath()[0] === nativeInput) {
|
|
94
|
+
const isRetargeted = el.shadowRoot !== null && nativeInput.getRootNode() === el.shadowRoot;
|
|
95
|
+
if (hasSlottedClick || !isRetargeted) {
|
|
96
|
+
ev.stopPropagation();
|
|
97
|
+
}
|
|
98
|
+
if (!hasSlottedClick && !isRetargeted) {
|
|
64
99
|
el.click();
|
|
65
100
|
}
|
|
66
101
|
hasSlottedClick = false;
|
|
67
102
|
}
|
|
68
103
|
};
|
|
69
|
-
|
|
104
|
+
/**
|
|
105
|
+
* The press ends with a click, which can land outside the label, or with a
|
|
106
|
+
* `dragstart` or `pointercancel` when no click comes. The listeners capture
|
|
107
|
+
* so a slotted control calling `stopPropagation` can't leave it armed.
|
|
108
|
+
*/
|
|
109
|
+
const armFocusRejection = () => {
|
|
110
|
+
removeDisarmListeners?.();
|
|
111
|
+
rejectingFocus = true;
|
|
112
|
+
const events = ['click', 'dragstart', 'pointercancel'];
|
|
113
|
+
const removeListeners = () => {
|
|
114
|
+
removeDisarmListeners = undefined;
|
|
115
|
+
events.forEach((name) => document.removeEventListener(name, disarm, true));
|
|
116
|
+
};
|
|
117
|
+
const disarm = () => {
|
|
118
|
+
removeListeners();
|
|
119
|
+
raf(() => (rejectingFocus = false));
|
|
120
|
+
};
|
|
121
|
+
removeDisarmListeners = removeListeners;
|
|
122
|
+
events.forEach((name) => document.addEventListener(name, disarm, true));
|
|
123
|
+
};
|
|
124
|
+
const handleMouseDown = (ev) => {
|
|
125
|
+
if (ev.button !== 0 || !isInteractiveSlottedClick(ev, el)) {
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
armFocusRejection();
|
|
129
|
+
};
|
|
130
|
+
/**
|
|
131
|
+
* Drops focus moved to the native control by a press on interactive slotted
|
|
132
|
+
* content, and returns whether it did. WebKit forwards the label's click even
|
|
133
|
+
* then, so focus goes back to the content it came from inside the host.
|
|
134
|
+
*/
|
|
135
|
+
const rejectFocus = (ev) => {
|
|
136
|
+
if (!rejectingFocus) {
|
|
137
|
+
return false;
|
|
138
|
+
}
|
|
139
|
+
const previous = ev.relatedTarget;
|
|
140
|
+
if (previous !== null && previous !== el && el.contains(previous)) {
|
|
141
|
+
previous.focus();
|
|
142
|
+
}
|
|
143
|
+
// The related target can be a slotted host that isn't focusable, such as ion-button.
|
|
144
|
+
const nativeInput = getNativeInput?.();
|
|
145
|
+
if (nativeInput !== undefined &&
|
|
146
|
+
nativeInput.getRootNode().activeElement === nativeInput) {
|
|
147
|
+
nativeInput.blur();
|
|
148
|
+
}
|
|
149
|
+
return true;
|
|
150
|
+
};
|
|
151
|
+
const cancelFocusRejection = () => {
|
|
152
|
+
removeDisarmListeners?.();
|
|
153
|
+
rejectingFocus = false;
|
|
154
|
+
};
|
|
155
|
+
return { handleClickCapture, handleMouseDown, rejectFocus, cancelFocusRejection, destroy: cancelFocusRejection };
|
|
70
156
|
};
|