voyager-ionic-core 9.0.1 → 9.0.6
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-Hp8t4RMX.js → p-6sKRBFnK.js} +1 -1
- package/components/{p-qAXsfUff.js → p-B8HBLiYi.js} +1 -1
- package/{dist/ionic/p-Do3zTvCA.js → components/p-BEiYs-sz.js} +1 -1
- package/components/p-BKeulLTJ.js +4 -0
- package/components/{p-5ldEpNdG.js → p-BKxLivx4.js} +1 -1
- package/components/{p-BYJRZKHa.js → p-BLjEwM6v.js} +1 -1
- package/components/{p-Cd1WaN-0.js → p-BNnmwjuy.js} +1 -1
- package/components/{p-COO0eJOA.js → p-BSJriPuC.js} +1 -1
- package/components/p-BUVGbkSc.js +4 -0
- package/components/{p-DL13ieTa.js → p-B_tZQKpS.js} +1 -1
- package/components/p-BexLz2XV.js +4 -0
- package/components/p-BinR4_P7.js +4 -0
- package/components/{p-DxhHlJln.js → p-BrOSQhkA.js} +1 -1
- package/components/p-BriaEJK8.js +4 -0
- package/components/p-BsLM9eQu.js +4 -0
- package/components/{p-DhNuxvJH.js → p-Bu6O-veK.js} +1 -1
- package/components/{p-DJR0R0e1.js → p-C7rB-0-1.js} +1 -1
- package/components/{p-6ZLn6K5e.js → p-C9ioHZq-.js} +1 -1
- package/components/p-CAQG0btC.js +4 -0
- package/components/{p-DMBiAyOR.js → p-CHHkdXfP.js} +1 -1
- package/components/p-CJgshb3W.js +4 -0
- package/components/p-CQjNc-Pz.js +4 -0
- package/components/{p-CJgnoKcN.js → p-CTUMJM0R.js} +1 -1
- package/components/{p-C4VpVfrJ.js → p-CVVUo4J1.js} +1 -1
- package/components/{p-B4lxwJ8N.js → p-CXy2v7GI.js} +1 -1
- package/components/{p-BQyuFxYc.js → p-C_NQIzjP.js} +1 -1
- package/components/{p-D7wDJdFn.js → p-Canp1qah.js} +1 -1
- package/components/p-CcQQ8oRo.js +4 -0
- package/components/{p-GGbIHyEF.js → p-CiFFeRH9.js} +1 -1
- package/components/p-CiXOsJF2.js +4 -0
- package/components/p-Ctw69DyZ.js +4 -0
- package/components/{p-DngGb-NV.js → p-CvzE7FFp.js} +1 -1
- package/components/{p-TWw4e4sO.js → p-CzykzqAO.js} +1 -1
- package/components/p-D0jSx7rE.js +4 -0
- package/components/{p-C-NbvXu4.js → p-D4NOsSCE.js} +1 -1
- package/components/{p-cEN43Ahr.js → p-DGUed0uX.js} +1 -1
- package/components/p-DM2jMsSO.js +4 -0
- package/components/p-DPyjiKOq.js +4 -0
- package/components/{p-BF48Oc0v.js → p-DSmHJ2DH.js} +1 -1
- package/components/p-DWGgvN5e.js +4 -0
- package/components/p-DlUdjUlf.js +4 -0
- package/components/{p-DM1gJSMP.js → p-Dlr7b3_2.js} +1 -1
- package/components/p-F1rV0pyK.js +4 -0
- package/components/{p-DFLJvuRK.js → p-LH1I_Zhd.js} +1 -1
- package/components/p-PPagT42x.js +4 -0
- package/components/{p-CqbGBmqb.js → p-RJT5zTbD.js} +1 -1
- package/components/p-T2dnrBya.js +4 -0
- package/components/p-WMQuK_Tj.js +4 -0
- package/components/p-eJpG4UbM.js +4 -0
- package/components/p-fFx6WCTj.js +4 -0
- package/{dist/ionic/p-BgOvhHy_.js → components/p-q2WJ5Igc.js} +1 -1
- package/components/{p-D5w_FlVa.js → p-y7Nhe3de.js} +1 -1
- package/css/core.css +1 -1
- package/css/core.css.map +1 -1
- package/css/ionic.bundle.css +1 -1
- package/css/ionic.bundle.css.map +1 -1
- package/dist/cjs/{animation-Kd1N7WTN.js → animation-BFKyYY11.js} +3 -3
- package/dist/cjs/{app-globals-b1G4t26O.js → app-globals-BLTzqkrC.js} +1 -1
- package/dist/cjs/attribute-controller-CXIeB0Mn.js +131 -0
- package/dist/cjs/{button-active-CQCFubJJ.js → button-active-CEQaiV9N.js} +2 -2
- package/dist/cjs/{capacitor-DmA66EwP.js → capacitor-BMzmHhwe.js} +3 -3
- package/dist/cjs/{format-bHU8N1g5.js → format-CdRlDqPs.js} +1 -1
- package/dist/cjs/{framework-delegate-d-fWfeI6.js → framework-delegate-DTLbqaaO.js} +1 -1
- package/dist/cjs/{haptic-Ch-X4gRx.js → haptic-CJVUv_GB.js} +1 -1
- package/dist/cjs/{helpers-7wzdhdeg.js → helpers-Crluoxqu.js} +50 -3
- package/dist/cjs/{index-DtvKGwdh.js → index-BAM4223M.js} +2 -2
- package/dist/cjs/{index-C74Q3t6a.js → index-BKpybYNI.js} +7 -8
- package/dist/cjs/{index-BbqUBe2T.js → index-BSD7toMO.js} +10 -8
- package/dist/cjs/{index-DFNrCX7M.js → index-CElfU-dK.js} +8 -9
- package/dist/cjs/{index-CQfEIyLK.js → index-CgXTRA_-.js} +4 -4
- package/dist/cjs/{index-DXoo08JC.js → index-SAR1xwtW.js} +25 -12
- package/dist/cjs/index.cjs.js +19 -19
- package/dist/cjs/{input-shims-VJIiKBKv.js → input-shims-CHghGZe-.js} +16 -17
- package/dist/cjs/{input.utils-EHVE2RK_.js → input.utils-BBZr0wjw.js} +1 -1
- package/dist/cjs/ion-accordion_2.cjs.entry.js +3 -3
- package/dist/cjs/ion-action-sheet.cjs.entry.js +26 -28
- package/dist/cjs/ion-alert.cjs.entry.js +27 -29
- package/dist/cjs/ion-app_8.cjs.entry.js +72 -24
- 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 +34 -29
- 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 +12 -16
- 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 +18 -20
- package/dist/cjs/ion-menu_3.cjs.entry.js +15 -17
- package/dist/cjs/ion-modal.cjs.entry.js +177 -172
- 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 +8 -9
- package/dist/cjs/ion-picker.cjs.entry.js +2 -2
- package/dist/cjs/ion-popover.cjs.entry.js +119 -42
- 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 -9
- package/dist/cjs/ion-reorder_2.cjs.entry.js +6 -7
- 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 +8 -10
- package/dist/cjs/ion-select_3.cjs.entry.js +71 -53
- 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 -7
- 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 +11 -15
- package/dist/cjs/ion-toast.cjs.entry.js +49 -51
- package/dist/cjs/ion-toggle.cjs.entry.js +6 -7
- package/dist/cjs/{ionic-global-CYJNT-2P.js → ionic-global-C1h8Yi_K.js} +1 -1
- package/dist/cjs/ionic.cjs.js +5 -5
- package/dist/cjs/{ios.transition-DYGiD6gM.js → ios.transition-YFSxiyP_.js} +4 -5
- package/dist/cjs/{item-multiple-inputs-Dv6qrMhm.js → item-multiple-inputs-h2PyAFzG.js} +1 -1
- package/dist/cjs/{keyboard-cHxZlTyz.js → keyboard-C-C7xMKk.js} +1 -1
- package/dist/cjs/{keyboard-Cix5TVkD.js → keyboard-Cv-LNReK.js} +5 -3
- package/dist/cjs/{keyboard-controller-PtZoN2GS.js → keyboard-controller-CLcFxSnb.js} +9 -9
- package/dist/cjs/loader.cjs.js +4 -4
- package/dist/cjs/{md.transition-CrSkaoz6.js → md.transition-Cm8yg0UK.js} +4 -5
- package/dist/cjs/{overlays-BR21NUIG.js → overlays-C68wNDWY.js} +162 -9
- package/dist/cjs/{select-option-render-CrbLc-1j.js → select-option-render-C-Yh9yZG.js} +2 -2
- package/dist/cjs/{slot-mutation-controller-D6IjSEIh.js → slot-mutation-controller-zixZ5LyH.js} +73 -5
- package/dist/cjs/{status-tap-CNP5eD1R.js → status-tap-C3frTJ4c.js} +3 -3
- package/dist/cjs/{swipe-back-CSIJQfu5.js → swipe-back-ChrfFzIe.js} +2 -2
- package/dist/collection/collection-manifest.json +1 -1
- package/dist/collection/components/button/button.js +21 -32
- package/dist/collection/components/card/card.js +17 -6
- package/dist/collection/components/content/content.js +62 -8
- package/dist/collection/components/datetime/datetime.js +27 -20
- package/dist/collection/components/input/input.ios.css +6 -0
- package/dist/collection/components/input/input.js +6 -9
- package/dist/collection/components/input/input.md.css +6 -0
- package/dist/collection/components/item/item.js +15 -6
- package/dist/collection/components/modal/modal.ios.css +12 -1
- package/dist/collection/components/modal/modal.js +31 -8
- package/dist/collection/components/modal/modal.md.css +12 -1
- package/dist/collection/components/modal/safe-area-utils.js +69 -90
- package/dist/collection/components/modal/utils.js +7 -0
- 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/components/select/select.ios.css +1 -1
- package/dist/collection/components/select/select.js +67 -38
- package/dist/collection/components/select/select.md.css +1 -1
- package/dist/collection/components/textarea/textarea.ios.css +15 -1
- package/dist/collection/components/textarea/textarea.js +5 -8
- package/dist/collection/components/textarea/textarea.md.css +15 -1
- package/dist/collection/index.js +1 -1
- package/dist/collection/utils/attribute-controller.js +126 -0
- package/dist/collection/utils/forms/click-controller.js +70 -0
- package/dist/collection/utils/forms/index.js +1 -0
- package/dist/collection/utils/helpers.js +44 -3
- package/dist/collection/utils/logging/index.js +4 -0
- package/dist/collection/utils/overlays.js +34 -0
- package/dist/collection/utils/sanitization/index.js +10 -8
- package/dist/docs.json +9 -3
- package/dist/esm/{animation-BFNVlYum.js → animation-CFd8Olt3.js} +2 -2
- package/dist/esm/{app-globals-BgX0BGL1.js → app-globals-7GHLBkwd.js} +1 -1
- package/dist/esm/attribute-controller-Cn665x42.js +128 -0
- package/dist/esm/{button-active-BfOvDr3b.js → button-active-DMuYeDQN.js} +2 -2
- package/dist/esm/{capacitor-CFERIeaU.js → capacitor-CoEgIpR9.js} +1 -1
- package/dist/esm/{format-DDFE9jM5.js → format-C9zPmwKU.js} +1 -1
- package/dist/esm/{framework-delegate-BwNhx9NR.js → framework-delegate-DeT5pmPB.js} +1 -1
- package/dist/esm/{haptic-Cq4UAeka.js → haptic-Dxm7ZmT5.js} +1 -1
- package/dist/esm/{helpers-BSmc0nst.js → helpers-B54ynME_.js} +47 -4
- package/dist/esm/{index-C1b9CLFg.js → index--21qeSt0.js} +2 -2
- package/dist/esm/{index-DnA_7Bnx.js → index-B8iieOdw.js} +4 -4
- package/dist/esm/{index-BuPaALjU.js → index-B9jhwvmO.js} +5 -6
- package/dist/esm/{index-CqoUoxgG.js → index-D4ZMZz_3.js} +10 -8
- package/dist/esm/{index-C23AVPx9.js → index-D9OR05yj.js} +26 -13
- package/dist/esm/{index-CJln0gS3.js → index-D_xZtbw6.js} +2 -3
- package/dist/esm/index.js +11 -13
- package/dist/esm/{input-shims-Dqk-Ou25.js → input-shims-MCrhq67U.js} +5 -6
- package/dist/esm/{input.utils-rqoH22pW.js → input.utils-B-IIWrwT.js} +1 -1
- package/dist/esm/ion-accordion_2.entry.js +3 -3
- package/dist/esm/ion-action-sheet.entry.js +11 -13
- package/dist/esm/ion-alert.entry.js +11 -13
- package/dist/esm/ion-app_8.entry.js +72 -24
- 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 +33 -28
- 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 +12 -16
- 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 -9
- package/dist/esm/ion-menu_3.entry.js +7 -9
- package/dist/esm/ion-modal.entry.js +115 -110
- 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 -6
- package/dist/esm/ion-picker.entry.js +2 -2
- package/dist/esm/ion-popover.entry.js +108 -31
- 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 -9
- package/dist/esm/ion-reorder_2.entry.js +6 -7
- 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 -9
- package/dist/esm/ion-select_3.entry.js +66 -48
- 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 -7
- 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 +11 -15
- package/dist/esm/ion-toast.entry.js +7 -9
- package/dist/esm/ion-toggle.entry.js +6 -7
- package/dist/esm/{ionic-global-ZXjCXKH0.js → ionic-global-B-G43ddm.js} +1 -1
- package/dist/esm/ionic.js +6 -6
- package/dist/esm/{ios.transition-CWAgfQ1r.js → ios.transition-CRfGj4Mo.js} +4 -5
- package/dist/esm/{item-multiple-inputs-DZnIiOO_.js → item-multiple-inputs-BSD9wGHO.js} +1 -1
- package/dist/esm/{keyboard-Cj8mLJeq.js → keyboard-DDw62P0D.js} +5 -3
- package/dist/esm/{keyboard-controller-DEwoa1ev.js → keyboard-controller-Dzjet5wD.js} +2 -2
- package/dist/esm/{keyboard-DAF8GNJ9.js → keyboard-ly3M0GO7.js} +1 -1
- package/dist/esm/loader.js +5 -5
- package/dist/esm/{md.transition-ZuqDDdDW.js → md.transition-wqThNy_C.js} +4 -5
- package/dist/esm/{overlays-DKE0DgvE.js → overlays-BQnV0HAU.js} +156 -7
- package/dist/esm/{select-option-render-1W6W9pbC.js → select-option-render-CGxPejmz.js} +2 -2
- package/dist/esm/{slot-mutation-controller-B5NpUZ-N.js → slot-mutation-controller-C3s4-_YN.js} +69 -3
- package/dist/esm/{status-tap-Cv9gb3ja.js → status-tap-DRx9wSD_.js} +3 -3
- package/dist/esm/{swipe-back-De5HlmeM.js → swipe-back-CXmdi75W.js} +2 -2
- package/dist/ionic/index.esm.js +1 -1
- package/dist/ionic/ionic.esm.js +1 -1
- package/dist/ionic/{p-8b80d9f9.entry.js → p-0517aec4.entry.js} +1 -1
- package/dist/ionic/{p-ee09ac9d.entry.js → p-083b1119.entry.js} +1 -1
- package/dist/ionic/p-0ab133d6.entry.js +4 -0
- package/dist/ionic/{p-271c3640.entry.js → p-1110da0d.entry.js} +1 -1
- package/dist/ionic/p-1213b719.entry.js +4 -0
- package/dist/ionic/p-150f350e.entry.js +4 -0
- package/dist/ionic/{p-38b9375b.entry.js → p-20d1ac29.entry.js} +1 -1
- package/dist/ionic/p-24b0a961.entry.js +4 -0
- package/dist/ionic/{p-f0fb23c1.entry.js → p-2e6e933d.entry.js} +1 -1
- package/dist/ionic/p-30dcf43b.entry.js +4 -0
- package/dist/ionic/p-336ea4b8.entry.js +4 -0
- package/dist/ionic/{p-b9b4e85d.entry.js → p-378341d1.entry.js} +1 -1
- package/dist/ionic/{p-191a651e.entry.js → p-37f46670.entry.js} +1 -1
- package/dist/ionic/p-3a5faaa8.entry.js +4 -0
- package/dist/ionic/{p-efc0cf82.entry.js → p-3c4b0ba7.entry.js} +1 -1
- package/dist/ionic/p-42b2a992.entry.js +4 -0
- package/dist/ionic/p-49a16200.entry.js +4 -0
- package/dist/ionic/{p-837db1b9.entry.js → p-4dbb2f4f.entry.js} +1 -1
- package/dist/ionic/p-52dc3309.entry.js +4 -0
- package/dist/ionic/{p-85599fe3.entry.js → p-58f914ee.entry.js} +1 -1
- package/dist/ionic/{p-561af487.entry.js → p-5b9666be.entry.js} +1 -1
- package/dist/ionic/p-5c19330c.entry.js +4 -0
- package/dist/ionic/{p-3bba83ee.entry.js → p-61b304c8.entry.js} +1 -1
- package/dist/ionic/p-624f2fa8.entry.js +4 -0
- package/dist/ionic/p-636349e2.entry.js +4 -0
- package/dist/ionic/{p-d8c138d9.entry.js → p-6865f0e1.entry.js} +1 -1
- package/dist/ionic/p-7441ed2b.entry.js +4 -0
- package/dist/ionic/p-76309bab.entry.js +4 -0
- package/dist/ionic/p-83448626.entry.js +4 -0
- package/dist/ionic/{p-5d9094ac.entry.js → p-834afcf7.entry.js} +1 -1
- package/dist/ionic/{p-099b7f9f.entry.js → p-93cd738b.entry.js} +1 -1
- package/dist/ionic/{p-d6755739.entry.js → p-9b78fedf.entry.js} +1 -1
- package/dist/ionic/p-9dd9788c.entry.js +4 -0
- package/dist/ionic/{p-DYUjHcuH.js → p-B4ELlbJE.js} +1 -1
- package/dist/ionic/p-B4wzg4z4.js +4 -0
- package/dist/ionic/p-B4xjg_Qu.js +4 -0
- package/dist/ionic/{p-T71k3C35.js → p-BCgqWm-V.js} +1 -1
- package/dist/ionic/p-BChRVdVv.js +4 -0
- package/dist/ionic/{p-DTxBioUO.js → p-BUB5OrpU.js} +1 -1
- package/dist/ionic/p-BVEsh7-M.js +4 -0
- package/dist/ionic/p-Ba6ZV-qU.js +4 -0
- package/dist/ionic/p-BhMQahM6.js +4 -0
- package/dist/ionic/p-BtHAx8im.js +4 -0
- package/dist/ionic/{p-DZ6Hmc-8.js → p-Bv-6401R.js} +1 -1
- package/dist/ionic/{p-C8XilMh0.js → p-CCik51Nv.js} +1 -1
- package/dist/ionic/p-CTmJSZcs.js +4 -0
- package/dist/ionic/{p-BaeKWZ-a.js → p-CVwXN07G.js} +1 -1
- package/dist/ionic/p-CgQdInM0.js +4 -0
- package/{components/p-BJr2B5hZ.js → dist/ionic/p-CrAPHbJ3.js} +1 -1
- package/dist/ionic/p-CsWrz1c2.js +4 -0
- package/dist/ionic/p-D5akOqD0.js +4 -0
- package/dist/ionic/{p-C23AVPx9.js → p-D9OR05yj.js} +2 -2
- package/dist/ionic/{p-D4OrdtJf.js → p-DHf9V6zI.js} +1 -1
- package/dist/ionic/{p-Bd72UYI2.js → p-DNxEB9-T.js} +1 -1
- package/dist/ionic/p-DZUqAr_6.js +4 -0
- package/dist/ionic/{p-CM5OBjTW.js → p-DffXRKHu.js} +1 -1
- package/dist/ionic/{p-BMPN55of.js → p-DxvRP6ld.js} +1 -1
- package/dist/ionic/p-Dzew6Qv7.js +4 -0
- package/dist/ionic/p-PkaVMJga.js +4 -0
- package/dist/ionic/{p-4712a8a9.entry.js → p-b0a3dd1a.entry.js} +1 -1
- package/dist/ionic/p-b1164028.entry.js +4 -0
- package/dist/ionic/{p-ca1b8865.entry.js → p-b710b4b8.entry.js} +1 -1
- package/dist/ionic/{p-6e386853.entry.js → p-b9659d21.entry.js} +1 -1
- package/dist/ionic/{p-68cc89a6.entry.js → p-ba7bd621.entry.js} +1 -1
- package/dist/ionic/{p-db449915.entry.js → p-c2a23101.entry.js} +1 -1
- package/dist/ionic/p-daaecea3.entry.js +4 -0
- package/dist/ionic/p-e05073f6.entry.js +4 -0
- package/dist/ionic/{p-90f50a65.entry.js → p-e137f724.entry.js} +1 -1
- package/dist/ionic/p-e1969fd1.entry.js +4 -0
- package/dist/ionic/{p-7fbb3319.entry.js → p-e338693a.entry.js} +1 -1
- package/dist/ionic/p-e4c3f17f.entry.js +4 -0
- package/dist/ionic/p-e7414c33.entry.js +4 -0
- package/dist/ionic/{p-dd01be0a.entry.js → p-eb762f80.entry.js} +1 -1
- package/dist/ionic/{p-ec00fd0d.entry.js → p-edcb63e5.entry.js} +1 -1
- package/dist/ionic/p-f19e50f8.entry.js +4 -0
- package/dist/ionic/p-f9057f70.entry.js +4 -0
- package/dist/ionic/{p-9c5f2691.entry.js → p-f99cf5aa.entry.js} +1 -1
- package/dist/ionic/{p-54cbb0a7.entry.js → p-fee863dc.entry.js} +1 -1
- package/dist/ionic/p-kKvGoaEe.js +4 -0
- package/dist/ionic/p-tXpzvta8.js +4 -0
- package/dist/ionic/p-vPo3vRFc.js +4 -0
- package/dist/types/components/button/button.d.ts +3 -12
- package/dist/types/components/card/card.d.ts +3 -1
- package/dist/types/components/content/content.d.ts +28 -3
- package/dist/types/components/datetime/datetime.d.ts +5 -10
- package/dist/types/components/input/input.d.ts +1 -0
- package/dist/types/components/item/item.d.ts +1 -1
- package/dist/types/components/modal/modal.d.ts +9 -1
- package/dist/types/components/modal/safe-area-utils.d.ts +28 -14
- package/dist/types/components/modal/utils.d.ts +4 -0
- package/dist/types/components/popover/utils.d.ts +16 -3
- package/dist/types/components/select/select.d.ts +11 -0
- package/dist/types/components/textarea/textarea.d.ts +1 -0
- package/dist/types/components.d.ts +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/stencil-public-runtime.d.ts +61 -55
- package/dist/types/utils/attribute-controller.d.ts +56 -0
- package/dist/types/utils/forms/click-controller.d.ts +36 -0
- package/dist/types/utils/forms/index.d.ts +1 -0
- package/dist/types/utils/helpers.d.ts +27 -2
- package/dist/types/utils/logging/index.d.ts +4 -0
- package/dist/types/utils/overlays.d.ts +15 -0
- package/dist/types/utils/sanitization/index.d.ts +2 -2
- package/hydrate/index.js +817 -299
- package/hydrate/index.mjs +817 -299
- package/package.json +4 -4
- package/components/p-1sJ0ZDPe.js +0 -4
- package/components/p-BNBnVi_1.js +0 -4
- package/components/p-BT9-hMMz.js +0 -4
- package/components/p-BWoa-cki.js +0 -4
- package/components/p-BgkOsq-d.js +0 -4
- package/components/p-Bi-it1EH.js +0 -4
- package/components/p-C0493tbX.js +0 -4
- package/components/p-C09TXohi.js +0 -4
- package/components/p-CG_zZq_I.js +0 -4
- package/components/p-CMRYD_yR.js +0 -4
- package/components/p-CNLioZ3B.js +0 -4
- package/components/p-CWAks_S_.js +0 -4
- package/components/p-CrAKlX71.js +0 -4
- package/components/p-Cw6WocLJ.js +0 -4
- package/components/p-DGPjJNOU.js +0 -4
- package/components/p-DZRZic9C.js +0 -4
- package/components/p-DiuOa1vw.js +0 -4
- package/components/p-Dj40C8gm.js +0 -4
- package/components/p-Djmz-ssp.js +0 -4
- package/components/p-DnBNYc7u.js +0 -4
- package/components/p-DwSXbQSz.js +0 -4
- package/components/p-M34T2gyX.js +0 -4
- package/components/p-YjMkHuvH.js +0 -4
- package/dist/cjs/hardware-back-button-Bu4Dzw8l.js +0 -121
- package/dist/cjs/index-DkNv4J_i.js +0 -10
- package/dist/esm/hardware-back-button-DmkiRgOT.js +0 -115
- package/dist/esm/index-ZjP4CjeZ.js +0 -7
- package/dist/ionic/p-06c6b540.entry.js +0 -4
- package/dist/ionic/p-0dcb7bb6.entry.js +0 -4
- package/dist/ionic/p-1347880c.entry.js +0 -4
- package/dist/ionic/p-1f24cb24.entry.js +0 -4
- package/dist/ionic/p-2c52fe3e.entry.js +0 -4
- package/dist/ionic/p-2ea4bb36.entry.js +0 -4
- package/dist/ionic/p-338a02e0.entry.js +0 -4
- package/dist/ionic/p-4c3e50f8.entry.js +0 -4
- package/dist/ionic/p-4e2fef42.entry.js +0 -4
- package/dist/ionic/p-5906ea6f.entry.js +0 -4
- package/dist/ionic/p-5cc09b40.entry.js +0 -4
- package/dist/ionic/p-612ea3b1.entry.js +0 -4
- package/dist/ionic/p-66f150ec.entry.js +0 -4
- package/dist/ionic/p-77c96e08.entry.js +0 -4
- package/dist/ionic/p-7bfeccb3.entry.js +0 -4
- package/dist/ionic/p-7e394cc3.entry.js +0 -4
- package/dist/ionic/p-9595e305.entry.js +0 -4
- package/dist/ionic/p-BY6BzzPF.js +0 -4
- package/dist/ionic/p-BhamHSw3.js +0 -4
- package/dist/ionic/p-BijjLYjT.js +0 -4
- package/dist/ionic/p-CER8qW8Y.js +0 -4
- package/dist/ionic/p-CFuOr1Tu.js +0 -4
- package/dist/ionic/p-CIGNaXM1.js +0 -4
- package/dist/ionic/p-CMZYmFb4.js +0 -4
- package/dist/ionic/p-CkxVYPtX.js +0 -4
- package/dist/ionic/p-CmXuiRT6.js +0 -4
- package/dist/ionic/p-D5t_-oMk.js +0 -4
- package/dist/ionic/p-D6rHcCvc.js +0 -4
- package/dist/ionic/p-DLM95R4x.js +0 -4
- package/dist/ionic/p-D_gb-kdd.js +0 -4
- package/dist/ionic/p-DajLgJ4d.js +0 -4
- package/dist/ionic/p-ZjP4CjeZ.js +0 -4
- package/dist/ionic/p-a1cc2861.entry.js +0 -4
- package/dist/ionic/p-a20a2ebe.entry.js +0 -4
- package/dist/ionic/p-a8ff2489.entry.js +0 -4
- package/dist/ionic/p-b3532b8d.entry.js +0 -4
- package/dist/ionic/p-b80c86c4.entry.js +0 -4
- package/dist/ionic/p-c57fc396.entry.js +0 -4
- package/dist/ionic/p-cc4320d3.entry.js +0 -4
- package/dist/ionic/p-f83b3e0c.entry.js +0 -4
- package/dist/ionic/p-fU3rOYad.js +0 -4
- package/dist/ionic/p-zWf7R2xV.js +0 -4
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
3
|
*/
|
|
4
4
|
import { Build, Host, forceUpdate, h, writeTask, } from "@stencil/core";
|
|
5
|
-
import { createNotchController, createStartContainerController, checkInvalidState } from "../../utils/forms/index";
|
|
5
|
+
import { createClickController, createNotchController, createStartContainerController, checkInvalidState, } from "../../utils/forms/index";
|
|
6
6
|
import { inheritAriaAttributes, debounceEvent, inheritAttributes, componentOnReady } from "../../utils/helpers";
|
|
7
7
|
import { createSlotMutationController } from "../../utils/slot-mutation-controller";
|
|
8
8
|
import { createColorClasses, hostContext } from "../../utils/theme";
|
|
@@ -189,11 +189,7 @@ export class Textarea {
|
|
|
189
189
|
* Instead, the click event from the ion-textarea is emitted.
|
|
190
190
|
*/
|
|
191
191
|
onClickCapture(ev) {
|
|
192
|
-
|
|
193
|
-
if (nativeInput && ev.target === nativeInput) {
|
|
194
|
-
ev.stopPropagation();
|
|
195
|
-
this.el.click();
|
|
196
|
-
}
|
|
192
|
+
this.clickController?.handleClickCapture(ev);
|
|
197
193
|
}
|
|
198
194
|
connectedCallback() {
|
|
199
195
|
const { el } = this;
|
|
@@ -206,6 +202,7 @@ export class Textarea {
|
|
|
206
202
|
return Build.isBrowser && getIonMode(this) === 'md' && this.fill === 'outline';
|
|
207
203
|
});
|
|
208
204
|
this.startContainerController.calculateStartContainerWidth();
|
|
205
|
+
this.clickController = createClickController(el, () => this.nativeInput);
|
|
209
206
|
// Watch for class changes to update validation state
|
|
210
207
|
if (Build.isBrowser && typeof MutationObserver !== 'undefined') {
|
|
211
208
|
this.validationObserver = new MutationObserver(() => {
|
|
@@ -461,7 +458,7 @@ export class Textarea {
|
|
|
461
458
|
* the textarea has a value or is focused.
|
|
462
459
|
*/
|
|
463
460
|
const labelShouldFloat = labelPlacement === 'stacked' || (labelPlacement === 'floating' && (hasValue || hasFocus));
|
|
464
|
-
return (h(Host, { key: '
|
|
461
|
+
return (h(Host, { key: '0f01ed6565313c45beaea5e0aa429a86b9cfa1a0', class: createColorClasses(this.color, {
|
|
465
462
|
[mode]: true,
|
|
466
463
|
'has-value': hasValue,
|
|
467
464
|
'has-focus': hasFocus,
|
|
@@ -470,7 +467,7 @@ export class Textarea {
|
|
|
470
467
|
[`textarea-shape-${shape}`]: shape !== undefined,
|
|
471
468
|
[`textarea-label-placement-${labelPlacement}`]: true,
|
|
472
469
|
'textarea-disabled': disabled,
|
|
473
|
-
}) }, h("label", { key: '
|
|
470
|
+
}) }, h("label", { key: 'a59548c3d3bf66543fd6e06b5c3b6e649f963164', class: "textarea-wrapper", htmlFor: inputId, onClick: this.onLabelClick }, hasOutlineFill && this.renderOutlineContainer(), h("div", { key: '29055193d664d9fe84ba0340fdcbbc54fec0e403', class: "textarea-start", ref: (el) => (this.startContainerEl = el) }, h("slot", { key: '2cc122d9541ce7ae3c2309c27123b6c6c91cbfc7', name: "start" })), h("div", { key: 'c847a6fa1eaf6ef2b296415cd72bdd3aee9828a2', class: "textarea-control" }, this.renderLabel(), h("div", { key: 'f9205f82d6346daa86dc7e0f6e1eb221c76ed7b0', class: "native-wrapper", ref: (el) => (this.textareaWrapper = el) }, h("textarea", { key: '0bdb517fa5b3a44eeb3bb2ed1f9a8eab21a9a6a1', class: "native-textarea", ref: (el) => (this.nativeInput = el), id: inputId, disabled: disabled, autoCapitalize: this.autocapitalize, autoFocus: this.autofocus, enterKeyHint: this.enterkeyhint, inputMode: this.inputmode, minLength: this.minlength, maxLength: this.maxlength, name: this.name, placeholder: this.placeholder || '', readOnly: this.readonly, required: this.required, spellcheck: this.spellcheck, cols: this.cols, rows: this.rows, wrap: this.wrap, onInput: this.onInput, onChange: this.onChange, onBlur: this.onBlur, onFocus: this.onFocus, onKeyDown: this.onKeyDown, "aria-describedby": this.getHintTextID(), "aria-invalid": this.isInvalid ? 'true' : undefined, ...this.inheritedAttributes }, value))), h("div", { key: '1ce661b800ef12146bdb97fb193e22be227ea052', class: "textarea-end" }, h("slot", { key: 'aca5704db48fe8e0e784cf57f2978ae2d63b3edc', name: "end" })), shouldRenderHighlight && h("div", { key: 'd916816d44cbdb4bc9a05032c5490eaa9bf3ba47', class: "textarea-highlight" })), this.renderBottomContent()));
|
|
474
471
|
}
|
|
475
472
|
static get is() { return "ion-textarea"; }
|
|
476
473
|
static get encapsulation() { return "scoped"; }
|
|
@@ -155,6 +155,12 @@
|
|
|
155
155
|
position: relative;
|
|
156
156
|
flex: 1;
|
|
157
157
|
width: 100%;
|
|
158
|
+
/**
|
|
159
|
+
* The textarea keeps a minimum width so that the value stays visible
|
|
160
|
+
* when a long label or wide slotted content would otherwise shrink
|
|
161
|
+
* it to nothing.
|
|
162
|
+
*/
|
|
163
|
+
min-width: 2ch;
|
|
158
164
|
max-width: 100%;
|
|
159
165
|
max-height: 100%;
|
|
160
166
|
border: 0;
|
|
@@ -292,7 +298,15 @@
|
|
|
292
298
|
|
|
293
299
|
.native-wrapper {
|
|
294
300
|
display: grid;
|
|
295
|
-
|
|
301
|
+
/**
|
|
302
|
+
* The wrapper has to carry the same minimum width as the textarea it holds.
|
|
303
|
+
* It is the flex item that competes with the label and the slots for space,
|
|
304
|
+
* so without it the textarea keeps its width but overflows the field.
|
|
305
|
+
*
|
|
306
|
+
* The minimum cannot be inherited because .textarea-control sets
|
|
307
|
+
* `min-width: 0` so that the slots keep their size.
|
|
308
|
+
*/
|
|
309
|
+
min-width: 2ch;
|
|
296
310
|
max-width: inherit;
|
|
297
311
|
min-height: inherit;
|
|
298
312
|
max-height: inherit;
|
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
|
+
};
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
|
+
*/
|
|
4
|
+
import { raf } from "../helpers";
|
|
5
|
+
/**
|
|
6
|
+
* The content slotted into a form control's start or end slot that a click
|
|
7
|
+
* started on, or `null` when the click did not start on slotted content.
|
|
8
|
+
*
|
|
9
|
+
* The slotted element is compared against the host in case the form control
|
|
10
|
+
* itself is slotted into, for example, an item. Without that check a control
|
|
11
|
+
* carrying slot="start"/"end" would treat every click on itself as a slotted
|
|
12
|
+
* click.
|
|
13
|
+
*/
|
|
14
|
+
export const getSlottedClickContent = (ev, el) => {
|
|
15
|
+
const slotted = ev.target.closest('[slot="start"], [slot="end"]');
|
|
16
|
+
return slotted !== null && slotted !== el && el.contains(slotted) ? slotted : null;
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Whether a click started on content slotted into a form control's start or
|
|
20
|
+
* end slot.
|
|
21
|
+
*/
|
|
22
|
+
const isSlottedClick = (ev, el) => getSlottedClickContent(ev, el) !== null;
|
|
23
|
+
/**
|
|
24
|
+
* A utility for form components that wrap their content in a <label>, such as
|
|
25
|
+
* ion-input, ion-textarea and ion-select.
|
|
26
|
+
*
|
|
27
|
+
* Clicking slotted content also clicks that label, and the browser follows it
|
|
28
|
+
* with a click on the label's control. That second click would be emitted from
|
|
29
|
+
* the host as a duplicate, so the slotted click is remembered and the click
|
|
30
|
+
* that follows it is suppressed.
|
|
31
|
+
*
|
|
32
|
+
* Browsers skip the forwarding when the click lands on interactive content,
|
|
33
|
+
* such as a slotted button, so the slotted click is remembered for a frame
|
|
34
|
+
* rather than until a forwarded click that may never arrive.
|
|
35
|
+
*
|
|
36
|
+
* @internal
|
|
37
|
+
* @param el - The host element.
|
|
38
|
+
* @param getNativeInput - A callback returning the native form control the
|
|
39
|
+
* label points at, for components that have one. Those components emit the
|
|
40
|
+
* click from the host rather than the control, so the control's click is
|
|
41
|
+
* always stopped and re-dispatched from the host. Omit it for components whose
|
|
42
|
+
* label has no `for` attribute, such as ion-select, where the browser forwards
|
|
43
|
+
* to an internal control that already re-bubbles targeting the host.
|
|
44
|
+
*/
|
|
45
|
+
export const createClickController = (el, getNativeInput) => {
|
|
46
|
+
let hasSlottedClick = false;
|
|
47
|
+
const handleClickCapture = (ev) => {
|
|
48
|
+
if (isSlottedClick(ev, el)) {
|
|
49
|
+
hasSlottedClick = true;
|
|
50
|
+
raf(() => (hasSlottedClick = false));
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
if (getNativeInput === undefined) {
|
|
54
|
+
if (hasSlottedClick) {
|
|
55
|
+
ev.stopPropagation();
|
|
56
|
+
hasSlottedClick = false;
|
|
57
|
+
}
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
const nativeInput = getNativeInput();
|
|
61
|
+
if (nativeInput !== undefined && ev.target === nativeInput) {
|
|
62
|
+
ev.stopPropagation();
|
|
63
|
+
if (!hasSlottedClick) {
|
|
64
|
+
el.click();
|
|
65
|
+
}
|
|
66
|
+
hasSlottedClick = false;
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
return { handleClickCapture };
|
|
70
|
+
};
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
3
|
*/
|
|
4
|
+
import { win } from "./browser/index";
|
|
4
5
|
import { printIonError } from "./logging/index";
|
|
5
6
|
import { isRTL } from "./rtl/index";
|
|
6
7
|
export const transitionEndAsync = (el, expectedDuration = 0) => {
|
|
@@ -82,8 +83,8 @@ export const hasLazyBuild = (stencilEl) => {
|
|
|
82
83
|
* helper function should be called in componentWillLoad and assigned to a variable
|
|
83
84
|
* that is later used in the render function.
|
|
84
85
|
*
|
|
85
|
-
* This
|
|
86
|
-
* 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.
|
|
87
88
|
*/
|
|
88
89
|
export const inheritAttributes = (el, attributes = []) => {
|
|
89
90
|
const attributeObject = {};
|
|
@@ -102,8 +103,10 @@ export const inheritAttributes = (el, attributes = []) => {
|
|
|
102
103
|
* List of available ARIA attributes + `role`.
|
|
103
104
|
* Removed deprecated attributes.
|
|
104
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.
|
|
105
108
|
*/
|
|
106
|
-
const ariaAttributes = [
|
|
109
|
+
export const ariaAttributes = [
|
|
107
110
|
'role',
|
|
108
111
|
'aria-activedescendant',
|
|
109
112
|
'aria-atomic',
|
|
@@ -176,6 +179,44 @@ export const addEventListener = (el, eventName, callback, opts) => {
|
|
|
176
179
|
export const removeEventListener = (el, eventName, callback, opts) => {
|
|
177
180
|
return el.removeEventListener(eventName, callback, opts);
|
|
178
181
|
};
|
|
182
|
+
/**
|
|
183
|
+
* Calls back when a CSS custom property that resolves to a length changes,
|
|
184
|
+
* which no event covers. The probe inherits the property from `hostEl` and
|
|
185
|
+
* uses it as its height, turning a property change into a size change that
|
|
186
|
+
* `ResizeObserver` can detect.
|
|
187
|
+
*
|
|
188
|
+
* The callback receives the probe's height. For length values, this matches
|
|
189
|
+
* the resolved property value. For other values, such as `fit-content`, the
|
|
190
|
+
* probe remains at zero, so the value only signals that the property changed.
|
|
191
|
+
* Percentages resolve against the probe's containing block, not the element
|
|
192
|
+
* where the property is ultimately used.
|
|
193
|
+
*
|
|
194
|
+
* Pass `initialValue` when the caller has already read the property so that
|
|
195
|
+
* changes occurring before the observer's first delivery are not missed.
|
|
196
|
+
* Without it, the first delivery establishes the baseline.
|
|
197
|
+
*/
|
|
198
|
+
export const onCustomPropertyChange = (hostEl, property, callback, initialValue) => {
|
|
199
|
+
const doc = win?.document;
|
|
200
|
+
if (!doc || !hostEl || typeof ResizeObserver === 'undefined') {
|
|
201
|
+
return () => undefined;
|
|
202
|
+
}
|
|
203
|
+
const probe = doc.createElement('div');
|
|
204
|
+
probe.style.cssText = `position:fixed;visibility:hidden;pointer-events:none;top:0;left:0;width:0;height:var(${property},0px);`;
|
|
205
|
+
hostEl.appendChild(probe);
|
|
206
|
+
let lastHeight = initialValue;
|
|
207
|
+
const observer = new ResizeObserver((entries) => {
|
|
208
|
+
const { height } = entries[0].contentRect;
|
|
209
|
+
if (lastHeight !== undefined && height !== lastHeight) {
|
|
210
|
+
callback(height);
|
|
211
|
+
}
|
|
212
|
+
lastHeight = height;
|
|
213
|
+
});
|
|
214
|
+
observer.observe(probe);
|
|
215
|
+
return () => {
|
|
216
|
+
observer.disconnect();
|
|
217
|
+
probe.remove();
|
|
218
|
+
};
|
|
219
|
+
};
|
|
179
220
|
/**
|
|
180
221
|
* Gets the root context of a shadow dom element
|
|
181
222
|
* On newer browsers this will be the shadowRoot,
|
|
@@ -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)) {
|
|
@@ -764,6 +764,40 @@ export const safeCall = (handler, arg) => {
|
|
|
764
764
|
}
|
|
765
765
|
return undefined;
|
|
766
766
|
};
|
|
767
|
+
/**
|
|
768
|
+
* `--width` and `--height` values that leave an overlay spanning the viewport
|
|
769
|
+
* on that axis, so it reaches both edges. An empty value means the property
|
|
770
|
+
* was never overridden.
|
|
771
|
+
*/
|
|
772
|
+
const FULLSCREEN_SIZES = ['', '100%', '100vw', '100vh', '100dvw', '100dvh', '100svw', '100svh'];
|
|
773
|
+
/**
|
|
774
|
+
* `--width` and `--height` values that size an overlay to its content, leaving
|
|
775
|
+
* the rendered size dependent on the content and on `--max-width` or
|
|
776
|
+
* `--max-height`.
|
|
777
|
+
*/
|
|
778
|
+
const CONTENT_SIZES = ['auto', 'fit-content', 'min-content', 'max-content'];
|
|
779
|
+
/**
|
|
780
|
+
* How an overlay's `--width` or `--height` determines its used size:
|
|
781
|
+
*
|
|
782
|
+
* `fullscreen` spans the viewport on that axis. `content` depends on the
|
|
783
|
+
* overlay's content, so its used size is not known until layout. `definite`
|
|
784
|
+
* resolves independently of the overlay's content size.
|
|
785
|
+
*
|
|
786
|
+
* Values are lowercased because CSS keywords are case-insensitive, while a
|
|
787
|
+
* custom property preserves the case in which it was authored. Content values
|
|
788
|
+
* are matched as a suffix so vendor-prefixed values such as `-moz-fit-content`
|
|
789
|
+
* are recognized.
|
|
790
|
+
*/
|
|
791
|
+
export const getOverlaySizeType = (size) => {
|
|
792
|
+
const value = size.trim().toLowerCase();
|
|
793
|
+
if (FULLSCREEN_SIZES.includes(value)) {
|
|
794
|
+
return 'fullscreen';
|
|
795
|
+
}
|
|
796
|
+
if (CONTENT_SIZES.some((keyword) => value.endsWith(keyword))) {
|
|
797
|
+
return 'content';
|
|
798
|
+
}
|
|
799
|
+
return 'definite';
|
|
800
|
+
};
|
|
767
801
|
export const BACKDROP = 'backdrop';
|
|
768
802
|
export const GESTURE = 'gesture';
|
|
769
803
|
export const OVERLAY_GESTURE_PRIORITY = 39;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
3
|
*/
|
|
4
|
-
import { printIonError } from "../logging/index";
|
|
4
|
+
import { printIonError, printIonWarning } from "../logging/index";
|
|
5
5
|
/**
|
|
6
6
|
* Sanitize an untrusted HTML string.
|
|
7
7
|
*
|
|
@@ -21,8 +21,8 @@ import { printIonError } from "../logging/index";
|
|
|
21
21
|
* @param untrustedString - The HTML string to sanitize. Pass an
|
|
22
22
|
* `IonicSafeString` to bypass sanitization, or `undefined` to short-circuit.
|
|
23
23
|
* @returns The sanitized HTML string, or `undefined` if the input was
|
|
24
|
-
* `undefined`. Returns `''` if sanitization fails or the input
|
|
25
|
-
* an inline `onload
|
|
24
|
+
* `undefined`. Returns `''` if sanitization fails or the input appears to
|
|
25
|
+
* carry an inline `onload` handler.
|
|
26
26
|
*/
|
|
27
27
|
export const sanitizeDOMString = (untrustedString) => {
|
|
28
28
|
try {
|
|
@@ -33,12 +33,14 @@ export const sanitizeDOMString = (untrustedString) => {
|
|
|
33
33
|
return untrustedString;
|
|
34
34
|
}
|
|
35
35
|
/**
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
36
|
+
* In Blink a non-outermost `<svg>` (e.g. `<svg><svg onload=...>`) fires
|
|
37
|
+
* its load handler while `innerHTML` below parses the string, so it runs
|
|
38
|
+
* before the attribute-stripping pass can remove it. The match has to
|
|
39
|
+
* stay this loose because attribute names are case-insensitive and
|
|
40
|
+
* whitespace is allowed before the `=`.
|
|
40
41
|
*/
|
|
41
|
-
if (
|
|
42
|
+
if (/onload\s*=/i.test(untrustedString)) {
|
|
43
|
+
printIonWarning('sanitizeDOMString - Content was discarded because it appears to contain an onload handler:', untrustedString.substring(0, 100));
|
|
42
44
|
return '';
|
|
43
45
|
}
|
|
44
46
|
/**
|
package/dist/docs.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
|
-
"timestamp": "2026-
|
|
2
|
+
"timestamp": "2026-10-03T19:32:19",
|
|
3
3
|
"compiler": {
|
|
4
4
|
"name": "@stencil/core",
|
|
5
|
-
"version": "4.
|
|
5
|
+
"version": "4.45.1",
|
|
6
6
|
"typescriptVersion": "5.8.3"
|
|
7
7
|
},
|
|
8
8
|
"components": [
|
|
@@ -31461,7 +31461,13 @@
|
|
|
31461
31461
|
"docsTags": []
|
|
31462
31462
|
}
|
|
31463
31463
|
],
|
|
31464
|
-
"listeners": [
|
|
31464
|
+
"listeners": [
|
|
31465
|
+
{
|
|
31466
|
+
"event": "click",
|
|
31467
|
+
"capture": true,
|
|
31468
|
+
"passive": false
|
|
31469
|
+
}
|
|
31470
|
+
],
|
|
31465
31471
|
"styles": [
|
|
31466
31472
|
{
|
|
31467
31473
|
"name": "--background",
|
|
@@ -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 './
|
|
4
|
+
import { c as printIonError } from './index-D9OR05yj.js';
|
|
5
|
+
import { w as win } from './helpers-B54ynME_.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-B-G43ddm.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-B54ynME_.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-D9OR05yj.js';
|
|
5
|
+
import { h as hapticSelectionEnd, a as hapticSelectionChanged, b as hapticSelectionStart } from './haptic-Dxm7ZmT5.js';
|
|
6
6
|
import { createGesture } from './index-BmLuEdV7.js';
|
|
7
7
|
|
|
8
8
|
const createButtonActiveGesture = (el, isButton) => {
|