voyager-ionic-core 8.7.9 → 8.7.13
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/action-sheet.js +186 -5
- package/components/checkbox.js +63 -9
- package/components/content.js +13 -3
- package/components/ion-accordion.js +1 -1
- package/components/ion-datetime.js +35 -2
- package/components/ion-fab-button.js +1 -1
- package/components/ion-input.js +2 -1
- package/components/ion-select.js +15 -9
- package/components/ion-textarea.js +2 -1
- package/components/ion-toggle.js +62 -12
- package/components/item.js +1 -1
- package/components/modal.js +97 -5
- package/components/notch-controller.js +153 -0
- package/components/overlays.js +11 -5
- package/components/popover.js +36 -2
- package/components/radio-group.js +60 -7
- package/components/validity.js +1 -150
- 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/index.cjs.js +1 -1
- package/dist/cjs/ion-action-sheet.cjs.entry.js +184 -5
- package/dist/cjs/ion-alert.cjs.entry.js +1 -1
- package/dist/cjs/ion-app_8.cjs.entry.js +12 -3
- package/dist/cjs/ion-checkbox.cjs.entry.js +60 -8
- package/dist/cjs/ion-datetime_3.cjs.entry.js +36 -3
- package/dist/cjs/ion-input.cjs.entry.js +3 -2
- package/dist/cjs/ion-loading.cjs.entry.js +1 -1
- package/dist/cjs/ion-menu_3.cjs.entry.js +1 -1
- package/dist/cjs/ion-modal.cjs.entry.js +97 -6
- package/dist/cjs/ion-popover.cjs.entry.js +37 -3
- package/dist/cjs/ion-radio_2.cjs.entry.js +57 -6
- package/dist/cjs/ion-select-modal.cjs.entry.js +1 -1
- package/dist/cjs/ion-select_3.cjs.entry.js +16 -10
- package/dist/cjs/ion-textarea.cjs.entry.js +3 -2
- package/dist/cjs/ion-toast.cjs.entry.js +1 -1
- package/dist/cjs/ion-toggle.cjs.entry.js +58 -10
- package/dist/cjs/ionic.cjs.js +1 -1
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/{validity-C8QoAYT2.js → notch-controller-Bzqhjm4f.js} +0 -14
- package/dist/cjs/{overlays-DxIZwUXI.js → overlays--dagG4QM.js} +11 -5
- package/dist/cjs/validity-BpS37YFM.js +19 -0
- package/dist/collection/components/accordion/accordion.js +3 -3
- package/dist/collection/components/action-sheet/action-sheet.js +199 -4
- package/dist/collection/components/checkbox/checkbox.js +67 -9
- package/dist/collection/components/content/content.js +32 -3
- package/dist/collection/components/datetime/datetime.js +35 -2
- package/dist/collection/components/fab-button/fab-button.js +3 -3
- package/dist/collection/components/item/item.js +3 -3
- package/dist/collection/components/modal/modal.js +97 -5
- package/dist/collection/components/popover/popover.js +36 -2
- package/dist/collection/components/radio-group/radio-group.js +64 -7
- package/dist/collection/components/select/select.js +13 -8
- package/dist/collection/components/toggle/toggle.js +62 -12
- package/dist/collection/utils/overlays.js +11 -5
- package/dist/collection/utils/test/playwright/page/utils/set-content.js +7 -0
- package/dist/docs.json +26 -20
- package/dist/esm/index.js +1 -1
- package/dist/esm/ion-action-sheet.entry.js +184 -5
- package/dist/esm/ion-alert.entry.js +1 -1
- package/dist/esm/ion-app_8.entry.js +12 -3
- package/dist/esm/ion-checkbox.entry.js +60 -8
- package/dist/esm/ion-datetime_3.entry.js +36 -3
- package/dist/esm/ion-input.entry.js +2 -1
- package/dist/esm/ion-loading.entry.js +1 -1
- package/dist/esm/ion-menu_3.entry.js +1 -1
- package/dist/esm/ion-modal.entry.js +97 -6
- package/dist/esm/ion-popover.entry.js +37 -3
- package/dist/esm/ion-radio_2.entry.js +57 -6
- package/dist/esm/ion-select-modal.entry.js +1 -1
- package/dist/esm/ion-select_3.entry.js +15 -9
- package/dist/esm/ion-textarea.entry.js +2 -1
- package/dist/esm/ion-toast.entry.js +1 -1
- package/dist/esm/ion-toggle.entry.js +58 -10
- package/dist/esm/ionic.js +1 -1
- package/dist/esm/loader.js +1 -1
- package/dist/esm/{validity-B8oWougr.js → notch-controller-BwelN_JM.js} +1 -14
- package/dist/esm/{overlays-BymNv-BL.js → overlays-DCabi1dI.js} +11 -5
- package/dist/esm/validity-DJztqcrH.js +17 -0
- package/dist/ionic/index.esm.js +1 -1
- package/dist/ionic/ionic.esm.js +1 -1
- package/dist/ionic/p-071e8c1b.entry.js +4 -0
- package/dist/ionic/{p-7da39a4d.entry.js → p-07753df3.entry.js} +1 -1
- package/dist/ionic/{p-0b80d700.entry.js → p-0abeb0fc.entry.js} +1 -1
- package/dist/ionic/p-0bf76d0f.entry.js +4 -0
- package/dist/ionic/p-40c261a3.entry.js +4 -0
- package/dist/ionic/p-4b658a7c.entry.js +4 -0
- package/dist/ionic/p-4e41ea20.entry.js +4 -0
- package/dist/ionic/{p-98fc09eb.entry.js → p-576e0965.entry.js} +1 -1
- package/dist/ionic/p-60e0728c.entry.js +4 -0
- package/dist/ionic/p-75ae4733.entry.js +4 -0
- package/dist/ionic/p-C6F4hat2.js +4 -0
- package/dist/ionic/{p-DieJyvMP.js → p-DCv9sLH2.js} +1 -1
- package/dist/ionic/p-DJztqcrH.js +4 -0
- package/dist/ionic/{p-83be404e.entry.js → p-a8ed848b.entry.js} +1 -1
- package/dist/ionic/p-c19f63d0.entry.js +4 -0
- package/dist/ionic/p-c85a2127.entry.js +4 -0
- package/dist/ionic/p-d1f54e28.entry.js +4 -0
- package/dist/ionic/p-d3014190.entry.js +4 -0
- package/dist/ionic/{p-15193d01.entry.js → p-ec654c42.entry.js} +1 -1
- package/dist/ionic/svg/document-sharp.svg +1 -0
- package/dist/ionic/svg/document-text-outline.svg +1 -0
- package/dist/ionic/svg/document-text-sharp.svg +1 -0
- package/dist/ionic/svg/document-text.svg +1 -0
- package/dist/ionic/svg/document.svg +1 -0
- package/dist/ionic/svg/documents-outline.svg +1 -0
- package/dist/ionic/svg/documents-sharp.svg +1 -0
- package/dist/ionic/svg/documents.svg +1 -0
- package/dist/ionic/svg/download-outline.svg +1 -0
- package/dist/ionic/svg/download-sharp.svg +1 -0
- package/dist/ionic/svg/download.svg +1 -0
- package/dist/ionic/svg/duplicate-outline.svg +1 -0
- package/dist/ionic/svg/duplicate-sharp.svg +1 -0
- package/dist/ionic/svg/duplicate.svg +1 -0
- package/dist/ionic/svg/ear-outline.svg +1 -0
- package/dist/ionic/svg/ear-sharp.svg +1 -0
- package/dist/ionic/svg/ear.svg +1 -0
- package/dist/ionic/svg/earth-outline.svg +1 -0
- package/dist/ionic/svg/earth-sharp.svg +1 -0
- package/dist/ionic/svg/earth.svg +1 -0
- package/dist/ionic/svg/easel-outline.svg +1 -0
- package/dist/ionic/svg/easel-sharp.svg +1 -0
- package/dist/ionic/svg/easel.svg +1 -0
- package/dist/ionic/svg/egg-outline.svg +1 -0
- package/dist/ionic/svg/egg-sharp.svg +1 -0
- package/dist/ionic/svg/egg.svg +1 -0
- package/dist/ionic/svg/ellipse-outline.svg +1 -0
- package/dist/ionic/svg/ellipse-sharp.svg +1 -0
- package/dist/ionic/svg/ellipse.svg +1 -0
- package/dist/ionic/svg/ellipsis-horizontal-circle-outline.svg +1 -0
- package/dist/ionic/svg/ellipsis-horizontal-circle-sharp.svg +1 -0
- package/dist/ionic/svg/ellipsis-horizontal-circle.svg +1 -0
- package/dist/ionic/svg/ellipsis-horizontal-outline.svg +1 -0
- package/dist/ionic/svg/ellipsis-horizontal-sharp.svg +1 -0
- package/dist/ionic/svg/ellipsis-horizontal.svg +1 -0
- package/dist/ionic/svg/ellipsis-vertical-circle-outline.svg +1 -0
- package/dist/ionic/svg/ellipsis-vertical-circle-sharp.svg +1 -0
- package/dist/ionic/svg/ellipsis-vertical-circle.svg +1 -0
- package/dist/ionic/svg/ellipsis-vertical-outline.svg +1 -0
- package/dist/ionic/svg/ellipsis-vertical-sharp.svg +1 -0
- package/dist/ionic/svg/ellipsis-vertical.svg +1 -0
- package/dist/ionic/svg/enter-outline.svg +1 -0
- package/dist/ionic/svg/enter-sharp.svg +1 -0
- package/dist/ionic/svg/enter.svg +1 -0
- package/dist/ionic/svg/exit-outline.svg +1 -0
- package/dist/ionic/svg/exit-sharp.svg +1 -0
- package/dist/ionic/svg/exit.svg +1 -0
- package/dist/ionic/svg/expand-outline.svg +1 -0
- package/dist/ionic/svg/expand-sharp.svg +1 -0
- package/dist/ionic/svg/expand.svg +1 -0
- package/dist/ionic/svg/extension-puzzle-outline.svg +1 -0
- package/dist/ionic/svg/extension-puzzle-sharp.svg +1 -0
- package/dist/ionic/svg/extension-puzzle.svg +1 -0
- package/dist/ionic/svg/eye-off-outline.svg +1 -0
- package/dist/ionic/svg/eye-off-sharp.svg +1 -0
- package/dist/ionic/svg/eye-off.svg +1 -0
- package/dist/ionic/svg/eye-outline.svg +1 -0
- package/dist/ionic/svg/eye-sharp.svg +1 -0
- package/dist/ionic/svg/eye.svg +1 -0
- package/dist/ionic/svg/eyedrop-outline.svg +1 -0
- package/dist/ionic/svg/eyedrop-sharp.svg +1 -0
- package/dist/ionic/svg/eyedrop.svg +1 -0
- package/dist/ionic/svg/fast-food-outline.svg +1 -0
- package/dist/ionic/svg/fast-food-sharp.svg +1 -0
- package/dist/ionic/svg/fast-food.svg +1 -0
- package/dist/ionic/svg/female-outline.svg +1 -0
- package/dist/ionic/svg/female-sharp.svg +1 -0
- package/dist/ionic/svg/female.svg +1 -0
- package/dist/ionic/svg/file-tray-full-outline.svg +1 -0
- package/dist/ionic/svg/file-tray-full-sharp.svg +1 -0
- package/dist/ionic/svg/file-tray-full.svg +1 -0
- package/dist/ionic/svg/file-tray-outline.svg +1 -0
- package/dist/ionic/svg/file-tray-sharp.svg +1 -0
- package/dist/ionic/svg/file-tray-stacked-outline.svg +1 -0
- package/dist/ionic/svg/file-tray-stacked-sharp.svg +1 -0
- package/dist/ionic/svg/file-tray-stacked.svg +1 -0
- package/dist/ionic/svg/file-tray.svg +1 -0
- package/dist/ionic/svg/film-outline.svg +1 -0
- package/dist/ionic/svg/film-sharp.svg +1 -0
- package/dist/ionic/svg/film.svg +1 -0
- package/dist/ionic/svg/filter-circle-outline.svg +1 -0
- package/dist/ionic/svg/filter-circle-sharp.svg +1 -0
- package/dist/ionic/svg/filter-circle.svg +1 -0
- package/dist/ionic/svg/filter-outline.svg +1 -0
- package/dist/ionic/svg/filter-sharp.svg +1 -0
- package/dist/ionic/svg/filter.svg +1 -0
- package/dist/ionic/svg/finger-print-outline.svg +1 -0
- package/dist/ionic/svg/finger-print-sharp.svg +1 -0
- package/dist/ionic/svg/finger-print.svg +1 -0
- package/dist/ionic/svg/fish-outline.svg +1 -0
- package/dist/ionic/svg/fish-sharp.svg +1 -0
- package/dist/ionic/svg/fish.svg +1 -0
- package/dist/ionic/svg/fitness-outline.svg +1 -0
- package/dist/ionic/svg/fitness-sharp.svg +1 -0
- package/dist/ionic/svg/fitness.svg +1 -0
- package/dist/ionic/svg/flag-outline.svg +1 -0
- package/dist/ionic/svg/flag-sharp.svg +1 -0
- package/dist/ionic/svg/flag.svg +1 -0
- package/dist/ionic/svg/flame-outline.svg +1 -0
- package/dist/ionic/svg/flame-sharp.svg +1 -0
- package/dist/ionic/svg/flame.svg +1 -0
- package/dist/ionic/svg/flash-off-outline.svg +1 -0
- package/dist/ionic/svg/flash-off-sharp.svg +1 -0
- package/dist/ionic/svg/flash-off.svg +1 -0
- package/dist/ionic/svg/flash-outline.svg +1 -0
- package/dist/ionic/svg/flash-sharp.svg +1 -0
- package/dist/ionic/svg/flash.svg +1 -0
- package/dist/ionic/svg/flashlight-outline.svg +1 -0
- package/dist/ionic/svg/flashlight-sharp.svg +1 -0
- package/dist/ionic/svg/flashlight.svg +1 -0
- package/dist/ionic/svg/flask-outline.svg +1 -0
- package/dist/ionic/svg/flask-sharp.svg +1 -0
- package/dist/ionic/svg/flask.svg +1 -0
- package/dist/ionic/svg/flower-outline.svg +1 -0
- package/dist/ionic/svg/flower-sharp.svg +1 -0
- package/dist/ionic/svg/flower.svg +1 -0
- package/dist/ionic/svg/folder-open-outline.svg +1 -0
- package/dist/ionic/svg/folder-open-sharp.svg +1 -0
- package/dist/ionic/svg/folder-open.svg +1 -0
- package/dist/ionic/svg/folder-outline.svg +1 -0
- package/dist/ionic/svg/folder-sharp.svg +1 -0
- package/dist/ionic/svg/folder.svg +1 -0
- package/dist/ionic/svg/football-outline.svg +1 -0
- package/dist/ionic/svg/football-sharp.svg +1 -0
- package/dist/ionic/svg/football.svg +1 -0
- package/dist/ionic/svg/footsteps-outline.svg +1 -0
- package/dist/ionic/svg/footsteps-sharp.svg +1 -0
- package/dist/ionic/svg/footsteps.svg +1 -0
- package/dist/ionic/svg/funnel-outline.svg +1 -0
- package/dist/ionic/svg/funnel-sharp.svg +1 -0
- package/dist/ionic/svg/funnel.svg +1 -0
- package/dist/ionic/svg/game-controller-outline.svg +1 -0
- package/dist/ionic/svg/game-controller-sharp.svg +1 -0
- package/dist/ionic/svg/game-controller.svg +1 -0
- package/dist/ionic/svg/gift-outline.svg +1 -0
- package/dist/ionic/svg/gift-sharp.svg +1 -0
- package/dist/ionic/svg/gift.svg +1 -0
- package/dist/ionic/svg/git-branch-outline.svg +1 -0
- package/dist/ionic/svg/git-branch-sharp.svg +1 -0
- package/dist/ionic/svg/git-branch.svg +1 -0
- package/dist/ionic/svg/git-commit-outline.svg +1 -0
- package/dist/ionic/svg/git-commit-sharp.svg +1 -0
- package/dist/ionic/svg/git-commit.svg +1 -0
- package/dist/ionic/svg/git-compare-outline.svg +1 -0
- package/dist/ionic/svg/git-compare-sharp.svg +1 -0
- package/dist/ionic/svg/git-compare.svg +1 -0
- package/dist/ionic/svg/git-merge-outline.svg +1 -0
- package/dist/ionic/svg/git-merge-sharp.svg +1 -0
- package/dist/ionic/svg/git-merge.svg +1 -0
- package/dist/ionic/svg/git-network-outline.svg +1 -0
- package/dist/ionic/svg/git-network-sharp.svg +1 -0
- package/dist/ionic/svg/git-network.svg +1 -0
- package/dist/ionic/svg/git-pull-request-outline.svg +1 -0
- package/dist/ionic/svg/git-pull-request-sharp.svg +1 -0
- package/dist/ionic/svg/git-pull-request.svg +1 -0
- package/dist/ionic/svg/glasses-outline.svg +1 -0
- package/dist/ionic/svg/glasses-sharp.svg +1 -0
- package/dist/ionic/svg/glasses.svg +1 -0
- package/dist/ionic/svg/globe-outline.svg +1 -0
- package/dist/ionic/svg/globe-sharp.svg +1 -0
- package/dist/ionic/svg/globe.svg +1 -0
- package/dist/ionic/svg/golf-outline.svg +1 -0
- package/dist/ionic/svg/golf-sharp.svg +1 -0
- package/dist/ionic/svg/golf.svg +1 -0
- package/dist/ionic/svg/grid-outline.svg +1 -0
- package/dist/ionic/svg/grid-sharp.svg +1 -0
- package/dist/ionic/svg/grid.svg +1 -0
- package/dist/ionic/svg/hammer-outline.svg +1 -0
- package/dist/ionic/svg/hammer-sharp.svg +1 -0
- package/dist/ionic/svg/hammer.svg +1 -0
- package/dist/ionic/svg/hand-left-outline.svg +1 -0
- package/dist/ionic/svg/hand-left-sharp.svg +1 -0
- package/dist/ionic/svg/hand-left.svg +1 -0
- package/dist/ionic/svg/hand-right-outline.svg +1 -0
- package/dist/ionic/svg/hand-right-sharp.svg +1 -0
- package/dist/ionic/svg/hand-right.svg +1 -0
- package/dist/ionic/svg/happy-outline.svg +1 -0
- package/dist/ionic/svg/happy-sharp.svg +1 -0
- package/dist/ionic/svg/happy.svg +1 -0
- package/dist/ionic/svg/hardware-chip-outline.svg +1 -0
- package/dist/ionic/svg/hardware-chip-sharp.svg +1 -0
- package/dist/ionic/svg/hardware-chip.svg +1 -0
- package/dist/ionic/svg/headset-outline.svg +1 -0
- package/dist/ionic/svg/headset-sharp.svg +1 -0
- package/dist/ionic/svg/headset.svg +1 -0
- package/dist/ionic/svg/heart-circle-outline.svg +1 -0
- package/dist/ionic/svg/heart-circle-sharp.svg +1 -0
- package/dist/ionic/svg/heart-circle.svg +1 -0
- package/dist/ionic/svg/heart-dislike-circle-outline.svg +1 -0
- package/dist/ionic/svg/heart-dislike-circle-sharp.svg +1 -0
- package/dist/ionic/svg/heart-dislike-circle.svg +1 -0
- package/dist/ionic/svg/heart-dislike-outline.svg +1 -0
- package/dist/ionic/svg/heart-dislike-sharp.svg +1 -0
- package/dist/ionic/svg/heart-dislike.svg +1 -0
- package/dist/ionic/svg/heart-half-outline.svg +1 -0
- package/dist/ionic/svg/heart-half-sharp.svg +1 -0
- package/dist/ionic/svg/heart-half.svg +1 -0
- package/dist/ionic/svg/heart-outline.svg +1 -0
- package/dist/ionic/svg/heart-sharp.svg +1 -0
- package/dist/ionic/svg/heart.svg +1 -0
- package/dist/ionic/svg/help-buoy-outline.svg +1 -0
- package/dist/ionic/svg/help-buoy-sharp.svg +1 -0
- package/dist/ionic/svg/help-buoy.svg +1 -0
- package/dist/ionic/svg/help-circle-outline.svg +1 -0
- package/dist/ionic/svg/help-circle-sharp.svg +1 -0
- package/dist/ionic/svg/help-circle.svg +1 -0
- package/dist/ionic/svg/help-outline.svg +1 -0
- package/dist/ionic/svg/help-sharp.svg +1 -0
- package/dist/ionic/svg/help.svg +1 -0
- package/dist/ionic/svg/home-outline.svg +1 -0
- package/dist/ionic/svg/home-sharp.svg +1 -0
- package/dist/ionic/svg/home.svg +1 -0
- package/dist/ionic/svg/hourglass-outline.svg +1 -0
- package/dist/ionic/svg/hourglass-sharp.svg +1 -0
- package/dist/ionic/svg/hourglass.svg +1 -0
- package/dist/ionic/svg/ice-cream-outline.svg +1 -0
- package/dist/ionic/svg/ice-cream-sharp.svg +1 -0
- package/dist/ionic/svg/ice-cream.svg +1 -0
- package/dist/ionic/svg/id-card-outline.svg +1 -0
- package/dist/ionic/svg/id-card-sharp.svg +1 -0
- package/dist/ionic/svg/id-card.svg +1 -0
- package/dist/ionic/svg/image-outline.svg +1 -0
- package/dist/ionic/svg/image-sharp.svg +1 -0
- package/dist/ionic/svg/image.svg +1 -0
- package/dist/ionic/svg/images-outline.svg +1 -0
- package/dist/ionic/svg/images-sharp.svg +1 -0
- package/dist/ionic/svg/images.svg +1 -0
- package/dist/ionic/svg/infinite-outline.svg +1 -0
- package/dist/ionic/svg/infinite-sharp.svg +1 -0
- package/dist/ionic/svg/infinite.svg +1 -0
- package/dist/ionic/svg/information-circle-outline.svg +1 -0
- package/dist/ionic/svg/information-circle-sharp.svg +1 -0
- package/dist/ionic/svg/information-circle.svg +1 -0
- package/dist/ionic/svg/information-outline.svg +1 -0
- package/dist/ionic/svg/information-sharp.svg +1 -0
- package/dist/ionic/svg/information.svg +1 -0
- package/dist/ionic/svg/invert-mode-outline.svg +1 -0
- package/dist/ionic/svg/invert-mode-sharp.svg +1 -0
- package/dist/ionic/svg/invert-mode.svg +1 -0
- package/dist/ionic/svg/journal-outline.svg +1 -0
- package/dist/ionic/svg/journal-sharp.svg +1 -0
- package/dist/ionic/svg/journal.svg +1 -0
- package/dist/ionic/svg/key-outline.svg +1 -0
- package/dist/ionic/svg/key-sharp.svg +1 -0
- package/dist/ionic/svg/key.svg +1 -0
- package/dist/ionic/svg/keypad-outline.svg +1 -0
- package/dist/ionic/svg/keypad-sharp.svg +1 -0
- package/dist/ionic/svg/keypad.svg +1 -0
- package/dist/ionic/svg/language-outline.svg +1 -0
- package/dist/ionic/svg/language-sharp.svg +1 -0
- package/dist/ionic/svg/language.svg +1 -0
- package/dist/ionic/svg/laptop-outline.svg +1 -0
- package/dist/ionic/svg/laptop-sharp.svg +1 -0
- package/dist/ionic/svg/laptop.svg +1 -0
- package/dist/ionic/svg/layers-outline.svg +1 -0
- package/dist/ionic/svg/layers-sharp.svg +1 -0
- package/dist/ionic/svg/layers.svg +1 -0
- package/dist/ionic/svg/leaf-outline.svg +1 -0
- package/dist/ionic/svg/leaf-sharp.svg +1 -0
- package/dist/ionic/svg/leaf.svg +1 -0
- package/dist/ionic/svg/library-outline.svg +1 -0
- package/dist/ionic/svg/library-sharp.svg +1 -0
- package/dist/ionic/svg/library.svg +1 -0
- package/dist/ionic/svg/link-outline.svg +1 -0
- package/dist/ionic/svg/link-sharp.svg +1 -0
- package/dist/ionic/svg/link.svg +1 -0
- package/dist/ionic/svg/list-circle-outline.svg +1 -0
- package/dist/ionic/svg/list-circle-sharp.svg +1 -0
- package/dist/ionic/svg/list-circle.svg +1 -0
- package/dist/ionic/svg/list-outline.svg +1 -0
- package/dist/ionic/svg/list-sharp.svg +1 -0
- package/dist/ionic/svg/list.svg +1 -0
- package/dist/ionic/svg/locate-outline.svg +1 -0
- package/dist/ionic/svg/locate-sharp.svg +1 -0
- package/dist/ionic/svg/locate.svg +1 -0
- package/dist/ionic/svg/location-outline.svg +1 -0
- package/dist/ionic/svg/location-sharp.svg +1 -0
- package/dist/ionic/svg/location.svg +1 -0
- package/dist/ionic/svg/lock-closed-outline.svg +1 -0
- package/dist/ionic/svg/lock-closed-sharp.svg +1 -0
- package/dist/ionic/svg/lock-closed.svg +1 -0
- package/dist/ionic/svg/lock-open-outline.svg +1 -0
- package/dist/ionic/svg/lock-open-sharp.svg +1 -0
- package/dist/ionic/svg/lock-open.svg +1 -0
- package/dist/ionic/svg/log-in-outline.svg +1 -0
- package/dist/ionic/svg/log-in-sharp.svg +1 -0
- package/dist/ionic/svg/log-in.svg +1 -0
- package/dist/ionic/svg/log-out-outline.svg +1 -0
- package/dist/ionic/svg/log-out-sharp.svg +1 -0
- package/dist/ionic/svg/log-out.svg +1 -0
- package/dist/ionic/svg/logo-alipay.svg +1 -0
- package/dist/ionic/svg/logo-amazon.svg +1 -0
- package/dist/ionic/svg/logo-amplify.svg +1 -0
- package/dist/ionic/svg/logo-android.svg +1 -0
- package/dist/ionic/svg/logo-angular.svg +1 -0
- package/dist/ionic/svg/logo-appflow.svg +1 -0
- package/dist/ionic/svg/logo-apple-appstore.svg +1 -0
- package/dist/ionic/svg/logo-apple-ar.svg +1 -0
- package/dist/ionic/svg/logo-apple.svg +1 -0
- package/dist/ionic/svg/logo-behance.svg +1 -0
- package/dist/ionic/svg/logo-bitbucket.svg +1 -0
- package/dist/ionic/svg/logo-bitcoin.svg +1 -0
- package/dist/ionic/svg/logo-buffer.svg +1 -0
- package/dist/ionic/svg/logo-capacitor.svg +1 -0
- package/dist/ionic/svg/logo-chrome.svg +1 -0
- package/dist/ionic/svg/logo-closed-captioning.svg +1 -0
- package/dist/ionic/svg/logo-codepen.svg +1 -0
- package/dist/ionic/svg/logo-css3.svg +1 -0
- package/dist/ionic/svg/logo-designernews.svg +1 -0
- package/dist/ionic/svg/logo-deviantart.svg +1 -0
- package/dist/ionic/svg/logo-discord.svg +1 -0
- package/dist/ionic/svg/logo-docker.svg +1 -0
- package/dist/ionic/svg/logo-dribbble.svg +1 -0
- package/dist/ionic/svg/logo-dropbox.svg +1 -0
- package/dist/ionic/svg/logo-edge.svg +1 -0
- package/dist/ionic/svg/logo-electron.svg +1 -0
- package/dist/ionic/svg/logo-euro.svg +1 -0
- package/dist/ionic/svg/logo-facebook.svg +1 -0
- package/dist/ionic/svg/logo-figma.svg +1 -0
- package/dist/ionic/svg/logo-firebase.svg +1 -0
- package/dist/ionic/svg/logo-firefox.svg +1 -0
- package/dist/ionic/svg/logo-flickr.svg +1 -0
- package/dist/ionic/svg/logo-foursquare.svg +1 -0
- package/dist/ionic/svg/logo-github.svg +1 -0
- package/dist/ionic/svg/logo-gitlab.svg +1 -0
- package/dist/ionic/svg/logo-google-playstore.svg +1 -0
- package/dist/ionic/svg/logo-google.svg +1 -0
- package/dist/ionic/svg/logo-hackernews.svg +1 -0
- package/dist/ionic/svg/logo-html5.svg +1 -0
- package/dist/ionic/svg/logo-instagram.svg +1 -0
- package/dist/ionic/svg/logo-ionic.svg +1 -0
- package/dist/ionic/svg/logo-ionitron.svg +1 -0
- package/dist/ionic/svg/logo-javascript.svg +1 -0
- package/dist/ionic/svg/logo-laravel.svg +1 -0
- package/dist/ionic/svg/logo-linkedin.svg +1 -0
- package/dist/ionic/svg/logo-markdown.svg +1 -0
- package/dist/ionic/svg/logo-mastodon.svg +1 -0
- package/dist/ionic/svg/logo-medium.svg +1 -0
- package/dist/ionic/svg/logo-microsoft.svg +1 -0
- package/dist/ionic/svg/logo-no-smoking.svg +1 -0
- package/dist/ionic/svg/logo-nodejs.svg +1 -0
- package/dist/ionic/svg/logo-npm.svg +1 -0
- package/dist/ionic/svg/logo-octocat.svg +1 -0
- package/dist/ionic/svg/logo-paypal.svg +1 -0
- package/dist/ionic/svg/logo-pinterest.svg +1 -0
- package/dist/ionic/svg/logo-playstation.svg +1 -0
- package/dist/ionic/svg/logo-pwa.svg +1 -0
- package/dist/ionic/svg/logo-python.svg +1 -0
- package/dist/ionic/svg/logo-react.svg +1 -0
- package/dist/ionic/svg/logo-reddit.svg +1 -0
- package/dist/ionic/svg/logo-rss.svg +1 -0
- package/dist/ionic/svg/logo-sass.svg +1 -0
- package/dist/ionic/svg/logo-skype.svg +1 -0
- package/dist/ionic/svg/logo-slack.svg +1 -0
- package/dist/ionic/svg/logo-snapchat.svg +1 -0
- package/dist/ionic/svg/logo-soundcloud.svg +1 -0
- package/dist/ionic/svg/logo-stackoverflow.svg +1 -0
- package/dist/ionic/svg/logo-steam.svg +1 -0
- package/dist/ionic/svg/logo-stencil.svg +1 -0
- package/dist/ionic/svg/logo-tableau.svg +1 -0
- package/dist/ionic/svg/logo-threads.svg +1 -0
- package/dist/ionic/svg/logo-tiktok.svg +1 -0
- package/dist/ionic/svg/logo-trapeze.svg +1 -0
- package/dist/ionic/svg/logo-tumblr.svg +1 -0
- package/dist/ionic/svg/logo-tux.svg +1 -0
- package/dist/ionic/svg/logo-twitch.svg +1 -0
- package/dist/ionic/svg/logo-twitter.svg +1 -0
- package/dist/ionic/svg/logo-usd.svg +1 -0
- package/dist/ionic/svg/logo-venmo.svg +1 -0
- package/dist/ionic/svg/logo-vercel.svg +1 -0
- package/dist/ionic/svg/logo-vimeo.svg +1 -0
- package/dist/ionic/svg/logo-vk.svg +1 -0
- package/dist/ionic/svg/logo-vue.svg +1 -0
- package/dist/ionic/svg/logo-web-component.svg +1 -0
- package/dist/ionic/svg/logo-wechat.svg +1 -0
- package/dist/ionic/svg/logo-whatsapp.svg +1 -0
- package/dist/ionic/svg/logo-windows.svg +1 -0
- package/dist/ionic/svg/logo-wordpress.svg +1 -0
- package/dist/ionic/svg/logo-x.svg +1 -0
- package/dist/ionic/svg/logo-xbox.svg +1 -0
- package/dist/ionic/svg/logo-xing.svg +1 -0
- package/dist/ionic/svg/logo-yahoo.svg +1 -0
- package/dist/ionic/svg/logo-yen.svg +1 -0
- package/dist/ionic/svg/logo-youtube.svg +1 -0
- package/dist/ionic/svg/magnet-outline.svg +1 -0
- package/dist/ionic/svg/magnet-sharp.svg +1 -0
- package/dist/ionic/svg/magnet.svg +1 -0
- package/dist/ionic/svg/mail-open-outline.svg +1 -0
- package/dist/ionic/svg/mail-open-sharp.svg +1 -0
- package/dist/ionic/svg/mail-open.svg +1 -0
- package/dist/ionic/svg/mail-outline.svg +1 -0
- package/dist/ionic/svg/mail-sharp.svg +1 -0
- package/dist/ionic/svg/mail-unread-outline.svg +1 -0
- package/dist/ionic/svg/mail-unread-sharp.svg +1 -0
- package/dist/ionic/svg/mail-unread.svg +1 -0
- package/dist/ionic/svg/mail.svg +1 -0
- package/dist/ionic/svg/male-female-outline.svg +1 -0
- package/dist/ionic/svg/male-female-sharp.svg +1 -0
- package/dist/ionic/svg/male-female.svg +1 -0
- package/dist/ionic/svg/male-outline.svg +1 -0
- package/dist/ionic/svg/male-sharp.svg +1 -0
- package/dist/ionic/svg/male.svg +1 -0
- package/dist/ionic/svg/man-outline.svg +1 -0
- package/dist/ionic/svg/man-sharp.svg +1 -0
- package/dist/ionic/svg/man.svg +1 -0
- package/dist/ionic/svg/map-outline.svg +1 -0
- package/dist/ionic/svg/map-sharp.svg +1 -0
- package/dist/ionic/svg/map.svg +1 -0
- package/dist/ionic/svg/medal-outline.svg +1 -0
- package/dist/ionic/svg/medal-sharp.svg +1 -0
- package/dist/ionic/svg/medal.svg +1 -0
- package/dist/ionic/svg/medical-outline.svg +1 -0
- package/dist/ionic/svg/medical-sharp.svg +1 -0
- package/dist/ionic/svg/medical.svg +1 -0
- package/dist/ionic/svg/medkit-outline.svg +1 -0
- package/dist/ionic/svg/medkit-sharp.svg +1 -0
- package/dist/ionic/svg/medkit.svg +1 -0
- package/dist/ionic/svg/megaphone-outline.svg +1 -0
- package/dist/ionic/svg/megaphone-sharp.svg +1 -0
- package/dist/ionic/svg/megaphone.svg +1 -0
- package/dist/ionic/svg/menu-outline.svg +1 -0
- package/dist/ionic/svg/menu-sharp.svg +1 -0
- package/dist/ionic/svg/menu.svg +1 -0
- package/dist/ionic/svg/mic-circle-outline.svg +1 -0
- package/dist/ionic/svg/mic-circle-sharp.svg +1 -0
- package/dist/ionic/svg/mic-circle.svg +1 -0
- package/dist/ionic/svg/mic-off-circle-outline.svg +1 -0
- package/dist/ionic/svg/mic-off-circle-sharp.svg +1 -0
- package/dist/ionic/svg/mic-off-circle.svg +1 -0
- package/dist/ionic/svg/mic-off-outline.svg +1 -0
- package/dist/ionic/svg/mic-off-sharp.svg +1 -0
- package/dist/ionic/svg/mic-off.svg +1 -0
- package/dist/ionic/svg/mic-outline.svg +1 -0
- package/dist/ionic/svg/mic-sharp.svg +1 -0
- package/dist/ionic/svg/mic.svg +1 -0
- package/dist/ionic/svg/moon-outline.svg +1 -0
- package/dist/ionic/svg/moon-sharp.svg +1 -0
- package/dist/ionic/svg/moon.svg +1 -0
- package/dist/ionic/svg/move-outline.svg +1 -0
- package/dist/ionic/svg/move-sharp.svg +1 -0
- package/dist/ionic/svg/move.svg +1 -0
- package/dist/ionic/svg/musical-note-outline.svg +1 -0
- package/dist/ionic/svg/musical-note-sharp.svg +1 -0
- package/dist/ionic/svg/musical-note.svg +1 -0
- package/dist/ionic/svg/musical-notes-outline.svg +1 -0
- package/dist/ionic/svg/musical-notes-sharp.svg +1 -0
- package/dist/ionic/svg/musical-notes.svg +1 -0
- package/dist/ionic/svg/navigate-circle-outline.svg +1 -0
- package/dist/ionic/svg/navigate-circle-sharp.svg +1 -0
- package/dist/ionic/svg/navigate-circle.svg +1 -0
- package/dist/ionic/svg/navigate-outline.svg +1 -0
- package/dist/ionic/svg/navigate-sharp.svg +1 -0
- package/dist/ionic/svg/navigate.svg +1 -0
- package/dist/ionic/svg/newspaper-outline.svg +1 -0
- package/dist/ionic/svg/newspaper-sharp.svg +1 -0
- package/dist/ionic/svg/newspaper.svg +1 -0
- package/dist/ionic/svg/notifications-circle-outline.svg +1 -0
- package/dist/ionic/svg/notifications-circle-sharp.svg +1 -0
- package/dist/ionic/svg/notifications-circle.svg +1 -0
- package/dist/ionic/svg/notifications-off-circle-outline.svg +1 -0
- package/dist/ionic/svg/notifications-off-circle-sharp.svg +1 -0
- package/dist/ionic/svg/notifications-off-circle.svg +1 -0
- package/dist/ionic/svg/notifications-off-outline.svg +1 -0
- package/dist/ionic/svg/notifications-off-sharp.svg +1 -0
- package/dist/ionic/svg/notifications-off.svg +1 -0
- package/dist/ionic/svg/notifications-outline.svg +1 -0
- package/dist/ionic/svg/notifications-sharp.svg +1 -0
- package/dist/ionic/svg/notifications.svg +1 -0
- package/dist/ionic/svg/nuclear-outline.svg +1 -0
- package/dist/ionic/svg/nuclear-sharp.svg +1 -0
- package/dist/ionic/svg/nuclear.svg +1 -0
- package/dist/ionic/svg/nutrition-outline.svg +1 -0
- package/dist/ionic/svg/nutrition-sharp.svg +1 -0
- package/dist/ionic/svg/nutrition.svg +1 -0
- package/dist/ionic/svg/open-outline.svg +1 -0
- package/dist/ionic/svg/open-sharp.svg +1 -0
- package/dist/ionic/svg/open.svg +1 -0
- package/dist/ionic/svg/options-outline.svg +1 -0
- package/dist/ionic/svg/options-sharp.svg +1 -0
- package/dist/ionic/svg/options.svg +1 -0
- package/dist/ionic/svg/paper-plane-outline.svg +1 -0
- package/dist/ionic/svg/paper-plane-sharp.svg +1 -0
- package/dist/ionic/svg/paper-plane.svg +1 -0
- package/dist/ionic/svg/partly-sunny-outline.svg +1 -0
- package/dist/ionic/svg/partly-sunny-sharp.svg +1 -0
- package/dist/ionic/svg/partly-sunny.svg +1 -0
- package/dist/ionic/svg/pause-circle-outline.svg +1 -0
- package/dist/ionic/svg/pause-circle-sharp.svg +1 -0
- package/dist/ionic/svg/pause-circle.svg +1 -0
- package/dist/ionic/svg/pause-outline.svg +1 -0
- package/dist/ionic/svg/pause-sharp.svg +1 -0
- package/dist/ionic/svg/pause.svg +1 -0
- package/dist/ionic/svg/paw-outline.svg +1 -0
- package/dist/ionic/svg/paw-sharp.svg +1 -0
- package/dist/ionic/svg/paw.svg +1 -0
- package/dist/ionic/svg/pencil-outline.svg +1 -0
- package/dist/ionic/svg/pencil-sharp.svg +1 -0
- package/dist/ionic/svg/pencil.svg +1 -0
- package/dist/ionic/svg/people-circle-outline.svg +1 -0
- package/dist/ionic/svg/people-circle-sharp.svg +1 -0
- package/dist/ionic/svg/people-circle.svg +1 -0
- package/dist/ionic/svg/people-outline.svg +1 -0
- package/dist/ionic/svg/people-sharp.svg +1 -0
- package/dist/ionic/svg/people.svg +1 -0
- package/dist/ionic/svg/person-add-outline.svg +1 -0
- package/dist/ionic/svg/person-add-sharp.svg +1 -0
- package/dist/ionic/svg/person-add.svg +1 -0
- package/dist/ionic/svg/person-circle-outline.svg +1 -0
- package/dist/ionic/svg/person-circle-sharp.svg +1 -0
- package/dist/ionic/svg/person-circle.svg +1 -0
- package/dist/ionic/svg/person-outline.svg +1 -0
- package/dist/ionic/svg/person-remove-outline.svg +1 -0
- package/dist/ionic/svg/person-remove-sharp.svg +1 -0
- package/dist/ionic/svg/person-remove.svg +1 -0
- package/dist/ionic/svg/person-sharp.svg +1 -0
- package/dist/ionic/svg/person.svg +1 -0
- package/dist/ionic/svg/phone-landscape-outline.svg +1 -0
- package/dist/ionic/svg/phone-landscape-sharp.svg +1 -0
- package/dist/ionic/svg/phone-landscape.svg +1 -0
- package/dist/ionic/svg/phone-portrait-outline.svg +1 -0
- package/dist/ionic/svg/phone-portrait-sharp.svg +1 -0
- package/dist/ionic/svg/phone-portrait.svg +1 -0
- package/dist/ionic/svg/pie-chart-outline.svg +1 -0
- package/dist/ionic/svg/pie-chart-sharp.svg +1 -0
- package/dist/ionic/svg/pie-chart.svg +1 -0
- package/dist/ionic/svg/pin-outline.svg +1 -0
- package/dist/ionic/svg/pin-sharp.svg +1 -0
- package/dist/ionic/svg/pin.svg +1 -0
- package/dist/ionic/svg/pint-outline.svg +1 -0
- package/dist/ionic/svg/pint-sharp.svg +1 -0
- package/dist/ionic/svg/pint.svg +1 -0
- package/dist/ionic/svg/pizza-outline.svg +1 -0
- package/dist/ionic/svg/pizza-sharp.svg +1 -0
- package/dist/ionic/svg/pizza.svg +1 -0
- package/dist/ionic/svg/planet-outline.svg +1 -0
- package/dist/ionic/svg/planet-sharp.svg +1 -0
- package/dist/ionic/svg/planet.svg +1 -0
- package/dist/ionic/svg/play-back-circle-outline.svg +1 -0
- package/dist/ionic/svg/play-back-circle-sharp.svg +1 -0
- package/dist/ionic/svg/play-back-circle.svg +1 -0
- package/dist/ionic/svg/play-back-outline.svg +1 -0
- package/dist/ionic/svg/play-back-sharp.svg +1 -0
- package/dist/ionic/svg/play-back.svg +1 -0
- package/dist/ionic/svg/play-circle-outline.svg +1 -0
- package/dist/ionic/svg/play-circle-sharp.svg +1 -0
- package/dist/ionic/svg/play-circle.svg +1 -0
- package/dist/ionic/svg/play-forward-circle-outline.svg +1 -0
- package/dist/ionic/svg/play-forward-circle-sharp.svg +1 -0
- package/dist/ionic/svg/play-forward-circle.svg +1 -0
- package/dist/ionic/svg/play-forward-outline.svg +1 -0
- package/dist/ionic/svg/play-forward-sharp.svg +1 -0
- package/dist/ionic/svg/play-forward.svg +1 -0
- package/dist/ionic/svg/play-outline.svg +1 -0
- package/dist/ionic/svg/play-sharp.svg +1 -0
- package/dist/ionic/svg/play-skip-back-circle-outline.svg +1 -0
- package/dist/ionic/svg/play-skip-back-circle-sharp.svg +1 -0
- package/dist/ionic/svg/play-skip-back-circle.svg +1 -0
- package/dist/ionic/svg/play-skip-back-outline.svg +1 -0
- package/dist/ionic/svg/play-skip-back-sharp.svg +1 -0
- package/dist/ionic/svg/play-skip-back.svg +1 -0
- package/dist/ionic/svg/play-skip-forward-circle-outline.svg +1 -0
- package/dist/ionic/svg/play-skip-forward-circle-sharp.svg +1 -0
- package/dist/ionic/svg/play-skip-forward-circle.svg +1 -0
- package/dist/ionic/svg/play-skip-forward-outline.svg +1 -0
- package/dist/ionic/svg/play-skip-forward-sharp.svg +1 -0
- package/dist/ionic/svg/play-skip-forward.svg +1 -0
- package/dist/ionic/svg/play.svg +1 -0
- package/dist/ionic/svg/podium-outline.svg +1 -0
- package/dist/ionic/svg/podium-sharp.svg +1 -0
- package/dist/ionic/svg/podium.svg +1 -0
- package/dist/ionic/svg/power-outline.svg +1 -0
- package/dist/ionic/svg/power-sharp.svg +1 -0
- package/dist/ionic/svg/power.svg +1 -0
- package/dist/ionic/svg/pricetag-outline.svg +1 -0
- package/dist/ionic/svg/pricetag-sharp.svg +1 -0
- package/dist/ionic/svg/pricetag.svg +1 -0
- package/dist/ionic/svg/pricetags-outline.svg +1 -0
- package/dist/ionic/svg/pricetags-sharp.svg +1 -0
- package/dist/ionic/svg/pricetags.svg +1 -0
- package/dist/ionic/svg/print-outline.svg +1 -0
- package/dist/ionic/svg/print-sharp.svg +1 -0
- package/dist/ionic/svg/print.svg +1 -0
- package/dist/ionic/svg/prism-outline.svg +1 -0
- package/dist/ionic/svg/prism-sharp.svg +1 -0
- package/dist/ionic/svg/prism.svg +1 -0
- package/dist/ionic/svg/pulse-outline.svg +1 -0
- package/dist/ionic/svg/pulse-sharp.svg +1 -0
- package/dist/ionic/svg/pulse.svg +1 -0
- package/dist/ionic/svg/push-outline.svg +1 -0
- package/dist/ionic/svg/push-sharp.svg +1 -0
- package/dist/ionic/svg/push.svg +1 -0
- package/dist/ionic/svg/qr-code-outline.svg +1 -0
- package/dist/ionic/svg/qr-code-sharp.svg +1 -0
- package/dist/ionic/svg/qr-code.svg +1 -0
- package/dist/ionic/svg/radio-button-off-outline.svg +1 -0
- package/dist/ionic/svg/radio-button-off-sharp.svg +1 -0
- package/dist/ionic/svg/radio-button-off.svg +1 -0
- package/dist/ionic/svg/radio-button-on-outline.svg +1 -0
- package/dist/ionic/svg/radio-button-on-sharp.svg +1 -0
- package/dist/ionic/svg/radio-button-on.svg +1 -0
- package/dist/ionic/svg/radio-outline.svg +1 -0
- package/dist/ionic/svg/radio-sharp.svg +1 -0
- package/dist/ionic/svg/radio.svg +1 -0
- package/dist/ionic/svg/rainy-outline.svg +1 -0
- package/dist/ionic/svg/rainy-sharp.svg +1 -0
- package/dist/ionic/svg/rainy.svg +1 -0
- package/dist/ionic/svg/reader-outline.svg +1 -0
- package/dist/ionic/svg/reader-sharp.svg +1 -0
- package/dist/ionic/svg/reader.svg +1 -0
- package/dist/ionic/svg/receipt-outline.svg +1 -0
- package/dist/ionic/svg/receipt-sharp.svg +1 -0
- package/dist/ionic/svg/receipt.svg +1 -0
- package/dist/ionic/svg/recording-outline.svg +1 -0
- package/dist/ionic/svg/recording-sharp.svg +1 -0
- package/dist/ionic/svg/recording.svg +1 -0
- package/dist/ionic/svg/refresh-circle-outline.svg +1 -0
- package/dist/ionic/svg/refresh-circle-sharp.svg +1 -0
- package/dist/ionic/svg/refresh-circle.svg +1 -0
- package/dist/ionic/svg/refresh-outline.svg +1 -0
- package/dist/ionic/svg/refresh-sharp.svg +1 -0
- package/dist/ionic/svg/refresh.svg +1 -0
- package/dist/ionic/svg/reload-circle-outline.svg +1 -0
- package/dist/ionic/svg/reload-circle-sharp.svg +1 -0
- package/dist/ionic/svg/reload-circle.svg +1 -0
- package/dist/ionic/svg/reload-outline.svg +1 -0
- package/dist/ionic/svg/reload-sharp.svg +1 -0
- package/dist/ionic/svg/reload.svg +1 -0
- package/dist/ionic/svg/remove-circle-outline.svg +1 -0
- package/dist/ionic/svg/remove-circle-sharp.svg +1 -0
- package/dist/ionic/svg/remove-circle.svg +1 -0
- package/dist/ionic/svg/remove-outline.svg +1 -0
- package/dist/ionic/svg/remove-sharp.svg +1 -0
- package/dist/ionic/svg/remove.svg +1 -0
- package/dist/ionic/svg/reorder-four-outline.svg +1 -0
- package/dist/ionic/svg/reorder-four-sharp.svg +1 -0
- package/dist/ionic/svg/reorder-four.svg +1 -0
- package/dist/ionic/svg/reorder-three-outline.svg +1 -0
- package/dist/ionic/svg/reorder-three-sharp.svg +1 -0
- package/dist/ionic/svg/reorder-three.svg +1 -0
- package/dist/ionic/svg/reorder-two-outline.svg +1 -0
- package/dist/ionic/svg/reorder-two-sharp.svg +1 -0
- package/dist/ionic/svg/reorder-two.svg +1 -0
- package/dist/ionic/svg/repeat-outline.svg +1 -0
- package/dist/ionic/svg/repeat-sharp.svg +1 -0
- package/dist/ionic/svg/repeat.svg +1 -0
- package/dist/ionic/svg/resize-outline.svg +1 -0
- package/dist/ionic/svg/resize-sharp.svg +1 -0
- package/dist/ionic/svg/resize.svg +1 -0
- package/dist/ionic/svg/restaurant-outline.svg +1 -0
- package/dist/ionic/svg/restaurant-sharp.svg +1 -0
- package/dist/ionic/svg/restaurant.svg +1 -0
- package/dist/ionic/svg/return-down-back-outline.svg +1 -0
- package/dist/ionic/svg/return-down-back-sharp.svg +1 -0
- package/dist/ionic/svg/return-down-back.svg +1 -0
- package/dist/ionic/svg/return-down-forward-outline.svg +1 -0
- package/dist/ionic/svg/return-down-forward-sharp.svg +1 -0
- package/dist/ionic/svg/return-down-forward.svg +1 -0
- package/dist/ionic/svg/return-up-back-outline.svg +1 -0
- package/dist/ionic/svg/return-up-back-sharp.svg +1 -0
- package/dist/ionic/svg/return-up-back.svg +1 -0
- package/dist/ionic/svg/return-up-forward-outline.svg +1 -0
- package/dist/ionic/svg/return-up-forward-sharp.svg +1 -0
- package/dist/ionic/svg/return-up-forward.svg +1 -0
- package/dist/ionic/svg/ribbon-outline.svg +1 -0
- package/dist/ionic/svg/ribbon-sharp.svg +1 -0
- package/dist/ionic/svg/ribbon.svg +1 -0
- package/dist/ionic/svg/rocket-outline.svg +1 -0
- package/dist/ionic/svg/rocket-sharp.svg +1 -0
- package/dist/ionic/svg/rocket.svg +1 -0
- package/dist/ionic/svg/rose-outline.svg +1 -0
- package/dist/ionic/svg/rose-sharp.svg +1 -0
- package/dist/ionic/svg/rose.svg +1 -0
- package/dist/ionic/svg/sad-outline.svg +1 -0
- package/dist/ionic/svg/sad-sharp.svg +1 -0
- package/dist/ionic/svg/sad.svg +1 -0
- package/dist/ionic/svg/save-outline.svg +1 -0
- package/dist/ionic/svg/save-sharp.svg +1 -0
- package/dist/ionic/svg/save.svg +1 -0
- package/dist/ionic/svg/scale-outline.svg +1 -0
- package/dist/ionic/svg/scale-sharp.svg +1 -0
- package/dist/ionic/svg/scale.svg +1 -0
- package/dist/ionic/svg/scan-circle-outline.svg +1 -0
- package/dist/ionic/svg/scan-circle-sharp.svg +1 -0
- package/dist/ionic/svg/scan-circle.svg +1 -0
- package/dist/ionic/svg/scan-outline.svg +1 -0
- package/dist/ionic/svg/scan-sharp.svg +1 -0
- package/dist/ionic/svg/scan.svg +1 -0
- package/dist/ionic/svg/school-outline.svg +1 -0
- package/dist/ionic/svg/school-sharp.svg +1 -0
- package/dist/ionic/svg/school.svg +1 -0
- package/dist/ionic/svg/search-circle-outline.svg +1 -0
- package/dist/ionic/svg/search-circle-sharp.svg +1 -0
- package/dist/ionic/svg/search-circle.svg +1 -0
- package/dist/ionic/svg/search-outline.svg +1 -0
- package/dist/ionic/svg/search-sharp.svg +1 -0
- package/dist/ionic/svg/search.svg +1 -0
- package/dist/ionic/svg/send-outline.svg +1 -0
- package/dist/ionic/svg/send-sharp.svg +1 -0
- package/dist/ionic/svg/send.svg +1 -0
- package/dist/ionic/svg/server-outline.svg +1 -0
- package/dist/ionic/svg/server-sharp.svg +1 -0
- package/dist/ionic/svg/server.svg +1 -0
- package/dist/ionic/svg/settings-outline.svg +1 -0
- package/dist/ionic/svg/settings-sharp.svg +1 -0
- package/dist/ionic/svg/settings.svg +1 -0
- package/dist/ionic/svg/shapes-outline.svg +1 -0
- package/dist/ionic/svg/shapes-sharp.svg +1 -0
- package/dist/ionic/svg/shapes.svg +1 -0
- package/dist/ionic/svg/share-outline.svg +1 -0
- package/dist/ionic/svg/share-sharp.svg +1 -0
- package/dist/ionic/svg/share-social-outline.svg +1 -0
- package/dist/ionic/svg/share-social-sharp.svg +1 -0
- package/dist/ionic/svg/share-social.svg +1 -0
- package/dist/ionic/svg/share.svg +1 -0
- package/dist/ionic/svg/shield-checkmark-outline.svg +1 -0
- package/dist/ionic/svg/shield-checkmark-sharp.svg +1 -0
- package/dist/ionic/svg/shield-checkmark.svg +1 -0
- package/dist/ionic/svg/shield-half-outline.svg +1 -0
- package/dist/ionic/svg/shield-half-sharp.svg +1 -0
- package/dist/ionic/svg/shield-half.svg +1 -0
- package/dist/ionic/svg/shield-outline.svg +1 -0
- package/dist/ionic/svg/shield-sharp.svg +1 -0
- package/dist/ionic/svg/shield.svg +1 -0
- package/dist/ionic/svg/shirt-outline.svg +1 -0
- package/dist/ionic/svg/shirt-sharp.svg +1 -0
- package/dist/ionic/svg/shirt.svg +1 -0
- package/dist/ionic/svg/shuffle-outline.svg +1 -0
- package/dist/ionic/svg/shuffle-sharp.svg +1 -0
- package/dist/ionic/svg/shuffle.svg +1 -0
- package/dist/ionic/svg/skull-outline.svg +1 -0
- package/dist/ionic/svg/skull-sharp.svg +1 -0
- package/dist/ionic/svg/skull.svg +1 -0
- package/dist/ionic/svg/snow-outline.svg +1 -0
- package/dist/ionic/svg/snow-sharp.svg +1 -0
- package/dist/ionic/svg/snow.svg +1 -0
- package/dist/ionic/svg/sparkles-outline.svg +1 -0
- package/dist/ionic/svg/sparkles-sharp.svg +1 -0
- package/dist/ionic/svg/sparkles.svg +1 -0
- package/dist/ionic/svg/speedometer-outline.svg +1 -0
- package/dist/ionic/svg/speedometer-sharp.svg +1 -0
- package/dist/ionic/svg/speedometer.svg +1 -0
- package/dist/ionic/svg/square-outline.svg +1 -0
- package/dist/ionic/svg/square-sharp.svg +1 -0
- package/dist/ionic/svg/square.svg +1 -0
- package/dist/ionic/svg/star-half-outline.svg +1 -0
- package/dist/ionic/svg/star-half-sharp.svg +1 -0
- package/dist/ionic/svg/star-half.svg +1 -0
- package/dist/ionic/svg/star-outline.svg +1 -0
- package/dist/ionic/svg/star-sharp.svg +1 -0
- package/dist/ionic/svg/star.svg +1 -0
- package/dist/ionic/svg/stats-chart-outline.svg +1 -0
- package/dist/ionic/svg/stats-chart-sharp.svg +1 -0
- package/dist/ionic/svg/stats-chart.svg +1 -0
- package/dist/ionic/svg/stop-circle-outline.svg +1 -0
- package/dist/ionic/svg/stop-circle-sharp.svg +1 -0
- package/dist/ionic/svg/stop-circle.svg +1 -0
- package/dist/ionic/svg/stop-outline.svg +1 -0
- package/dist/ionic/svg/stop-sharp.svg +1 -0
- package/dist/ionic/svg/stop.svg +1 -0
- package/dist/ionic/svg/stopwatch-outline.svg +1 -0
- package/dist/ionic/svg/stopwatch-sharp.svg +1 -0
- package/dist/ionic/svg/stopwatch.svg +1 -0
- package/dist/ionic/svg/storefront-outline.svg +1 -0
- package/dist/ionic/svg/storefront-sharp.svg +1 -0
- package/dist/ionic/svg/storefront.svg +1 -0
- package/dist/ionic/svg/subway-outline.svg +1 -0
- package/dist/ionic/svg/subway-sharp.svg +1 -0
- package/dist/ionic/svg/subway.svg +1 -0
- package/dist/ionic/svg/sunny-outline.svg +1 -0
- package/dist/ionic/svg/sunny-sharp.svg +1 -0
- package/dist/ionic/svg/sunny.svg +1 -0
- package/dist/ionic/svg/swap-horizontal-outline.svg +1 -0
- package/dist/ionic/svg/swap-horizontal-sharp.svg +1 -0
- package/dist/ionic/svg/swap-horizontal.svg +1 -0
- package/dist/ionic/svg/swap-vertical-outline.svg +1 -0
- package/dist/ionic/svg/swap-vertical-sharp.svg +1 -0
- package/dist/ionic/svg/swap-vertical.svg +1 -0
- package/dist/ionic/svg/sync-circle-outline.svg +1 -0
- package/dist/ionic/svg/sync-circle-sharp.svg +1 -0
- package/dist/ionic/svg/sync-circle.svg +1 -0
- package/dist/ionic/svg/sync-outline.svg +1 -0
- package/dist/ionic/svg/sync-sharp.svg +1 -0
- package/dist/ionic/svg/sync.svg +1 -0
- package/dist/ionic/svg/tablet-landscape-outline.svg +1 -0
- package/dist/ionic/svg/tablet-landscape-sharp.svg +1 -0
- package/dist/ionic/svg/tablet-landscape.svg +1 -0
- package/dist/ionic/svg/tablet-portrait-outline.svg +1 -0
- package/dist/ionic/svg/tablet-portrait-sharp.svg +1 -0
- package/dist/ionic/svg/tablet-portrait.svg +1 -0
- package/dist/ionic/svg/telescope-outline.svg +1 -0
- package/dist/ionic/svg/telescope-sharp.svg +1 -0
- package/dist/ionic/svg/telescope.svg +1 -0
- package/dist/ionic/svg/tennisball-outline.svg +1 -0
- package/dist/ionic/svg/tennisball-sharp.svg +1 -0
- package/dist/ionic/svg/tennisball.svg +1 -0
- package/dist/ionic/svg/terminal-outline.svg +1 -0
- package/dist/ionic/svg/terminal-sharp.svg +1 -0
- package/dist/ionic/svg/terminal.svg +1 -0
- package/dist/ionic/svg/text-outline.svg +1 -0
- package/dist/ionic/svg/text-sharp.svg +1 -0
- package/dist/ionic/svg/text.svg +1 -0
- package/dist/ionic/svg/thermometer-outline.svg +1 -0
- package/dist/ionic/svg/thermometer-sharp.svg +1 -0
- package/dist/ionic/svg/thermometer.svg +1 -0
- package/dist/ionic/svg/thumbs-down-outline.svg +1 -0
- package/dist/ionic/svg/thumbs-down-sharp.svg +1 -0
- package/dist/ionic/svg/thumbs-down.svg +1 -0
- package/dist/ionic/svg/thumbs-up-outline.svg +1 -0
- package/dist/ionic/svg/thumbs-up-sharp.svg +1 -0
- package/dist/ionic/svg/thumbs-up.svg +1 -0
- package/dist/ionic/svg/thunderstorm-outline.svg +1 -0
- package/dist/ionic/svg/thunderstorm-sharp.svg +1 -0
- package/dist/ionic/svg/thunderstorm.svg +1 -0
- package/dist/ionic/svg/ticket-outline.svg +1 -0
- package/dist/ionic/svg/ticket-sharp.svg +1 -0
- package/dist/ionic/svg/ticket.svg +1 -0
- package/dist/ionic/svg/time-outline.svg +1 -0
- package/dist/ionic/svg/time-sharp.svg +1 -0
- package/dist/ionic/svg/time.svg +1 -0
- package/dist/ionic/svg/timer-outline.svg +1 -0
- package/dist/ionic/svg/timer-sharp.svg +1 -0
- package/dist/ionic/svg/timer.svg +1 -0
- package/dist/ionic/svg/today-outline.svg +1 -0
- package/dist/ionic/svg/today-sharp.svg +1 -0
- package/dist/ionic/svg/today.svg +1 -0
- package/dist/ionic/svg/toggle-outline.svg +1 -0
- package/dist/ionic/svg/toggle-sharp.svg +1 -0
- package/dist/ionic/svg/toggle.svg +1 -0
- package/dist/ionic/svg/trail-sign-outline.svg +1 -0
- package/dist/ionic/svg/trail-sign-sharp.svg +1 -0
- package/dist/ionic/svg/trail-sign.svg +1 -0
- package/dist/ionic/svg/train-outline.svg +1 -0
- package/dist/ionic/svg/train-sharp.svg +1 -0
- package/dist/ionic/svg/train.svg +1 -0
- package/dist/ionic/svg/transgender-outline.svg +1 -0
- package/dist/ionic/svg/transgender-sharp.svg +1 -0
- package/dist/ionic/svg/transgender.svg +1 -0
- package/dist/ionic/svg/trash-bin-outline.svg +1 -0
- package/dist/ionic/svg/trash-bin-sharp.svg +1 -0
- package/dist/ionic/svg/trash-bin.svg +1 -0
- package/dist/ionic/svg/trash-outline.svg +1 -0
- package/dist/ionic/svg/trash-sharp.svg +1 -0
- package/dist/ionic/svg/trash.svg +1 -0
- package/dist/ionic/svg/trending-down-outline.svg +1 -0
- package/dist/ionic/svg/trending-down-sharp.svg +1 -0
- package/dist/ionic/svg/trending-down.svg +1 -0
- package/dist/ionic/svg/trending-up-outline.svg +1 -0
- package/dist/ionic/svg/trending-up-sharp.svg +1 -0
- package/dist/ionic/svg/trending-up.svg +1 -0
- package/dist/ionic/svg/triangle-outline.svg +1 -0
- package/dist/ionic/svg/triangle-sharp.svg +1 -0
- package/dist/ionic/svg/triangle.svg +1 -0
- package/dist/ionic/svg/trophy-outline.svg +1 -0
- package/dist/ionic/svg/trophy-sharp.svg +1 -0
- package/dist/ionic/svg/trophy.svg +1 -0
- package/dist/ionic/svg/tv-outline.svg +1 -0
- package/dist/ionic/svg/tv-sharp.svg +1 -0
- package/dist/ionic/svg/tv.svg +1 -0
- package/dist/ionic/svg/umbrella-outline.svg +1 -0
- package/dist/ionic/svg/umbrella-sharp.svg +1 -0
- package/dist/ionic/svg/umbrella.svg +1 -0
- package/dist/ionic/svg/unlink-outline.svg +1 -0
- package/dist/ionic/svg/unlink-sharp.svg +1 -0
- package/dist/ionic/svg/unlink.svg +1 -0
- package/dist/ionic/svg/videocam-off-outline.svg +1 -0
- package/dist/ionic/svg/videocam-off-sharp.svg +1 -0
- package/dist/ionic/svg/videocam-off.svg +1 -0
- package/dist/ionic/svg/videocam-outline.svg +1 -0
- package/dist/ionic/svg/videocam-sharp.svg +1 -0
- package/dist/ionic/svg/videocam.svg +1 -0
- package/dist/ionic/svg/volume-high-outline.svg +1 -0
- package/dist/ionic/svg/volume-high-sharp.svg +1 -0
- package/dist/ionic/svg/volume-high.svg +1 -0
- package/dist/ionic/svg/volume-low-outline.svg +1 -0
- package/dist/ionic/svg/volume-low-sharp.svg +1 -0
- package/dist/ionic/svg/volume-low.svg +1 -0
- package/dist/ionic/svg/volume-medium-outline.svg +1 -0
- package/dist/ionic/svg/volume-medium-sharp.svg +1 -0
- package/dist/ionic/svg/volume-medium.svg +1 -0
- package/dist/ionic/svg/volume-mute-outline.svg +1 -0
- package/dist/ionic/svg/volume-mute-sharp.svg +1 -0
- package/dist/ionic/svg/volume-mute.svg +1 -0
- package/dist/ionic/svg/volume-off-outline.svg +1 -0
- package/dist/ionic/svg/volume-off-sharp.svg +1 -0
- package/dist/ionic/svg/volume-off.svg +1 -0
- package/dist/ionic/svg/walk-outline.svg +1 -0
- package/dist/ionic/svg/walk-sharp.svg +1 -0
- package/dist/ionic/svg/walk.svg +1 -0
- package/dist/ionic/svg/wallet-outline.svg +1 -0
- package/dist/ionic/svg/wallet-sharp.svg +1 -0
- package/dist/ionic/svg/wallet.svg +1 -0
- package/dist/ionic/svg/warning-outline.svg +1 -0
- package/dist/ionic/svg/warning-sharp.svg +1 -0
- package/dist/ionic/svg/warning.svg +1 -0
- package/dist/ionic/svg/watch-outline.svg +1 -0
- package/dist/ionic/svg/watch-sharp.svg +1 -0
- package/dist/ionic/svg/watch.svg +1 -0
- package/dist/ionic/svg/water-outline.svg +1 -0
- package/dist/ionic/svg/water-sharp.svg +1 -0
- package/dist/ionic/svg/water.svg +1 -0
- package/dist/ionic/svg/wifi-outline.svg +1 -0
- package/dist/ionic/svg/wifi-sharp.svg +1 -0
- package/dist/ionic/svg/wifi.svg +1 -0
- package/dist/ionic/svg/wine-outline.svg +1 -0
- package/dist/ionic/svg/wine-sharp.svg +1 -0
- package/dist/ionic/svg/wine.svg +1 -0
- package/dist/ionic/svg/woman-outline.svg +1 -0
- package/dist/ionic/svg/woman-sharp.svg +1 -0
- package/dist/ionic/svg/woman.svg +1 -0
- package/dist/types/components/accordion/accordion.d.ts +1 -1
- package/dist/types/components/action-sheet/action-sheet.d.ts +37 -0
- package/dist/types/components/checkbox/checkbox.d.ts +9 -1
- package/dist/types/components/content/content.d.ts +7 -0
- package/dist/types/components/datetime/datetime.d.ts +10 -0
- package/dist/types/components/fab-button/fab-button.d.ts +1 -1
- package/dist/types/components/item/item.d.ts +1 -1
- package/dist/types/components/modal/modal.d.ts +14 -0
- package/dist/types/components/popover/popover.d.ts +7 -0
- package/dist/types/components/radio-group/radio-group.d.ts +9 -1
- package/dist/types/components/select/select.d.ts +2 -2
- package/dist/types/components/toggle/toggle.d.ts +7 -1
- package/dist/types/components.d.ts +10 -6
- package/dist/types/utils/forms/validity.d.ts +1 -1
- package/hydrate/index.js +863 -451
- package/hydrate/index.mjs +863 -451
- package/package.json +10 -6
- package/dist/ionic/p-4cc26913.entry.js +0 -4
- package/dist/ionic/p-4efea47a.entry.js +0 -4
- package/dist/ionic/p-510d86e1.entry.js +0 -4
- package/dist/ionic/p-5fb517e4.entry.js +0 -4
- package/dist/ionic/p-7bcfc421.entry.js +0 -4
- package/dist/ionic/p-8bdfc8f6.entry.js +0 -4
- package/dist/ionic/p-95bddd49.entry.js +0 -4
- package/dist/ionic/p-D87hU-Ly.js +0 -4
- package/dist/ionic/p-dc2e126d.entry.js +0 -4
- package/dist/ionic/p-e16b69e1.entry.js +0 -4
- package/dist/ionic/p-f65f9308.entry.js +0 -4
- package/dist/ionic/p-fc278823.entry.js +0 -4
package/hydrate/index.js
CHANGED
|
@@ -4451,7 +4451,7 @@ class Accordion {
|
|
|
4451
4451
|
"value": [1],
|
|
4452
4452
|
"disabled": [4],
|
|
4453
4453
|
"readonly": [4],
|
|
4454
|
-
"toggleIcon": [
|
|
4454
|
+
"toggleIcon": [1, "toggle-icon"],
|
|
4455
4455
|
"toggleIconSlot": [1, "toggle-icon-slot"],
|
|
4456
4456
|
"state": [32],
|
|
4457
4457
|
"isNext": [32],
|
|
@@ -5851,6 +5851,14 @@ const CoreDelegate = () => {
|
|
|
5851
5851
|
let lastOverlayIndex = 0;
|
|
5852
5852
|
let lastId = 0;
|
|
5853
5853
|
const activeAnimations = new WeakMap();
|
|
5854
|
+
/**
|
|
5855
|
+
* Determines if the overlay's backdrop is always blocking (no background interaction).
|
|
5856
|
+
* Returns false if showBackdrop=false or backdropBreakpoint > 0.
|
|
5857
|
+
*/
|
|
5858
|
+
const isBackdropAlwaysBlocking = (el) => {
|
|
5859
|
+
var _a;
|
|
5860
|
+
return el.showBackdrop !== false && !(((_a = el.backdropBreakpoint) !== null && _a !== void 0 ? _a : 0) > 0);
|
|
5861
|
+
};
|
|
5854
5862
|
const createController = (tagName) => {
|
|
5855
5863
|
return {
|
|
5856
5864
|
create(options) {
|
|
@@ -6288,9 +6296,7 @@ const present = async (overlay, name, iosEnterAnimation, mdEnterAnimation, opts)
|
|
|
6288
6296
|
*/
|
|
6289
6297
|
const overlayEl = overlay.el;
|
|
6290
6298
|
const shouldTrapFocus = overlayEl.tagName !== 'ION-TOAST' && overlayEl.focusTrap !== false;
|
|
6291
|
-
|
|
6292
|
-
// expect background interaction to remain enabled.
|
|
6293
|
-
const shouldLockRoot = shouldTrapFocus && overlayEl.showBackdrop !== false;
|
|
6299
|
+
const shouldLockRoot = shouldTrapFocus && isBackdropAlwaysBlocking(overlayEl);
|
|
6294
6300
|
overlay.presented = true;
|
|
6295
6301
|
overlay.willPresent.emit();
|
|
6296
6302
|
if (shouldLockRoot) {
|
|
@@ -6406,10 +6412,10 @@ const dismiss = async (overlay, data, role, name, iosLeaveAnimation, mdLeaveAnim
|
|
|
6406
6412
|
*/
|
|
6407
6413
|
const overlaysLockingRoot = presentedOverlays.filter((o) => {
|
|
6408
6414
|
const el = o;
|
|
6409
|
-
return el.tagName !== 'ION-TOAST' && el.focusTrap !== false && el
|
|
6415
|
+
return el.tagName !== 'ION-TOAST' && el.focusTrap !== false && isBackdropAlwaysBlocking(el);
|
|
6410
6416
|
});
|
|
6411
6417
|
const overlayEl = overlay.el;
|
|
6412
|
-
const locksRoot = overlayEl.tagName !== 'ION-TOAST' && overlayEl.focusTrap !== false && overlayEl
|
|
6418
|
+
const locksRoot = overlayEl.tagName !== 'ION-TOAST' && overlayEl.focusTrap !== false && isBackdropAlwaysBlocking(overlayEl);
|
|
6413
6419
|
/**
|
|
6414
6420
|
* If this is the last visible overlay that is trapping focus
|
|
6415
6421
|
* then we want to re-add the root to the accessibility tree.
|
|
@@ -7613,6 +7619,7 @@ class ActionSheet {
|
|
|
7613
7619
|
this.delegateController = createDelegateController(this);
|
|
7614
7620
|
this.lockController = createLockController();
|
|
7615
7621
|
this.triggerController = createTriggerController();
|
|
7622
|
+
this.hasRadioButtons = false;
|
|
7616
7623
|
this.presented = false;
|
|
7617
7624
|
/** @internal */
|
|
7618
7625
|
this.hasController = false;
|
|
@@ -7657,6 +7664,19 @@ class ActionSheet {
|
|
|
7657
7664
|
}
|
|
7658
7665
|
};
|
|
7659
7666
|
}
|
|
7667
|
+
buttonsChanged() {
|
|
7668
|
+
const radioButtons = this.getRadioButtons();
|
|
7669
|
+
this.hasRadioButtons = radioButtons.length > 0;
|
|
7670
|
+
// Initialize activeRadioId when buttons change
|
|
7671
|
+
if (this.hasRadioButtons) {
|
|
7672
|
+
const checkedButton = radioButtons.find((b) => { var _a; return ((_a = b.htmlAttributes) === null || _a === void 0 ? void 0 : _a['aria-checked']) === 'true'; });
|
|
7673
|
+
if (checkedButton) {
|
|
7674
|
+
const allButtons = this.getButtons();
|
|
7675
|
+
const checkedIndex = allButtons.indexOf(checkedButton);
|
|
7676
|
+
this.activeRadioId = this.getButtonId(checkedButton, checkedIndex);
|
|
7677
|
+
}
|
|
7678
|
+
}
|
|
7679
|
+
}
|
|
7660
7680
|
onIsOpenChange(newValue, oldValue) {
|
|
7661
7681
|
if (newValue === true && oldValue === false) {
|
|
7662
7682
|
this.present();
|
|
@@ -7737,11 +7757,122 @@ class ActionSheet {
|
|
|
7737
7757
|
}
|
|
7738
7758
|
return true;
|
|
7739
7759
|
}
|
|
7760
|
+
/**
|
|
7761
|
+
* Get all buttons regardless of role.
|
|
7762
|
+
*/
|
|
7740
7763
|
getButtons() {
|
|
7741
7764
|
return this.buttons.map((b) => {
|
|
7742
7765
|
return typeof b === 'string' ? { text: b } : b;
|
|
7743
7766
|
});
|
|
7744
7767
|
}
|
|
7768
|
+
/**
|
|
7769
|
+
* Get all radio buttons (buttons with role="radio").
|
|
7770
|
+
*/
|
|
7771
|
+
getRadioButtons() {
|
|
7772
|
+
return this.getButtons().filter((b) => {
|
|
7773
|
+
var _a;
|
|
7774
|
+
const role = (_a = b.htmlAttributes) === null || _a === void 0 ? void 0 : _a.role;
|
|
7775
|
+
return role === 'radio' && !isCancel(role);
|
|
7776
|
+
});
|
|
7777
|
+
}
|
|
7778
|
+
/**
|
|
7779
|
+
* Handle radio button selection and update aria-checked state.
|
|
7780
|
+
*
|
|
7781
|
+
* @param button The radio button that was selected.
|
|
7782
|
+
*/
|
|
7783
|
+
selectRadioButton(button) {
|
|
7784
|
+
const buttonId = this.getButtonId(button);
|
|
7785
|
+
// Set the active radio ID (this will trigger a re-render and update aria-checked)
|
|
7786
|
+
this.activeRadioId = buttonId;
|
|
7787
|
+
}
|
|
7788
|
+
/**
|
|
7789
|
+
* Get or generate an ID for a button.
|
|
7790
|
+
*
|
|
7791
|
+
* @param button The button for which to get the ID.
|
|
7792
|
+
* @param index Optional index of the button in the buttons array.
|
|
7793
|
+
* @returns The ID of the button.
|
|
7794
|
+
*/
|
|
7795
|
+
getButtonId(button, index) {
|
|
7796
|
+
if (button.id) {
|
|
7797
|
+
return button.id;
|
|
7798
|
+
}
|
|
7799
|
+
const allButtons = this.getButtons();
|
|
7800
|
+
const buttonIndex = index !== undefined ? index : allButtons.indexOf(button);
|
|
7801
|
+
return `action-sheet-button-${this.overlayIndex}-${buttonIndex}`;
|
|
7802
|
+
}
|
|
7803
|
+
/**
|
|
7804
|
+
* When the action sheet has radio buttons, we want to follow the
|
|
7805
|
+
* keyboard navigation pattern for radio groups:
|
|
7806
|
+
* - Arrow Down/Right: Move to the next radio button (wrap to first if at end)
|
|
7807
|
+
* - Arrow Up/Left: Move to the previous radio button (wrap to last if at start)
|
|
7808
|
+
* - Space/Enter: Select the focused radio button and trigger its handler
|
|
7809
|
+
*/
|
|
7810
|
+
onKeydown(ev) {
|
|
7811
|
+
// Only handle keyboard navigation if we have radio buttons
|
|
7812
|
+
if (!this.hasRadioButtons || !this.presented) {
|
|
7813
|
+
return;
|
|
7814
|
+
}
|
|
7815
|
+
const target = ev.target;
|
|
7816
|
+
// Ignore if the target element is not within the action sheet or not a radio button
|
|
7817
|
+
if (!this.el.contains(target) ||
|
|
7818
|
+
!target.classList.contains('action-sheet-button') ||
|
|
7819
|
+
target.getAttribute('role') !== 'radio') {
|
|
7820
|
+
return;
|
|
7821
|
+
}
|
|
7822
|
+
// Get all radio button elements and filter out disabled ones
|
|
7823
|
+
const radios = Array.from(this.el.querySelectorAll('.action-sheet-button[role="radio"]')).filter((el) => !el.disabled);
|
|
7824
|
+
const currentIndex = radios.findIndex((radio) => radio.id === target.id);
|
|
7825
|
+
if (currentIndex === -1) {
|
|
7826
|
+
return;
|
|
7827
|
+
}
|
|
7828
|
+
const allButtons = this.getButtons();
|
|
7829
|
+
const radioButtons = this.getRadioButtons();
|
|
7830
|
+
/**
|
|
7831
|
+
* Build a map of button element IDs to their ActionSheetButton
|
|
7832
|
+
* config objects.
|
|
7833
|
+
* This allows us to quickly look up which button config corresponds
|
|
7834
|
+
* to a DOM element when handling keyboard navigation
|
|
7835
|
+
* (e.g., whenuser presses Space/Enter or arrow keys).
|
|
7836
|
+
* The key is the ID that was set on the DOM element during render,
|
|
7837
|
+
* and the value is the ActionSheetButton config that contains the
|
|
7838
|
+
* handler and other properties.
|
|
7839
|
+
*/
|
|
7840
|
+
const buttonIdMap = new Map();
|
|
7841
|
+
radioButtons.forEach((b) => {
|
|
7842
|
+
const allIndex = allButtons.indexOf(b);
|
|
7843
|
+
const buttonId = this.getButtonId(b, allIndex);
|
|
7844
|
+
buttonIdMap.set(buttonId, b);
|
|
7845
|
+
});
|
|
7846
|
+
let nextEl;
|
|
7847
|
+
if (['ArrowDown', 'ArrowRight'].includes(ev.key)) {
|
|
7848
|
+
ev.preventDefault();
|
|
7849
|
+
ev.stopPropagation();
|
|
7850
|
+
nextEl = currentIndex === radios.length - 1 ? radios[0] : radios[currentIndex + 1];
|
|
7851
|
+
}
|
|
7852
|
+
else if (['ArrowUp', 'ArrowLeft'].includes(ev.key)) {
|
|
7853
|
+
ev.preventDefault();
|
|
7854
|
+
ev.stopPropagation();
|
|
7855
|
+
nextEl = currentIndex === 0 ? radios[radios.length - 1] : radios[currentIndex - 1];
|
|
7856
|
+
}
|
|
7857
|
+
else if (ev.key === ' ' || ev.key === 'Enter') {
|
|
7858
|
+
ev.preventDefault();
|
|
7859
|
+
ev.stopPropagation();
|
|
7860
|
+
const button = buttonIdMap.get(target.id);
|
|
7861
|
+
if (button) {
|
|
7862
|
+
this.selectRadioButton(button);
|
|
7863
|
+
this.buttonClick(button);
|
|
7864
|
+
}
|
|
7865
|
+
return;
|
|
7866
|
+
}
|
|
7867
|
+
// Focus the next radio button
|
|
7868
|
+
if (nextEl) {
|
|
7869
|
+
const button = buttonIdMap.get(nextEl.id);
|
|
7870
|
+
if (button) {
|
|
7871
|
+
this.selectRadioButton(button);
|
|
7872
|
+
nextEl.focus();
|
|
7873
|
+
}
|
|
7874
|
+
}
|
|
7875
|
+
}
|
|
7745
7876
|
connectedCallback() {
|
|
7746
7877
|
prepareOverlay(this.el);
|
|
7747
7878
|
this.triggerChanged();
|
|
@@ -7758,6 +7889,8 @@ class ActionSheet {
|
|
|
7758
7889
|
if (!((_a = this.htmlAttributes) === null || _a === void 0 ? void 0 : _a.id)) {
|
|
7759
7890
|
setOverlayId(this.el);
|
|
7760
7891
|
}
|
|
7892
|
+
// Initialize activeRadioId for radio buttons
|
|
7893
|
+
this.buttonsChanged();
|
|
7761
7894
|
}
|
|
7762
7895
|
componentDidLoad() {
|
|
7763
7896
|
/**
|
|
@@ -7795,22 +7928,74 @@ class ActionSheet {
|
|
|
7795
7928
|
*/
|
|
7796
7929
|
this.triggerChanged();
|
|
7797
7930
|
}
|
|
7931
|
+
renderActionSheetButtons(filteredButtons) {
|
|
7932
|
+
const mode = getIonMode$1(this);
|
|
7933
|
+
const { activeRadioId } = this;
|
|
7934
|
+
return filteredButtons.map((b, index) => {
|
|
7935
|
+
var _a;
|
|
7936
|
+
const isRadio = ((_a = b.htmlAttributes) === null || _a === void 0 ? void 0 : _a.role) === 'radio';
|
|
7937
|
+
const buttonId = this.getButtonId(b, index);
|
|
7938
|
+
const radioButtons = this.getRadioButtons();
|
|
7939
|
+
const isActiveRadio = isRadio && buttonId === activeRadioId;
|
|
7940
|
+
const isFirstRadio = isRadio && b === radioButtons[0];
|
|
7941
|
+
// For radio buttons, set tabindex: 0 for the active one, -1 for others
|
|
7942
|
+
// For non-radio buttons, use default tabindex (undefined, which means 0)
|
|
7943
|
+
/**
|
|
7944
|
+
* For radio buttons, set tabindex based on activeRadioId
|
|
7945
|
+
* - If the button is the active radio, tabindex is 0
|
|
7946
|
+
* - If no radio is active, the first radio button should have tabindex 0
|
|
7947
|
+
* - All other radio buttons have tabindex -1
|
|
7948
|
+
* For non-radio buttons, use default tabindex (undefined, which means 0)
|
|
7949
|
+
*/
|
|
7950
|
+
let tabIndex;
|
|
7951
|
+
if (isRadio) {
|
|
7952
|
+
// Focus on the active radio button
|
|
7953
|
+
if (isActiveRadio) {
|
|
7954
|
+
tabIndex = 0;
|
|
7955
|
+
}
|
|
7956
|
+
else if (!activeRadioId && isFirstRadio) {
|
|
7957
|
+
// No active radio, first radio gets focus
|
|
7958
|
+
tabIndex = 0;
|
|
7959
|
+
}
|
|
7960
|
+
else {
|
|
7961
|
+
// All other radios are not focusable
|
|
7962
|
+
tabIndex = -1;
|
|
7963
|
+
}
|
|
7964
|
+
}
|
|
7965
|
+
else {
|
|
7966
|
+
tabIndex = undefined;
|
|
7967
|
+
}
|
|
7968
|
+
// For radio buttons, set aria-checked based on activeRadioId
|
|
7969
|
+
// Otherwise, use the value from htmlAttributes if provided
|
|
7970
|
+
const htmlAttrs = Object.assign({}, b.htmlAttributes);
|
|
7971
|
+
if (isRadio) {
|
|
7972
|
+
htmlAttrs['aria-checked'] = isActiveRadio ? 'true' : 'false';
|
|
7973
|
+
}
|
|
7974
|
+
return (hAsync("button", Object.assign({}, htmlAttrs, { role: isRadio ? 'radio' : undefined, type: "button", id: buttonId, class: Object.assign(Object.assign({}, buttonClass$3(b)), { 'action-sheet-selected': isActiveRadio }), onClick: () => {
|
|
7975
|
+
if (isRadio) {
|
|
7976
|
+
this.selectRadioButton(b);
|
|
7977
|
+
}
|
|
7978
|
+
this.buttonClick(b);
|
|
7979
|
+
}, disabled: b.disabled, tabIndex: tabIndex }), hAsync("span", { class: "action-sheet-button-inner" }, b.icon && hAsync("ion-icon", { icon: b.icon, "aria-hidden": "true", lazy: false, class: "action-sheet-icon" }), b.text), mode === 'md' && hAsync("ion-ripple-effect", null)));
|
|
7980
|
+
});
|
|
7981
|
+
}
|
|
7798
7982
|
render() {
|
|
7799
|
-
const { header, htmlAttributes, overlayIndex } = this;
|
|
7983
|
+
const { header, htmlAttributes, overlayIndex, hasRadioButtons } = this;
|
|
7800
7984
|
const mode = getIonMode$1(this);
|
|
7801
7985
|
const allButtons = this.getButtons();
|
|
7802
7986
|
const cancelButton = allButtons.find((b) => b.role === 'cancel');
|
|
7803
7987
|
const buttons = allButtons.filter((b) => b.role !== 'cancel');
|
|
7804
7988
|
const headerID = `action-sheet-${overlayIndex}-header`;
|
|
7805
|
-
return (hAsync(Host, Object.assign({ key: '
|
|
7989
|
+
return (hAsync(Host, Object.assign({ key: '173fcff5b1da7c33c267de4667591c946b8c8d03', role: "dialog", "aria-modal": "true", "aria-labelledby": header !== undefined ? headerID : null, tabindex: "-1" }, htmlAttributes, { style: {
|
|
7806
7990
|
zIndex: `${20000 + this.overlayIndex}`,
|
|
7807
|
-
}, class: Object.assign(Object.assign({ [mode]: true }, getClassMap(this.cssClass)), { 'overlay-hidden': true, 'action-sheet-translucent': this.translucent }), onIonActionSheetWillDismiss: this.dispatchCancelHandler, onIonBackdropTap: this.onBackdropTap }), hAsync("ion-backdrop", { key: '
|
|
7991
|
+
}, class: Object.assign(Object.assign({ [mode]: true }, getClassMap(this.cssClass)), { 'overlay-hidden': true, 'action-sheet-translucent': this.translucent }), onIonActionSheetWillDismiss: this.dispatchCancelHandler, onIonBackdropTap: this.onBackdropTap }), hAsync("ion-backdrop", { key: '521ede659f747864f6c974e09016436eceb7158c', tappable: this.backdropDismiss }), hAsync("div", { key: '7a7946fc434bc444f16a70638f5e948c69d33fcd', tabindex: "0", "aria-hidden": "true" }), hAsync("div", { key: 'bcff39a580489dbafa255842e57aa8602c6d0f18', class: "action-sheet-wrapper ion-overlay-wrapper", ref: (el) => (this.wrapperEl = el) }, hAsync("div", { key: '84bba13ce14261f0f0daa3f9c77648c9e7f36e0e', class: "action-sheet-container" }, hAsync("div", { key: 'd9c8ac404fd6719a7adf8cb36549f67616f9a0c4', class: "action-sheet-group", ref: (el) => (this.groupEl = el), role: hasRadioButtons ? 'radiogroup' : undefined }, header !== undefined && (hAsync("div", { key: '180433a8ad03ef5c54728a1a8f34715b6921d658', id: headerID, class: {
|
|
7808
7992
|
'action-sheet-title': true,
|
|
7809
7993
|
'action-sheet-has-sub-title': this.subHeader !== undefined,
|
|
7810
|
-
} }, header, this.subHeader && hAsync("div", { key: '
|
|
7994
|
+
} }, header, this.subHeader && hAsync("div", { key: '7138e79e61b1a8f42bc5a9175c57fa2f15d7ec5a', class: "action-sheet-sub-title" }, this.subHeader))), this.renderActionSheetButtons(buttons)), cancelButton && (hAsync("div", { key: 'b617c722f5b8028d73ed34b69310f312c65f34a7', class: "action-sheet-group action-sheet-group-cancel" }, hAsync("button", Object.assign({ key: 'd0dd876fc48815df3710413c201c0b445a8e16c0' }, cancelButton.htmlAttributes, { type: "button", class: buttonClass$3(cancelButton), onClick: () => this.buttonClick(cancelButton) }), hAsync("span", { key: 'e7b960157cc6fc5fe92a12090b2be55e8ae072e4', class: "action-sheet-button-inner" }, cancelButton.icon && (hAsync("ion-icon", { key: '05498ffc60cab911dbff0ecbc6168dea59ada9a5', icon: cancelButton.icon, "aria-hidden": "true", lazy: false, class: "action-sheet-icon" })), cancelButton.text), mode === 'md' && hAsync("ion-ripple-effect", { key: '3d401346cea301be4ca03671f7370f6f4b0b6bde' })))))), hAsync("div", { key: '971f3c5fcc07f36c28eb469a47ec0290c692e139', tabindex: "0", "aria-hidden": "true" })));
|
|
7811
7995
|
}
|
|
7812
7996
|
get el() { return getElement(this); }
|
|
7813
7997
|
static get watchers() { return {
|
|
7998
|
+
"buttons": ["buttonsChanged"],
|
|
7814
7999
|
"isOpen": ["onIsOpenChange"],
|
|
7815
8000
|
"trigger": ["triggerChanged"]
|
|
7816
8001
|
}; }
|
|
@@ -7838,12 +8023,13 @@ class ActionSheet {
|
|
|
7838
8023
|
"htmlAttributes": [16],
|
|
7839
8024
|
"isOpen": [4, "is-open"],
|
|
7840
8025
|
"trigger": [1],
|
|
8026
|
+
"activeRadioId": [32],
|
|
7841
8027
|
"present": [64],
|
|
7842
8028
|
"dismiss": [64],
|
|
7843
8029
|
"onDidDismiss": [64],
|
|
7844
8030
|
"onWillDismiss": [64]
|
|
7845
8031
|
},
|
|
7846
|
-
"$listeners$":
|
|
8032
|
+
"$listeners$": [[0, "keydown", "onKeydown"]],
|
|
7847
8033
|
"$lazyBundleId$": "-",
|
|
7848
8034
|
"$attrsToReflect$": []
|
|
7849
8035
|
}; }
|
|
@@ -9685,105 +9871,305 @@ class CardTitle {
|
|
|
9685
9871
|
}; }
|
|
9686
9872
|
}
|
|
9687
9873
|
|
|
9688
|
-
const checkboxIosCss = ":host{--checkbox-background-checked:var(--ion-color-primary, #0054e9);--border-color-checked:var(--ion-color-primary, #0054e9);--checkmark-color:var(--ion-color-primary-contrast, #fff);--transition:none;display:inline-block;position:relative;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:2}:host(.in-item){-ms-flex:1 1 0px;flex:1 1 0;width:100%;height:100%}:host([slot=start]),:host([slot=end]){-ms-flex:initial;flex:initial;width:auto}:host(.ion-color){--checkbox-background-checked:var(--ion-color-base);--border-color-checked:var(--ion-color-base);--checkmark-color:var(--ion-color-contrast)}.checkbox-wrapper{display:-ms-flexbox;display:flex;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;height:inherit;cursor:inherit}.label-text-wrapper{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}:host(.in-item) .label-text-wrapper,:host(.in-item:not(.checkbox-label-placement-stacked):not([slot])) .native-wrapper{margin-top:10px;margin-bottom:10px}:host(.in-item.checkbox-label-placement-stacked) .label-text-wrapper{margin-top:10px;margin-bottom:16px}:host(.in-item.checkbox-label-placement-stacked) .native-wrapper{margin-bottom:10px}.label-text-wrapper-hidden{display:none}input{display:none}.native-wrapper{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.checkbox-icon{border-radius:var(--border-radius);position:relative;width:var(--size);height:var(--size);-webkit-transition:var(--transition);transition:var(--transition);border-width:var(--border-width);border-style:var(--border-style);border-color:var(--border-color);background:var(--checkbox-background);-webkit-box-sizing:border-box;box-sizing:border-box}.checkbox-icon path{fill:none;stroke:var(--checkmark-color);stroke-width:var(--checkmark-width);opacity:0}.checkbox-bottom{padding-top:4px;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;font-size:0.75rem;white-space:normal}:host(.checkbox-label-placement-stacked) .checkbox-bottom{font-size:1rem}.checkbox-bottom .error-text{display:none;color:var(--ion-color-danger, #c5000f)}.checkbox-bottom .helper-text{display:block;color:var(--ion-color-step-700, var(--ion-text-color-step-300, #4d4d4d))}:host(.ion-touched.ion-invalid) .checkbox-bottom .error-text{display:block}:host(.ion-touched.ion-invalid) .checkbox-bottom .helper-text{display:none}:host(.checkbox-label-placement-start) .checkbox-wrapper{-ms-flex-direction:row;flex-direction:row}:host(.checkbox-label-placement-start) .label-text-wrapper{-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:16px;margin-inline-end:16px}:host(.checkbox-label-placement-end) .checkbox-wrapper{-ms-flex-direction:row-reverse;flex-direction:row-reverse;-ms-flex-pack:start;justify-content:start}:host(.checkbox-label-placement-end) .label-text-wrapper{-webkit-margin-start:16px;margin-inline-start:16px;-webkit-margin-end:0;margin-inline-end:0}:host(.checkbox-label-placement-fixed) .label-text-wrapper{-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:16px;margin-inline-end:16px}:host(.checkbox-label-placement-fixed) .label-text-wrapper{-ms-flex:0 0 100px;flex:0 0 100px;width:100px;min-width:100px;max-width:200px}:host(.checkbox-label-placement-stacked) .checkbox-wrapper{-ms-flex-direction:column;flex-direction:column;text-align:center}:host(.checkbox-label-placement-stacked) .label-text-wrapper{-webkit-transform:scale(0.75);transform:scale(0.75);margin-left:0;margin-right:0;margin-bottom:16px;max-width:calc(100% / 0.75)}:host(.checkbox-label-placement-stacked.checkbox-alignment-start) .label-text-wrapper{-webkit-transform-origin:left top;transform-origin:left top}:host-context([dir=rtl]):host(.checkbox-label-placement-stacked.checkbox-alignment-start) .label-text-wrapper,:host-context([dir=rtl]).checkbox-label-placement-stacked.checkbox-alignment-start .label-text-wrapper{-webkit-transform-origin:right top;transform-origin:right top}@supports selector(:dir(rtl)){:host(.checkbox-label-placement-stacked.checkbox-alignment-start:dir(rtl)) .label-text-wrapper{-webkit-transform-origin:right top;transform-origin:right top}}:host(.checkbox-label-placement-stacked.checkbox-alignment-center) .label-text-wrapper{-webkit-transform-origin:center top;transform-origin:center top}:host-context([dir=rtl]):host(.checkbox-label-placement-stacked.checkbox-alignment-center) .label-text-wrapper,:host-context([dir=rtl]).checkbox-label-placement-stacked.checkbox-alignment-center .label-text-wrapper{-webkit-transform-origin:calc(100% - center) top;transform-origin:calc(100% - center) top}@supports selector(:dir(rtl)){:host(.checkbox-label-placement-stacked.checkbox-alignment-center:dir(rtl)) .label-text-wrapper{-webkit-transform-origin:calc(100% - center) top;transform-origin:calc(100% - center) top}}:host(.checkbox-justify-space-between) .checkbox-wrapper{-ms-flex-pack:justify;justify-content:space-between}:host(.checkbox-justify-start) .checkbox-wrapper{-ms-flex-pack:start;justify-content:start}:host(.checkbox-justify-end) .checkbox-wrapper{-ms-flex-pack:end;justify-content:end}:host(.checkbox-alignment-start) .checkbox-wrapper{-ms-flex-align:start;align-items:start}:host(.checkbox-alignment-center) .checkbox-wrapper{-ms-flex-align:center;align-items:center}:host(.checkbox-justify-space-between),:host(.checkbox-justify-start),:host(.checkbox-justify-end),:host(.checkbox-alignment-start),:host(.checkbox-alignment-center){display:block}:host(.checkbox-checked) .checkbox-icon,:host(.checkbox-indeterminate) .checkbox-icon{border-color:var(--border-color-checked);background:var(--checkbox-background-checked)}:host(.checkbox-checked) .checkbox-icon path,:host(.checkbox-indeterminate) .checkbox-icon path{opacity:1}:host(.checkbox-disabled){pointer-events:none}:host{--border-radius:50%;--border-width:0.125rem;--border-style:solid;--border-color:rgba(var(--ion-text-color-rgb, 0, 0, 0), 0.23);--checkbox-background:var(--ion-item-background, var(--ion-background-color, #fff));--size:min(1.375rem, 55.836px);--checkmark-width:1.5px}:host(.checkbox-disabled){opacity:0.3}";
|
|
9689
|
-
|
|
9690
|
-
const checkboxMdCss = ":host{--checkbox-background-checked:var(--ion-color-primary, #0054e9);--border-color-checked:var(--ion-color-primary, #0054e9);--checkmark-color:var(--ion-color-primary-contrast, #fff);--transition:none;display:inline-block;position:relative;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:2}:host(.in-item){-ms-flex:1 1 0px;flex:1 1 0;width:100%;height:100%}:host([slot=start]),:host([slot=end]){-ms-flex:initial;flex:initial;width:auto}:host(.ion-color){--checkbox-background-checked:var(--ion-color-base);--border-color-checked:var(--ion-color-base);--checkmark-color:var(--ion-color-contrast)}.checkbox-wrapper{display:-ms-flexbox;display:flex;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;height:inherit;cursor:inherit}.label-text-wrapper{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}:host(.in-item) .label-text-wrapper,:host(.in-item:not(.checkbox-label-placement-stacked):not([slot])) .native-wrapper{margin-top:10px;margin-bottom:10px}:host(.in-item.checkbox-label-placement-stacked) .label-text-wrapper{margin-top:10px;margin-bottom:16px}:host(.in-item.checkbox-label-placement-stacked) .native-wrapper{margin-bottom:10px}.label-text-wrapper-hidden{display:none}input{display:none}.native-wrapper{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.checkbox-icon{border-radius:var(--border-radius);position:relative;width:var(--size);height:var(--size);-webkit-transition:var(--transition);transition:var(--transition);border-width:var(--border-width);border-style:var(--border-style);border-color:var(--border-color);background:var(--checkbox-background);-webkit-box-sizing:border-box;box-sizing:border-box}.checkbox-icon path{fill:none;stroke:var(--checkmark-color);stroke-width:var(--checkmark-width);opacity:0}.checkbox-bottom{padding-top:4px;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;font-size:0.75rem;white-space:normal}:host(.checkbox-label-placement-stacked) .checkbox-bottom{font-size:1rem}.checkbox-bottom .error-text{display:none;color:var(--ion-color-danger, #c5000f)}.checkbox-bottom .helper-text{display:block;color:var(--ion-color-step-700, var(--ion-text-color-step-300, #4d4d4d))}:host(.ion-touched.ion-invalid) .checkbox-bottom .error-text{display:block}:host(.ion-touched.ion-invalid) .checkbox-bottom .helper-text{display:none}:host(.checkbox-label-placement-start) .checkbox-wrapper{-ms-flex-direction:row;flex-direction:row}:host(.checkbox-label-placement-start) .label-text-wrapper{-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:16px;margin-inline-end:16px}:host(.checkbox-label-placement-end) .checkbox-wrapper{-ms-flex-direction:row-reverse;flex-direction:row-reverse;-ms-flex-pack:start;justify-content:start}:host(.checkbox-label-placement-end) .label-text-wrapper{-webkit-margin-start:16px;margin-inline-start:16px;-webkit-margin-end:0;margin-inline-end:0}:host(.checkbox-label-placement-fixed) .label-text-wrapper{-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:16px;margin-inline-end:16px}:host(.checkbox-label-placement-fixed) .label-text-wrapper{-ms-flex:0 0 100px;flex:0 0 100px;width:100px;min-width:100px;max-width:200px}:host(.checkbox-label-placement-stacked) .checkbox-wrapper{-ms-flex-direction:column;flex-direction:column;text-align:center}:host(.checkbox-label-placement-stacked) .label-text-wrapper{-webkit-transform:scale(0.75);transform:scale(0.75);margin-left:0;margin-right:0;margin-bottom:16px;max-width:calc(100% / 0.75)}:host(.checkbox-label-placement-stacked.checkbox-alignment-start) .label-text-wrapper{-webkit-transform-origin:left top;transform-origin:left top}:host-context([dir=rtl]):host(.checkbox-label-placement-stacked.checkbox-alignment-start) .label-text-wrapper,:host-context([dir=rtl]).checkbox-label-placement-stacked.checkbox-alignment-start .label-text-wrapper{-webkit-transform-origin:right top;transform-origin:right top}@supports selector(:dir(rtl)){:host(.checkbox-label-placement-stacked.checkbox-alignment-start:dir(rtl)) .label-text-wrapper{-webkit-transform-origin:right top;transform-origin:right top}}:host(.checkbox-label-placement-stacked.checkbox-alignment-center) .label-text-wrapper{-webkit-transform-origin:center top;transform-origin:center top}:host-context([dir=rtl]):host(.checkbox-label-placement-stacked.checkbox-alignment-center) .label-text-wrapper,:host-context([dir=rtl]).checkbox-label-placement-stacked.checkbox-alignment-center .label-text-wrapper{-webkit-transform-origin:calc(100% - center) top;transform-origin:calc(100% - center) top}@supports selector(:dir(rtl)){:host(.checkbox-label-placement-stacked.checkbox-alignment-center:dir(rtl)) .label-text-wrapper{-webkit-transform-origin:calc(100% - center) top;transform-origin:calc(100% - center) top}}:host(.checkbox-justify-space-between) .checkbox-wrapper{-ms-flex-pack:justify;justify-content:space-between}:host(.checkbox-justify-start) .checkbox-wrapper{-ms-flex-pack:start;justify-content:start}:host(.checkbox-justify-end) .checkbox-wrapper{-ms-flex-pack:end;justify-content:end}:host(.checkbox-alignment-start) .checkbox-wrapper{-ms-flex-align:start;align-items:start}:host(.checkbox-alignment-center) .checkbox-wrapper{-ms-flex-align:center;align-items:center}:host(.checkbox-justify-space-between),:host(.checkbox-justify-start),:host(.checkbox-justify-end),:host(.checkbox-alignment-start),:host(.checkbox-alignment-center){display:block}:host(.checkbox-checked) .checkbox-icon,:host(.checkbox-indeterminate) .checkbox-icon{border-color:var(--border-color-checked);background:var(--checkbox-background-checked)}:host(.checkbox-checked) .checkbox-icon path,:host(.checkbox-indeterminate) .checkbox-icon path{opacity:1}:host(.checkbox-disabled){pointer-events:none}:host{--border-radius:calc(var(--size) * .125);--border-width:2px;--border-style:solid;--border-color:rgb(var(--ion-text-color-rgb, 0, 0, 0), 0.6);--checkmark-width:3;--checkbox-background:var(--ion-item-background, var(--ion-background-color, #fff));--transition:background 180ms cubic-bezier(0.4, 0, 0.2, 1);--size:18px}.checkbox-icon path{stroke-dasharray:30;stroke-dashoffset:30}:host(.checkbox-checked) .checkbox-icon path,:host(.checkbox-indeterminate) .checkbox-icon path{stroke-dashoffset:0;-webkit-transition:stroke-dashoffset 90ms linear 90ms;transition:stroke-dashoffset 90ms linear 90ms}:host(.checkbox-disabled) .label-text-wrapper{opacity:0.38}:host(.checkbox-disabled) .native-wrapper{opacity:0.63}";
|
|
9691
|
-
|
|
9692
9874
|
/**
|
|
9693
|
-
*
|
|
9694
|
-
*
|
|
9695
|
-
*
|
|
9875
|
+
* A utility to calculate the size of an outline notch
|
|
9876
|
+
* width relative to the content passed. This is used in
|
|
9877
|
+
* components such as `ion-select` with `fill="outline"`
|
|
9878
|
+
* where we need to pass slotted HTML content. This is not
|
|
9879
|
+
* needed when rendering plaintext content because we can
|
|
9880
|
+
* render the plaintext again hidden with `opacity: 0` inside
|
|
9881
|
+
* of the notch. As a result we can rely on the intrinsic size
|
|
9882
|
+
* of the element to correctly compute the notch width. We
|
|
9883
|
+
* cannot do this with slotted content because we cannot project
|
|
9884
|
+
* it into 2 places at once.
|
|
9696
9885
|
*
|
|
9697
|
-
* @
|
|
9698
|
-
* @
|
|
9699
|
-
* @
|
|
9700
|
-
* @
|
|
9701
|
-
* @part helper-text - Supporting text displayed beneath the checkbox label when the checkbox is valid.
|
|
9702
|
-
* @part error-text - Supporting text displayed beneath the checkbox label when the checkbox is invalid and touched.
|
|
9886
|
+
* @internal
|
|
9887
|
+
* @param el: The host element
|
|
9888
|
+
* @param getNotchSpacerEl: A function that returns a reference to the notch spacer element inside of the component template.
|
|
9889
|
+
* @param getLabelSlot: A function that returns a reference to the slotted content.
|
|
9703
9890
|
*/
|
|
9704
|
-
|
|
9705
|
-
|
|
9706
|
-
|
|
9707
|
-
|
|
9708
|
-
|
|
9709
|
-
this.ionBlur = createEvent(this, "ionBlur", 7);
|
|
9710
|
-
this.inputId = `ion-cb-${checkboxIds++}`;
|
|
9711
|
-
this.inputLabelId = `${this.inputId}-lbl`;
|
|
9712
|
-
this.helperTextId = `${this.inputId}-helper-text`;
|
|
9713
|
-
this.errorTextId = `${this.inputId}-error-text`;
|
|
9714
|
-
this.inheritedAttributes = {};
|
|
9715
|
-
/**
|
|
9716
|
-
* The name of the control, which is submitted with the form data.
|
|
9717
|
-
*/
|
|
9718
|
-
this.name = this.inputId;
|
|
9719
|
-
/**
|
|
9720
|
-
* If `true`, the checkbox is selected.
|
|
9721
|
-
*/
|
|
9722
|
-
this.checked = false;
|
|
9723
|
-
/**
|
|
9724
|
-
* If `true`, the checkbox will visually appear as indeterminate.
|
|
9725
|
-
*/
|
|
9726
|
-
this.indeterminate = false;
|
|
9891
|
+
const createNotchController = (el, getNotchSpacerEl, getLabelSlot) => {
|
|
9892
|
+
let notchVisibilityIO;
|
|
9893
|
+
const needsExplicitNotchWidth = () => {
|
|
9894
|
+
const notchSpacerEl = getNotchSpacerEl();
|
|
9895
|
+
if (
|
|
9727
9896
|
/**
|
|
9728
|
-
* If
|
|
9897
|
+
* If the notch is not being used
|
|
9898
|
+
* then we do not need to set the notch width.
|
|
9729
9899
|
*/
|
|
9730
|
-
|
|
9900
|
+
notchSpacerEl === undefined ||
|
|
9901
|
+
/**
|
|
9902
|
+
* If either the label property is being
|
|
9903
|
+
* used or the label slot is not defined,
|
|
9904
|
+
* then we do not need to estimate the notch width.
|
|
9905
|
+
*/
|
|
9906
|
+
el.label !== undefined ||
|
|
9907
|
+
getLabelSlot() === null) {
|
|
9908
|
+
return false;
|
|
9909
|
+
}
|
|
9910
|
+
return true;
|
|
9911
|
+
};
|
|
9912
|
+
const calculateNotchWidth = () => {
|
|
9913
|
+
if (needsExplicitNotchWidth()) {
|
|
9914
|
+
/**
|
|
9915
|
+
* Run this the frame after
|
|
9916
|
+
* the browser has re-painted the host element.
|
|
9917
|
+
* Otherwise, the label element may have a width
|
|
9918
|
+
* of 0 and the IntersectionObserver will be used.
|
|
9919
|
+
*/
|
|
9920
|
+
raf(() => {
|
|
9921
|
+
setNotchWidth();
|
|
9922
|
+
});
|
|
9923
|
+
}
|
|
9924
|
+
};
|
|
9925
|
+
/**
|
|
9926
|
+
* When using a label prop we can render
|
|
9927
|
+
* the label value inside of the notch and
|
|
9928
|
+
* let the browser calculate the size of the notch.
|
|
9929
|
+
* However, we cannot render the label slot in multiple
|
|
9930
|
+
* places so we need to manually calculate the notch dimension
|
|
9931
|
+
* based on the size of the slotted content.
|
|
9932
|
+
*
|
|
9933
|
+
* This function should only be used to set the notch width
|
|
9934
|
+
* on slotted label content. The notch width for label prop
|
|
9935
|
+
* content is automatically calculated based on the
|
|
9936
|
+
* intrinsic size of the label text.
|
|
9937
|
+
*/
|
|
9938
|
+
const setNotchWidth = () => {
|
|
9939
|
+
const notchSpacerEl = getNotchSpacerEl();
|
|
9940
|
+
if (notchSpacerEl === undefined) {
|
|
9941
|
+
return;
|
|
9942
|
+
}
|
|
9943
|
+
if (!needsExplicitNotchWidth()) {
|
|
9944
|
+
notchSpacerEl.style.removeProperty('width');
|
|
9945
|
+
return;
|
|
9946
|
+
}
|
|
9947
|
+
const width = getLabelSlot().scrollWidth;
|
|
9948
|
+
if (
|
|
9731
9949
|
/**
|
|
9732
|
-
*
|
|
9733
|
-
*
|
|
9950
|
+
* If the computed width of the label is 0
|
|
9951
|
+
* and notchSpacerEl's offsetParent is null
|
|
9952
|
+
* then that means the element is hidden.
|
|
9953
|
+
* As a result, we need to wait for the element
|
|
9954
|
+
* to become visible before setting the notch width.
|
|
9734
9955
|
*
|
|
9735
|
-
*
|
|
9736
|
-
*
|
|
9737
|
-
|
|
9738
|
-
|
|
9739
|
-
/**
|
|
9740
|
-
* Where to place the label relative to the checkbox.
|
|
9741
|
-
* `"start"`: The label will appear to the left of the checkbox in LTR and to the right in RTL.
|
|
9742
|
-
* `"end"`: The label will appear to the right of the checkbox in LTR and to the left in RTL.
|
|
9743
|
-
* `"fixed"`: The label has the same behavior as `"start"` except it also has a fixed width. Long text will be truncated with ellipses ("...").
|
|
9744
|
-
* `"stacked"`: The label will appear above the checkbox regardless of the direction. The alignment of the label can be controlled with the `alignment` property.
|
|
9745
|
-
*/
|
|
9746
|
-
this.labelPlacement = 'start';
|
|
9747
|
-
/**
|
|
9748
|
-
* If true, screen readers will announce it as a required field. This property
|
|
9749
|
-
* works only for accessibility purposes, it will not prevent the form from
|
|
9750
|
-
* submitting if the value is invalid.
|
|
9751
|
-
*/
|
|
9752
|
-
this.required = false;
|
|
9753
|
-
/**
|
|
9754
|
-
* Sets the checked property and emits
|
|
9755
|
-
* the ionChange event. Use this to update the
|
|
9756
|
-
* checked state in response to user-generated
|
|
9757
|
-
* actions such as a click.
|
|
9956
|
+
* We do not check el.offsetParent because
|
|
9957
|
+
* that can be null if the host element has
|
|
9958
|
+
* position: fixed applied to it.
|
|
9959
|
+
* notchSpacerEl does not have position: fixed.
|
|
9758
9960
|
*/
|
|
9759
|
-
|
|
9760
|
-
|
|
9761
|
-
|
|
9762
|
-
|
|
9763
|
-
|
|
9764
|
-
|
|
9765
|
-
|
|
9766
|
-
|
|
9767
|
-
|
|
9768
|
-
|
|
9769
|
-
|
|
9770
|
-
|
|
9771
|
-
|
|
9772
|
-
|
|
9773
|
-
|
|
9774
|
-
|
|
9775
|
-
|
|
9776
|
-
|
|
9777
|
-
|
|
9778
|
-
|
|
9779
|
-
|
|
9780
|
-
|
|
9781
|
-
|
|
9782
|
-
}
|
|
9783
|
-
}
|
|
9784
|
-
|
|
9785
|
-
|
|
9786
|
-
|
|
9961
|
+
width === 0 &&
|
|
9962
|
+
notchSpacerEl.offsetParent === null &&
|
|
9963
|
+
win$1 !== undefined &&
|
|
9964
|
+
'IntersectionObserver' in win$1) {
|
|
9965
|
+
/**
|
|
9966
|
+
* If there is an IO already attached
|
|
9967
|
+
* then that will update the notch
|
|
9968
|
+
* once the element becomes visible.
|
|
9969
|
+
* As a result, there is no need to create
|
|
9970
|
+
* another one.
|
|
9971
|
+
*/
|
|
9972
|
+
if (notchVisibilityIO !== undefined) {
|
|
9973
|
+
return;
|
|
9974
|
+
}
|
|
9975
|
+
const io = (notchVisibilityIO = new IntersectionObserver((ev) => {
|
|
9976
|
+
/**
|
|
9977
|
+
* If the element is visible then we
|
|
9978
|
+
* can try setting the notch width again.
|
|
9979
|
+
*/
|
|
9980
|
+
if (ev[0].intersectionRatio === 1) {
|
|
9981
|
+
setNotchWidth();
|
|
9982
|
+
io.disconnect();
|
|
9983
|
+
notchVisibilityIO = undefined;
|
|
9984
|
+
}
|
|
9985
|
+
},
|
|
9986
|
+
/**
|
|
9987
|
+
* Set the root to be the host element
|
|
9988
|
+
* This causes the IO callback
|
|
9989
|
+
* to be fired in WebKit as soon as the element
|
|
9990
|
+
* is visible. If we used the default root value
|
|
9991
|
+
* then WebKit would only fire the IO callback
|
|
9992
|
+
* after any animations (such as a modal transition)
|
|
9993
|
+
* finished, and there would potentially be a flicker.
|
|
9994
|
+
*/
|
|
9995
|
+
{ threshold: 0.01, root: el }));
|
|
9996
|
+
io.observe(notchSpacerEl);
|
|
9997
|
+
return;
|
|
9998
|
+
}
|
|
9999
|
+
/**
|
|
10000
|
+
* If the element is visible then we can set the notch width.
|
|
10001
|
+
* The notch is only visible when the label is scaled,
|
|
10002
|
+
* which is why we multiply the width by 0.75 as this is
|
|
10003
|
+
* the same amount the label element is scaled by in the host CSS.
|
|
10004
|
+
* (See $form-control-label-stacked-scale in ionic.globals.scss).
|
|
10005
|
+
*/
|
|
10006
|
+
notchSpacerEl.style.setProperty('width', `${width * 0.75}px`);
|
|
10007
|
+
};
|
|
10008
|
+
const destroy = () => {
|
|
10009
|
+
if (notchVisibilityIO) {
|
|
10010
|
+
notchVisibilityIO.disconnect();
|
|
10011
|
+
notchVisibilityIO = undefined;
|
|
10012
|
+
}
|
|
10013
|
+
};
|
|
10014
|
+
return {
|
|
10015
|
+
calculateNotchWidth,
|
|
10016
|
+
destroy,
|
|
10017
|
+
};
|
|
10018
|
+
};
|
|
10019
|
+
|
|
10020
|
+
/**
|
|
10021
|
+
* Uses the compareWith param to compare two values to determine if they are equal.
|
|
10022
|
+
*
|
|
10023
|
+
* @param currentValue The current value of the control.
|
|
10024
|
+
* @param compareValue The value to compare against.
|
|
10025
|
+
* @param compareWith The function or property name to use to compare values.
|
|
10026
|
+
*/
|
|
10027
|
+
const compareOptions = (currentValue, compareValue, compareWith) => {
|
|
10028
|
+
if (typeof compareWith === 'function') {
|
|
10029
|
+
return compareWith(currentValue, compareValue);
|
|
10030
|
+
}
|
|
10031
|
+
else if (typeof compareWith === 'string') {
|
|
10032
|
+
return currentValue[compareWith] === compareValue[compareWith];
|
|
10033
|
+
}
|
|
10034
|
+
else {
|
|
10035
|
+
return Array.isArray(compareValue) ? compareValue.includes(currentValue) : currentValue === compareValue;
|
|
10036
|
+
}
|
|
10037
|
+
};
|
|
10038
|
+
/**
|
|
10039
|
+
* Compares a value against the current value(s) to determine if it is selected.
|
|
10040
|
+
*
|
|
10041
|
+
* @param currentValue The current value of the control.
|
|
10042
|
+
* @param compareValue The value to compare against.
|
|
10043
|
+
* @param compareWith The function or property name to use to compare values.
|
|
10044
|
+
*/
|
|
10045
|
+
const isOptionSelected = (currentValue, compareValue, compareWith) => {
|
|
10046
|
+
if (currentValue === undefined) {
|
|
10047
|
+
return false;
|
|
10048
|
+
}
|
|
10049
|
+
if (Array.isArray(currentValue)) {
|
|
10050
|
+
return currentValue.some((val) => compareOptions(val, compareValue, compareWith));
|
|
10051
|
+
}
|
|
10052
|
+
else {
|
|
10053
|
+
return compareOptions(currentValue, compareValue, compareWith);
|
|
10054
|
+
}
|
|
10055
|
+
};
|
|
10056
|
+
|
|
10057
|
+
/**
|
|
10058
|
+
* Checks if the form element is in an invalid state based on
|
|
10059
|
+
* Ionic validation classes.
|
|
10060
|
+
*
|
|
10061
|
+
* @param el The form element to check.
|
|
10062
|
+
* @returns `true` if the element is invalid, `false` otherwise.
|
|
10063
|
+
*/
|
|
10064
|
+
const checkInvalidState = (el) => {
|
|
10065
|
+
const hasIonTouched = el.classList.contains('ion-touched');
|
|
10066
|
+
const hasIonInvalid = el.classList.contains('ion-invalid');
|
|
10067
|
+
return hasIonTouched && hasIonInvalid;
|
|
10068
|
+
};
|
|
10069
|
+
|
|
10070
|
+
const checkboxIosCss = ":host{--checkbox-background-checked:var(--ion-color-primary, #0054e9);--border-color-checked:var(--ion-color-primary, #0054e9);--checkmark-color:var(--ion-color-primary-contrast, #fff);--transition:none;display:inline-block;position:relative;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:2}:host(.in-item){-ms-flex:1 1 0px;flex:1 1 0;width:100%;height:100%}:host([slot=start]),:host([slot=end]){-ms-flex:initial;flex:initial;width:auto}:host(.ion-color){--checkbox-background-checked:var(--ion-color-base);--border-color-checked:var(--ion-color-base);--checkmark-color:var(--ion-color-contrast)}.checkbox-wrapper{display:-ms-flexbox;display:flex;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;height:inherit;cursor:inherit}.label-text-wrapper{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}:host(.in-item) .label-text-wrapper,:host(.in-item:not(.checkbox-label-placement-stacked):not([slot])) .native-wrapper{margin-top:10px;margin-bottom:10px}:host(.in-item.checkbox-label-placement-stacked) .label-text-wrapper{margin-top:10px;margin-bottom:16px}:host(.in-item.checkbox-label-placement-stacked) .native-wrapper{margin-bottom:10px}.label-text-wrapper-hidden{display:none}input{display:none}.native-wrapper{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.checkbox-icon{border-radius:var(--border-radius);position:relative;width:var(--size);height:var(--size);-webkit-transition:var(--transition);transition:var(--transition);border-width:var(--border-width);border-style:var(--border-style);border-color:var(--border-color);background:var(--checkbox-background);-webkit-box-sizing:border-box;box-sizing:border-box}.checkbox-icon path{fill:none;stroke:var(--checkmark-color);stroke-width:var(--checkmark-width);opacity:0}.checkbox-bottom{padding-top:4px;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;font-size:0.75rem;white-space:normal}:host(.checkbox-label-placement-stacked) .checkbox-bottom{font-size:1rem}.checkbox-bottom .error-text{display:none;color:var(--ion-color-danger, #c5000f)}.checkbox-bottom .helper-text{display:block;color:var(--ion-color-step-700, var(--ion-text-color-step-300, #4d4d4d))}:host(.ion-touched.ion-invalid) .checkbox-bottom .error-text{display:block}:host(.ion-touched.ion-invalid) .checkbox-bottom .helper-text{display:none}:host(.checkbox-label-placement-start) .checkbox-wrapper{-ms-flex-direction:row;flex-direction:row}:host(.checkbox-label-placement-start) .label-text-wrapper{-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:16px;margin-inline-end:16px}:host(.checkbox-label-placement-end) .checkbox-wrapper{-ms-flex-direction:row-reverse;flex-direction:row-reverse;-ms-flex-pack:start;justify-content:start}:host(.checkbox-label-placement-end) .label-text-wrapper{-webkit-margin-start:16px;margin-inline-start:16px;-webkit-margin-end:0;margin-inline-end:0}:host(.checkbox-label-placement-fixed) .label-text-wrapper{-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:16px;margin-inline-end:16px}:host(.checkbox-label-placement-fixed) .label-text-wrapper{-ms-flex:0 0 100px;flex:0 0 100px;width:100px;min-width:100px;max-width:200px}:host(.checkbox-label-placement-stacked) .checkbox-wrapper{-ms-flex-direction:column;flex-direction:column;text-align:center}:host(.checkbox-label-placement-stacked) .label-text-wrapper{-webkit-transform:scale(0.75);transform:scale(0.75);margin-left:0;margin-right:0;margin-bottom:16px;max-width:calc(100% / 0.75)}:host(.checkbox-label-placement-stacked.checkbox-alignment-start) .label-text-wrapper{-webkit-transform-origin:left top;transform-origin:left top}:host-context([dir=rtl]):host(.checkbox-label-placement-stacked.checkbox-alignment-start) .label-text-wrapper,:host-context([dir=rtl]).checkbox-label-placement-stacked.checkbox-alignment-start .label-text-wrapper{-webkit-transform-origin:right top;transform-origin:right top}@supports selector(:dir(rtl)){:host(.checkbox-label-placement-stacked.checkbox-alignment-start:dir(rtl)) .label-text-wrapper{-webkit-transform-origin:right top;transform-origin:right top}}:host(.checkbox-label-placement-stacked.checkbox-alignment-center) .label-text-wrapper{-webkit-transform-origin:center top;transform-origin:center top}:host-context([dir=rtl]):host(.checkbox-label-placement-stacked.checkbox-alignment-center) .label-text-wrapper,:host-context([dir=rtl]).checkbox-label-placement-stacked.checkbox-alignment-center .label-text-wrapper{-webkit-transform-origin:calc(100% - center) top;transform-origin:calc(100% - center) top}@supports selector(:dir(rtl)){:host(.checkbox-label-placement-stacked.checkbox-alignment-center:dir(rtl)) .label-text-wrapper{-webkit-transform-origin:calc(100% - center) top;transform-origin:calc(100% - center) top}}:host(.checkbox-justify-space-between) .checkbox-wrapper{-ms-flex-pack:justify;justify-content:space-between}:host(.checkbox-justify-start) .checkbox-wrapper{-ms-flex-pack:start;justify-content:start}:host(.checkbox-justify-end) .checkbox-wrapper{-ms-flex-pack:end;justify-content:end}:host(.checkbox-alignment-start) .checkbox-wrapper{-ms-flex-align:start;align-items:start}:host(.checkbox-alignment-center) .checkbox-wrapper{-ms-flex-align:center;align-items:center}:host(.checkbox-justify-space-between),:host(.checkbox-justify-start),:host(.checkbox-justify-end),:host(.checkbox-alignment-start),:host(.checkbox-alignment-center){display:block}:host(.checkbox-checked) .checkbox-icon,:host(.checkbox-indeterminate) .checkbox-icon{border-color:var(--border-color-checked);background:var(--checkbox-background-checked)}:host(.checkbox-checked) .checkbox-icon path,:host(.checkbox-indeterminate) .checkbox-icon path{opacity:1}:host(.checkbox-disabled){pointer-events:none}:host{--border-radius:50%;--border-width:0.125rem;--border-style:solid;--border-color:rgba(var(--ion-text-color-rgb, 0, 0, 0), 0.23);--checkbox-background:var(--ion-item-background, var(--ion-background-color, #fff));--size:min(1.375rem, 55.836px);--checkmark-width:1.5px}:host(.checkbox-disabled){opacity:0.3}";
|
|
10071
|
+
|
|
10072
|
+
const checkboxMdCss = ":host{--checkbox-background-checked:var(--ion-color-primary, #0054e9);--border-color-checked:var(--ion-color-primary, #0054e9);--checkmark-color:var(--ion-color-primary-contrast, #fff);--transition:none;display:inline-block;position:relative;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:2}:host(.in-item){-ms-flex:1 1 0px;flex:1 1 0;width:100%;height:100%}:host([slot=start]),:host([slot=end]){-ms-flex:initial;flex:initial;width:auto}:host(.ion-color){--checkbox-background-checked:var(--ion-color-base);--border-color-checked:var(--ion-color-base);--checkmark-color:var(--ion-color-contrast)}.checkbox-wrapper{display:-ms-flexbox;display:flex;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;height:inherit;cursor:inherit}.label-text-wrapper{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}:host(.in-item) .label-text-wrapper,:host(.in-item:not(.checkbox-label-placement-stacked):not([slot])) .native-wrapper{margin-top:10px;margin-bottom:10px}:host(.in-item.checkbox-label-placement-stacked) .label-text-wrapper{margin-top:10px;margin-bottom:16px}:host(.in-item.checkbox-label-placement-stacked) .native-wrapper{margin-bottom:10px}.label-text-wrapper-hidden{display:none}input{display:none}.native-wrapper{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.checkbox-icon{border-radius:var(--border-radius);position:relative;width:var(--size);height:var(--size);-webkit-transition:var(--transition);transition:var(--transition);border-width:var(--border-width);border-style:var(--border-style);border-color:var(--border-color);background:var(--checkbox-background);-webkit-box-sizing:border-box;box-sizing:border-box}.checkbox-icon path{fill:none;stroke:var(--checkmark-color);stroke-width:var(--checkmark-width);opacity:0}.checkbox-bottom{padding-top:4px;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;font-size:0.75rem;white-space:normal}:host(.checkbox-label-placement-stacked) .checkbox-bottom{font-size:1rem}.checkbox-bottom .error-text{display:none;color:var(--ion-color-danger, #c5000f)}.checkbox-bottom .helper-text{display:block;color:var(--ion-color-step-700, var(--ion-text-color-step-300, #4d4d4d))}:host(.ion-touched.ion-invalid) .checkbox-bottom .error-text{display:block}:host(.ion-touched.ion-invalid) .checkbox-bottom .helper-text{display:none}:host(.checkbox-label-placement-start) .checkbox-wrapper{-ms-flex-direction:row;flex-direction:row}:host(.checkbox-label-placement-start) .label-text-wrapper{-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:16px;margin-inline-end:16px}:host(.checkbox-label-placement-end) .checkbox-wrapper{-ms-flex-direction:row-reverse;flex-direction:row-reverse;-ms-flex-pack:start;justify-content:start}:host(.checkbox-label-placement-end) .label-text-wrapper{-webkit-margin-start:16px;margin-inline-start:16px;-webkit-margin-end:0;margin-inline-end:0}:host(.checkbox-label-placement-fixed) .label-text-wrapper{-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:16px;margin-inline-end:16px}:host(.checkbox-label-placement-fixed) .label-text-wrapper{-ms-flex:0 0 100px;flex:0 0 100px;width:100px;min-width:100px;max-width:200px}:host(.checkbox-label-placement-stacked) .checkbox-wrapper{-ms-flex-direction:column;flex-direction:column;text-align:center}:host(.checkbox-label-placement-stacked) .label-text-wrapper{-webkit-transform:scale(0.75);transform:scale(0.75);margin-left:0;margin-right:0;margin-bottom:16px;max-width:calc(100% / 0.75)}:host(.checkbox-label-placement-stacked.checkbox-alignment-start) .label-text-wrapper{-webkit-transform-origin:left top;transform-origin:left top}:host-context([dir=rtl]):host(.checkbox-label-placement-stacked.checkbox-alignment-start) .label-text-wrapper,:host-context([dir=rtl]).checkbox-label-placement-stacked.checkbox-alignment-start .label-text-wrapper{-webkit-transform-origin:right top;transform-origin:right top}@supports selector(:dir(rtl)){:host(.checkbox-label-placement-stacked.checkbox-alignment-start:dir(rtl)) .label-text-wrapper{-webkit-transform-origin:right top;transform-origin:right top}}:host(.checkbox-label-placement-stacked.checkbox-alignment-center) .label-text-wrapper{-webkit-transform-origin:center top;transform-origin:center top}:host-context([dir=rtl]):host(.checkbox-label-placement-stacked.checkbox-alignment-center) .label-text-wrapper,:host-context([dir=rtl]).checkbox-label-placement-stacked.checkbox-alignment-center .label-text-wrapper{-webkit-transform-origin:calc(100% - center) top;transform-origin:calc(100% - center) top}@supports selector(:dir(rtl)){:host(.checkbox-label-placement-stacked.checkbox-alignment-center:dir(rtl)) .label-text-wrapper{-webkit-transform-origin:calc(100% - center) top;transform-origin:calc(100% - center) top}}:host(.checkbox-justify-space-between) .checkbox-wrapper{-ms-flex-pack:justify;justify-content:space-between}:host(.checkbox-justify-start) .checkbox-wrapper{-ms-flex-pack:start;justify-content:start}:host(.checkbox-justify-end) .checkbox-wrapper{-ms-flex-pack:end;justify-content:end}:host(.checkbox-alignment-start) .checkbox-wrapper{-ms-flex-align:start;align-items:start}:host(.checkbox-alignment-center) .checkbox-wrapper{-ms-flex-align:center;align-items:center}:host(.checkbox-justify-space-between),:host(.checkbox-justify-start),:host(.checkbox-justify-end),:host(.checkbox-alignment-start),:host(.checkbox-alignment-center){display:block}:host(.checkbox-checked) .checkbox-icon,:host(.checkbox-indeterminate) .checkbox-icon{border-color:var(--border-color-checked);background:var(--checkbox-background-checked)}:host(.checkbox-checked) .checkbox-icon path,:host(.checkbox-indeterminate) .checkbox-icon path{opacity:1}:host(.checkbox-disabled){pointer-events:none}:host{--border-radius:calc(var(--size) * .125);--border-width:2px;--border-style:solid;--border-color:rgb(var(--ion-text-color-rgb, 0, 0, 0), 0.6);--checkmark-width:3;--checkbox-background:var(--ion-item-background, var(--ion-background-color, #fff));--transition:background 180ms cubic-bezier(0.4, 0, 0.2, 1);--size:18px}.checkbox-icon path{stroke-dasharray:30;stroke-dashoffset:30}:host(.checkbox-checked) .checkbox-icon path,:host(.checkbox-indeterminate) .checkbox-icon path{stroke-dashoffset:0;-webkit-transition:stroke-dashoffset 90ms linear 90ms;transition:stroke-dashoffset 90ms linear 90ms}:host(.checkbox-disabled) .label-text-wrapper{opacity:0.38}:host(.checkbox-disabled) .native-wrapper{opacity:0.63}";
|
|
10073
|
+
|
|
10074
|
+
/**
|
|
10075
|
+
* @virtualProp {"ios" | "md"} mode - The mode determines which platform styles to use.
|
|
10076
|
+
*
|
|
10077
|
+
* @slot - The label text to associate with the checkbox. Use the "labelPlacement" property to control where the label is placed relative to the checkbox.
|
|
10078
|
+
*
|
|
10079
|
+
* @part container - The container for the checkbox mark.
|
|
10080
|
+
* @part label - The label text describing the checkbox.
|
|
10081
|
+
* @part mark - The checkmark used to indicate the checked state.
|
|
10082
|
+
* @part supporting-text - Supporting text displayed beneath the checkbox label.
|
|
10083
|
+
* @part helper-text - Supporting text displayed beneath the checkbox label when the checkbox is valid.
|
|
10084
|
+
* @part error-text - Supporting text displayed beneath the checkbox label when the checkbox is invalid and touched.
|
|
10085
|
+
*/
|
|
10086
|
+
class Checkbox {
|
|
10087
|
+
constructor(hostRef) {
|
|
10088
|
+
registerInstance(this, hostRef);
|
|
10089
|
+
this.ionChange = createEvent(this, "ionChange", 7);
|
|
10090
|
+
this.ionFocus = createEvent(this, "ionFocus", 7);
|
|
10091
|
+
this.ionBlur = createEvent(this, "ionBlur", 7);
|
|
10092
|
+
this.inputId = `ion-cb-${checkboxIds++}`;
|
|
10093
|
+
this.inputLabelId = `${this.inputId}-lbl`;
|
|
10094
|
+
this.helperTextId = `${this.inputId}-helper-text`;
|
|
10095
|
+
this.errorTextId = `${this.inputId}-error-text`;
|
|
10096
|
+
this.inheritedAttributes = {};
|
|
10097
|
+
/**
|
|
10098
|
+
* The name of the control, which is submitted with the form data.
|
|
10099
|
+
*/
|
|
10100
|
+
this.name = this.inputId;
|
|
10101
|
+
/**
|
|
10102
|
+
* If `true`, the checkbox is selected.
|
|
10103
|
+
*/
|
|
10104
|
+
this.checked = false;
|
|
10105
|
+
/**
|
|
10106
|
+
* If `true`, the checkbox will visually appear as indeterminate.
|
|
10107
|
+
*/
|
|
10108
|
+
this.indeterminate = false;
|
|
10109
|
+
/**
|
|
10110
|
+
* If `true`, the user cannot interact with the checkbox.
|
|
10111
|
+
*/
|
|
10112
|
+
this.disabled = false;
|
|
10113
|
+
/**
|
|
10114
|
+
* The value of the checkbox does not mean if it's checked or not, use the `checked`
|
|
10115
|
+
* property for that.
|
|
10116
|
+
*
|
|
10117
|
+
* The value of a checkbox is analogous to the value of an `<input type="checkbox">`,
|
|
10118
|
+
* it's only used when the checkbox participates in a native `<form>`.
|
|
10119
|
+
*/
|
|
10120
|
+
this.value = 'on';
|
|
10121
|
+
/**
|
|
10122
|
+
* Where to place the label relative to the checkbox.
|
|
10123
|
+
* `"start"`: The label will appear to the left of the checkbox in LTR and to the right in RTL.
|
|
10124
|
+
* `"end"`: The label will appear to the right of the checkbox in LTR and to the left in RTL.
|
|
10125
|
+
* `"fixed"`: The label has the same behavior as `"start"` except it also has a fixed width. Long text will be truncated with ellipses ("...").
|
|
10126
|
+
* `"stacked"`: The label will appear above the checkbox regardless of the direction. The alignment of the label can be controlled with the `alignment` property.
|
|
10127
|
+
*/
|
|
10128
|
+
this.labelPlacement = 'start';
|
|
10129
|
+
/**
|
|
10130
|
+
* If true, screen readers will announce it as a required field. This property
|
|
10131
|
+
* works only for accessibility purposes, it will not prevent the form from
|
|
10132
|
+
* submitting if the value is invalid.
|
|
10133
|
+
*/
|
|
10134
|
+
this.required = false;
|
|
10135
|
+
/**
|
|
10136
|
+
* Track validation state for proper aria-live announcements.
|
|
10137
|
+
*/
|
|
10138
|
+
this.isInvalid = false;
|
|
10139
|
+
/**
|
|
10140
|
+
* Sets the checked property and emits
|
|
10141
|
+
* the ionChange event. Use this to update the
|
|
10142
|
+
* checked state in response to user-generated
|
|
10143
|
+
* actions such as a click.
|
|
10144
|
+
*/
|
|
10145
|
+
this.setChecked = (state) => {
|
|
10146
|
+
const isChecked = (this.checked = state);
|
|
10147
|
+
this.ionChange.emit({
|
|
10148
|
+
checked: isChecked,
|
|
10149
|
+
value: this.value,
|
|
10150
|
+
});
|
|
10151
|
+
};
|
|
10152
|
+
this.toggleChecked = (ev) => {
|
|
10153
|
+
ev.preventDefault();
|
|
10154
|
+
this.setChecked(!this.checked);
|
|
10155
|
+
this.indeterminate = false;
|
|
10156
|
+
};
|
|
10157
|
+
this.onFocus = () => {
|
|
10158
|
+
this.ionFocus.emit();
|
|
10159
|
+
};
|
|
10160
|
+
this.onBlur = () => {
|
|
10161
|
+
this.ionBlur.emit();
|
|
10162
|
+
};
|
|
10163
|
+
this.onKeyDown = (ev) => {
|
|
10164
|
+
if (ev.key === ' ') {
|
|
10165
|
+
ev.preventDefault();
|
|
10166
|
+
if (!this.disabled) {
|
|
10167
|
+
this.toggleChecked(ev);
|
|
10168
|
+
}
|
|
10169
|
+
}
|
|
10170
|
+
};
|
|
10171
|
+
this.onClick = (ev) => {
|
|
10172
|
+
if (this.disabled) {
|
|
9787
10173
|
return;
|
|
9788
10174
|
}
|
|
9789
10175
|
this.toggleChecked(ev);
|
|
@@ -9796,16 +10182,29 @@ class Checkbox {
|
|
|
9796
10182
|
ev.stopPropagation();
|
|
9797
10183
|
};
|
|
9798
10184
|
}
|
|
10185
|
+
connectedCallback() {
|
|
10186
|
+
const { el } = this;
|
|
10187
|
+
// Always set initial state
|
|
10188
|
+
this.isInvalid = checkInvalidState(el);
|
|
10189
|
+
}
|
|
9799
10190
|
componentWillLoad() {
|
|
9800
10191
|
this.inheritedAttributes = Object.assign({}, inheritAriaAttributes(this.el));
|
|
10192
|
+
this.hintTextId = this.getHintTextId();
|
|
10193
|
+
}
|
|
10194
|
+
disconnectedCallback() {
|
|
10195
|
+
// Clean up validation observer to prevent memory leaks.
|
|
10196
|
+
if (this.validationObserver) {
|
|
10197
|
+
this.validationObserver.disconnect();
|
|
10198
|
+
this.validationObserver = undefined;
|
|
10199
|
+
}
|
|
9801
10200
|
}
|
|
9802
10201
|
/** @internal */
|
|
9803
10202
|
async setFocus() {
|
|
9804
10203
|
this.el.focus();
|
|
9805
10204
|
}
|
|
9806
|
-
|
|
9807
|
-
const {
|
|
9808
|
-
if (
|
|
10205
|
+
getHintTextId() {
|
|
10206
|
+
const { helperText, errorText, helperTextId, errorTextId, isInvalid } = this;
|
|
10207
|
+
if (isInvalid && errorText) {
|
|
9809
10208
|
return errorTextId;
|
|
9810
10209
|
}
|
|
9811
10210
|
if (helperText) {
|
|
@@ -9818,7 +10217,7 @@ class Checkbox {
|
|
|
9818
10217
|
* This element should only be rendered if hint text is set.
|
|
9819
10218
|
*/
|
|
9820
10219
|
renderHintText() {
|
|
9821
|
-
const { helperText, errorText, helperTextId, errorTextId } = this;
|
|
10220
|
+
const { helperText, errorText, helperTextId, errorTextId, isInvalid } = this;
|
|
9822
10221
|
/**
|
|
9823
10222
|
* undefined and empty string values should
|
|
9824
10223
|
* be treated as not having helper/error text.
|
|
@@ -9827,7 +10226,7 @@ class Checkbox {
|
|
|
9827
10226
|
if (!hasHintText) {
|
|
9828
10227
|
return;
|
|
9829
10228
|
}
|
|
9830
|
-
return (hAsync("div", { class: "checkbox-bottom" }, hAsync("div", { id: helperTextId, class: "helper-text", part: "supporting-text helper-text" }, helperText), hAsync("div", { id: errorTextId, class: "error-text", part: "supporting-text error-text" }, errorText)));
|
|
10229
|
+
return (hAsync("div", { class: "checkbox-bottom" }, hAsync("div", { id: helperTextId, class: "helper-text", part: "supporting-text helper-text", "aria-live": "polite" }, !isInvalid ? helperText : null), hAsync("div", { id: errorTextId, class: "error-text", part: "supporting-text error-text", role: "alert" }, isInvalid ? errorText : null)));
|
|
9831
10230
|
}
|
|
9832
10231
|
render() {
|
|
9833
10232
|
const { color, checked, disabled, el, getSVGPath, indeterminate, inheritedAttributes, inputId, justify, labelPlacement, name, value, alignment, required, } = this;
|
|
@@ -9837,7 +10236,7 @@ class Checkbox {
|
|
|
9837
10236
|
renderHiddenInput(true, el, name, checked ? value : '', disabled);
|
|
9838
10237
|
// The host element must have a checkbox role to ensure proper VoiceOver
|
|
9839
10238
|
// support in Safari for accessibility.
|
|
9840
|
-
return (hAsync(Host, { key: '
|
|
10239
|
+
return (hAsync(Host, { key: 'ae0fbd4b21accbac132e6b85c513512ad9179394', role: "checkbox", "aria-checked": indeterminate ? 'mixed' : `${checked}`, "aria-describedby": this.hintTextId, "aria-invalid": this.isInvalid ? 'true' : undefined, "aria-labelledby": hasLabelContent ? this.inputLabelId : null, "aria-label": inheritedAttributes['aria-label'] || null, "aria-disabled": disabled ? 'true' : null, "aria-required": required ? 'true' : undefined, tabindex: disabled ? undefined : 0, onKeyDown: this.onKeyDown, onFocus: this.onFocus, onBlur: this.onBlur, onClick: this.onClick, class: createColorClasses$1(color, {
|
|
9841
10240
|
[mode]: true,
|
|
9842
10241
|
'in-item': hostContext('ion-item', el),
|
|
9843
10242
|
'checkbox-checked': checked,
|
|
@@ -9847,10 +10246,10 @@ class Checkbox {
|
|
|
9847
10246
|
[`checkbox-justify-${justify}`]: justify !== undefined,
|
|
9848
10247
|
[`checkbox-alignment-${alignment}`]: alignment !== undefined,
|
|
9849
10248
|
[`checkbox-label-placement-${labelPlacement}`]: true,
|
|
9850
|
-
}) }, hAsync("label", { key: '
|
|
10249
|
+
}) }, hAsync("label", { key: '7a3d7f3c27dde514f2dbf2e34f4629fad33ec3bf', class: "checkbox-wrapper", htmlFor: inputId }, hAsync("input", Object.assign({ key: '4130d77ddf034271fecccda14e101a5a809921b6', type: "checkbox", checked: checked ? true : undefined, disabled: disabled, id: inputId, onChange: this.toggleChecked, required: required }, inheritedAttributes)), hAsync("div", { key: '5daa74f4e62b0947e37764762524001ee42609d9', class: {
|
|
9851
10250
|
'label-text-wrapper': true,
|
|
9852
10251
|
'label-text-wrapper-hidden': !hasLabelContent,
|
|
9853
|
-
}, part: "label", id: this.inputLabelId, onClick: this.onDivLabelClick }, hAsync("slot", { key: '
|
|
10252
|
+
}, part: "label", id: this.inputLabelId, onClick: this.onDivLabelClick }, hAsync("slot", { key: '23ff66138f8c3a2f56f39113fc842d54b2f7952a' }), this.renderHintText()), hAsync("div", { key: 'ab914d9623c19fc46821d5e62db92f1192ebbe7e', class: "native-wrapper" }, hAsync("svg", { key: '66e3f4f5dcaa9756fb0e9452299954f9ed3dcb7b', class: "checkbox-icon", viewBox: "0 0 24 24", part: "container", "aria-hidden": "true" }, path)))));
|
|
9854
10253
|
}
|
|
9855
10254
|
getSVGPath(mode, indeterminate) {
|
|
9856
10255
|
let path = indeterminate ? (hAsync("path", { d: "M6 12L18 12", part: "mark" })) : (hAsync("path", { d: "M5.9,12.5l3.8,3.8l8.8-8.8", part: "mark" }));
|
|
@@ -9880,6 +10279,8 @@ class Checkbox {
|
|
|
9880
10279
|
"justify": [1],
|
|
9881
10280
|
"alignment": [1],
|
|
9882
10281
|
"required": [4],
|
|
10282
|
+
"isInvalid": [32],
|
|
10283
|
+
"hintTextId": [32],
|
|
9883
10284
|
"setFocus": [64]
|
|
9884
10285
|
},
|
|
9885
10286
|
"$listeners$": undefined,
|
|
@@ -10268,6 +10669,15 @@ class Content {
|
|
|
10268
10669
|
}
|
|
10269
10670
|
resize() {
|
|
10270
10671
|
}
|
|
10672
|
+
/**
|
|
10673
|
+
* Recalculate content dimensions. Called by overlays (e.g., popover) when
|
|
10674
|
+
* sibling elements like headers or footers have finished rendering and their
|
|
10675
|
+
* heights are available, ensuring accurate offset-top calculations.
|
|
10676
|
+
* @internal
|
|
10677
|
+
*/
|
|
10678
|
+
async recalculateDimensions() {
|
|
10679
|
+
readTask(() => this.readDimensions());
|
|
10680
|
+
}
|
|
10271
10681
|
readDimensions() {
|
|
10272
10682
|
const page = getPageElement(this.el);
|
|
10273
10683
|
const top = Math.max(this.el.offsetTop, 0);
|
|
@@ -10436,7 +10846,7 @@ class Content {
|
|
|
10436
10846
|
const forceOverscroll = this.shouldForceOverscroll();
|
|
10437
10847
|
const transitionShadow = mode === 'ios';
|
|
10438
10848
|
this.resize();
|
|
10439
|
-
return (hAsync(Host, Object.assign({ key: '
|
|
10849
|
+
return (hAsync(Host, Object.assign({ key: 'cd8781f848d8dc926fe66f43d43c49564425a507', role: isMainContent ? 'main' : undefined, class: createColorClasses$1(this.color, {
|
|
10440
10850
|
[mode]: true,
|
|
10441
10851
|
'content-sizing': hostContext('ion-popover', this.el),
|
|
10442
10852
|
overscroll: forceOverscroll,
|
|
@@ -10444,12 +10854,12 @@ class Content {
|
|
|
10444
10854
|
}), style: {
|
|
10445
10855
|
'--offset-top': `${this.cTop}px`,
|
|
10446
10856
|
'--offset-bottom': `${this.cBottom}px`,
|
|
10447
|
-
} }, inheritedAttributes), hAsync("div", { key: '
|
|
10857
|
+
} }, inheritedAttributes), hAsync("div", { key: '95b112d7cae30f22ef778ceffb88edb4d941c170', ref: (el) => (this.backgroundContentEl = el), id: "background-content", part: "background" }), fixedSlotPlacement === 'before' ? hAsync("slot", { name: "fixed" }) : null, hAsync("div", { key: '2fdfcbc39fb66f11b6191911f2941c660f4c12e5', class: {
|
|
10448
10858
|
'inner-scroll': true,
|
|
10449
10859
|
'scroll-x': scrollX,
|
|
10450
10860
|
'scroll-y': scrollY,
|
|
10451
10861
|
overscroll: (scrollX || scrollY) && forceOverscroll,
|
|
10452
|
-
}, ref: (scrollEl) => (this.scrollEl = scrollEl), onScroll: this.scrollEvents ? (ev) => this.onScroll(ev) : undefined, part: "scroll" }, hAsync("slot", { key: '
|
|
10862
|
+
}, ref: (scrollEl) => (this.scrollEl = scrollEl), onScroll: this.scrollEvents ? (ev) => this.onScroll(ev) : undefined, part: "scroll" }, hAsync("slot", { key: '6bc77e0054ec8e21635a7f2abfe0ca46e0962e03' })), transitionShadow ? (hAsync("div", { class: "transition-effect" }, hAsync("div", { class: "transition-cover" }), hAsync("div", { class: "transition-shadow" }))) : null, fixedSlotPlacement === 'after' ? hAsync("slot", { name: "fixed" }) : null));
|
|
10453
10863
|
}
|
|
10454
10864
|
get el() { return getElement(this); }
|
|
10455
10865
|
static get style() { return contentCss; }
|
|
@@ -10464,6 +10874,7 @@ class Content {
|
|
|
10464
10874
|
"scrollX": [4, "scroll-x"],
|
|
10465
10875
|
"scrollY": [4, "scroll-y"],
|
|
10466
10876
|
"scrollEvents": [4, "scroll-events"],
|
|
10877
|
+
"recalculateDimensions": [64],
|
|
10467
10878
|
"getScrollElement": [64],
|
|
10468
10879
|
"getBackgroundElement": [64],
|
|
10469
10880
|
"scrollToTop": [64],
|
|
@@ -13024,6 +13435,28 @@ class Datetime {
|
|
|
13024
13435
|
destroyKeyboardMO();
|
|
13025
13436
|
}
|
|
13026
13437
|
};
|
|
13438
|
+
/**
|
|
13439
|
+
* TODO(FW-6931): Remove this fallback upon solving the root cause
|
|
13440
|
+
* Fallback to ensure the datetime becomes ready even if
|
|
13441
|
+
* IntersectionObserver never reports it as intersecting.
|
|
13442
|
+
*
|
|
13443
|
+
* This is primarily used in environments where the observer
|
|
13444
|
+
* might not fire as expected, such as when running under
|
|
13445
|
+
* synthetic tests that stub IntersectionObserver.
|
|
13446
|
+
*/
|
|
13447
|
+
this.ensureReadyIfVisible = () => {
|
|
13448
|
+
if (this.el.classList.contains('datetime-ready')) {
|
|
13449
|
+
return;
|
|
13450
|
+
}
|
|
13451
|
+
const rect = this.el.getBoundingClientRect();
|
|
13452
|
+
if (rect.width === 0 || rect.height === 0) {
|
|
13453
|
+
return;
|
|
13454
|
+
}
|
|
13455
|
+
this.initializeListeners();
|
|
13456
|
+
writeTask(() => {
|
|
13457
|
+
this.el.classList.add('datetime-ready');
|
|
13458
|
+
});
|
|
13459
|
+
};
|
|
13027
13460
|
this.processValue = (value) => {
|
|
13028
13461
|
const hasValue = value !== null && value !== undefined && value !== '' && (!Array.isArray(value) || value.length > 0);
|
|
13029
13462
|
const valueToProcess = hasValue ? parseDate(value) : this.defaultParts;
|
|
@@ -13341,6 +13774,17 @@ class Datetime {
|
|
|
13341
13774
|
* triggering the `hiddenIO` observer below.
|
|
13342
13775
|
*/
|
|
13343
13776
|
raf(() => visibleIO === null || visibleIO === void 0 ? void 0 : visibleIO.observe(intersectionTrackerRef));
|
|
13777
|
+
/**
|
|
13778
|
+
* TODO(FW-6931): Remove this fallback upon solving the root cause
|
|
13779
|
+
* Fallback: If IntersectionObserver never reports that the
|
|
13780
|
+
* datetime is visible but the host clearly has layout, ensure
|
|
13781
|
+
* we still initialize listeners and mark the component as ready.
|
|
13782
|
+
*
|
|
13783
|
+
* We schedule this after everything has had a chance to run.
|
|
13784
|
+
*/
|
|
13785
|
+
setTimeout(() => {
|
|
13786
|
+
this.ensureReadyIfVisible();
|
|
13787
|
+
}, 100);
|
|
13344
13788
|
/**
|
|
13345
13789
|
* We need to clean up listeners when the datetime is hidden
|
|
13346
13790
|
* in a popover/modal so that we can properly scroll containers
|
|
@@ -14096,7 +14540,7 @@ class Datetime {
|
|
|
14096
14540
|
const hasDatePresentation = presentation === 'date' || presentation === 'date-time' || presentation === 'time-date';
|
|
14097
14541
|
const hasWheelVariant = hasDatePresentation && preferWheel;
|
|
14098
14542
|
renderHiddenInput(true, el, name, formatValue(value), disabled);
|
|
14099
|
-
return (hAsync(Host, { key: '
|
|
14543
|
+
return (hAsync(Host, { key: 'efdbc0922670a841bc667ceac392cdc1dedffd01', "aria-disabled": disabled ? 'true' : null, onFocus: this.onFocus, onBlur: this.onBlur, class: Object.assign({}, createColorClasses$1(color, {
|
|
14100
14544
|
[mode]: true,
|
|
14101
14545
|
['datetime-readonly']: readonly,
|
|
14102
14546
|
['datetime-disabled']: disabled,
|
|
@@ -14106,7 +14550,7 @@ class Datetime {
|
|
|
14106
14550
|
[`datetime-size-${size}`]: true,
|
|
14107
14551
|
[`datetime-prefer-wheel`]: hasWheelVariant,
|
|
14108
14552
|
[`datetime-grid`]: isGridStyle,
|
|
14109
|
-
})) }, hAsync("div", { key: '
|
|
14553
|
+
})) }, hAsync("div", { key: '3f8bb75fcb0baff55182ef3aa1b535eacc58d81f', class: "intersection-tracker", ref: (el) => (this.intersectionTrackerRef = el) }), this.renderDatetime(mode)));
|
|
14110
14554
|
}
|
|
14111
14555
|
get el() { return getElement(this); }
|
|
14112
14556
|
static get watchers() { return {
|
|
@@ -14748,7 +15192,7 @@ class FabButton {
|
|
|
14748
15192
|
"translucent": [4],
|
|
14749
15193
|
"type": [1],
|
|
14750
15194
|
"size": [1],
|
|
14751
|
-
"closeIcon": [
|
|
15195
|
+
"closeIcon": [1, "close-icon"]
|
|
14752
15196
|
},
|
|
14753
15197
|
"$listeners$": undefined,
|
|
14754
15198
|
"$lazyBundleId$": "-",
|
|
@@ -16198,317 +16642,121 @@ class InfiniteScroll {
|
|
|
16198
16642
|
* Done.
|
|
16199
16643
|
*/
|
|
16200
16644
|
this.isBusy = true;
|
|
16201
|
-
// ******** DOM READ ****************
|
|
16202
|
-
// Save the current content dimensions before the UI updates
|
|
16203
|
-
const prev = scrollEl.scrollHeight - scrollEl.scrollTop;
|
|
16204
|
-
// ******** DOM READ ****************
|
|
16205
|
-
requestAnimationFrame(() => {
|
|
16206
|
-
readTask(() => {
|
|
16207
|
-
// UI has updated, save the new content dimensions
|
|
16208
|
-
const scrollHeight = scrollEl.scrollHeight;
|
|
16209
|
-
// New content was added on top, so the scroll position should be changed immediately to prevent it from jumping around
|
|
16210
|
-
const newScrollTop = scrollHeight - prev;
|
|
16211
|
-
// ******** DOM WRITE ****************
|
|
16212
|
-
requestAnimationFrame(() => {
|
|
16213
|
-
writeTask(() => {
|
|
16214
|
-
scrollEl.scrollTop = newScrollTop;
|
|
16215
|
-
this.isBusy = false;
|
|
16216
|
-
this.didFire = false;
|
|
16217
|
-
});
|
|
16218
|
-
});
|
|
16219
|
-
});
|
|
16220
|
-
});
|
|
16221
|
-
}
|
|
16222
|
-
else {
|
|
16223
|
-
this.didFire = false;
|
|
16224
|
-
}
|
|
16225
|
-
}
|
|
16226
|
-
canStart() {
|
|
16227
|
-
return !this.disabled && !this.isBusy && !!this.scrollEl && !this.isLoading;
|
|
16228
|
-
}
|
|
16229
|
-
enableScrollEvents(shouldListen) {
|
|
16230
|
-
if (this.scrollEl) {
|
|
16231
|
-
if (shouldListen) {
|
|
16232
|
-
this.scrollEl.addEventListener('scroll', this.onScroll);
|
|
16233
|
-
}
|
|
16234
|
-
else {
|
|
16235
|
-
this.scrollEl.removeEventListener('scroll', this.onScroll);
|
|
16236
|
-
}
|
|
16237
|
-
}
|
|
16238
|
-
}
|
|
16239
|
-
render() {
|
|
16240
|
-
const mode = getIonMode$1(this);
|
|
16241
|
-
const disabled = this.disabled;
|
|
16242
|
-
return (hAsync(Host, { key: 'e844956795f69be33396ce4480aa7a54ad01b28c', class: {
|
|
16243
|
-
[mode]: true,
|
|
16244
|
-
'infinite-scroll-loading': this.isLoading,
|
|
16245
|
-
'infinite-scroll-enabled': !disabled,
|
|
16246
|
-
} }));
|
|
16247
|
-
}
|
|
16248
|
-
get el() { return getElement(this); }
|
|
16249
|
-
static get watchers() { return {
|
|
16250
|
-
"threshold": ["thresholdChanged"],
|
|
16251
|
-
"disabled": ["disabledChanged"]
|
|
16252
|
-
}; }
|
|
16253
|
-
static get style() { return infiniteScrollCss; }
|
|
16254
|
-
static get cmpMeta() { return {
|
|
16255
|
-
"$flags$": 256,
|
|
16256
|
-
"$tagName$": "ion-infinite-scroll",
|
|
16257
|
-
"$members$": {
|
|
16258
|
-
"threshold": [1],
|
|
16259
|
-
"disabled": [4],
|
|
16260
|
-
"position": [1],
|
|
16261
|
-
"isLoading": [32],
|
|
16262
|
-
"complete": [64]
|
|
16263
|
-
},
|
|
16264
|
-
"$listeners$": undefined,
|
|
16265
|
-
"$lazyBundleId$": "-",
|
|
16266
|
-
"$attrsToReflect$": []
|
|
16267
|
-
}; }
|
|
16268
|
-
}
|
|
16269
|
-
|
|
16270
|
-
const infiniteScrollContentIosCss = "ion-infinite-scroll-content{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;min-height:84px;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.infinite-loading{margin-left:0;margin-right:0;margin-top:0;margin-bottom:32px;display:none;width:100%}.infinite-loading-text{-webkit-margin-start:32px;margin-inline-start:32px;-webkit-margin-end:32px;margin-inline-end:32px;margin-top:4px;margin-bottom:0}.infinite-scroll-loading ion-infinite-scroll-content>.infinite-loading{display:block}.infinite-scroll-content-ios .infinite-loading-text{color:var(--ion-color-step-600, var(--ion-text-color-step-400, #666666))}.infinite-scroll-content-ios .infinite-loading-spinner .spinner-lines-ios line,.infinite-scroll-content-ios .infinite-loading-spinner .spinner-lines-small-ios line,.infinite-scroll-content-ios .infinite-loading-spinner .spinner-crescent circle{stroke:var(--ion-color-step-600, var(--ion-text-color-step-400, #666666))}.infinite-scroll-content-ios .infinite-loading-spinner .spinner-bubbles circle,.infinite-scroll-content-ios .infinite-loading-spinner .spinner-circles circle,.infinite-scroll-content-ios .infinite-loading-spinner .spinner-dots circle{fill:var(--ion-color-step-600, var(--ion-text-color-step-400, #666666))}";
|
|
16271
|
-
|
|
16272
|
-
const infiniteScrollContentMdCss = "ion-infinite-scroll-content{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;min-height:84px;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.infinite-loading{margin-left:0;margin-right:0;margin-top:0;margin-bottom:32px;display:none;width:100%}.infinite-loading-text{-webkit-margin-start:32px;margin-inline-start:32px;-webkit-margin-end:32px;margin-inline-end:32px;margin-top:4px;margin-bottom:0}.infinite-scroll-loading ion-infinite-scroll-content>.infinite-loading{display:block}.infinite-scroll-content-md .infinite-loading-text{color:var(--ion-color-step-600, var(--ion-text-color-step-400, #666666))}.infinite-scroll-content-md .infinite-loading-spinner .spinner-lines-md line,.infinite-scroll-content-md .infinite-loading-spinner .spinner-lines-small-md line,.infinite-scroll-content-md .infinite-loading-spinner .spinner-crescent circle{stroke:var(--ion-color-step-600, var(--ion-text-color-step-400, #666666))}.infinite-scroll-content-md .infinite-loading-spinner .spinner-bubbles circle,.infinite-scroll-content-md .infinite-loading-spinner .spinner-circles circle,.infinite-scroll-content-md .infinite-loading-spinner .spinner-dots circle{fill:var(--ion-color-step-600, var(--ion-text-color-step-400, #666666))}";
|
|
16273
|
-
|
|
16274
|
-
class InfiniteScrollContent {
|
|
16275
|
-
constructor(hostRef) {
|
|
16276
|
-
registerInstance(this, hostRef);
|
|
16277
|
-
this.customHTMLEnabled = config.get('innerHTMLTemplatesEnabled', ENABLE_HTML_CONTENT_DEFAULT);
|
|
16278
|
-
}
|
|
16279
|
-
componentDidLoad() {
|
|
16280
|
-
if (this.loadingSpinner === undefined) {
|
|
16281
|
-
const mode = getIonMode$1(this);
|
|
16282
|
-
this.loadingSpinner = config.get('infiniteLoadingSpinner', config.get('spinner', mode === 'ios' ? 'lines' : 'crescent'));
|
|
16283
|
-
}
|
|
16284
|
-
}
|
|
16285
|
-
renderLoadingText() {
|
|
16286
|
-
const { customHTMLEnabled, loadingText } = this;
|
|
16287
|
-
if (customHTMLEnabled) {
|
|
16288
|
-
return hAsync("div", { class: "infinite-loading-text", innerHTML: sanitizeDOMString(loadingText) });
|
|
16289
|
-
}
|
|
16290
|
-
return hAsync("div", { class: "infinite-loading-text" }, this.loadingText);
|
|
16291
|
-
}
|
|
16292
|
-
render() {
|
|
16293
|
-
const mode = getIonMode$1(this);
|
|
16294
|
-
return (hAsync(Host, { key: '7c16060dcfe2a0b0fb3e2f8f4c449589a76f1baa', class: {
|
|
16295
|
-
[mode]: true,
|
|
16296
|
-
// Used internally for styling
|
|
16297
|
-
[`infinite-scroll-content-${mode}`]: true,
|
|
16298
|
-
} }, hAsync("div", { key: 'a94f4d8746e053dc718f97520bd7e48cb316443a', class: "infinite-loading" }, this.loadingSpinner && (hAsync("div", { key: '10143d5d2a50a2a2bc5de1cee8e7ab51263bcf23', class: "infinite-loading-spinner" }, hAsync("ion-spinner", { key: '8846e88191690d9c61a0b462889ed56fbfed8b0d', name: this.loadingSpinner }))), this.loadingText !== undefined && this.renderLoadingText())));
|
|
16299
|
-
}
|
|
16300
|
-
static get style() { return {
|
|
16301
|
-
ios: infiniteScrollContentIosCss,
|
|
16302
|
-
md: infiniteScrollContentMdCss
|
|
16303
|
-
}; }
|
|
16304
|
-
static get cmpMeta() { return {
|
|
16305
|
-
"$flags$": 288,
|
|
16306
|
-
"$tagName$": "ion-infinite-scroll-content",
|
|
16307
|
-
"$members$": {
|
|
16308
|
-
"loadingSpinner": [1025, "loading-spinner"],
|
|
16309
|
-
"loadingText": [1, "loading-text"]
|
|
16310
|
-
},
|
|
16311
|
-
"$listeners$": undefined,
|
|
16312
|
-
"$lazyBundleId$": "-",
|
|
16313
|
-
"$attrsToReflect$": []
|
|
16314
|
-
}; }
|
|
16315
|
-
}
|
|
16316
|
-
|
|
16317
|
-
/**
|
|
16318
|
-
* A utility to calculate the size of an outline notch
|
|
16319
|
-
* width relative to the content passed. This is used in
|
|
16320
|
-
* components such as `ion-select` with `fill="outline"`
|
|
16321
|
-
* where we need to pass slotted HTML content. This is not
|
|
16322
|
-
* needed when rendering plaintext content because we can
|
|
16323
|
-
* render the plaintext again hidden with `opacity: 0` inside
|
|
16324
|
-
* of the notch. As a result we can rely on the intrinsic size
|
|
16325
|
-
* of the element to correctly compute the notch width. We
|
|
16326
|
-
* cannot do this with slotted content because we cannot project
|
|
16327
|
-
* it into 2 places at once.
|
|
16328
|
-
*
|
|
16329
|
-
* @internal
|
|
16330
|
-
* @param el: The host element
|
|
16331
|
-
* @param getNotchSpacerEl: A function that returns a reference to the notch spacer element inside of the component template.
|
|
16332
|
-
* @param getLabelSlot: A function that returns a reference to the slotted content.
|
|
16333
|
-
*/
|
|
16334
|
-
const createNotchController = (el, getNotchSpacerEl, getLabelSlot) => {
|
|
16335
|
-
let notchVisibilityIO;
|
|
16336
|
-
const needsExplicitNotchWidth = () => {
|
|
16337
|
-
const notchSpacerEl = getNotchSpacerEl();
|
|
16338
|
-
if (
|
|
16339
|
-
/**
|
|
16340
|
-
* If the notch is not being used
|
|
16341
|
-
* then we do not need to set the notch width.
|
|
16342
|
-
*/
|
|
16343
|
-
notchSpacerEl === undefined ||
|
|
16344
|
-
/**
|
|
16345
|
-
* If either the label property is being
|
|
16346
|
-
* used or the label slot is not defined,
|
|
16347
|
-
* then we do not need to estimate the notch width.
|
|
16348
|
-
*/
|
|
16349
|
-
el.label !== undefined ||
|
|
16350
|
-
getLabelSlot() === null) {
|
|
16351
|
-
return false;
|
|
16352
|
-
}
|
|
16353
|
-
return true;
|
|
16354
|
-
};
|
|
16355
|
-
const calculateNotchWidth = () => {
|
|
16356
|
-
if (needsExplicitNotchWidth()) {
|
|
16357
|
-
/**
|
|
16358
|
-
* Run this the frame after
|
|
16359
|
-
* the browser has re-painted the host element.
|
|
16360
|
-
* Otherwise, the label element may have a width
|
|
16361
|
-
* of 0 and the IntersectionObserver will be used.
|
|
16362
|
-
*/
|
|
16363
|
-
raf(() => {
|
|
16364
|
-
setNotchWidth();
|
|
16365
|
-
});
|
|
16366
|
-
}
|
|
16367
|
-
};
|
|
16368
|
-
/**
|
|
16369
|
-
* When using a label prop we can render
|
|
16370
|
-
* the label value inside of the notch and
|
|
16371
|
-
* let the browser calculate the size of the notch.
|
|
16372
|
-
* However, we cannot render the label slot in multiple
|
|
16373
|
-
* places so we need to manually calculate the notch dimension
|
|
16374
|
-
* based on the size of the slotted content.
|
|
16375
|
-
*
|
|
16376
|
-
* This function should only be used to set the notch width
|
|
16377
|
-
* on slotted label content. The notch width for label prop
|
|
16378
|
-
* content is automatically calculated based on the
|
|
16379
|
-
* intrinsic size of the label text.
|
|
16380
|
-
*/
|
|
16381
|
-
const setNotchWidth = () => {
|
|
16382
|
-
const notchSpacerEl = getNotchSpacerEl();
|
|
16383
|
-
if (notchSpacerEl === undefined) {
|
|
16384
|
-
return;
|
|
16385
|
-
}
|
|
16386
|
-
if (!needsExplicitNotchWidth()) {
|
|
16387
|
-
notchSpacerEl.style.removeProperty('width');
|
|
16388
|
-
return;
|
|
16389
|
-
}
|
|
16390
|
-
const width = getLabelSlot().scrollWidth;
|
|
16391
|
-
if (
|
|
16392
|
-
/**
|
|
16393
|
-
* If the computed width of the label is 0
|
|
16394
|
-
* and notchSpacerEl's offsetParent is null
|
|
16395
|
-
* then that means the element is hidden.
|
|
16396
|
-
* As a result, we need to wait for the element
|
|
16397
|
-
* to become visible before setting the notch width.
|
|
16398
|
-
*
|
|
16399
|
-
* We do not check el.offsetParent because
|
|
16400
|
-
* that can be null if the host element has
|
|
16401
|
-
* position: fixed applied to it.
|
|
16402
|
-
* notchSpacerEl does not have position: fixed.
|
|
16403
|
-
*/
|
|
16404
|
-
width === 0 &&
|
|
16405
|
-
notchSpacerEl.offsetParent === null &&
|
|
16406
|
-
win$1 !== undefined &&
|
|
16407
|
-
'IntersectionObserver' in win$1) {
|
|
16408
|
-
/**
|
|
16409
|
-
* If there is an IO already attached
|
|
16410
|
-
* then that will update the notch
|
|
16411
|
-
* once the element becomes visible.
|
|
16412
|
-
* As a result, there is no need to create
|
|
16413
|
-
* another one.
|
|
16414
|
-
*/
|
|
16415
|
-
if (notchVisibilityIO !== undefined) {
|
|
16416
|
-
return;
|
|
16417
|
-
}
|
|
16418
|
-
const io = (notchVisibilityIO = new IntersectionObserver((ev) => {
|
|
16419
|
-
/**
|
|
16420
|
-
* If the element is visible then we
|
|
16421
|
-
* can try setting the notch width again.
|
|
16422
|
-
*/
|
|
16423
|
-
if (ev[0].intersectionRatio === 1) {
|
|
16424
|
-
setNotchWidth();
|
|
16425
|
-
io.disconnect();
|
|
16426
|
-
notchVisibilityIO = undefined;
|
|
16427
|
-
}
|
|
16428
|
-
},
|
|
16429
|
-
/**
|
|
16430
|
-
* Set the root to be the host element
|
|
16431
|
-
* This causes the IO callback
|
|
16432
|
-
* to be fired in WebKit as soon as the element
|
|
16433
|
-
* is visible. If we used the default root value
|
|
16434
|
-
* then WebKit would only fire the IO callback
|
|
16435
|
-
* after any animations (such as a modal transition)
|
|
16436
|
-
* finished, and there would potentially be a flicker.
|
|
16437
|
-
*/
|
|
16438
|
-
{ threshold: 0.01, root: el }));
|
|
16439
|
-
io.observe(notchSpacerEl);
|
|
16440
|
-
return;
|
|
16645
|
+
// ******** DOM READ ****************
|
|
16646
|
+
// Save the current content dimensions before the UI updates
|
|
16647
|
+
const prev = scrollEl.scrollHeight - scrollEl.scrollTop;
|
|
16648
|
+
// ******** DOM READ ****************
|
|
16649
|
+
requestAnimationFrame(() => {
|
|
16650
|
+
readTask(() => {
|
|
16651
|
+
// UI has updated, save the new content dimensions
|
|
16652
|
+
const scrollHeight = scrollEl.scrollHeight;
|
|
16653
|
+
// New content was added on top, so the scroll position should be changed immediately to prevent it from jumping around
|
|
16654
|
+
const newScrollTop = scrollHeight - prev;
|
|
16655
|
+
// ******** DOM WRITE ****************
|
|
16656
|
+
requestAnimationFrame(() => {
|
|
16657
|
+
writeTask(() => {
|
|
16658
|
+
scrollEl.scrollTop = newScrollTop;
|
|
16659
|
+
this.isBusy = false;
|
|
16660
|
+
this.didFire = false;
|
|
16661
|
+
});
|
|
16662
|
+
});
|
|
16663
|
+
});
|
|
16664
|
+
});
|
|
16441
16665
|
}
|
|
16442
|
-
|
|
16443
|
-
|
|
16444
|
-
* The notch is only visible when the label is scaled,
|
|
16445
|
-
* which is why we multiply the width by 0.75 as this is
|
|
16446
|
-
* the same amount the label element is scaled by in the host CSS.
|
|
16447
|
-
* (See $form-control-label-stacked-scale in ionic.globals.scss).
|
|
16448
|
-
*/
|
|
16449
|
-
notchSpacerEl.style.setProperty('width', `${width * 0.75}px`);
|
|
16450
|
-
};
|
|
16451
|
-
const destroy = () => {
|
|
16452
|
-
if (notchVisibilityIO) {
|
|
16453
|
-
notchVisibilityIO.disconnect();
|
|
16454
|
-
notchVisibilityIO = undefined;
|
|
16666
|
+
else {
|
|
16667
|
+
this.didFire = false;
|
|
16455
16668
|
}
|
|
16456
|
-
};
|
|
16457
|
-
return {
|
|
16458
|
-
calculateNotchWidth,
|
|
16459
|
-
destroy,
|
|
16460
|
-
};
|
|
16461
|
-
};
|
|
16462
|
-
|
|
16463
|
-
/**
|
|
16464
|
-
* Uses the compareWith param to compare two values to determine if they are equal.
|
|
16465
|
-
*
|
|
16466
|
-
* @param currentValue The current value of the control.
|
|
16467
|
-
* @param compareValue The value to compare against.
|
|
16468
|
-
* @param compareWith The function or property name to use to compare values.
|
|
16469
|
-
*/
|
|
16470
|
-
const compareOptions = (currentValue, compareValue, compareWith) => {
|
|
16471
|
-
if (typeof compareWith === 'function') {
|
|
16472
|
-
return compareWith(currentValue, compareValue);
|
|
16473
16669
|
}
|
|
16474
|
-
|
|
16475
|
-
return
|
|
16670
|
+
canStart() {
|
|
16671
|
+
return !this.disabled && !this.isBusy && !!this.scrollEl && !this.isLoading;
|
|
16476
16672
|
}
|
|
16477
|
-
|
|
16478
|
-
|
|
16673
|
+
enableScrollEvents(shouldListen) {
|
|
16674
|
+
if (this.scrollEl) {
|
|
16675
|
+
if (shouldListen) {
|
|
16676
|
+
this.scrollEl.addEventListener('scroll', this.onScroll);
|
|
16677
|
+
}
|
|
16678
|
+
else {
|
|
16679
|
+
this.scrollEl.removeEventListener('scroll', this.onScroll);
|
|
16680
|
+
}
|
|
16681
|
+
}
|
|
16479
16682
|
}
|
|
16480
|
-
|
|
16481
|
-
|
|
16482
|
-
|
|
16483
|
-
|
|
16484
|
-
|
|
16485
|
-
|
|
16486
|
-
|
|
16487
|
-
|
|
16488
|
-
const isOptionSelected = (currentValue, compareValue, compareWith) => {
|
|
16489
|
-
if (currentValue === undefined) {
|
|
16490
|
-
return false;
|
|
16683
|
+
render() {
|
|
16684
|
+
const mode = getIonMode$1(this);
|
|
16685
|
+
const disabled = this.disabled;
|
|
16686
|
+
return (hAsync(Host, { key: 'e844956795f69be33396ce4480aa7a54ad01b28c', class: {
|
|
16687
|
+
[mode]: true,
|
|
16688
|
+
'infinite-scroll-loading': this.isLoading,
|
|
16689
|
+
'infinite-scroll-enabled': !disabled,
|
|
16690
|
+
} }));
|
|
16491
16691
|
}
|
|
16492
|
-
|
|
16493
|
-
|
|
16692
|
+
get el() { return getElement(this); }
|
|
16693
|
+
static get watchers() { return {
|
|
16694
|
+
"threshold": ["thresholdChanged"],
|
|
16695
|
+
"disabled": ["disabledChanged"]
|
|
16696
|
+
}; }
|
|
16697
|
+
static get style() { return infiniteScrollCss; }
|
|
16698
|
+
static get cmpMeta() { return {
|
|
16699
|
+
"$flags$": 256,
|
|
16700
|
+
"$tagName$": "ion-infinite-scroll",
|
|
16701
|
+
"$members$": {
|
|
16702
|
+
"threshold": [1],
|
|
16703
|
+
"disabled": [4],
|
|
16704
|
+
"position": [1],
|
|
16705
|
+
"isLoading": [32],
|
|
16706
|
+
"complete": [64]
|
|
16707
|
+
},
|
|
16708
|
+
"$listeners$": undefined,
|
|
16709
|
+
"$lazyBundleId$": "-",
|
|
16710
|
+
"$attrsToReflect$": []
|
|
16711
|
+
}; }
|
|
16712
|
+
}
|
|
16713
|
+
|
|
16714
|
+
const infiniteScrollContentIosCss = "ion-infinite-scroll-content{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;min-height:84px;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.infinite-loading{margin-left:0;margin-right:0;margin-top:0;margin-bottom:32px;display:none;width:100%}.infinite-loading-text{-webkit-margin-start:32px;margin-inline-start:32px;-webkit-margin-end:32px;margin-inline-end:32px;margin-top:4px;margin-bottom:0}.infinite-scroll-loading ion-infinite-scroll-content>.infinite-loading{display:block}.infinite-scroll-content-ios .infinite-loading-text{color:var(--ion-color-step-600, var(--ion-text-color-step-400, #666666))}.infinite-scroll-content-ios .infinite-loading-spinner .spinner-lines-ios line,.infinite-scroll-content-ios .infinite-loading-spinner .spinner-lines-small-ios line,.infinite-scroll-content-ios .infinite-loading-spinner .spinner-crescent circle{stroke:var(--ion-color-step-600, var(--ion-text-color-step-400, #666666))}.infinite-scroll-content-ios .infinite-loading-spinner .spinner-bubbles circle,.infinite-scroll-content-ios .infinite-loading-spinner .spinner-circles circle,.infinite-scroll-content-ios .infinite-loading-spinner .spinner-dots circle{fill:var(--ion-color-step-600, var(--ion-text-color-step-400, #666666))}";
|
|
16715
|
+
|
|
16716
|
+
const infiniteScrollContentMdCss = "ion-infinite-scroll-content{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;min-height:84px;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.infinite-loading{margin-left:0;margin-right:0;margin-top:0;margin-bottom:32px;display:none;width:100%}.infinite-loading-text{-webkit-margin-start:32px;margin-inline-start:32px;-webkit-margin-end:32px;margin-inline-end:32px;margin-top:4px;margin-bottom:0}.infinite-scroll-loading ion-infinite-scroll-content>.infinite-loading{display:block}.infinite-scroll-content-md .infinite-loading-text{color:var(--ion-color-step-600, var(--ion-text-color-step-400, #666666))}.infinite-scroll-content-md .infinite-loading-spinner .spinner-lines-md line,.infinite-scroll-content-md .infinite-loading-spinner .spinner-lines-small-md line,.infinite-scroll-content-md .infinite-loading-spinner .spinner-crescent circle{stroke:var(--ion-color-step-600, var(--ion-text-color-step-400, #666666))}.infinite-scroll-content-md .infinite-loading-spinner .spinner-bubbles circle,.infinite-scroll-content-md .infinite-loading-spinner .spinner-circles circle,.infinite-scroll-content-md .infinite-loading-spinner .spinner-dots circle{fill:var(--ion-color-step-600, var(--ion-text-color-step-400, #666666))}";
|
|
16717
|
+
|
|
16718
|
+
class InfiniteScrollContent {
|
|
16719
|
+
constructor(hostRef) {
|
|
16720
|
+
registerInstance(this, hostRef);
|
|
16721
|
+
this.customHTMLEnabled = config.get('innerHTMLTemplatesEnabled', ENABLE_HTML_CONTENT_DEFAULT);
|
|
16494
16722
|
}
|
|
16495
|
-
|
|
16496
|
-
|
|
16723
|
+
componentDidLoad() {
|
|
16724
|
+
if (this.loadingSpinner === undefined) {
|
|
16725
|
+
const mode = getIonMode$1(this);
|
|
16726
|
+
this.loadingSpinner = config.get('infiniteLoadingSpinner', config.get('spinner', mode === 'ios' ? 'lines' : 'crescent'));
|
|
16727
|
+
}
|
|
16497
16728
|
}
|
|
16498
|
-
|
|
16499
|
-
|
|
16500
|
-
|
|
16501
|
-
|
|
16502
|
-
|
|
16503
|
-
|
|
16504
|
-
|
|
16505
|
-
|
|
16506
|
-
|
|
16507
|
-
|
|
16508
|
-
|
|
16509
|
-
|
|
16510
|
-
|
|
16511
|
-
};
|
|
16729
|
+
renderLoadingText() {
|
|
16730
|
+
const { customHTMLEnabled, loadingText } = this;
|
|
16731
|
+
if (customHTMLEnabled) {
|
|
16732
|
+
return hAsync("div", { class: "infinite-loading-text", innerHTML: sanitizeDOMString(loadingText) });
|
|
16733
|
+
}
|
|
16734
|
+
return hAsync("div", { class: "infinite-loading-text" }, this.loadingText);
|
|
16735
|
+
}
|
|
16736
|
+
render() {
|
|
16737
|
+
const mode = getIonMode$1(this);
|
|
16738
|
+
return (hAsync(Host, { key: '7c16060dcfe2a0b0fb3e2f8f4c449589a76f1baa', class: {
|
|
16739
|
+
[mode]: true,
|
|
16740
|
+
// Used internally for styling
|
|
16741
|
+
[`infinite-scroll-content-${mode}`]: true,
|
|
16742
|
+
} }, hAsync("div", { key: 'a94f4d8746e053dc718f97520bd7e48cb316443a', class: "infinite-loading" }, this.loadingSpinner && (hAsync("div", { key: '10143d5d2a50a2a2bc5de1cee8e7ab51263bcf23', class: "infinite-loading-spinner" }, hAsync("ion-spinner", { key: '8846e88191690d9c61a0b462889ed56fbfed8b0d', name: this.loadingSpinner }))), this.loadingText !== undefined && this.renderLoadingText())));
|
|
16743
|
+
}
|
|
16744
|
+
static get style() { return {
|
|
16745
|
+
ios: infiniteScrollContentIosCss,
|
|
16746
|
+
md: infiniteScrollContentMdCss
|
|
16747
|
+
}; }
|
|
16748
|
+
static get cmpMeta() { return {
|
|
16749
|
+
"$flags$": 288,
|
|
16750
|
+
"$tagName$": "ion-infinite-scroll-content",
|
|
16751
|
+
"$members$": {
|
|
16752
|
+
"loadingSpinner": [1025, "loading-spinner"],
|
|
16753
|
+
"loadingText": [1, "loading-text"]
|
|
16754
|
+
},
|
|
16755
|
+
"$listeners$": undefined,
|
|
16756
|
+
"$lazyBundleId$": "-",
|
|
16757
|
+
"$attrsToReflect$": []
|
|
16758
|
+
}; }
|
|
16759
|
+
}
|
|
16512
16760
|
|
|
16513
16761
|
/**
|
|
16514
16762
|
* Used to update a scoped component that uses emulated slots. This fires when
|
|
@@ -18229,7 +18477,7 @@ class Item {
|
|
|
18229
18477
|
"color": [513],
|
|
18230
18478
|
"button": [4],
|
|
18231
18479
|
"detail": [4],
|
|
18232
|
-
"detailIcon": [
|
|
18480
|
+
"detailIcon": [1, "detail-icon"],
|
|
18233
18481
|
"disabled": [516],
|
|
18234
18482
|
"download": [1],
|
|
18235
18483
|
"href": [1],
|
|
@@ -22965,7 +23213,13 @@ class Modal {
|
|
|
22965
23213
|
};
|
|
22966
23214
|
window.addEventListener(KEYBOARD_DID_OPEN, this.keyboardOpenCallback);
|
|
22967
23215
|
}
|
|
22968
|
-
|
|
23216
|
+
/**
|
|
23217
|
+
* Recalculate isSheetModal because framework bindings (e.g., Angular)
|
|
23218
|
+
* may not have been applied when componentWillLoad ran.
|
|
23219
|
+
*/
|
|
23220
|
+
const isSheetModal = this.breakpoints !== undefined && this.initialBreakpoint !== undefined;
|
|
23221
|
+
this.isSheetModal = isSheetModal;
|
|
23222
|
+
if (isSheetModal) {
|
|
22969
23223
|
this.initSheetGesture();
|
|
22970
23224
|
}
|
|
22971
23225
|
else if (hasCardModal) {
|
|
@@ -23047,6 +23301,79 @@ class Modal {
|
|
|
23047
23301
|
this.gesture = gesture;
|
|
23048
23302
|
this.moveSheetToBreakpoint = moveSheetToBreakpoint;
|
|
23049
23303
|
this.gesture.enable(true);
|
|
23304
|
+
/**
|
|
23305
|
+
* When backdrop interaction is allowed, nested router outlets from child routes
|
|
23306
|
+
* may block pointer events to parent content. Apply passthrough styles only when
|
|
23307
|
+
* the modal was the sole content of a child route page.
|
|
23308
|
+
* See https://github.com/ionic-team/ionic-framework/issues/30700
|
|
23309
|
+
*/
|
|
23310
|
+
const backdropNotBlocking = this.showBackdrop === false || this.focusTrap === false || backdropBreakpoint > 0;
|
|
23311
|
+
if (backdropNotBlocking) {
|
|
23312
|
+
this.setupChildRoutePassthrough();
|
|
23313
|
+
}
|
|
23314
|
+
}
|
|
23315
|
+
/**
|
|
23316
|
+
* For sheet modals that allow background interaction, sets up pointer-events
|
|
23317
|
+
* passthrough on child route page wrappers and nested router outlets.
|
|
23318
|
+
*/
|
|
23319
|
+
setupChildRoutePassthrough() {
|
|
23320
|
+
var _a;
|
|
23321
|
+
// Cache the page parent for cleanup
|
|
23322
|
+
this.cachedPageParent = this.getOriginalPageParent();
|
|
23323
|
+
const pageParent = this.cachedPageParent;
|
|
23324
|
+
// Skip ion-app (controller modals) and pages with visible sibling content next to the modal
|
|
23325
|
+
if (!pageParent || pageParent.tagName === 'ION-APP') {
|
|
23326
|
+
return;
|
|
23327
|
+
}
|
|
23328
|
+
const hasVisibleContent = Array.from(pageParent.children).some((child) => {
|
|
23329
|
+
var _a;
|
|
23330
|
+
return child !== this.el &&
|
|
23331
|
+
!(child instanceof HTMLElement && window.getComputedStyle(child).display === 'none') &&
|
|
23332
|
+
child.tagName !== 'TEMPLATE' &&
|
|
23333
|
+
child.tagName !== 'SLOT' &&
|
|
23334
|
+
!(child.nodeType === Node.TEXT_NODE && !((_a = child.textContent) === null || _a === void 0 ? void 0 : _a.trim()));
|
|
23335
|
+
});
|
|
23336
|
+
if (hasVisibleContent) {
|
|
23337
|
+
return;
|
|
23338
|
+
}
|
|
23339
|
+
// Child route case: page only contained the modal
|
|
23340
|
+
pageParent.classList.add('ion-page-overlay-passthrough');
|
|
23341
|
+
// Also make nested router outlets passthrough
|
|
23342
|
+
const routerOutlet = pageParent.parentElement;
|
|
23343
|
+
if ((routerOutlet === null || routerOutlet === void 0 ? void 0 : routerOutlet.tagName) === 'ION-ROUTER-OUTLET' && ((_a = routerOutlet.parentElement) === null || _a === void 0 ? void 0 : _a.tagName) !== 'ION-APP') {
|
|
23344
|
+
routerOutlet.style.setProperty('pointer-events', 'none');
|
|
23345
|
+
routerOutlet.setAttribute('data-overlay-passthrough', 'true');
|
|
23346
|
+
}
|
|
23347
|
+
}
|
|
23348
|
+
/**
|
|
23349
|
+
* Finds the ion-page ancestor of the modal's original parent location.
|
|
23350
|
+
*/
|
|
23351
|
+
getOriginalPageParent() {
|
|
23352
|
+
if (!this.cachedOriginalParent) {
|
|
23353
|
+
return null;
|
|
23354
|
+
}
|
|
23355
|
+
let pageParent = this.cachedOriginalParent;
|
|
23356
|
+
while (pageParent && !pageParent.classList.contains('ion-page')) {
|
|
23357
|
+
pageParent = pageParent.parentElement;
|
|
23358
|
+
}
|
|
23359
|
+
return pageParent;
|
|
23360
|
+
}
|
|
23361
|
+
/**
|
|
23362
|
+
* Removes passthrough styles added by setupChildRoutePassthrough.
|
|
23363
|
+
*/
|
|
23364
|
+
cleanupChildRoutePassthrough() {
|
|
23365
|
+
const pageParent = this.cachedPageParent;
|
|
23366
|
+
if (!pageParent) {
|
|
23367
|
+
return;
|
|
23368
|
+
}
|
|
23369
|
+
pageParent.classList.remove('ion-page-overlay-passthrough');
|
|
23370
|
+
const routerOutlet = pageParent.parentElement;
|
|
23371
|
+
if (routerOutlet === null || routerOutlet === void 0 ? void 0 : routerOutlet.hasAttribute('data-overlay-passthrough')) {
|
|
23372
|
+
routerOutlet.style.removeProperty('pointer-events');
|
|
23373
|
+
routerOutlet.removeAttribute('data-overlay-passthrough');
|
|
23374
|
+
}
|
|
23375
|
+
// Clear the cached reference
|
|
23376
|
+
this.cachedPageParent = undefined;
|
|
23050
23377
|
}
|
|
23051
23378
|
sheetOnDismiss() {
|
|
23052
23379
|
/**
|
|
@@ -23136,6 +23463,7 @@ class Modal {
|
|
|
23136
23463
|
}
|
|
23137
23464
|
this.cleanupViewTransitionListener();
|
|
23138
23465
|
this.cleanupParentRemovalObserver();
|
|
23466
|
+
this.cleanupChildRoutePassthrough();
|
|
23139
23467
|
}
|
|
23140
23468
|
this.currentBreakpoint = undefined;
|
|
23141
23469
|
this.animation = undefined;
|
|
@@ -23332,6 +23660,17 @@ class Modal {
|
|
|
23332
23660
|
this.cachedOriginalParent.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {
|
|
23333
23661
|
return;
|
|
23334
23662
|
}
|
|
23663
|
+
/**
|
|
23664
|
+
* Don't observe for controller-based modals or when the parent is the
|
|
23665
|
+
* app root (document.body or ion-app). These parents won't be removed,
|
|
23666
|
+
* and observing document.body with subtree: true causes performance
|
|
23667
|
+
* issues with frameworks like Angular during change detection.
|
|
23668
|
+
*/
|
|
23669
|
+
if (this.hasController ||
|
|
23670
|
+
this.cachedOriginalParent === document.body ||
|
|
23671
|
+
this.cachedOriginalParent.tagName === 'ION-APP') {
|
|
23672
|
+
return;
|
|
23673
|
+
}
|
|
23335
23674
|
this.parentRemovalObserver = new MutationObserver((mutations) => {
|
|
23336
23675
|
mutations.forEach((mutation) => {
|
|
23337
23676
|
if (mutation.type === 'childList' && mutation.removedNodes.length > 0) {
|
|
@@ -23373,20 +23712,20 @@ class Modal {
|
|
|
23373
23712
|
const isCardModal = presentingElement !== undefined && mode === 'ios';
|
|
23374
23713
|
const isHandleCycle = handleBehavior === 'cycle';
|
|
23375
23714
|
const isSheetModalWithHandle = isSheetModal && showHandle;
|
|
23376
|
-
return (hAsync(Host, Object.assign({ key: '
|
|
23715
|
+
return (hAsync(Host, Object.assign({ key: '9a75095a13de0cfc96f1fa69fd92777d25da8daa', "no-router": true,
|
|
23377
23716
|
// Allow the modal to be navigable when the handle is focusable
|
|
23378
23717
|
tabIndex: isHandleCycle && isSheetModalWithHandle ? 0 : -1 }, htmlAttributes, { style: {
|
|
23379
23718
|
zIndex: `${20000 + this.overlayIndex}`,
|
|
23380
|
-
}, class: Object.assign({ [mode]: true, ['modal-default']: !isCardModal && !isSheetModal, [`modal-card`]: isCardModal, [`modal-sheet`]: isSheetModal, [`modal-no-expand-scroll`]: isSheetModal && !expandToScroll, 'overlay-hidden': true, [FOCUS_TRAP_DISABLE_CLASS]: focusTrap === false }, getClassMap(this.cssClass)), onIonBackdropTap: this.onBackdropTap, onIonModalDidPresent: this.onLifecycle, onIonModalWillPresent: this.onLifecycle, onIonModalWillDismiss: this.onLifecycle, onIonModalDidDismiss: this.onLifecycle, onFocus: this.onModalFocus }), hAsync("ion-backdrop", { key: '
|
|
23719
|
+
}, class: Object.assign({ [mode]: true, ['modal-default']: !isCardModal && !isSheetModal, [`modal-card`]: isCardModal, [`modal-sheet`]: isSheetModal, [`modal-no-expand-scroll`]: isSheetModal && !expandToScroll, 'overlay-hidden': true, [FOCUS_TRAP_DISABLE_CLASS]: focusTrap === false }, getClassMap(this.cssClass)), onIonBackdropTap: this.onBackdropTap, onIonModalDidPresent: this.onLifecycle, onIonModalWillPresent: this.onLifecycle, onIonModalWillDismiss: this.onLifecycle, onIonModalDidDismiss: this.onLifecycle, onFocus: this.onModalFocus }), hAsync("ion-backdrop", { key: 'd02612d8063ef20f59f173ff47795f71cdaaf63e', ref: (el) => (this.backdropEl = el), visible: this.showBackdrop, tappable: this.backdropDismiss, part: "backdrop" }), mode === 'ios' && hAsync("div", { key: '708761b70a93e34c08faae079569f444c7416a4c', class: "modal-shadow" }), hAsync("div", Object.assign({ key: 'a72226ff1a98229f9bfd9207b98fc57e02baa430',
|
|
23381
23720
|
/*
|
|
23382
23721
|
role and aria-modal must be used on the
|
|
23383
23722
|
same element. They must also be set inside the
|
|
23384
23723
|
shadow DOM otherwise ion-button will not be highlighted
|
|
23385
23724
|
when using VoiceOver: https://bugs.webkit.org/show_bug.cgi?id=247134
|
|
23386
23725
|
*/
|
|
23387
|
-
role: "dialog" }, inheritedAttributes, { "aria-modal": "true", class: "modal-wrapper ion-overlay-wrapper", part: "content", ref: (el) => (this.wrapperEl = el) }), showHandle && (hAsync("button", { key: '
|
|
23726
|
+
role: "dialog" }, inheritedAttributes, { "aria-modal": "true", class: "modal-wrapper ion-overlay-wrapper", part: "content", ref: (el) => (this.wrapperEl = el) }), showHandle && (hAsync("button", { key: '0547f32323882660221385d84d492929caa77c6b', class: "modal-handle",
|
|
23388
23727
|
// Prevents the handle from receiving keyboard focus when it does not cycle
|
|
23389
|
-
tabIndex: !isHandleCycle ? -1 : 0, "aria-label": "Activate to adjust the size of the dialog overlaying the screen", onClick: isHandleCycle ? this.onHandleClick : undefined, part: "handle", ref: (el) => (this.dragHandleEl = el) })), hAsync("slot", { key: '
|
|
23728
|
+
tabIndex: !isHandleCycle ? -1 : 0, "aria-label": "Activate to adjust the size of the dialog overlaying the screen", onClick: isHandleCycle ? this.onHandleClick : undefined, part: "handle", ref: (el) => (this.dragHandleEl = el) })), hAsync("slot", { key: 'fccbd64518b6fa22f9e874deb6b4ba55d8d89c3b', onSlotchange: this.onSlotChange }))));
|
|
23390
23729
|
}
|
|
23391
23730
|
get el() { return getElement(this); }
|
|
23392
23731
|
static get watchers() { return {
|
|
@@ -23426,6 +23765,7 @@ class Modal {
|
|
|
23426
23765
|
"keepContentsMounted": [4, "keep-contents-mounted"],
|
|
23427
23766
|
"focusTrap": [4, "focus-trap"],
|
|
23428
23767
|
"canDismiss": [4, "can-dismiss"],
|
|
23768
|
+
"isSheetModal": [32],
|
|
23429
23769
|
"presented": [32],
|
|
23430
23770
|
"present": [64],
|
|
23431
23771
|
"dismiss": [64],
|
|
@@ -27493,6 +27833,10 @@ class Popover {
|
|
|
27493
27833
|
if (destroyTriggerInteraction) {
|
|
27494
27834
|
destroyTriggerInteraction();
|
|
27495
27835
|
}
|
|
27836
|
+
if (this.headerResizeObserver) {
|
|
27837
|
+
this.headerResizeObserver.disconnect();
|
|
27838
|
+
this.headerResizeObserver = undefined;
|
|
27839
|
+
}
|
|
27496
27840
|
}
|
|
27497
27841
|
componentWillLoad() {
|
|
27498
27842
|
var _a, _b;
|
|
@@ -27595,6 +27939,7 @@ class Popover {
|
|
|
27595
27939
|
*/
|
|
27596
27940
|
this.ionMount.emit();
|
|
27597
27941
|
this.usersElement = await attachComponent(delegate, el, this.component, ['popover-viewport'], this.componentProps, inline);
|
|
27942
|
+
this.recalculateContentOnHeaderReady();
|
|
27598
27943
|
if (!this.keyboardEvents) {
|
|
27599
27944
|
this.configureKeyboardInteraction();
|
|
27600
27945
|
}
|
|
@@ -27640,6 +27985,35 @@ class Popover {
|
|
|
27640
27985
|
}
|
|
27641
27986
|
unlock();
|
|
27642
27987
|
}
|
|
27988
|
+
/**
|
|
27989
|
+
* Watch the header for height changes and trigger content dimension
|
|
27990
|
+
* recalculation when the header has a height > 0. This sets the offset-top
|
|
27991
|
+
* of the content to the height of the header correctly.
|
|
27992
|
+
*/
|
|
27993
|
+
recalculateContentOnHeaderReady() {
|
|
27994
|
+
var _a;
|
|
27995
|
+
const popoverContent = (_a = this.el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.popover-content');
|
|
27996
|
+
if (!popoverContent) {
|
|
27997
|
+
return;
|
|
27998
|
+
}
|
|
27999
|
+
const contentContainer = this.usersElement || popoverContent;
|
|
28000
|
+
const header = contentContainer.querySelector('ion-header');
|
|
28001
|
+
const contentElements = contentContainer.querySelectorAll('ion-content');
|
|
28002
|
+
if (!header || contentElements.length === 0) {
|
|
28003
|
+
return;
|
|
28004
|
+
}
|
|
28005
|
+
this.headerResizeObserver = new ResizeObserver(async () => {
|
|
28006
|
+
var _a;
|
|
28007
|
+
if (header.offsetHeight > 0) {
|
|
28008
|
+
(_a = this.headerResizeObserver) === null || _a === void 0 ? void 0 : _a.disconnect();
|
|
28009
|
+
this.headerResizeObserver = undefined;
|
|
28010
|
+
for (const contentEl of contentElements) {
|
|
28011
|
+
await contentEl.recalculateDimensions();
|
|
28012
|
+
}
|
|
28013
|
+
}
|
|
28014
|
+
});
|
|
28015
|
+
this.headerResizeObserver.observe(header);
|
|
28016
|
+
}
|
|
27643
28017
|
/**
|
|
27644
28018
|
* Dismiss the popover overlay after it has been presented.
|
|
27645
28019
|
* This is a no-op if the overlay has not been presented yet. If you want
|
|
@@ -27701,9 +28075,9 @@ class Popover {
|
|
|
27701
28075
|
const { onLifecycle, parentPopover, dismissOnSelect, side, arrow, htmlAttributes, focusTrap } = this;
|
|
27702
28076
|
const desktop = isPlatform('desktop');
|
|
27703
28077
|
const enableArrow = arrow && !parentPopover;
|
|
27704
|
-
return (hAsync(Host, Object.assign({ key: '
|
|
28078
|
+
return (hAsync(Host, Object.assign({ key: '42863f748c93f709d433931d969230137b37d42d', "aria-modal": "true", "no-router": true, tabindex: "-1" }, htmlAttributes, { style: {
|
|
27705
28079
|
zIndex: `${20000 + this.overlayIndex}`,
|
|
27706
|
-
}, class: Object.assign(Object.assign({}, getClassMap(this.cssClass)), { [mode]: true, 'popover-translucent': this.translucent, 'overlay-hidden': true, 'popover-desktop': desktop, [`popover-side-${side}`]: true, [FOCUS_TRAP_DISABLE_CLASS]: focusTrap === false, 'popover-nested': !!parentPopover }), onIonPopoverDidPresent: onLifecycle, onIonPopoverWillPresent: onLifecycle, onIonPopoverWillDismiss: onLifecycle, onIonPopoverDidDismiss: onLifecycle, onIonBackdropTap: this.onBackdropTap }), !parentPopover && hAsync("ion-backdrop", { key: '
|
|
28080
|
+
}, class: Object.assign(Object.assign({}, getClassMap(this.cssClass)), { [mode]: true, 'popover-translucent': this.translucent, 'overlay-hidden': true, 'popover-desktop': desktop, [`popover-side-${side}`]: true, [FOCUS_TRAP_DISABLE_CLASS]: focusTrap === false, 'popover-nested': !!parentPopover }), onIonPopoverDidPresent: onLifecycle, onIonPopoverWillPresent: onLifecycle, onIonPopoverWillDismiss: onLifecycle, onIonPopoverDidDismiss: onLifecycle, onIonBackdropTap: this.onBackdropTap }), !parentPopover && hAsync("ion-backdrop", { key: '22b6d82178b52158b76ab3fd9a7dd738fd6e4bbf', tappable: this.backdropDismiss, visible: this.showBackdrop, part: "backdrop" }), hAsync("div", { key: 'b76335c64e992a964ed3fb91d17a992c3474b4cd', class: "popover-wrapper ion-overlay-wrapper", onClick: dismissOnSelect ? () => this.dismiss() : undefined }, enableArrow && hAsync("div", { key: '018c846c32e7ff7fa010528e6b37a17e5f03c84c', class: "popover-arrow", part: "arrow" }), hAsync("div", { key: '350c468c80052da3a07768bceab98fe159c35a43', class: "popover-content", part: "content" }, hAsync("slot", { key: '686443c17ac9873d33905c1cdb67e6d6da675282' })))));
|
|
27707
28081
|
}
|
|
27708
28082
|
get el() { return getElement(this); }
|
|
27709
28083
|
static get watchers() { return {
|
|
@@ -28053,6 +28427,10 @@ class RadioGroup {
|
|
|
28053
28427
|
this.helperTextId = `${this.inputId}-helper-text`;
|
|
28054
28428
|
this.errorTextId = `${this.inputId}-error-text`;
|
|
28055
28429
|
this.labelId = `${this.inputId}-lbl`;
|
|
28430
|
+
/**
|
|
28431
|
+
* Track validation state for proper aria-live announcements.
|
|
28432
|
+
*/
|
|
28433
|
+
this.isInvalid = false;
|
|
28056
28434
|
/**
|
|
28057
28435
|
* If `true`, the radios can be deselected.
|
|
28058
28436
|
*/
|
|
@@ -28134,6 +28512,18 @@ class RadioGroup {
|
|
|
28134
28512
|
this.labelId = label.id = this.name + '-lbl';
|
|
28135
28513
|
}
|
|
28136
28514
|
}
|
|
28515
|
+
// Always set initial state
|
|
28516
|
+
this.isInvalid = checkInvalidState(this.el);
|
|
28517
|
+
}
|
|
28518
|
+
componentWillLoad() {
|
|
28519
|
+
this.hintTextId = this.getHintTextId();
|
|
28520
|
+
}
|
|
28521
|
+
disconnectedCallback() {
|
|
28522
|
+
// Clean up validation observer to prevent memory leaks.
|
|
28523
|
+
if (this.validationObserver) {
|
|
28524
|
+
this.validationObserver.disconnect();
|
|
28525
|
+
this.validationObserver = undefined;
|
|
28526
|
+
}
|
|
28137
28527
|
}
|
|
28138
28528
|
getRadios() {
|
|
28139
28529
|
return Array.from(this.el.querySelectorAll('ion-radio'));
|
|
@@ -28209,16 +28599,16 @@ class RadioGroup {
|
|
|
28209
28599
|
* Renders the helper text or error text values
|
|
28210
28600
|
*/
|
|
28211
28601
|
renderHintText() {
|
|
28212
|
-
const { helperText, errorText, helperTextId, errorTextId } = this;
|
|
28602
|
+
const { helperText, errorText, helperTextId, errorTextId, isInvalid } = this;
|
|
28213
28603
|
const hasHintText = !!helperText || !!errorText;
|
|
28214
28604
|
if (!hasHintText) {
|
|
28215
28605
|
return;
|
|
28216
28606
|
}
|
|
28217
|
-
return (hAsync("div", { class: "radio-group-top" }, hAsync("div", { id: helperTextId, class: "helper-text" }, helperText), hAsync("div", { id: errorTextId, class: "error-text" }, errorText)));
|
|
28607
|
+
return (hAsync("div", { class: "radio-group-top" }, hAsync("div", { id: helperTextId, class: "helper-text", "aria-live": "polite" }, !isInvalid ? helperText : null), hAsync("div", { id: errorTextId, class: "error-text", role: "alert" }, isInvalid ? errorText : null)));
|
|
28218
28608
|
}
|
|
28219
|
-
|
|
28220
|
-
const {
|
|
28221
|
-
if (
|
|
28609
|
+
getHintTextId() {
|
|
28610
|
+
const { helperText, errorText, helperTextId, errorTextId, isInvalid } = this;
|
|
28611
|
+
if (isInvalid && errorText) {
|
|
28222
28612
|
return errorTextId;
|
|
28223
28613
|
}
|
|
28224
28614
|
if (helperText) {
|
|
@@ -28230,7 +28620,7 @@ class RadioGroup {
|
|
|
28230
28620
|
const { label, labelId, el, name, value } = this;
|
|
28231
28621
|
const mode = getIonMode$1(this);
|
|
28232
28622
|
renderHiddenInput(true, el, name, value, false);
|
|
28233
|
-
return (hAsync(Host, { key: '
|
|
28623
|
+
return (hAsync(Host, { key: 'db593b3ed511e9395e3c7bfd91b787328692cd6d', role: "radiogroup", "aria-labelledby": label ? labelId : null, "aria-describedby": this.hintTextId, "aria-invalid": this.isInvalid ? 'true' : undefined, onClick: this.onClick, class: mode }, this.renderHintText(), hAsync("div", { key: '85045b45a0100a45f3b9a35d1c5a25ec63d525c4', class: "radio-group-wrapper" }, hAsync("slot", { key: '53dacb87ce62398e78771fb2efaf839ab922d946' }))));
|
|
28234
28624
|
}
|
|
28235
28625
|
get el() { return getElement(this); }
|
|
28236
28626
|
static get watchers() { return {
|
|
@@ -28250,6 +28640,8 @@ class RadioGroup {
|
|
|
28250
28640
|
"value": [1032],
|
|
28251
28641
|
"helperText": [1, "helper-text"],
|
|
28252
28642
|
"errorText": [1, "error-text"],
|
|
28643
|
+
"isInvalid": [32],
|
|
28644
|
+
"hintTextId": [32],
|
|
28253
28645
|
"setFocus": [64]
|
|
28254
28646
|
},
|
|
28255
28647
|
"$listeners$": [[4, "keydown", "onKeydown"]],
|
|
@@ -33378,7 +33770,7 @@ class Select {
|
|
|
33378
33770
|
}
|
|
33379
33771
|
componentWillLoad() {
|
|
33380
33772
|
this.inheritedAttributes = inheritAttributes$1(this.el, ['aria-label']);
|
|
33381
|
-
this.
|
|
33773
|
+
this.hintTextId = this.getHintTextId();
|
|
33382
33774
|
}
|
|
33383
33775
|
componentDidLoad() {
|
|
33384
33776
|
/**
|
|
@@ -33557,13 +33949,18 @@ class Select {
|
|
|
33557
33949
|
.filter((cls) => cls !== 'hydrated')
|
|
33558
33950
|
.join(' ');
|
|
33559
33951
|
const optClass = `${OPTION_CLASS} ${copyClasses}`;
|
|
33952
|
+
const isSelected = isOptionSelected(selectValue, value, this.compareWith);
|
|
33560
33953
|
return {
|
|
33561
|
-
role:
|
|
33954
|
+
role: isSelected ? 'selected' : '',
|
|
33562
33955
|
text: option.textContent,
|
|
33563
33956
|
cssClass: optClass,
|
|
33564
33957
|
handler: () => {
|
|
33565
33958
|
this.setValue(value);
|
|
33566
33959
|
},
|
|
33960
|
+
htmlAttributes: {
|
|
33961
|
+
'aria-checked': isSelected ? 'true' : 'false',
|
|
33962
|
+
role: 'radio',
|
|
33963
|
+
},
|
|
33567
33964
|
};
|
|
33568
33965
|
});
|
|
33569
33966
|
// Add "cancel" button
|
|
@@ -33877,9 +34274,9 @@ class Select {
|
|
|
33877
34274
|
}
|
|
33878
34275
|
renderListbox() {
|
|
33879
34276
|
const { disabled, inputId, isExpanded, required } = this;
|
|
33880
|
-
return (hAsync("button", { disabled: disabled, id: inputId, "aria-label": this.ariaLabel, "aria-haspopup": "dialog", "aria-expanded": `${isExpanded}`, "aria-describedby": this.
|
|
34277
|
+
return (hAsync("button", { disabled: disabled, id: inputId, "aria-label": this.ariaLabel, "aria-haspopup": "dialog", "aria-expanded": `${isExpanded}`, "aria-describedby": this.hintTextId, "aria-invalid": this.isInvalid ? 'true' : undefined, "aria-required": `${required}`, onFocus: this.onFocus, onBlur: this.onBlur, ref: (focusEl) => (this.focusEl = focusEl) }));
|
|
33881
34278
|
}
|
|
33882
|
-
|
|
34279
|
+
getHintTextId() {
|
|
33883
34280
|
const { helperText, errorText, helperTextId, errorTextId, isInvalid } = this;
|
|
33884
34281
|
if (isInvalid && errorText) {
|
|
33885
34282
|
return errorTextId;
|
|
@@ -33944,7 +34341,7 @@ class Select {
|
|
|
33944
34341
|
* TODO(FW-5592): Remove hasStartEndSlots condition
|
|
33945
34342
|
*/
|
|
33946
34343
|
const labelShouldFloat = labelPlacement === 'stacked' || (labelPlacement === 'floating' && (hasValue || isExpanded || hasStartEndSlots));
|
|
33947
|
-
return (hAsync(Host, { key: '
|
|
34344
|
+
return (hAsync(Host, { key: 'd8026835993d0e6dce747098f741a06ae4e4f54d', onClick: this.onClick, class: createColorClasses$1(this.color, {
|
|
33948
34345
|
[mode]: true,
|
|
33949
34346
|
'in-item': inItem,
|
|
33950
34347
|
'in-item-color': hostContext('ion-item.ion-color', el),
|
|
@@ -33962,7 +34359,7 @@ class Select {
|
|
|
33962
34359
|
[`select-justify-${justify}`]: justifyEnabled,
|
|
33963
34360
|
[`select-shape-${shape}`]: shape !== undefined,
|
|
33964
34361
|
[`select-label-placement-${labelPlacement}`]: true,
|
|
33965
|
-
}) }, hAsync("label", { key: '
|
|
34362
|
+
}) }, hAsync("label", { key: 'fcfb40209d6d07d49c7fdca4884b31abf6ac2567', class: "select-wrapper", id: "select-label", onClick: this.onLabelClick }, this.renderLabelContainer(), hAsync("div", { key: 'f191664f2290c3890bde1156157c83a6ff17dbe2', class: "select-wrapper-inner" }, hAsync("slot", { key: '317a28d1115b4214f291e228ce0fe6fc782e57d5', name: "start" }), hAsync("div", { key: 'db68e18abd5ca3a1023d7c7b58bf89893ae18073', class: "native-wrapper", ref: (el) => (this.nativeWrapperEl = el), part: "container" }, this.renderSelectText(), this.renderListbox()), hAsync("slot", { key: '4274e042267c2234a198b0f65c89477898d08130', name: "end" }), !hasFloatingOrStackedLabel && this.renderSelectIcon()), hasFloatingOrStackedLabel && this.renderSelectIcon(), shouldRenderHighlight && hAsync("div", { key: '2e2eb1ee2b2791e0683d9afb186fde6e938ca59c', class: "select-highlight" })), this.renderBottomContent()));
|
|
33966
34363
|
}
|
|
33967
34364
|
get el() { return getElement(this); }
|
|
33968
34365
|
static get watchers() { return {
|
|
@@ -34004,7 +34401,7 @@ class Select {
|
|
|
34004
34401
|
"isExpanded": [32],
|
|
34005
34402
|
"hasFocus": [32],
|
|
34006
34403
|
"isInvalid": [32],
|
|
34007
|
-
"
|
|
34404
|
+
"hintTextId": [32],
|
|
34008
34405
|
"open": [64]
|
|
34009
34406
|
},
|
|
34010
34407
|
"$listeners$": undefined,
|
|
@@ -36475,6 +36872,10 @@ class Toggle {
|
|
|
36475
36872
|
this.inheritedAttributes = {};
|
|
36476
36873
|
this.didLoad = false;
|
|
36477
36874
|
this.activated = false;
|
|
36875
|
+
/**
|
|
36876
|
+
* Track validation state for proper aria-live announcements.
|
|
36877
|
+
*/
|
|
36878
|
+
this.isInvalid = false;
|
|
36478
36879
|
/**
|
|
36479
36880
|
* The name of the control, which is submitted with the form data.
|
|
36480
36881
|
*/
|
|
@@ -36588,15 +36989,18 @@ class Toggle {
|
|
|
36588
36989
|
});
|
|
36589
36990
|
}
|
|
36590
36991
|
async connectedCallback() {
|
|
36992
|
+
const { didLoad, el } = this;
|
|
36591
36993
|
/**
|
|
36592
36994
|
* If we have not yet rendered
|
|
36593
36995
|
* ion-toggle, then toggleTrack is not defined.
|
|
36594
36996
|
* But if we are moving ion-toggle via appendChild,
|
|
36595
36997
|
* then toggleTrack will be defined.
|
|
36596
36998
|
*/
|
|
36597
|
-
if (
|
|
36999
|
+
if (didLoad) {
|
|
36598
37000
|
this.setupGesture();
|
|
36599
37001
|
}
|
|
37002
|
+
// Always set initial state
|
|
37003
|
+
this.isInvalid = checkInvalidState(el);
|
|
36600
37004
|
}
|
|
36601
37005
|
componentDidLoad() {
|
|
36602
37006
|
this.setupGesture();
|
|
@@ -36607,9 +37011,15 @@ class Toggle {
|
|
|
36607
37011
|
this.gesture.destroy();
|
|
36608
37012
|
this.gesture = undefined;
|
|
36609
37013
|
}
|
|
37014
|
+
// Clean up validation observer to prevent memory leaks.
|
|
37015
|
+
if (this.validationObserver) {
|
|
37016
|
+
this.validationObserver.disconnect();
|
|
37017
|
+
this.validationObserver = undefined;
|
|
37018
|
+
}
|
|
36610
37019
|
}
|
|
36611
37020
|
componentWillLoad() {
|
|
36612
37021
|
this.inheritedAttributes = Object.assign({}, inheritAriaAttributes(this.el));
|
|
37022
|
+
this.hintTextId = this.getHintTextId();
|
|
36613
37023
|
}
|
|
36614
37024
|
onStart() {
|
|
36615
37025
|
this.activated = true;
|
|
@@ -36650,9 +37060,9 @@ class Toggle {
|
|
|
36650
37060
|
get hasLabel() {
|
|
36651
37061
|
return this.el.textContent !== '';
|
|
36652
37062
|
}
|
|
36653
|
-
|
|
36654
|
-
const {
|
|
36655
|
-
if (
|
|
37063
|
+
getHintTextId() {
|
|
37064
|
+
const { helperText, errorText, helperTextId, errorTextId, isInvalid } = this;
|
|
37065
|
+
if (isInvalid && errorText) {
|
|
36656
37066
|
return errorTextId;
|
|
36657
37067
|
}
|
|
36658
37068
|
if (helperText) {
|
|
@@ -36665,7 +37075,7 @@ class Toggle {
|
|
|
36665
37075
|
* This element should only be rendered if hint text is set.
|
|
36666
37076
|
*/
|
|
36667
37077
|
renderHintText() {
|
|
36668
|
-
const { helperText, errorText, helperTextId, errorTextId } = this;
|
|
37078
|
+
const { helperText, errorText, helperTextId, errorTextId, isInvalid } = this;
|
|
36669
37079
|
/**
|
|
36670
37080
|
* undefined and empty string values should
|
|
36671
37081
|
* be treated as not having helper/error text.
|
|
@@ -36674,15 +37084,15 @@ class Toggle {
|
|
|
36674
37084
|
if (!hasHintText) {
|
|
36675
37085
|
return;
|
|
36676
37086
|
}
|
|
36677
|
-
return (hAsync("div", { class: "toggle-bottom" }, hAsync("div", { id: helperTextId, class: "helper-text", part: "supporting-text helper-text" }, helperText), hAsync("div", { id: errorTextId, class: "error-text", part: "supporting-text error-text" }, errorText)));
|
|
37087
|
+
return (hAsync("div", { class: "toggle-bottom" }, hAsync("div", { id: helperTextId, class: "helper-text", part: "supporting-text helper-text", "aria-live": "polite" }, !isInvalid ? helperText : null), hAsync("div", { id: errorTextId, class: "error-text", part: "supporting-text error-text", role: "alert" }, isInvalid ? errorText : null)));
|
|
36678
37088
|
}
|
|
36679
37089
|
render() {
|
|
36680
|
-
const { activated, alignment, checked, color, disabled, el,
|
|
37090
|
+
const { activated, alignment, checked, color, disabled, el, hasLabel, inheritedAttributes, inputId, inputLabelId, justify, labelPlacement, name, required, } = this;
|
|
36681
37091
|
const mode = getIonMode$1(this);
|
|
36682
37092
|
const value = this.getValue();
|
|
36683
37093
|
const rtl = isRTL$1(el) ? 'rtl' : 'ltr';
|
|
36684
37094
|
renderHiddenInput(true, el, name, checked ? value : '', disabled);
|
|
36685
|
-
return (hAsync(Host, { key: '
|
|
37095
|
+
return (hAsync(Host, { key: 'f569148edd89ee041a4719ffc4733c16b05229bd', role: "switch", "aria-checked": `${checked}`, "aria-describedby": this.hintTextId, "aria-invalid": this.isInvalid ? 'true' : undefined, onClick: this.onClick, "aria-labelledby": hasLabel ? inputLabelId : null, "aria-label": inheritedAttributes['aria-label'] || null, "aria-disabled": disabled ? 'true' : null, "aria-required": required ? 'true' : undefined, tabindex: disabled ? undefined : 0, onKeyDown: this.onKeyDown, onFocus: this.onFocus, onBlur: this.onBlur, class: createColorClasses$1(color, {
|
|
36686
37096
|
[mode]: true,
|
|
36687
37097
|
'in-item': hostContext('ion-item', el),
|
|
36688
37098
|
'toggle-activated': activated,
|
|
@@ -36692,10 +37102,10 @@ class Toggle {
|
|
|
36692
37102
|
[`toggle-alignment-${alignment}`]: alignment !== undefined,
|
|
36693
37103
|
[`toggle-label-placement-${labelPlacement}`]: true,
|
|
36694
37104
|
[`toggle-${rtl}`]: true,
|
|
36695
|
-
}) }, hAsync("label", { key: '
|
|
37105
|
+
}) }, hAsync("label", { key: '3027f2ac4be6de422a14486d847fbee77f615db1', class: "toggle-wrapper", htmlFor: inputId }, hAsync("input", Object.assign({ key: '4b0304c9e879e432b80184b4e5de37d55c11b436', type: "checkbox", role: "switch", "aria-checked": `${checked}`, checked: checked, disabled: disabled, id: inputId, required: required }, inheritedAttributes)), hAsync("div", { key: '8ef265ec942e7f01ff31cbb202ed146c6bf94e02', class: {
|
|
36696
37106
|
'label-text-wrapper': true,
|
|
36697
37107
|
'label-text-wrapper-hidden': !hasLabel,
|
|
36698
|
-
}, part: "label", id: inputLabelId, onClick: this.onDivLabelClick }, hAsync("slot", { key: '
|
|
37108
|
+
}, part: "label", id: inputLabelId, onClick: this.onDivLabelClick }, hAsync("slot", { key: '7b162b7dd27199cca2a4c995276a18b9f8e44aaf' }), this.renderHintText()), hAsync("div", { key: 'd13c34bd42fca01cc73ddb4ea7e471b33a282a3e', class: "native-wrapper" }, this.renderToggleControl()))));
|
|
36699
37109
|
}
|
|
36700
37110
|
get el() { return getElement(this); }
|
|
36701
37111
|
static get watchers() { return {
|
|
@@ -36721,7 +37131,9 @@ class Toggle {
|
|
|
36721
37131
|
"justify": [1],
|
|
36722
37132
|
"alignment": [1],
|
|
36723
37133
|
"required": [4],
|
|
36724
|
-
"activated": [32]
|
|
37134
|
+
"activated": [32],
|
|
37135
|
+
"isInvalid": [32],
|
|
37136
|
+
"hintTextId": [32]
|
|
36725
37137
|
},
|
|
36726
37138
|
"$listeners$": undefined,
|
|
36727
37139
|
"$lazyBundleId$": "-",
|