@ionic/core 9.0.4 → 9.0.5-nightly.20260918
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/index.js +1 -1
- package/components/ion-accordion-group.js +1 -1
- package/components/ion-accordion.js +1 -1
- package/components/ion-action-sheet.js +1 -1
- package/components/ion-alert.js +1 -1
- package/components/ion-app.js +1 -1
- package/components/ion-avatar.js +1 -1
- package/components/ion-back-button.js +1 -1
- package/components/ion-backdrop.js +1 -1
- package/components/ion-badge.js +1 -1
- package/components/ion-breadcrumb.js +1 -1
- package/components/ion-breadcrumbs.js +1 -1
- package/components/ion-button.js +1 -1
- package/components/ion-buttons.js +1 -1
- package/components/ion-card-content.js +1 -1
- package/components/ion-card-header.js +1 -1
- package/components/ion-card-subtitle.js +1 -1
- package/components/ion-card-title.js +1 -1
- package/components/ion-card.js +1 -1
- package/components/ion-checkbox.js +1 -1
- package/components/ion-chip.js +1 -1
- package/components/ion-col.js +1 -1
- package/components/ion-content.js +1 -1
- package/components/ion-datetime-button.js +1 -1
- package/components/ion-datetime.js +1 -1
- package/components/ion-fab-button.js +1 -1
- package/components/ion-fab-list.js +1 -1
- package/components/ion-fab.js +1 -1
- package/components/ion-footer.js +1 -1
- package/components/ion-grid.js +1 -1
- package/components/ion-header.js +1 -1
- package/components/ion-icon.js +1 -1
- package/components/ion-img.js +1 -1
- package/components/ion-infinite-scroll-content.js +1 -1
- package/components/ion-infinite-scroll.js +1 -1
- package/components/ion-input-otp.js +1 -1
- package/components/ion-input-password-toggle.js +1 -1
- package/components/ion-input.js +1 -1
- package/components/ion-item-divider.js +1 -1
- package/components/ion-item-group.js +1 -1
- package/components/ion-item-option.js +1 -1
- package/components/ion-item-options.js +1 -1
- package/components/ion-item-sliding.js +1 -1
- package/components/ion-item.js +1 -1
- package/components/ion-label.js +1 -1
- package/components/ion-list-header.js +1 -1
- package/components/ion-list.js +1 -1
- package/components/ion-loading.js +1 -1
- package/components/ion-menu-button.js +1 -1
- package/components/ion-menu-toggle.js +1 -1
- package/components/ion-menu.js +1 -1
- package/components/ion-modal.js +1 -1
- package/components/ion-nav-link.js +1 -1
- package/components/ion-nav.js +1 -1
- package/components/ion-note.js +1 -1
- package/components/ion-picker-column-option.js +1 -1
- package/components/ion-picker-column.js +1 -1
- package/components/ion-picker.js +1 -1
- package/components/ion-popover.js +1 -1
- package/components/ion-progress-bar.js +1 -1
- package/components/ion-radio-group.js +1 -1
- package/components/ion-radio.js +1 -1
- package/components/ion-range.js +1 -1
- package/components/ion-refresher-content.js +1 -1
- package/components/ion-refresher.js +1 -1
- package/components/ion-reorder-group.js +1 -1
- package/components/ion-reorder.js +1 -1
- package/components/ion-ripple-effect.js +1 -1
- package/components/ion-route-redirect.js +1 -1
- package/components/ion-route.js +1 -1
- package/components/ion-router-link.js +1 -1
- package/components/ion-router-outlet.js +1 -1
- package/components/ion-router.js +1 -1
- package/components/ion-row.js +1 -1
- package/components/ion-searchbar.js +1 -1
- package/components/ion-segment-button.js +1 -1
- package/components/ion-segment-content.js +1 -1
- package/components/ion-segment-view.js +1 -1
- package/components/ion-segment.js +1 -1
- package/components/ion-select-modal.js +1 -1
- package/components/ion-select-option.js +1 -1
- package/components/ion-select-popover.js +1 -1
- package/components/ion-select.js +1 -1
- package/components/ion-skeleton-text.js +1 -1
- package/components/ion-spinner.js +1 -1
- package/components/ion-split-pane.js +1 -1
- package/components/ion-tab-bar.js +1 -1
- package/components/ion-tab-button.js +1 -1
- package/components/ion-tab.js +1 -1
- package/components/ion-tabs.js +1 -1
- package/components/ion-text.js +1 -1
- package/components/ion-textarea.js +1 -1
- package/components/ion-thumbnail.js +1 -1
- package/components/ion-title.js +1 -1
- package/components/ion-toast.js +1 -1
- package/components/ion-toggle.js +1 -1
- package/components/ion-toolbar.js +1 -1
- package/components/p--8XqAiDn.js +4 -0
- package/components/{p-CkffScdn.js → p-2NFckEWF.js} +1 -1
- package/components/p-3D5X__KW.js +4 -0
- package/components/{p-C6WYVtle.js → p-B2SADtq2.js} +1 -1
- package/components/{p-gyjG_IM4.js → p-B4i_guWa.js} +1 -1
- package/components/p-B7NtI9LF.js +4 -0
- package/components/{p-MLplUp3U.js → p-B7UPvS1C.js} +1 -1
- package/components/{p-8MzqWBTT.js → p-BBPjLr6a.js} +1 -1
- package/components/p-BGu4rI5P.js +4 -0
- package/components/{p-Csi6iX-c.js → p-BNnwTu4u.js} +1 -1
- package/components/p-BQ1TznDx.js +4 -0
- package/components/p-BXD1texH.js +4 -0
- package/components/{p-BPbgEuCf.js → p-Bi7c_bt3.js} +1 -1
- package/components/p-BjIkK172.js +4 -0
- package/components/{p-CthoZqG1.js → p-BoK0Zxin.js} +1 -1
- package/components/p-C9CGVt9y.js +4 -0
- package/components/{p-BjizFeM6.js → p-CTh7oRWR.js} +1 -1
- package/components/{p-BMHhG7Xh.js → p-CTykhCkJ.js} +1 -1
- package/components/{p-BuxZkazO.js → p-CU8SQ6hA.js} +1 -1
- package/components/p-CVNoHMcR.js +4 -0
- package/components/p-CVqR_xzT.js +4 -0
- package/components/{p-BxCcX93a.js → p-CXAF_kfJ.js} +1 -1
- package/components/p-CXR6mbDq.js +4 -0
- package/components/p-CYqC-Atm.js +4 -0
- package/components/{p-S-gGoI4A.js → p-CaLdTi8C.js} +1 -1
- package/components/p-CbnQxifG.js +4 -0
- package/{dist/ionic/p-DlvB1Idh.js → components/p-CfKxueOn.js} +1 -1
- package/components/{p-CMT0YmOj.js → p-CtMgk_1c.js} +1 -1
- package/components/p-D2peGJYg.js +4 -0
- package/components/{p-MSr4IlyS.js → p-D6fVxd5I.js} +1 -1
- package/components/p-D6pn9UkD.js +4 -0
- package/components/{p-DOwsU7Mc.js → p-D8cczurE.js} +1 -1
- package/{dist/ionic/p-Bu6uWqQM.js → components/p-D9_ODaPJ.js} +1 -1
- package/components/p-DCryg-Sq.js +4 -0
- package/components/{p-2ta4uE9-.js → p-DF5FRPZh.js} +1 -1
- package/components/p-DF8r3KSX.js +4 -0
- package/components/{p-CcOl6jEv.js → p-DNT7yQ4z.js} +1 -1
- package/components/{p-PWHvigWP.js → p-DSRinNB2.js} +1 -1
- package/components/{p-DBGxvxkE.js → p-DTo_pxeB.js} +1 -1
- package/components/{p-DEvF_E6y.js → p-DUE1XLJD.js} +1 -1
- package/components/{p-DMT-4tHM.js → p-DVoewOZH.js} +1 -1
- package/components/p-DhUgaaqJ.js +4 -0
- package/components/{p-DSuBagxs.js → p-DiqHxuia.js} +1 -1
- package/components/{p-DKX1mWld.js → p-Do82ooMy.js} +1 -1
- package/components/{p-DcrAT6v8.js → p-DrzCm5Hh.js} +1 -1
- package/components/{p-CXuRZoWE.js → p-J7HaBhyh.js} +1 -1
- package/{dist/ionic/p-BT0-h-eD.js → components/p-TsPC4TcB.js} +1 -1
- package/components/p-Wl4YKqiE.js +4 -0
- package/components/p-gYw-RCaQ.js +4 -0
- package/components/p-lbvS3btC.js +4 -0
- package/components/p-ls85vUWB.js +4 -0
- package/components/{p-Bi8VGu4M.js → p-vg50UO6j.js} +1 -1
- package/dist/cjs/{animation-2DHlng-f.js → animation-C-JWwKgy.js} +2 -2
- package/dist/cjs/{app-globals-BeC95igM.js → app-globals-TXtzYAPy.js} +1 -1
- package/dist/cjs/attribute-controller-B0BsgXV8.js +131 -0
- package/dist/cjs/{button-active-CTyeZB16.js → button-active-DG3sHT6d.js} +2 -2
- package/dist/cjs/{capacitor-cADDPMtd.js → capacitor-CtkuLHaA.js} +1 -1
- package/dist/cjs/{format-BbkxKT7p.js → format-BHIqanHK.js} +1 -1
- package/dist/cjs/{framework-delegate-DYIuFqQx.js → framework-delegate-CvJ6SkeA.js} +1 -1
- package/dist/cjs/{haptic-CqPss9_L.js → haptic-C-wyDL4O.js} +1 -1
- package/dist/cjs/{helpers-DHjAEaU9.js → helpers-CJUjGJOS.js} +6 -3
- package/dist/cjs/{index-D_D542p0.js → index-78cPCZwH.js} +4 -4
- package/dist/cjs/{index-B-R-H1Z2.js → index-7glr9oHu.js} +2 -2
- package/dist/cjs/{index-MdIUU940.js → index-D9PPKWTO.js} +1 -1
- package/dist/cjs/{index-T36W_eKv.js → index-DLQNazpt.js} +4 -0
- package/dist/cjs/{index-Da83wbmS.js → index-DqKXmMKk.js} +5 -5
- package/dist/cjs/{index-BLq7TkUV.js → index-m83Rr85o.js} +2 -2
- package/dist/cjs/index.cjs.js +13 -11
- package/dist/cjs/{input-shims-DYxL0Fdm.js → input-shims-gtEasMEV.js} +5 -5
- package/dist/cjs/{input.utils-B_32Xwga.js → input.utils-C1JNUKzb.js} +1 -1
- package/dist/cjs/ion-accordion_2.cjs.entry.js +3 -3
- package/dist/cjs/ion-action-sheet.cjs.entry.js +11 -11
- package/dist/cjs/ion-alert.cjs.entry.js +11 -11
- package/dist/cjs/ion-app_8.cjs.entry.js +16 -16
- package/dist/cjs/ion-avatar_3.cjs.entry.js +2 -2
- package/dist/cjs/ion-back-button.cjs.entry.js +3 -3
- package/dist/cjs/ion-backdrop.cjs.entry.js +2 -2
- package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +3 -3
- package/dist/cjs/ion-button_2.cjs.entry.js +23 -34
- package/dist/cjs/ion-card_5.cjs.entry.js +19 -7
- package/dist/cjs/ion-checkbox.cjs.entry.js +4 -4
- package/dist/cjs/ion-chip.cjs.entry.js +2 -2
- package/dist/cjs/ion-col_3.cjs.entry.js +2 -2
- package/dist/cjs/ion-datetime-button.cjs.entry.js +4 -4
- package/dist/cjs/ion-datetime.cjs.entry.js +6 -6
- package/dist/cjs/ion-fab_3.cjs.entry.js +3 -3
- package/dist/cjs/ion-img.cjs.entry.js +3 -3
- package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +5 -5
- package/dist/cjs/ion-input-otp.cjs.entry.js +3 -3
- package/dist/cjs/ion-input-password-toggle.cjs.entry.js +2 -2
- package/dist/cjs/ion-input.cjs.entry.js +5 -5
- package/dist/cjs/ion-item-option_3.cjs.entry.js +4 -4
- package/dist/cjs/ion-item_8.cjs.entry.js +17 -8
- package/dist/cjs/ion-loading.cjs.entry.js +7 -7
- package/dist/cjs/ion-menu_3.cjs.entry.js +7 -7
- package/dist/cjs/ion-modal.cjs.entry.js +11 -11
- package/dist/cjs/ion-nav_2.cjs.entry.js +6 -6
- package/dist/cjs/ion-picker-column-option.cjs.entry.js +3 -3
- package/dist/cjs/ion-picker-column.cjs.entry.js +5 -5
- package/dist/cjs/ion-picker.cjs.entry.js +2 -2
- package/dist/cjs/ion-popover.cjs.entry.js +108 -29
- package/dist/cjs/ion-progress-bar.cjs.entry.js +3 -3
- package/dist/cjs/ion-radio_2.cjs.entry.js +4 -4
- package/dist/cjs/ion-range.cjs.entry.js +4 -4
- package/dist/cjs/ion-refresher_2.cjs.entry.js +8 -8
- package/dist/cjs/ion-reorder_2.cjs.entry.js +6 -6
- package/dist/cjs/ion-ripple-effect.cjs.entry.js +2 -2
- package/dist/cjs/ion-route_4.cjs.entry.js +4 -4
- package/dist/cjs/ion-searchbar.cjs.entry.js +3 -3
- package/dist/cjs/ion-segment-content.cjs.entry.js +1 -1
- package/dist/cjs/ion-segment-view.cjs.entry.js +1 -1
- package/dist/cjs/ion-segment_2.cjs.entry.js +3 -3
- package/dist/cjs/ion-select-modal.cjs.entry.js +7 -7
- package/dist/cjs/ion-select_3.cjs.entry.js +8 -8
- package/dist/cjs/ion-spinner.cjs.entry.js +2 -2
- package/dist/cjs/ion-split-pane.cjs.entry.js +2 -2
- package/dist/cjs/ion-tab-bar_2.cjs.entry.js +6 -6
- package/dist/cjs/ion-tab_2.cjs.entry.js +3 -3
- package/dist/cjs/ion-text.cjs.entry.js +2 -2
- package/dist/cjs/ion-textarea.cjs.entry.js +5 -5
- package/dist/cjs/ion-toast.cjs.entry.js +7 -7
- package/dist/cjs/ion-toggle.cjs.entry.js +6 -6
- package/dist/cjs/{ionic-global-BWd7usAF.js → ionic-global-t_WpJo84.js} +1 -1
- package/dist/cjs/ionic.cjs.js +4 -4
- package/dist/cjs/{ios.transition-6AFNO6uU.js → ios.transition-DZLrW8ga.js} +4 -4
- package/dist/cjs/{item-multiple-inputs-BaBx_Te8.js → item-multiple-inputs-n1sInjA_.js} +1 -1
- package/dist/cjs/{keyboard-DstMw6u1.js → keyboard-C06ZtyfO.js} +1 -1
- package/dist/cjs/{keyboard-BJEm-3HF.js → keyboard-CrDGk8Si.js} +4 -4
- package/dist/cjs/{keyboard-controller-DaUNT15d.js → keyboard-controller-CMLPZLrw.js} +2 -2
- package/dist/cjs/loader.cjs.js +4 -4
- package/dist/cjs/{md.transition-CPq0ckrU.js → md.transition-BKWfxYYf.js} +4 -4
- package/dist/cjs/{overlays-DwMDYc_O.js → overlays-BEVysBKh.js} +4 -4
- package/dist/cjs/{select-option-render-Cu-ABBRH.js → select-option-render-CSPIWz_C.js} +2 -2
- package/dist/cjs/{slot-mutation-controller-CtYZdaWI.js → slot-mutation-controller-ByWHY518.js} +1 -1
- package/dist/cjs/{status-tap-BUfv_eD4.js → status-tap-CL5oy8nW.js} +3 -3
- package/dist/cjs/{swipe-back-DYKxJU5r.js → swipe-back-CMxnx1Rv.js} +2 -2
- package/dist/collection/components/button/button.js +21 -32
- package/dist/collection/components/card/card.js +17 -6
- package/dist/collection/components/item/item.js +15 -6
- package/dist/collection/components/popover/animations/ios.enter.js +20 -6
- package/dist/collection/components/popover/animations/md.enter.js +19 -5
- package/dist/collection/components/popover/utils.js +64 -13
- package/dist/collection/index.js +1 -1
- package/dist/collection/utils/attribute-controller.js +126 -0
- package/dist/collection/utils/helpers.js +5 -3
- package/dist/collection/utils/logging/index.js +4 -0
- package/dist/docs.json +1 -1
- package/dist/esm/{animation-CAzXJ2I1.js → animation-DRatc9mc.js} +2 -2
- package/dist/esm/{app-globals-DGJXnnkm.js → app-globals-BAPWjQRi.js} +1 -1
- package/dist/esm/attribute-controller-BrbFqJRn.js +128 -0
- package/dist/esm/{button-active-DyyWVqU3.js → button-active-Cn0mS9NP.js} +2 -2
- package/dist/esm/{capacitor-C041I3qZ.js → capacitor-DOXE6jIG.js} +1 -1
- package/dist/esm/{format-D78cdY12.js → format-Cd2aRger.js} +1 -1
- package/dist/esm/{framework-delegate-CUDbUfWS.js → framework-delegate-Dyvjs63n.js} +1 -1
- package/dist/esm/{haptic-D3njgGLB.js → haptic-B3RodENJ.js} +1 -1
- package/dist/esm/{helpers-BJFnZngp.js → helpers-D3HlaZqB.js} +6 -4
- package/dist/esm/{index-CdoVp_rZ.js → index-65Eftz2j.js} +4 -4
- package/dist/esm/{index-DmnOg_xm.js → index-B2E_HqxY.js} +1 -1
- package/dist/esm/{index-obGyiHiO.js → index-BBArCvE7.js} +2 -2
- package/dist/esm/{index-DoY4e_3F.js → index-BcTd8Van.js} +2 -2
- package/dist/esm/{index-iurdcGHg.js → index-C3hi0PAx.js} +5 -5
- package/dist/esm/{index-Dvqtt_WK.js → index-Ci0c0wtC.js} +5 -1
- package/dist/esm/index.js +11 -11
- package/dist/esm/{input-shims-DognYvwv.js → input-shims-pdb7CjZn.js} +5 -5
- package/dist/esm/{input.utils-C3mVJhji.js → input.utils-DTipZVu0.js} +1 -1
- package/dist/esm/ion-accordion_2.entry.js +3 -3
- package/dist/esm/ion-action-sheet.entry.js +11 -11
- package/dist/esm/ion-alert.entry.js +11 -11
- package/dist/esm/ion-app_8.entry.js +16 -16
- package/dist/esm/ion-avatar_3.entry.js +2 -2
- package/dist/esm/ion-back-button.entry.js +3 -3
- package/dist/esm/ion-backdrop.entry.js +2 -2
- package/dist/esm/ion-breadcrumb_2.entry.js +3 -3
- package/dist/esm/ion-button_2.entry.js +23 -34
- package/dist/esm/ion-card_5.entry.js +19 -7
- package/dist/esm/ion-checkbox.entry.js +4 -4
- package/dist/esm/ion-chip.entry.js +2 -2
- package/dist/esm/ion-col_3.entry.js +2 -2
- package/dist/esm/ion-datetime-button.entry.js +4 -4
- package/dist/esm/ion-datetime.entry.js +6 -6
- package/dist/esm/ion-fab_3.entry.js +3 -3
- package/dist/esm/ion-img.entry.js +3 -3
- package/dist/esm/ion-infinite-scroll_2.entry.js +5 -5
- package/dist/esm/ion-input-otp.entry.js +3 -3
- package/dist/esm/ion-input-password-toggle.entry.js +2 -2
- package/dist/esm/ion-input.entry.js +5 -5
- package/dist/esm/ion-item-option_3.entry.js +4 -4
- package/dist/esm/ion-item_8.entry.js +17 -8
- package/dist/esm/ion-loading.entry.js +7 -7
- package/dist/esm/ion-menu_3.entry.js +7 -7
- package/dist/esm/ion-modal.entry.js +11 -11
- package/dist/esm/ion-nav_2.entry.js +6 -6
- package/dist/esm/ion-picker-column-option.entry.js +3 -3
- package/dist/esm/ion-picker-column.entry.js +5 -5
- package/dist/esm/ion-picker.entry.js +2 -2
- package/dist/esm/ion-popover.entry.js +108 -29
- package/dist/esm/ion-progress-bar.entry.js +3 -3
- package/dist/esm/ion-radio_2.entry.js +4 -4
- package/dist/esm/ion-range.entry.js +4 -4
- package/dist/esm/ion-refresher_2.entry.js +8 -8
- package/dist/esm/ion-reorder_2.entry.js +6 -6
- package/dist/esm/ion-ripple-effect.entry.js +2 -2
- package/dist/esm/ion-route_4.entry.js +4 -4
- package/dist/esm/ion-searchbar.entry.js +3 -3
- package/dist/esm/ion-segment-content.entry.js +1 -1
- package/dist/esm/ion-segment-view.entry.js +1 -1
- package/dist/esm/ion-segment_2.entry.js +3 -3
- package/dist/esm/ion-select-modal.entry.js +7 -7
- package/dist/esm/ion-select_3.entry.js +8 -8
- package/dist/esm/ion-spinner.entry.js +2 -2
- package/dist/esm/ion-split-pane.entry.js +2 -2
- package/dist/esm/ion-tab-bar_2.entry.js +6 -6
- package/dist/esm/ion-tab_2.entry.js +3 -3
- package/dist/esm/ion-text.entry.js +2 -2
- package/dist/esm/ion-textarea.entry.js +5 -5
- package/dist/esm/ion-toast.entry.js +7 -7
- package/dist/esm/ion-toggle.entry.js +6 -6
- package/dist/esm/{ionic-global-BSaFA7np.js → ionic-global-D319UM2i.js} +1 -1
- package/dist/esm/ionic.js +5 -5
- package/dist/esm/{ios.transition-ofa92pAl.js → ios.transition-CjR-iczx.js} +4 -4
- package/dist/esm/{item-multiple-inputs-CffmpUe9.js → item-multiple-inputs-CtLCJNiL.js} +1 -1
- package/dist/esm/{keyboard-Dsc85bts.js → keyboard-BPq0DuxS.js} +4 -4
- package/dist/esm/{keyboard-Cz4hUjuj.js → keyboard-Fuj-w2n0.js} +1 -1
- package/dist/esm/{keyboard-controller-BLvRgxgP.js → keyboard-controller-kCdrbtXb.js} +2 -2
- package/dist/esm/loader.js +5 -5
- package/dist/esm/{md.transition-DnFfqsAv.js → md.transition-BFmU8zjI.js} +4 -4
- package/dist/esm/{overlays-a_5AhqWk.js → overlays-D2Bo1FJ7.js} +4 -4
- package/dist/esm/{select-option-render-C_PCwA67.js → select-option-render-m4fqbKrD.js} +2 -2
- package/dist/esm/{slot-mutation-controller-D7n8Peo2.js → slot-mutation-controller-B_Gyzsmn.js} +1 -1
- package/dist/esm/{status-tap-BsTKKfug.js → status-tap-D3yqZrEP.js} +3 -3
- package/dist/esm/{swipe-back-ibFGqXH2.js → swipe-back-DDOJz7NH.js} +2 -2
- package/dist/ionic/index.esm.js +1 -1
- package/dist/ionic/ionic.esm.js +1 -1
- package/dist/ionic/p-011a08e9.entry.js +4 -0
- package/dist/ionic/{p-59305088.entry.js → p-0e8ae661.entry.js} +1 -1
- package/dist/ionic/p-12d381c2.entry.js +4 -0
- package/dist/ionic/{p-28952272.entry.js → p-12f0fc68.entry.js} +1 -1
- package/dist/ionic/{p-26d89234.entry.js → p-1daca166.entry.js} +1 -1
- package/dist/ionic/{p-fc3312a4.entry.js → p-2619b489.entry.js} +1 -1
- package/dist/ionic/{p-89e04e63.entry.js → p-28b0a9c7.entry.js} +1 -1
- package/dist/ionic/{p-cb893f35.entry.js → p-29e6a8d4.entry.js} +1 -1
- package/dist/ionic/{p-88cf4127.entry.js → p-2b32af08.entry.js} +1 -1
- package/dist/ionic/{p-41ae57ea.entry.js → p-304f92d1.entry.js} +1 -1
- package/dist/ionic/{p-fd220f9c.entry.js → p-35469a67.entry.js} +1 -1
- package/dist/ionic/{p-12ea6d13.entry.js → p-3fa7f61a.entry.js} +1 -1
- package/dist/ionic/{p-84dea138.entry.js → p-4253fc9f.entry.js} +1 -1
- package/dist/ionic/{p-5272e103.entry.js → p-44046266.entry.js} +1 -1
- package/dist/ionic/{p-416bec74.entry.js → p-45ca4440.entry.js} +1 -1
- package/dist/ionic/{p-5eadc64e.entry.js → p-49b1f0c1.entry.js} +1 -1
- package/dist/ionic/{p-efa78f73.entry.js → p-50ce079e.entry.js} +1 -1
- package/dist/ionic/p-51eb3f6f.entry.js +4 -0
- package/dist/ionic/{p-ac6a1168.entry.js → p-584579e7.entry.js} +1 -1
- package/dist/ionic/{p-0a824cef.entry.js → p-5dc1ad24.entry.js} +1 -1
- package/dist/ionic/p-5f41981f.entry.js +4 -0
- package/dist/ionic/{p-dd89474c.entry.js → p-62528b98.entry.js} +1 -1
- package/dist/ionic/p-636baa66.entry.js +4 -0
- package/dist/ionic/{p-d8a6ebfd.entry.js → p-64d0e766.entry.js} +1 -1
- package/dist/ionic/p-6f52068e.entry.js +4 -0
- package/dist/ionic/p-78d66dbf.entry.js +4 -0
- package/dist/ionic/{p-689f7a37.entry.js → p-84f30235.entry.js} +1 -1
- package/dist/ionic/{p-60ca717e.entry.js → p-87d878dc.entry.js} +1 -1
- package/dist/ionic/p-8WDtqI_V.js +4 -0
- package/dist/ionic/{p-063769cf.entry.js → p-8d6e044e.entry.js} +1 -1
- package/dist/ionic/p-920e067d.entry.js +4 -0
- package/dist/ionic/p-950c9b8b.entry.js +4 -0
- package/dist/ionic/p-BIiK2pe9.js +4 -0
- package/{components/p-BezPzC13.js → dist/ionic/p-BKzIpETv.js} +1 -1
- package/dist/ionic/p-BZlmYZid.js +4 -0
- package/dist/ionic/p-BiQyyAay.js +4 -0
- package/dist/ionic/p-Bl3GtrLa.js +4 -0
- package/dist/ionic/{p-C5SsTfux.js → p-BlIL832I.js} +1 -1
- package/dist/ionic/p-C-f6azUS.js +4 -0
- package/dist/ionic/p-C7ycgP4B.js +4 -0
- package/dist/ionic/p-CDm80Rj3.js +4 -0
- package/dist/ionic/p-CHFzrYxP.js +4 -0
- package/dist/ionic/{p-yiP8rgDC.js → p-CKXT3wQs.js} +1 -1
- package/dist/ionic/p-CM0qxZsb.js +4 -0
- package/dist/ionic/p-CQ_2X4AT.js +4 -0
- package/dist/ionic/p-CVrhKnjg.js +4 -0
- package/dist/ionic/{p-g9SK-dv1.js → p-CeBx7xPk.js} +1 -1
- package/dist/ionic/{p-Dvqtt_WK.js → p-Ci0c0wtC.js} +1 -1
- package/dist/ionic/{p-BIj0Lfim.js → p-DBXYO0BD.js} +1 -1
- package/dist/ionic/p-DMhM7rpA.js +4 -0
- package/dist/ionic/p-DR3KphGG.js +4 -0
- package/{components/p-CaY8IRMT.js → dist/ionic/p-DRhfTaQ0.js} +1 -1
- package/dist/ionic/p-DYjohhqj.js +4 -0
- package/dist/ionic/{p-BRlwrQ6h.js → p-DgorWJ0n.js} +1 -1
- package/dist/ionic/p-Dk5f_kFq.js +4 -0
- package/dist/ionic/{p-e0g1fYYm.js → p-DrPUIWm0.js} +1 -1
- package/dist/ionic/p-M3xPAPEh.js +4 -0
- package/dist/ionic/p-RgtmfsTX.js +4 -0
- package/dist/ionic/p-YkyvCGQx.js +4 -0
- package/dist/ionic/{p-e04a7110.entry.js → p-a72282cf.entry.js} +1 -1
- package/dist/ionic/p-a848f8d2.entry.js +4 -0
- package/dist/ionic/{p-df272a41.entry.js → p-a9e92328.entry.js} +1 -1
- package/dist/ionic/{p-8af458bf.entry.js → p-b08bcb06.entry.js} +1 -1
- package/dist/ionic/p-c176a425.entry.js +4 -0
- package/dist/ionic/{p-41254776.entry.js → p-c6c32f6d.entry.js} +1 -1
- package/dist/ionic/p-c913bd7d.entry.js +4 -0
- package/dist/ionic/{p-0a14a6a3.entry.js → p-d1687c72.entry.js} +1 -1
- package/dist/ionic/{p-c9952851.entry.js → p-d2a4fcf9.entry.js} +1 -1
- package/dist/ionic/{p-a1d733a3.entry.js → p-d428580a.entry.js} +1 -1
- package/dist/ionic/{p-25abc69d.entry.js → p-d7c9b618.entry.js} +1 -1
- package/dist/ionic/{p-d7fb1d2a.entry.js → p-dc0c071c.entry.js} +1 -1
- package/dist/ionic/{p-097a0cf5.entry.js → p-dc531e27.entry.js} +1 -1
- package/dist/ionic/p-de9cbee0.entry.js +4 -0
- package/dist/ionic/{p-302e4d74.entry.js → p-e223cd26.entry.js} +1 -1
- package/dist/ionic/{p-c0dd14f4.entry.js → p-f5a0d31b.entry.js} +1 -1
- package/dist/ionic/{p-7da532af.entry.js → p-f930dcb4.entry.js} +1 -1
- package/dist/ionic/{p-a4a2ce90.entry.js → p-f93bd399.entry.js} +1 -1
- package/dist/ionic/p-fa45723d.entry.js +4 -0
- package/dist/ionic/{p-38d3e1cb.entry.js → p-fab0961c.entry.js} +1 -1
- package/dist/ionic/p-fbf4767c.entry.js +4 -0
- package/dist/ionic/{p-CESQIy-V.js → p-vGIL6Nbe.js} +1 -1
- package/dist/types/components/button/button.d.ts +3 -12
- package/dist/types/components/card/card.d.ts +3 -1
- package/dist/types/components/item/item.d.ts +1 -1
- package/dist/types/components/popover/utils.d.ts +16 -3
- package/dist/types/index.d.ts +1 -1
- package/dist/types/utils/attribute-controller.d.ts +56 -0
- package/dist/types/utils/helpers.d.ts +10 -2
- package/dist/types/utils/logging/index.d.ts +4 -0
- package/hydrate/index.js +278 -63
- package/hydrate/index.mjs +278 -63
- package/package.json +1 -1
- package/components/p--pR3YKVX.js +0 -4
- package/components/p-47h0_nN4.js +0 -4
- package/components/p-BGChz0G8.js +0 -4
- package/components/p-BLe-edUh.js +0 -4
- package/components/p-Bc-3W2an.js +0 -4
- package/components/p-BezRi1ML.js +0 -4
- package/components/p-C0tpzcpi.js +0 -4
- package/components/p-CDt7Q7Dj.js +0 -4
- package/components/p-CDvyV0r0.js +0 -4
- package/components/p-CEs5NmKW.js +0 -4
- package/components/p-CLVgYpRn.js +0 -4
- package/components/p-CPGp3WWG.js +0 -4
- package/components/p-CeGQfrDU.js +0 -4
- package/components/p-CpcdCRug.js +0 -4
- package/components/p-DVHC9GYb.js +0 -4
- package/components/p-DWe-YApm.js +0 -4
- package/components/p-DX_3N4fh.js +0 -4
- package/components/p-DftucGJR.js +0 -4
- package/components/p-HO1CDBeU.js +0 -4
- package/components/p-MOwrp7hX.js +0 -4
- package/components/p-k92zpBT6.js +0 -4
- package/components/p-rDUBp56G.js +0 -4
- package/dist/ionic/p-1c4926e9.entry.js +0 -4
- package/dist/ionic/p-1dac4211.entry.js +0 -4
- package/dist/ionic/p-23afeeb2.entry.js +0 -4
- package/dist/ionic/p-29687c0b.entry.js +0 -4
- package/dist/ionic/p-2ecebfd9.entry.js +0 -4
- package/dist/ionic/p-4dc3f2b3.entry.js +0 -4
- package/dist/ionic/p-5b9b245e.entry.js +0 -4
- package/dist/ionic/p-5f695204.entry.js +0 -4
- package/dist/ionic/p-63eb4550.entry.js +0 -4
- package/dist/ionic/p-8d68604a.entry.js +0 -4
- package/dist/ionic/p-B13Uv-FT.js +0 -4
- package/dist/ionic/p-B8K6OHqa.js +0 -4
- package/dist/ionic/p-BD0v0Sx_.js +0 -4
- package/dist/ionic/p-BDs20Dfe.js +0 -4
- package/dist/ionic/p-BRZstBYy.js +0 -4
- package/dist/ionic/p-Ba_yQZdQ.js +0 -4
- package/dist/ionic/p-BnMJqJBa.js +0 -4
- package/dist/ionic/p-BrbwGxm1.js +0 -4
- package/dist/ionic/p-Bx46Dlpo.js +0 -4
- package/dist/ionic/p-C0vJzNM9.js +0 -4
- package/dist/ionic/p-C4FdGOym.js +0 -4
- package/dist/ionic/p-CD77BF32.js +0 -4
- package/dist/ionic/p-CazJOH5P.js +0 -4
- package/dist/ionic/p-D14knedj.js +0 -4
- package/dist/ionic/p-DQcKi6P6.js +0 -4
- package/dist/ionic/p-NL1pxcde.js +0 -4
- package/dist/ionic/p-a6a95175.entry.js +0 -4
- package/dist/ionic/p-bcf18c26.entry.js +0 -4
- package/dist/ionic/p-be8ae1cc.entry.js +0 -4
- package/dist/ionic/p-e3a98575.entry.js +0 -4
- package/dist/ionic/p-f97ef975.entry.js +0 -4
- package/dist/ionic/p-yYEBg4iw.js +0 -4
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { createAnimation } from "../../../utils/animation/animation";
|
|
5
5
|
import { getElementRoot } from "../../../utils/helpers";
|
|
6
|
-
import { calculateWindowAdjustment, getPopoverDimensions, getPopoverPosition, getSafeAreaInsets } from "../utils";
|
|
6
|
+
import { calculateWindowAdjustment, getElementCSSZoom, getPopoverDimensions, getPopoverPosition, getSafeAreaInsets, } from "../utils";
|
|
7
7
|
const POPOVER_MD_BODY_PADDING = 12;
|
|
8
8
|
/**
|
|
9
9
|
* Md Popover Enter Animation
|
|
@@ -13,19 +13,33 @@ export const mdEnterAnimation = (baseEl, opts) => {
|
|
|
13
13
|
const { event: ev, size, trigger, reference, side, align } = opts;
|
|
14
14
|
const doc = baseEl.ownerDocument;
|
|
15
15
|
const isRTL = doc.dir === 'rtl';
|
|
16
|
-
const bodyWidth = doc.defaultView.innerWidth;
|
|
17
|
-
const bodyHeight = doc.defaultView.innerHeight;
|
|
18
16
|
const root = getElementRoot(baseEl);
|
|
19
17
|
const contentEl = root.querySelector('.popover-content');
|
|
18
|
+
/**
|
|
19
|
+
* A CSS `zoom` other than 1 on an ancestor (e.g. the `html` element) causes
|
|
20
|
+
* geometry APIs like `getBoundingClientRect()` to report zoomed values while
|
|
21
|
+
* inline `top`/`left`/`--width` styles are interpreted in the unzoomed layout
|
|
22
|
+
* space. Normalize all rect-derived measurements by this factor so the
|
|
23
|
+
* popover is positioned and sized correctly.
|
|
24
|
+
*/
|
|
25
|
+
const zoom = getElementCSSZoom(contentEl);
|
|
26
|
+
/**
|
|
27
|
+
* `innerWidth`/`innerHeight` are not affected by CSS `zoom`, so they must be
|
|
28
|
+
* scaled down to the same layout space as the normalized measurements above.
|
|
29
|
+
* Otherwise the popover would be clamped against a viewport that is larger
|
|
30
|
+
* than the space actually available to it.
|
|
31
|
+
*/
|
|
32
|
+
const bodyWidth = doc.defaultView.innerWidth / zoom;
|
|
33
|
+
const bodyHeight = doc.defaultView.innerHeight / zoom;
|
|
20
34
|
const referenceSizeEl = trigger || ev?.detail?.ionShadowTarget || ev?.target;
|
|
21
|
-
const { contentWidth, contentHeight } = getPopoverDimensions(size, contentEl, referenceSizeEl);
|
|
35
|
+
const { contentWidth, contentHeight } = getPopoverDimensions(size, contentEl, referenceSizeEl, zoom);
|
|
22
36
|
const defaultPosition = {
|
|
23
37
|
top: bodyHeight / 2 - contentHeight / 2,
|
|
24
38
|
left: bodyWidth / 2 - contentWidth / 2,
|
|
25
39
|
originX: isRTL ? 'right' : 'left',
|
|
26
40
|
originY: 'top',
|
|
27
41
|
};
|
|
28
|
-
const results = getPopoverPosition(isRTL, contentWidth, contentHeight, 0, 0, reference, side, align, defaultPosition, trigger, ev);
|
|
42
|
+
const results = getPopoverPosition(isRTL, contentWidth, contentHeight, 0, 0, reference, side, align, defaultPosition, trigger, ev, zoom);
|
|
29
43
|
const padding = size === 'cover' ? 0 : POPOVER_MD_BODY_PADDING;
|
|
30
44
|
// MD mode now applies safe-area insets (previously passed 0, ignoring all safe areas).
|
|
31
45
|
// This is needed for Android edge-to-edge (API 36+) where system bars overlap content.
|
|
@@ -54,30 +54,81 @@ export const getSafeAreaInsets = (doc) => {
|
|
|
54
54
|
}
|
|
55
55
|
return insets;
|
|
56
56
|
};
|
|
57
|
+
/**
|
|
58
|
+
* Largest difference from 1 that the `offsetWidth` based zoom detection below
|
|
59
|
+
* attributes to integer rounding rather than to an actual CSS `zoom`. The
|
|
60
|
+
* rounding error is at most half a pixel over the width of the popover, which
|
|
61
|
+
* is well under this threshold for any realistic popover size.
|
|
62
|
+
*/
|
|
63
|
+
const ZOOM_ROUNDING_TOLERANCE = 0.01;
|
|
64
|
+
/**
|
|
65
|
+
* Returns the cumulative CSS `zoom` factor applied to an element.
|
|
66
|
+
*
|
|
67
|
+
* When a CSS `zoom` other than 1 is set on an ancestor (e.g. the `html`
|
|
68
|
+
* element, as recommended by the docs for dynamic font scaling on Chrome for
|
|
69
|
+
* Android), `getBoundingClientRect()`, `clientX`/`clientY` and other geometry
|
|
70
|
+
* APIs report values in the *zoomed* (visual) coordinate space, while inline
|
|
71
|
+
* `top`/`left`/`--width` styles we set are interpreted in the *unzoomed*
|
|
72
|
+
* (layout) space and re-scaled by the browser. Dividing the rect-derived
|
|
73
|
+
* values by this factor converts them back to layout space so the popover is
|
|
74
|
+
* positioned and sized correctly. Returns 1 when no zoom is applied.
|
|
75
|
+
*/
|
|
76
|
+
export const getElementCSSZoom = (el) => {
|
|
77
|
+
if (!el) {
|
|
78
|
+
return 1;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* `currentCSSZoom` exposes the exact effective zoom of an element
|
|
82
|
+
* (Chromium 128+). When available we use it directly.
|
|
83
|
+
*/
|
|
84
|
+
const currentCSSZoom = el.currentCSSZoom;
|
|
85
|
+
if (typeof currentCSSZoom === 'number' && currentCSSZoom > 0) {
|
|
86
|
+
return currentCSSZoom;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Fallback for browsers without `currentCSSZoom`: compare the rendered
|
|
90
|
+
* (zoomed) width from `getBoundingClientRect()` against the layout width
|
|
91
|
+
* from `offsetWidth`, which is not affected by CSS `zoom`.
|
|
92
|
+
*/
|
|
93
|
+
const { width } = el.getBoundingClientRect();
|
|
94
|
+
const { offsetWidth } = el;
|
|
95
|
+
if (offsetWidth > 0 && width > 0) {
|
|
96
|
+
const ratio = width / offsetWidth;
|
|
97
|
+
/**
|
|
98
|
+
* `offsetWidth` is rounded to an integer while the bounding rect is not,
|
|
99
|
+
* so the ratio is rarely exactly 1 even when no zoom is applied. Treat
|
|
100
|
+
* sub-pixel differences as "no zoom" so that unzoomed popovers are not
|
|
101
|
+
* shifted by the rounding error. A real zoom deviates far more, though
|
|
102
|
+
* the same rounding leaves the detected factor approximate.
|
|
103
|
+
*/
|
|
104
|
+
return Math.abs(ratio - 1) < ZOOM_ROUNDING_TOLERANCE ? 1 : ratio;
|
|
105
|
+
}
|
|
106
|
+
return 1;
|
|
107
|
+
};
|
|
57
108
|
/**
|
|
58
109
|
* Returns the dimensions of the popover
|
|
59
110
|
* arrow on `ios` mode. If arrow is disabled
|
|
60
111
|
* returns (0, 0).
|
|
61
112
|
*/
|
|
62
|
-
export const getArrowDimensions = (arrowEl) => {
|
|
113
|
+
export const getArrowDimensions = (arrowEl, zoom = 1) => {
|
|
63
114
|
if (!arrowEl) {
|
|
64
115
|
return { arrowWidth: 0, arrowHeight: 0 };
|
|
65
116
|
}
|
|
66
117
|
const { width, height } = arrowEl.getBoundingClientRect();
|
|
67
|
-
return { arrowWidth: width, arrowHeight: height };
|
|
118
|
+
return { arrowWidth: width / zoom, arrowHeight: height / zoom };
|
|
68
119
|
};
|
|
69
120
|
/**
|
|
70
121
|
* Returns the recommended dimensions of the popover
|
|
71
122
|
* that takes into account whether or not the width
|
|
72
123
|
* should match the trigger width.
|
|
73
124
|
*/
|
|
74
|
-
export const getPopoverDimensions = (size, contentEl, triggerEl) => {
|
|
125
|
+
export const getPopoverDimensions = (size, contentEl, triggerEl, zoom = 1) => {
|
|
75
126
|
const contentDimentions = contentEl.getBoundingClientRect();
|
|
76
|
-
const contentHeight = contentDimentions.height;
|
|
77
|
-
let contentWidth = contentDimentions.width;
|
|
127
|
+
const contentHeight = contentDimentions.height / zoom;
|
|
128
|
+
let contentWidth = contentDimentions.width / zoom;
|
|
78
129
|
if (size === 'cover' && triggerEl) {
|
|
79
130
|
const triggerDimensions = triggerEl.getBoundingClientRect();
|
|
80
|
-
contentWidth = triggerDimensions.width;
|
|
131
|
+
contentWidth = triggerDimensions.width / zoom;
|
|
81
132
|
}
|
|
82
133
|
return {
|
|
83
134
|
contentWidth,
|
|
@@ -419,7 +470,7 @@ export const configureKeyboardInteraction = (popoverEl) => {
|
|
|
419
470
|
* the reference point, preferred side, alignment
|
|
420
471
|
* and viewport dimensions.
|
|
421
472
|
*/
|
|
422
|
-
export const getPopoverPosition = (isRTL, contentWidth, contentHeight, arrowWidth, arrowHeight, reference, side, align, defaultPosition, triggerEl, event) => {
|
|
473
|
+
export const getPopoverPosition = (isRTL, contentWidth, contentHeight, arrowWidth, arrowHeight, reference, side, align, defaultPosition, triggerEl, event, zoom = 1) => {
|
|
423
474
|
let referenceCoordinates = {
|
|
424
475
|
top: 0,
|
|
425
476
|
left: 0,
|
|
@@ -438,8 +489,8 @@ export const getPopoverPosition = (isRTL, contentWidth, contentHeight, arrowWidt
|
|
|
438
489
|
}
|
|
439
490
|
const mouseEv = event;
|
|
440
491
|
referenceCoordinates = {
|
|
441
|
-
top: mouseEv.clientY,
|
|
442
|
-
left: mouseEv.clientX,
|
|
492
|
+
top: mouseEv.clientY / zoom,
|
|
493
|
+
left: mouseEv.clientX / zoom,
|
|
443
494
|
width: 1,
|
|
444
495
|
height: 1,
|
|
445
496
|
};
|
|
@@ -471,10 +522,10 @@ export const getPopoverPosition = (isRTL, contentWidth, contentHeight, arrowWidt
|
|
|
471
522
|
}
|
|
472
523
|
const triggerBoundingBox = actualTriggerEl.getBoundingClientRect();
|
|
473
524
|
referenceCoordinates = {
|
|
474
|
-
top: triggerBoundingBox.top,
|
|
475
|
-
left: triggerBoundingBox.left,
|
|
476
|
-
width: triggerBoundingBox.width,
|
|
477
|
-
height: triggerBoundingBox.height,
|
|
525
|
+
top: triggerBoundingBox.top / zoom,
|
|
526
|
+
left: triggerBoundingBox.left / zoom,
|
|
527
|
+
width: triggerBoundingBox.width / zoom,
|
|
528
|
+
height: triggerBoundingBox.height / zoom,
|
|
478
529
|
};
|
|
479
530
|
break;
|
|
480
531
|
}
|
package/dist/collection/index.js
CHANGED
|
@@ -10,7 +10,7 @@ export { getTimeGivenProgression } from './utils/animation/cubic-bezier';
|
|
|
10
10
|
export { createGesture } from './utils/gesture';
|
|
11
11
|
export { initialize } from './global/ionic-global';
|
|
12
12
|
export { componentOnReady } from './utils/helpers';
|
|
13
|
-
export { LogLevel } from './utils/logging';
|
|
13
|
+
export { LogLevel, printIonWarning, printIonError } from './utils/logging';
|
|
14
14
|
export { isPlatform, getPlatforms } from './utils/platform';
|
|
15
15
|
export { IonicSafeString } from './utils/sanitization';
|
|
16
16
|
export { getMode, setupConfig } from './utils/config';
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
|
+
*/
|
|
4
|
+
import { win } from "./browser/index";
|
|
5
|
+
import { ariaAttributes, inheritAttributes } from "./helpers";
|
|
6
|
+
/**
|
|
7
|
+
* Copies a set of attributes off the host element so they can be applied to an element
|
|
8
|
+
* inside the shadow root, then keeps that copy in sync as the host attributes change.
|
|
9
|
+
* Using `inheritAttributes` alone copies once at load, so anything written to the host
|
|
10
|
+
* afterwards never reaches the element the assistive technology reads.
|
|
11
|
+
*
|
|
12
|
+
* Create the controller in `componentWillLoad`. It takes the initial copy and starts
|
|
13
|
+
* watching right away, so `init()` is only needed to resume after a move.
|
|
14
|
+
*
|
|
15
|
+
* Two things to know before adopting it. Only the initial copy removes the attributes
|
|
16
|
+
* from the host, so a value written after load sits on the host as well as on the
|
|
17
|
+
* element it is applied to, which matters if the host has a role of its own. And an
|
|
18
|
+
* attribute from the initial markup can never be removed, only overwritten, since the
|
|
19
|
+
* copy already took it off the host and a `removeAttribute` there fires no mutation.
|
|
20
|
+
* An empty string works for `aria-label` and friends, but a token-valued attribute
|
|
21
|
+
* has to be set to its default instead, so `aria-pressed="false"` rather than empty.
|
|
22
|
+
*
|
|
23
|
+
* @internal
|
|
24
|
+
* @param el The host element to copy from and watch.
|
|
25
|
+
* @param attributes The attributes to copy and watch.
|
|
26
|
+
* @param onChange Called after `attributes` changes, so the component can re-render.
|
|
27
|
+
* @param hostOwnedAttributes Attributes copied at load but not watched. Use it for
|
|
28
|
+
* attributes the component renders on its own `<Host>`, since a later change to one of
|
|
29
|
+
* those is the component's own write, and for attributes that would put a second node in
|
|
30
|
+
* the accessibility tree if the host kept a copy alongside the one we apply.
|
|
31
|
+
*/
|
|
32
|
+
export const createAttributeController = (el, attributes, onChange, hostOwnedAttributes = []) => {
|
|
33
|
+
let inherited = inheritAttributes(el, attributes);
|
|
34
|
+
let observer;
|
|
35
|
+
const watchedAttributes = attributes.filter((attr) => !hostOwnedAttributes.includes(attr));
|
|
36
|
+
/**
|
|
37
|
+
* The names still on the host, which is everything written after load. The initial
|
|
38
|
+
* copy removes what it captures, so a missing attribute only counts as a removal
|
|
39
|
+
* when its name is in here.
|
|
40
|
+
*/
|
|
41
|
+
const hostWritten = new Set();
|
|
42
|
+
const setPresence = (name, value) => {
|
|
43
|
+
if (value === null) {
|
|
44
|
+
hostWritten.delete(name);
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
hostWritten.add(name);
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
/**
|
|
51
|
+
* Nothing is watching while the host is out of the tree, since `disconnectedCallback`
|
|
52
|
+
* calls `destroy()`, and `forceUpdate` is a no-op on a disconnected host anyway. So
|
|
53
|
+
* the host has to be re-read on the way back in.
|
|
54
|
+
*/
|
|
55
|
+
const readMissedChanges = () => {
|
|
56
|
+
const changed = {};
|
|
57
|
+
for (const name of watchedAttributes) {
|
|
58
|
+
const value = el.getAttribute(name);
|
|
59
|
+
const wasOnHost = hostWritten.has(name);
|
|
60
|
+
setPresence(name, value);
|
|
61
|
+
/**
|
|
62
|
+
* An attribute that was never written to the host is missing because the initial
|
|
63
|
+
* copy took it, not because the developer cleared it.
|
|
64
|
+
*/
|
|
65
|
+
if ((value === null && !wasOnHost) || value === inherited[name]) {
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
changed[name] = value;
|
|
69
|
+
}
|
|
70
|
+
if (Object.keys(changed).length > 0) {
|
|
71
|
+
inherited = { ...inherited, ...changed };
|
|
72
|
+
onChange();
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
const init = () => {
|
|
76
|
+
// There is no MutationObserver in SSR or the hydrate build.
|
|
77
|
+
if (observer !== undefined || watchedAttributes.length === 0 || win === undefined || !('MutationObserver' in win)) {
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
readMissedChanges();
|
|
81
|
+
observer = new MutationObserver((mutations) => {
|
|
82
|
+
const changed = {};
|
|
83
|
+
for (const mutation of mutations) {
|
|
84
|
+
const name = mutation.attributeName;
|
|
85
|
+
// A removed attribute reads back as null, which clears it from the element the
|
|
86
|
+
// values are spread onto.
|
|
87
|
+
const value = el.getAttribute(name);
|
|
88
|
+
setPresence(name, value);
|
|
89
|
+
changed[name] = value;
|
|
90
|
+
}
|
|
91
|
+
inherited = { ...inherited, ...changed };
|
|
92
|
+
onChange();
|
|
93
|
+
});
|
|
94
|
+
observer.observe(el, { attributeFilter: watchedAttributes });
|
|
95
|
+
};
|
|
96
|
+
const destroy = () => {
|
|
97
|
+
observer?.disconnect();
|
|
98
|
+
observer = undefined;
|
|
99
|
+
};
|
|
100
|
+
/**
|
|
101
|
+
* Has to run after the initial copy, because that copy removes the attributes from the
|
|
102
|
+
* host and an observer armed any earlier would read the removal as a developer clearing
|
|
103
|
+
* them.
|
|
104
|
+
*/
|
|
105
|
+
init();
|
|
106
|
+
return {
|
|
107
|
+
get attributes() {
|
|
108
|
+
return inherited;
|
|
109
|
+
},
|
|
110
|
+
init,
|
|
111
|
+
destroy,
|
|
112
|
+
};
|
|
113
|
+
};
|
|
114
|
+
/**
|
|
115
|
+
* The `createAttributeController` equivalent of `inheritAriaAttributes`, which copies and
|
|
116
|
+
* watches every ARIA attribute plus `role`.
|
|
117
|
+
*
|
|
118
|
+
* @internal
|
|
119
|
+
* @param el The host element to copy from and watch.
|
|
120
|
+
* @param onChange Called after the attributes change, so the component can re-render.
|
|
121
|
+
* @param hostOwnedAttributes Attributes copied at load but not watched. See
|
|
122
|
+
* `createAttributeController`.
|
|
123
|
+
*/
|
|
124
|
+
export const createAriaAttributeController = (el, onChange, hostOwnedAttributes = []) => {
|
|
125
|
+
return createAttributeController(el, ariaAttributes, onChange, hostOwnedAttributes);
|
|
126
|
+
};
|
|
@@ -83,8 +83,8 @@ export const hasLazyBuild = (stencilEl) => {
|
|
|
83
83
|
* helper function should be called in componentWillLoad and assigned to a variable
|
|
84
84
|
* that is later used in the render function.
|
|
85
85
|
*
|
|
86
|
-
* This
|
|
87
|
-
* does not trigger a re-render.
|
|
86
|
+
* This copies once. Use `createAttributeController` instead when the attributes can
|
|
87
|
+
* change after load, since a host attribute change does not trigger a re-render.
|
|
88
88
|
*/
|
|
89
89
|
export const inheritAttributes = (el, attributes = []) => {
|
|
90
90
|
const attributeObject = {};
|
|
@@ -103,8 +103,10 @@ export const inheritAttributes = (el, attributes = []) => {
|
|
|
103
103
|
* List of available ARIA attributes + `role`.
|
|
104
104
|
* Removed deprecated attributes.
|
|
105
105
|
* https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes
|
|
106
|
+
*
|
|
107
|
+
* @internal Exported for `attribute-controller.ts`, which needs the same set.
|
|
106
108
|
*/
|
|
107
|
-
const ariaAttributes = [
|
|
109
|
+
export const ariaAttributes = [
|
|
108
110
|
'role',
|
|
109
111
|
'aria-activedescendant',
|
|
110
112
|
'aria-atomic',
|
|
@@ -34,6 +34,8 @@ const isLogLevelEnabled = (minimum) => {
|
|
|
34
34
|
* to indicate the library that is warning the developer.
|
|
35
35
|
*
|
|
36
36
|
* @param message - The string message to be logged to the console.
|
|
37
|
+
*
|
|
38
|
+
* @internal
|
|
37
39
|
*/
|
|
38
40
|
export const printIonWarning = (message, ...params) => {
|
|
39
41
|
if (isLogLevelEnabled(LogLevel.WARN)) {
|
|
@@ -46,6 +48,8 @@ export const printIonWarning = (message, ...params) => {
|
|
|
46
48
|
*
|
|
47
49
|
* @param message - The string message to be logged to the console.
|
|
48
50
|
* @param params - Additional arguments to supply to the console.error.
|
|
51
|
+
*
|
|
52
|
+
* @internal
|
|
49
53
|
*/
|
|
50
54
|
export const printIonError = (message, ...params) => {
|
|
51
55
|
if (isLogLevelEnabled(LogLevel.ERROR)) {
|
package/dist/docs.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
3
|
*/
|
|
4
|
-
import {
|
|
5
|
-
import { w as win } from './helpers-
|
|
4
|
+
import { c as printIonError } from './index-Ci0c0wtC.js';
|
|
5
|
+
import { w as win } from './helpers-D3HlaZqB.js';
|
|
6
6
|
|
|
7
7
|
let animationPrefix;
|
|
8
8
|
const getAnimationPrefix = (el) => {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
3
|
*/
|
|
4
|
-
import { i as initialize } from './ionic-global-
|
|
4
|
+
import { i as initialize } from './ionic-global-D319UM2i.js';
|
|
5
5
|
|
|
6
6
|
const appGlobalScript = initialize || (() => {});
|
|
7
7
|
const globalScripts = appGlobalScript;
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
|
+
*/
|
|
4
|
+
import { b as inheritAttributes, w as win, q as ariaAttributes } from './helpers-D3HlaZqB.js';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Copies a set of attributes off the host element so they can be applied to an element
|
|
8
|
+
* inside the shadow root, then keeps that copy in sync as the host attributes change.
|
|
9
|
+
* Using `inheritAttributes` alone copies once at load, so anything written to the host
|
|
10
|
+
* afterwards never reaches the element the assistive technology reads.
|
|
11
|
+
*
|
|
12
|
+
* Create the controller in `componentWillLoad`. It takes the initial copy and starts
|
|
13
|
+
* watching right away, so `init()` is only needed to resume after a move.
|
|
14
|
+
*
|
|
15
|
+
* Two things to know before adopting it. Only the initial copy removes the attributes
|
|
16
|
+
* from the host, so a value written after load sits on the host as well as on the
|
|
17
|
+
* element it is applied to, which matters if the host has a role of its own. And an
|
|
18
|
+
* attribute from the initial markup can never be removed, only overwritten, since the
|
|
19
|
+
* copy already took it off the host and a `removeAttribute` there fires no mutation.
|
|
20
|
+
* An empty string works for `aria-label` and friends, but a token-valued attribute
|
|
21
|
+
* has to be set to its default instead, so `aria-pressed="false"` rather than empty.
|
|
22
|
+
*
|
|
23
|
+
* @internal
|
|
24
|
+
* @param el The host element to copy from and watch.
|
|
25
|
+
* @param attributes The attributes to copy and watch.
|
|
26
|
+
* @param onChange Called after `attributes` changes, so the component can re-render.
|
|
27
|
+
* @param hostOwnedAttributes Attributes copied at load but not watched. Use it for
|
|
28
|
+
* attributes the component renders on its own `<Host>`, since a later change to one of
|
|
29
|
+
* those is the component's own write, and for attributes that would put a second node in
|
|
30
|
+
* the accessibility tree if the host kept a copy alongside the one we apply.
|
|
31
|
+
*/
|
|
32
|
+
const createAttributeController = (el, attributes, onChange, hostOwnedAttributes = []) => {
|
|
33
|
+
let inherited = inheritAttributes(el, attributes);
|
|
34
|
+
let observer;
|
|
35
|
+
const watchedAttributes = attributes.filter((attr) => !hostOwnedAttributes.includes(attr));
|
|
36
|
+
/**
|
|
37
|
+
* The names still on the host, which is everything written after load. The initial
|
|
38
|
+
* copy removes what it captures, so a missing attribute only counts as a removal
|
|
39
|
+
* when its name is in here.
|
|
40
|
+
*/
|
|
41
|
+
const hostWritten = new Set();
|
|
42
|
+
const setPresence = (name, value) => {
|
|
43
|
+
if (value === null) {
|
|
44
|
+
hostWritten.delete(name);
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
hostWritten.add(name);
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
/**
|
|
51
|
+
* Nothing is watching while the host is out of the tree, since `disconnectedCallback`
|
|
52
|
+
* calls `destroy()`, and `forceUpdate` is a no-op on a disconnected host anyway. So
|
|
53
|
+
* the host has to be re-read on the way back in.
|
|
54
|
+
*/
|
|
55
|
+
const readMissedChanges = () => {
|
|
56
|
+
const changed = {};
|
|
57
|
+
for (const name of watchedAttributes) {
|
|
58
|
+
const value = el.getAttribute(name);
|
|
59
|
+
const wasOnHost = hostWritten.has(name);
|
|
60
|
+
setPresence(name, value);
|
|
61
|
+
/**
|
|
62
|
+
* An attribute that was never written to the host is missing because the initial
|
|
63
|
+
* copy took it, not because the developer cleared it.
|
|
64
|
+
*/
|
|
65
|
+
if ((value === null && !wasOnHost) || value === inherited[name]) {
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
changed[name] = value;
|
|
69
|
+
}
|
|
70
|
+
if (Object.keys(changed).length > 0) {
|
|
71
|
+
inherited = { ...inherited, ...changed };
|
|
72
|
+
onChange();
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
const init = () => {
|
|
76
|
+
// There is no MutationObserver in SSR or the hydrate build.
|
|
77
|
+
if (observer !== undefined || watchedAttributes.length === 0 || win === undefined || !('MutationObserver' in win)) {
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
readMissedChanges();
|
|
81
|
+
observer = new MutationObserver((mutations) => {
|
|
82
|
+
const changed = {};
|
|
83
|
+
for (const mutation of mutations) {
|
|
84
|
+
const name = mutation.attributeName;
|
|
85
|
+
// A removed attribute reads back as null, which clears it from the element the
|
|
86
|
+
// values are spread onto.
|
|
87
|
+
const value = el.getAttribute(name);
|
|
88
|
+
setPresence(name, value);
|
|
89
|
+
changed[name] = value;
|
|
90
|
+
}
|
|
91
|
+
inherited = { ...inherited, ...changed };
|
|
92
|
+
onChange();
|
|
93
|
+
});
|
|
94
|
+
observer.observe(el, { attributeFilter: watchedAttributes });
|
|
95
|
+
};
|
|
96
|
+
const destroy = () => {
|
|
97
|
+
observer?.disconnect();
|
|
98
|
+
observer = undefined;
|
|
99
|
+
};
|
|
100
|
+
/**
|
|
101
|
+
* Has to run after the initial copy, because that copy removes the attributes from the
|
|
102
|
+
* host and an observer armed any earlier would read the removal as a developer clearing
|
|
103
|
+
* them.
|
|
104
|
+
*/
|
|
105
|
+
init();
|
|
106
|
+
return {
|
|
107
|
+
get attributes() {
|
|
108
|
+
return inherited;
|
|
109
|
+
},
|
|
110
|
+
init,
|
|
111
|
+
destroy,
|
|
112
|
+
};
|
|
113
|
+
};
|
|
114
|
+
/**
|
|
115
|
+
* The `createAttributeController` equivalent of `inheritAriaAttributes`, which copies and
|
|
116
|
+
* watches every ARIA attribute plus `role`.
|
|
117
|
+
*
|
|
118
|
+
* @internal
|
|
119
|
+
* @param el The host element to copy from and watch.
|
|
120
|
+
* @param onChange Called after the attributes change, so the component can re-render.
|
|
121
|
+
* @param hostOwnedAttributes Attributes copied at load but not watched. See
|
|
122
|
+
* `createAttributeController`.
|
|
123
|
+
*/
|
|
124
|
+
const createAriaAttributeController = (el, onChange, hostOwnedAttributes = []) => {
|
|
125
|
+
return createAttributeController(el, ariaAttributes, onChange, hostOwnedAttributes);
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
export { createAttributeController as a, createAriaAttributeController as c };
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
3
|
*/
|
|
4
|
-
import { w as writeTask } from './index-
|
|
5
|
-
import { h as hapticSelectionEnd, a as hapticSelectionChanged, b as hapticSelectionStart } from './haptic-
|
|
4
|
+
import { w as writeTask } from './index-Ci0c0wtC.js';
|
|
5
|
+
import { h as hapticSelectionEnd, a as hapticSelectionChanged, b as hapticSelectionStart } from './haptic-B3RodENJ.js';
|
|
6
6
|
import { createGesture } from './index-BmLuEdV7.js';
|
|
7
7
|
|
|
8
8
|
const createButtonActiveGesture = (el, isButton) => {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
3
|
*/
|
|
4
|
-
import { c as componentOnReady } from './helpers-
|
|
4
|
+
import { c as componentOnReady } from './helpers-D3HlaZqB.js';
|
|
5
5
|
|
|
6
6
|
// TODO(FW-2832): types
|
|
7
7
|
const attachComponent = async (delegate, container, component, cssClasses, componentProps, inline) => {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
3
|
*/
|
|
4
|
-
import {
|
|
4
|
+
import { c as printIonError } from './index-Ci0c0wtC.js';
|
|
5
5
|
import { i as isRTL } from './dir-Dojwmvde.js';
|
|
6
6
|
|
|
7
7
|
const win = typeof window !== 'undefined' ? window : undefined;
|
|
@@ -86,8 +86,8 @@ const hasLazyBuild = (stencilEl) => {
|
|
|
86
86
|
* helper function should be called in componentWillLoad and assigned to a variable
|
|
87
87
|
* that is later used in the render function.
|
|
88
88
|
*
|
|
89
|
-
* This
|
|
90
|
-
* does not trigger a re-render.
|
|
89
|
+
* This copies once. Use `createAttributeController` instead when the attributes can
|
|
90
|
+
* change after load, since a host attribute change does not trigger a re-render.
|
|
91
91
|
*/
|
|
92
92
|
const inheritAttributes = (el, attributes = []) => {
|
|
93
93
|
const attributeObject = {};
|
|
@@ -106,6 +106,8 @@ const inheritAttributes = (el, attributes = []) => {
|
|
|
106
106
|
* List of available ARIA attributes + `role`.
|
|
107
107
|
* Removed deprecated attributes.
|
|
108
108
|
* https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes
|
|
109
|
+
*
|
|
110
|
+
* @internal Exported for `attribute-controller.ts`, which needs the same set.
|
|
109
111
|
*/
|
|
110
112
|
const ariaAttributes = [
|
|
111
113
|
'role',
|
|
@@ -381,4 +383,4 @@ const isSafeNumber = (input) => {
|
|
|
381
383
|
return typeof input === 'number' && !isNaN(input) && isFinite(input);
|
|
382
384
|
};
|
|
383
385
|
|
|
384
|
-
export { renderHiddenInput as a, inheritAttributes as b, componentOnReady as c, debounceEvent as d, clamp as e, addEventListener as f, getElementRoot as g, hasLazyBuild as h, inheritAriaAttributes as i, isSafeNumber as j, hasShadowDom as k, assert as l, removeEventListener as m, doc as n, onCustomPropertyChange as o, focusVisibleElement as p,
|
|
386
|
+
export { renderHiddenInput as a, inheritAttributes as b, componentOnReady as c, debounceEvent as d, clamp as e, addEventListener as f, getElementRoot as g, hasLazyBuild as h, inheritAriaAttributes as i, isSafeNumber as j, hasShadowDom as k, assert as l, removeEventListener as m, doc as n, onCustomPropertyChange as o, focusVisibleElement as p, ariaAttributes as q, raf as r, isEndSide as s, transitionEndAsync as t, debounce as u, shallowEqualStringMap as v, win as w, pointerCoord as x };
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
3
|
*/
|
|
4
|
-
import {
|
|
5
|
-
import { r as raf } from './helpers-
|
|
4
|
+
import { i as config, a as printIonWarning, w as writeTask, B as Build } from './index-Ci0c0wtC.js';
|
|
5
|
+
import { r as raf } from './helpers-D3HlaZqB.js';
|
|
6
6
|
|
|
7
7
|
const LIFECYCLE_WILL_ENTER = 'ionViewWillEnter';
|
|
8
8
|
const LIFECYCLE_DID_ENTER = 'ionViewDidEnter';
|
|
@@ -118,8 +118,8 @@ const createFocusController = () => {
|
|
|
118
118
|
};
|
|
119
119
|
const LAST_FOCUS = 'ion-last-focus';
|
|
120
120
|
|
|
121
|
-
const iosTransitionAnimation = () => import('./ios.transition-
|
|
122
|
-
const mdTransitionAnimation = () => import('./md.transition-
|
|
121
|
+
const iosTransitionAnimation = () => import('./ios.transition-CjR-iczx.js');
|
|
122
|
+
const mdTransitionAnimation = () => import('./md.transition-BFmU8zjI.js');
|
|
123
123
|
const focusController = createFocusController();
|
|
124
124
|
// TODO(FW-2832): types
|
|
125
125
|
/**
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
3
|
*/
|
|
4
|
-
import {
|
|
4
|
+
import { a as printIonWarning, c as printIonError } from './index-Ci0c0wtC.js';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* Sanitize an untrusted HTML string.
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
3
|
*/
|
|
4
|
-
import { c as componentOnReady } from './helpers-
|
|
5
|
-
import { t as printRequiredElementError } from './index-
|
|
4
|
+
import { c as componentOnReady } from './helpers-D3HlaZqB.js';
|
|
5
|
+
import { t as printRequiredElementError } from './index-Ci0c0wtC.js';
|
|
6
6
|
|
|
7
7
|
const ION_CONTENT_TAG_NAME = 'ION-CONTENT';
|
|
8
8
|
const ION_CONTENT_ELEMENT_SELECTOR = 'ion-content';
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
3
|
*/
|
|
4
|
-
import { n as doc,
|
|
5
|
-
import './index-
|
|
4
|
+
import { n as doc, x as pointerCoord } from './helpers-D3HlaZqB.js';
|
|
5
|
+
import './index-Ci0c0wtC.js';
|
|
6
6
|
import './dir-Dojwmvde.js';
|
|
7
7
|
|
|
8
8
|
const startTapClick = (config) => {
|