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.mjs
CHANGED
|
@@ -4449,7 +4449,7 @@ class Accordion {
|
|
|
4449
4449
|
"value": [1],
|
|
4450
4450
|
"disabled": [4],
|
|
4451
4451
|
"readonly": [4],
|
|
4452
|
-
"toggleIcon": [
|
|
4452
|
+
"toggleIcon": [1, "toggle-icon"],
|
|
4453
4453
|
"toggleIconSlot": [1, "toggle-icon-slot"],
|
|
4454
4454
|
"state": [32],
|
|
4455
4455
|
"isNext": [32],
|
|
@@ -5849,6 +5849,14 @@ const CoreDelegate = () => {
|
|
|
5849
5849
|
let lastOverlayIndex = 0;
|
|
5850
5850
|
let lastId = 0;
|
|
5851
5851
|
const activeAnimations = new WeakMap();
|
|
5852
|
+
/**
|
|
5853
|
+
* Determines if the overlay's backdrop is always blocking (no background interaction).
|
|
5854
|
+
* Returns false if showBackdrop=false or backdropBreakpoint > 0.
|
|
5855
|
+
*/
|
|
5856
|
+
const isBackdropAlwaysBlocking = (el) => {
|
|
5857
|
+
var _a;
|
|
5858
|
+
return el.showBackdrop !== false && !(((_a = el.backdropBreakpoint) !== null && _a !== void 0 ? _a : 0) > 0);
|
|
5859
|
+
};
|
|
5852
5860
|
const createController = (tagName) => {
|
|
5853
5861
|
return {
|
|
5854
5862
|
create(options) {
|
|
@@ -6286,9 +6294,7 @@ const present = async (overlay, name, iosEnterAnimation, mdEnterAnimation, opts)
|
|
|
6286
6294
|
*/
|
|
6287
6295
|
const overlayEl = overlay.el;
|
|
6288
6296
|
const shouldTrapFocus = overlayEl.tagName !== 'ION-TOAST' && overlayEl.focusTrap !== false;
|
|
6289
|
-
|
|
6290
|
-
// expect background interaction to remain enabled.
|
|
6291
|
-
const shouldLockRoot = shouldTrapFocus && overlayEl.showBackdrop !== false;
|
|
6297
|
+
const shouldLockRoot = shouldTrapFocus && isBackdropAlwaysBlocking(overlayEl);
|
|
6292
6298
|
overlay.presented = true;
|
|
6293
6299
|
overlay.willPresent.emit();
|
|
6294
6300
|
if (shouldLockRoot) {
|
|
@@ -6404,10 +6410,10 @@ const dismiss = async (overlay, data, role, name, iosLeaveAnimation, mdLeaveAnim
|
|
|
6404
6410
|
*/
|
|
6405
6411
|
const overlaysLockingRoot = presentedOverlays.filter((o) => {
|
|
6406
6412
|
const el = o;
|
|
6407
|
-
return el.tagName !== 'ION-TOAST' && el.focusTrap !== false && el
|
|
6413
|
+
return el.tagName !== 'ION-TOAST' && el.focusTrap !== false && isBackdropAlwaysBlocking(el);
|
|
6408
6414
|
});
|
|
6409
6415
|
const overlayEl = overlay.el;
|
|
6410
|
-
const locksRoot = overlayEl.tagName !== 'ION-TOAST' && overlayEl.focusTrap !== false && overlayEl
|
|
6416
|
+
const locksRoot = overlayEl.tagName !== 'ION-TOAST' && overlayEl.focusTrap !== false && isBackdropAlwaysBlocking(overlayEl);
|
|
6411
6417
|
/**
|
|
6412
6418
|
* If this is the last visible overlay that is trapping focus
|
|
6413
6419
|
* then we want to re-add the root to the accessibility tree.
|
|
@@ -7611,6 +7617,7 @@ class ActionSheet {
|
|
|
7611
7617
|
this.delegateController = createDelegateController(this);
|
|
7612
7618
|
this.lockController = createLockController();
|
|
7613
7619
|
this.triggerController = createTriggerController();
|
|
7620
|
+
this.hasRadioButtons = false;
|
|
7614
7621
|
this.presented = false;
|
|
7615
7622
|
/** @internal */
|
|
7616
7623
|
this.hasController = false;
|
|
@@ -7655,6 +7662,19 @@ class ActionSheet {
|
|
|
7655
7662
|
}
|
|
7656
7663
|
};
|
|
7657
7664
|
}
|
|
7665
|
+
buttonsChanged() {
|
|
7666
|
+
const radioButtons = this.getRadioButtons();
|
|
7667
|
+
this.hasRadioButtons = radioButtons.length > 0;
|
|
7668
|
+
// Initialize activeRadioId when buttons change
|
|
7669
|
+
if (this.hasRadioButtons) {
|
|
7670
|
+
const checkedButton = radioButtons.find((b) => { var _a; return ((_a = b.htmlAttributes) === null || _a === void 0 ? void 0 : _a['aria-checked']) === 'true'; });
|
|
7671
|
+
if (checkedButton) {
|
|
7672
|
+
const allButtons = this.getButtons();
|
|
7673
|
+
const checkedIndex = allButtons.indexOf(checkedButton);
|
|
7674
|
+
this.activeRadioId = this.getButtonId(checkedButton, checkedIndex);
|
|
7675
|
+
}
|
|
7676
|
+
}
|
|
7677
|
+
}
|
|
7658
7678
|
onIsOpenChange(newValue, oldValue) {
|
|
7659
7679
|
if (newValue === true && oldValue === false) {
|
|
7660
7680
|
this.present();
|
|
@@ -7735,11 +7755,122 @@ class ActionSheet {
|
|
|
7735
7755
|
}
|
|
7736
7756
|
return true;
|
|
7737
7757
|
}
|
|
7758
|
+
/**
|
|
7759
|
+
* Get all buttons regardless of role.
|
|
7760
|
+
*/
|
|
7738
7761
|
getButtons() {
|
|
7739
7762
|
return this.buttons.map((b) => {
|
|
7740
7763
|
return typeof b === 'string' ? { text: b } : b;
|
|
7741
7764
|
});
|
|
7742
7765
|
}
|
|
7766
|
+
/**
|
|
7767
|
+
* Get all radio buttons (buttons with role="radio").
|
|
7768
|
+
*/
|
|
7769
|
+
getRadioButtons() {
|
|
7770
|
+
return this.getButtons().filter((b) => {
|
|
7771
|
+
var _a;
|
|
7772
|
+
const role = (_a = b.htmlAttributes) === null || _a === void 0 ? void 0 : _a.role;
|
|
7773
|
+
return role === 'radio' && !isCancel(role);
|
|
7774
|
+
});
|
|
7775
|
+
}
|
|
7776
|
+
/**
|
|
7777
|
+
* Handle radio button selection and update aria-checked state.
|
|
7778
|
+
*
|
|
7779
|
+
* @param button The radio button that was selected.
|
|
7780
|
+
*/
|
|
7781
|
+
selectRadioButton(button) {
|
|
7782
|
+
const buttonId = this.getButtonId(button);
|
|
7783
|
+
// Set the active radio ID (this will trigger a re-render and update aria-checked)
|
|
7784
|
+
this.activeRadioId = buttonId;
|
|
7785
|
+
}
|
|
7786
|
+
/**
|
|
7787
|
+
* Get or generate an ID for a button.
|
|
7788
|
+
*
|
|
7789
|
+
* @param button The button for which to get the ID.
|
|
7790
|
+
* @param index Optional index of the button in the buttons array.
|
|
7791
|
+
* @returns The ID of the button.
|
|
7792
|
+
*/
|
|
7793
|
+
getButtonId(button, index) {
|
|
7794
|
+
if (button.id) {
|
|
7795
|
+
return button.id;
|
|
7796
|
+
}
|
|
7797
|
+
const allButtons = this.getButtons();
|
|
7798
|
+
const buttonIndex = index !== undefined ? index : allButtons.indexOf(button);
|
|
7799
|
+
return `action-sheet-button-${this.overlayIndex}-${buttonIndex}`;
|
|
7800
|
+
}
|
|
7801
|
+
/**
|
|
7802
|
+
* When the action sheet has radio buttons, we want to follow the
|
|
7803
|
+
* keyboard navigation pattern for radio groups:
|
|
7804
|
+
* - Arrow Down/Right: Move to the next radio button (wrap to first if at end)
|
|
7805
|
+
* - Arrow Up/Left: Move to the previous radio button (wrap to last if at start)
|
|
7806
|
+
* - Space/Enter: Select the focused radio button and trigger its handler
|
|
7807
|
+
*/
|
|
7808
|
+
onKeydown(ev) {
|
|
7809
|
+
// Only handle keyboard navigation if we have radio buttons
|
|
7810
|
+
if (!this.hasRadioButtons || !this.presented) {
|
|
7811
|
+
return;
|
|
7812
|
+
}
|
|
7813
|
+
const target = ev.target;
|
|
7814
|
+
// Ignore if the target element is not within the action sheet or not a radio button
|
|
7815
|
+
if (!this.el.contains(target) ||
|
|
7816
|
+
!target.classList.contains('action-sheet-button') ||
|
|
7817
|
+
target.getAttribute('role') !== 'radio') {
|
|
7818
|
+
return;
|
|
7819
|
+
}
|
|
7820
|
+
// Get all radio button elements and filter out disabled ones
|
|
7821
|
+
const radios = Array.from(this.el.querySelectorAll('.action-sheet-button[role="radio"]')).filter((el) => !el.disabled);
|
|
7822
|
+
const currentIndex = radios.findIndex((radio) => radio.id === target.id);
|
|
7823
|
+
if (currentIndex === -1) {
|
|
7824
|
+
return;
|
|
7825
|
+
}
|
|
7826
|
+
const allButtons = this.getButtons();
|
|
7827
|
+
const radioButtons = this.getRadioButtons();
|
|
7828
|
+
/**
|
|
7829
|
+
* Build a map of button element IDs to their ActionSheetButton
|
|
7830
|
+
* config objects.
|
|
7831
|
+
* This allows us to quickly look up which button config corresponds
|
|
7832
|
+
* to a DOM element when handling keyboard navigation
|
|
7833
|
+
* (e.g., whenuser presses Space/Enter or arrow keys).
|
|
7834
|
+
* The key is the ID that was set on the DOM element during render,
|
|
7835
|
+
* and the value is the ActionSheetButton config that contains the
|
|
7836
|
+
* handler and other properties.
|
|
7837
|
+
*/
|
|
7838
|
+
const buttonIdMap = new Map();
|
|
7839
|
+
radioButtons.forEach((b) => {
|
|
7840
|
+
const allIndex = allButtons.indexOf(b);
|
|
7841
|
+
const buttonId = this.getButtonId(b, allIndex);
|
|
7842
|
+
buttonIdMap.set(buttonId, b);
|
|
7843
|
+
});
|
|
7844
|
+
let nextEl;
|
|
7845
|
+
if (['ArrowDown', 'ArrowRight'].includes(ev.key)) {
|
|
7846
|
+
ev.preventDefault();
|
|
7847
|
+
ev.stopPropagation();
|
|
7848
|
+
nextEl = currentIndex === radios.length - 1 ? radios[0] : radios[currentIndex + 1];
|
|
7849
|
+
}
|
|
7850
|
+
else if (['ArrowUp', 'ArrowLeft'].includes(ev.key)) {
|
|
7851
|
+
ev.preventDefault();
|
|
7852
|
+
ev.stopPropagation();
|
|
7853
|
+
nextEl = currentIndex === 0 ? radios[radios.length - 1] : radios[currentIndex - 1];
|
|
7854
|
+
}
|
|
7855
|
+
else if (ev.key === ' ' || ev.key === 'Enter') {
|
|
7856
|
+
ev.preventDefault();
|
|
7857
|
+
ev.stopPropagation();
|
|
7858
|
+
const button = buttonIdMap.get(target.id);
|
|
7859
|
+
if (button) {
|
|
7860
|
+
this.selectRadioButton(button);
|
|
7861
|
+
this.buttonClick(button);
|
|
7862
|
+
}
|
|
7863
|
+
return;
|
|
7864
|
+
}
|
|
7865
|
+
// Focus the next radio button
|
|
7866
|
+
if (nextEl) {
|
|
7867
|
+
const button = buttonIdMap.get(nextEl.id);
|
|
7868
|
+
if (button) {
|
|
7869
|
+
this.selectRadioButton(button);
|
|
7870
|
+
nextEl.focus();
|
|
7871
|
+
}
|
|
7872
|
+
}
|
|
7873
|
+
}
|
|
7743
7874
|
connectedCallback() {
|
|
7744
7875
|
prepareOverlay(this.el);
|
|
7745
7876
|
this.triggerChanged();
|
|
@@ -7756,6 +7887,8 @@ class ActionSheet {
|
|
|
7756
7887
|
if (!((_a = this.htmlAttributes) === null || _a === void 0 ? void 0 : _a.id)) {
|
|
7757
7888
|
setOverlayId(this.el);
|
|
7758
7889
|
}
|
|
7890
|
+
// Initialize activeRadioId for radio buttons
|
|
7891
|
+
this.buttonsChanged();
|
|
7759
7892
|
}
|
|
7760
7893
|
componentDidLoad() {
|
|
7761
7894
|
/**
|
|
@@ -7793,22 +7926,74 @@ class ActionSheet {
|
|
|
7793
7926
|
*/
|
|
7794
7927
|
this.triggerChanged();
|
|
7795
7928
|
}
|
|
7929
|
+
renderActionSheetButtons(filteredButtons) {
|
|
7930
|
+
const mode = getIonMode$1(this);
|
|
7931
|
+
const { activeRadioId } = this;
|
|
7932
|
+
return filteredButtons.map((b, index) => {
|
|
7933
|
+
var _a;
|
|
7934
|
+
const isRadio = ((_a = b.htmlAttributes) === null || _a === void 0 ? void 0 : _a.role) === 'radio';
|
|
7935
|
+
const buttonId = this.getButtonId(b, index);
|
|
7936
|
+
const radioButtons = this.getRadioButtons();
|
|
7937
|
+
const isActiveRadio = isRadio && buttonId === activeRadioId;
|
|
7938
|
+
const isFirstRadio = isRadio && b === radioButtons[0];
|
|
7939
|
+
// For radio buttons, set tabindex: 0 for the active one, -1 for others
|
|
7940
|
+
// For non-radio buttons, use default tabindex (undefined, which means 0)
|
|
7941
|
+
/**
|
|
7942
|
+
* For radio buttons, set tabindex based on activeRadioId
|
|
7943
|
+
* - If the button is the active radio, tabindex is 0
|
|
7944
|
+
* - If no radio is active, the first radio button should have tabindex 0
|
|
7945
|
+
* - All other radio buttons have tabindex -1
|
|
7946
|
+
* For non-radio buttons, use default tabindex (undefined, which means 0)
|
|
7947
|
+
*/
|
|
7948
|
+
let tabIndex;
|
|
7949
|
+
if (isRadio) {
|
|
7950
|
+
// Focus on the active radio button
|
|
7951
|
+
if (isActiveRadio) {
|
|
7952
|
+
tabIndex = 0;
|
|
7953
|
+
}
|
|
7954
|
+
else if (!activeRadioId && isFirstRadio) {
|
|
7955
|
+
// No active radio, first radio gets focus
|
|
7956
|
+
tabIndex = 0;
|
|
7957
|
+
}
|
|
7958
|
+
else {
|
|
7959
|
+
// All other radios are not focusable
|
|
7960
|
+
tabIndex = -1;
|
|
7961
|
+
}
|
|
7962
|
+
}
|
|
7963
|
+
else {
|
|
7964
|
+
tabIndex = undefined;
|
|
7965
|
+
}
|
|
7966
|
+
// For radio buttons, set aria-checked based on activeRadioId
|
|
7967
|
+
// Otherwise, use the value from htmlAttributes if provided
|
|
7968
|
+
const htmlAttrs = Object.assign({}, b.htmlAttributes);
|
|
7969
|
+
if (isRadio) {
|
|
7970
|
+
htmlAttrs['aria-checked'] = isActiveRadio ? 'true' : 'false';
|
|
7971
|
+
}
|
|
7972
|
+
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: () => {
|
|
7973
|
+
if (isRadio) {
|
|
7974
|
+
this.selectRadioButton(b);
|
|
7975
|
+
}
|
|
7976
|
+
this.buttonClick(b);
|
|
7977
|
+
}, 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)));
|
|
7978
|
+
});
|
|
7979
|
+
}
|
|
7796
7980
|
render() {
|
|
7797
|
-
const { header, htmlAttributes, overlayIndex } = this;
|
|
7981
|
+
const { header, htmlAttributes, overlayIndex, hasRadioButtons } = this;
|
|
7798
7982
|
const mode = getIonMode$1(this);
|
|
7799
7983
|
const allButtons = this.getButtons();
|
|
7800
7984
|
const cancelButton = allButtons.find((b) => b.role === 'cancel');
|
|
7801
7985
|
const buttons = allButtons.filter((b) => b.role !== 'cancel');
|
|
7802
7986
|
const headerID = `action-sheet-${overlayIndex}-header`;
|
|
7803
|
-
return (hAsync(Host, Object.assign({ key: '
|
|
7987
|
+
return (hAsync(Host, Object.assign({ key: '173fcff5b1da7c33c267de4667591c946b8c8d03', role: "dialog", "aria-modal": "true", "aria-labelledby": header !== undefined ? headerID : null, tabindex: "-1" }, htmlAttributes, { style: {
|
|
7804
7988
|
zIndex: `${20000 + this.overlayIndex}`,
|
|
7805
|
-
}, 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: '
|
|
7989
|
+
}, 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: {
|
|
7806
7990
|
'action-sheet-title': true,
|
|
7807
7991
|
'action-sheet-has-sub-title': this.subHeader !== undefined,
|
|
7808
|
-
} }, header, this.subHeader && hAsync("div", { key: '
|
|
7992
|
+
} }, 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" })));
|
|
7809
7993
|
}
|
|
7810
7994
|
get el() { return getElement(this); }
|
|
7811
7995
|
static get watchers() { return {
|
|
7996
|
+
"buttons": ["buttonsChanged"],
|
|
7812
7997
|
"isOpen": ["onIsOpenChange"],
|
|
7813
7998
|
"trigger": ["triggerChanged"]
|
|
7814
7999
|
}; }
|
|
@@ -7836,12 +8021,13 @@ class ActionSheet {
|
|
|
7836
8021
|
"htmlAttributes": [16],
|
|
7837
8022
|
"isOpen": [4, "is-open"],
|
|
7838
8023
|
"trigger": [1],
|
|
8024
|
+
"activeRadioId": [32],
|
|
7839
8025
|
"present": [64],
|
|
7840
8026
|
"dismiss": [64],
|
|
7841
8027
|
"onDidDismiss": [64],
|
|
7842
8028
|
"onWillDismiss": [64]
|
|
7843
8029
|
},
|
|
7844
|
-
"$listeners$":
|
|
8030
|
+
"$listeners$": [[0, "keydown", "onKeydown"]],
|
|
7845
8031
|
"$lazyBundleId$": "-",
|
|
7846
8032
|
"$attrsToReflect$": []
|
|
7847
8033
|
}; }
|
|
@@ -9683,105 +9869,305 @@ class CardTitle {
|
|
|
9683
9869
|
}; }
|
|
9684
9870
|
}
|
|
9685
9871
|
|
|
9686
|
-
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}";
|
|
9687
|
-
|
|
9688
|
-
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}";
|
|
9689
|
-
|
|
9690
9872
|
/**
|
|
9691
|
-
*
|
|
9692
|
-
*
|
|
9693
|
-
*
|
|
9873
|
+
* A utility to calculate the size of an outline notch
|
|
9874
|
+
* width relative to the content passed. This is used in
|
|
9875
|
+
* components such as `ion-select` with `fill="outline"`
|
|
9876
|
+
* where we need to pass slotted HTML content. This is not
|
|
9877
|
+
* needed when rendering plaintext content because we can
|
|
9878
|
+
* render the plaintext again hidden with `opacity: 0` inside
|
|
9879
|
+
* of the notch. As a result we can rely on the intrinsic size
|
|
9880
|
+
* of the element to correctly compute the notch width. We
|
|
9881
|
+
* cannot do this with slotted content because we cannot project
|
|
9882
|
+
* it into 2 places at once.
|
|
9694
9883
|
*
|
|
9695
|
-
* @
|
|
9696
|
-
* @
|
|
9697
|
-
* @
|
|
9698
|
-
* @
|
|
9699
|
-
* @part helper-text - Supporting text displayed beneath the checkbox label when the checkbox is valid.
|
|
9700
|
-
* @part error-text - Supporting text displayed beneath the checkbox label when the checkbox is invalid and touched.
|
|
9884
|
+
* @internal
|
|
9885
|
+
* @param el: The host element
|
|
9886
|
+
* @param getNotchSpacerEl: A function that returns a reference to the notch spacer element inside of the component template.
|
|
9887
|
+
* @param getLabelSlot: A function that returns a reference to the slotted content.
|
|
9701
9888
|
*/
|
|
9702
|
-
|
|
9703
|
-
|
|
9704
|
-
|
|
9705
|
-
|
|
9706
|
-
|
|
9707
|
-
this.ionBlur = createEvent(this, "ionBlur", 7);
|
|
9708
|
-
this.inputId = `ion-cb-${checkboxIds++}`;
|
|
9709
|
-
this.inputLabelId = `${this.inputId}-lbl`;
|
|
9710
|
-
this.helperTextId = `${this.inputId}-helper-text`;
|
|
9711
|
-
this.errorTextId = `${this.inputId}-error-text`;
|
|
9712
|
-
this.inheritedAttributes = {};
|
|
9713
|
-
/**
|
|
9714
|
-
* The name of the control, which is submitted with the form data.
|
|
9715
|
-
*/
|
|
9716
|
-
this.name = this.inputId;
|
|
9717
|
-
/**
|
|
9718
|
-
* If `true`, the checkbox is selected.
|
|
9719
|
-
*/
|
|
9720
|
-
this.checked = false;
|
|
9721
|
-
/**
|
|
9722
|
-
* If `true`, the checkbox will visually appear as indeterminate.
|
|
9723
|
-
*/
|
|
9724
|
-
this.indeterminate = false;
|
|
9889
|
+
const createNotchController = (el, getNotchSpacerEl, getLabelSlot) => {
|
|
9890
|
+
let notchVisibilityIO;
|
|
9891
|
+
const needsExplicitNotchWidth = () => {
|
|
9892
|
+
const notchSpacerEl = getNotchSpacerEl();
|
|
9893
|
+
if (
|
|
9725
9894
|
/**
|
|
9726
|
-
* If
|
|
9895
|
+
* If the notch is not being used
|
|
9896
|
+
* then we do not need to set the notch width.
|
|
9727
9897
|
*/
|
|
9728
|
-
|
|
9898
|
+
notchSpacerEl === undefined ||
|
|
9899
|
+
/**
|
|
9900
|
+
* If either the label property is being
|
|
9901
|
+
* used or the label slot is not defined,
|
|
9902
|
+
* then we do not need to estimate the notch width.
|
|
9903
|
+
*/
|
|
9904
|
+
el.label !== undefined ||
|
|
9905
|
+
getLabelSlot() === null) {
|
|
9906
|
+
return false;
|
|
9907
|
+
}
|
|
9908
|
+
return true;
|
|
9909
|
+
};
|
|
9910
|
+
const calculateNotchWidth = () => {
|
|
9911
|
+
if (needsExplicitNotchWidth()) {
|
|
9912
|
+
/**
|
|
9913
|
+
* Run this the frame after
|
|
9914
|
+
* the browser has re-painted the host element.
|
|
9915
|
+
* Otherwise, the label element may have a width
|
|
9916
|
+
* of 0 and the IntersectionObserver will be used.
|
|
9917
|
+
*/
|
|
9918
|
+
raf(() => {
|
|
9919
|
+
setNotchWidth();
|
|
9920
|
+
});
|
|
9921
|
+
}
|
|
9922
|
+
};
|
|
9923
|
+
/**
|
|
9924
|
+
* When using a label prop we can render
|
|
9925
|
+
* the label value inside of the notch and
|
|
9926
|
+
* let the browser calculate the size of the notch.
|
|
9927
|
+
* However, we cannot render the label slot in multiple
|
|
9928
|
+
* places so we need to manually calculate the notch dimension
|
|
9929
|
+
* based on the size of the slotted content.
|
|
9930
|
+
*
|
|
9931
|
+
* This function should only be used to set the notch width
|
|
9932
|
+
* on slotted label content. The notch width for label prop
|
|
9933
|
+
* content is automatically calculated based on the
|
|
9934
|
+
* intrinsic size of the label text.
|
|
9935
|
+
*/
|
|
9936
|
+
const setNotchWidth = () => {
|
|
9937
|
+
const notchSpacerEl = getNotchSpacerEl();
|
|
9938
|
+
if (notchSpacerEl === undefined) {
|
|
9939
|
+
return;
|
|
9940
|
+
}
|
|
9941
|
+
if (!needsExplicitNotchWidth()) {
|
|
9942
|
+
notchSpacerEl.style.removeProperty('width');
|
|
9943
|
+
return;
|
|
9944
|
+
}
|
|
9945
|
+
const width = getLabelSlot().scrollWidth;
|
|
9946
|
+
if (
|
|
9729
9947
|
/**
|
|
9730
|
-
*
|
|
9731
|
-
*
|
|
9948
|
+
* If the computed width of the label is 0
|
|
9949
|
+
* and notchSpacerEl's offsetParent is null
|
|
9950
|
+
* then that means the element is hidden.
|
|
9951
|
+
* As a result, we need to wait for the element
|
|
9952
|
+
* to become visible before setting the notch width.
|
|
9732
9953
|
*
|
|
9733
|
-
*
|
|
9734
|
-
*
|
|
9735
|
-
|
|
9736
|
-
|
|
9737
|
-
/**
|
|
9738
|
-
* Where to place the label relative to the checkbox.
|
|
9739
|
-
* `"start"`: The label will appear to the left of the checkbox in LTR and to the right in RTL.
|
|
9740
|
-
* `"end"`: The label will appear to the right of the checkbox in LTR and to the left in RTL.
|
|
9741
|
-
* `"fixed"`: The label has the same behavior as `"start"` except it also has a fixed width. Long text will be truncated with ellipses ("...").
|
|
9742
|
-
* `"stacked"`: The label will appear above the checkbox regardless of the direction. The alignment of the label can be controlled with the `alignment` property.
|
|
9743
|
-
*/
|
|
9744
|
-
this.labelPlacement = 'start';
|
|
9745
|
-
/**
|
|
9746
|
-
* If true, screen readers will announce it as a required field. This property
|
|
9747
|
-
* works only for accessibility purposes, it will not prevent the form from
|
|
9748
|
-
* submitting if the value is invalid.
|
|
9749
|
-
*/
|
|
9750
|
-
this.required = false;
|
|
9751
|
-
/**
|
|
9752
|
-
* Sets the checked property and emits
|
|
9753
|
-
* the ionChange event. Use this to update the
|
|
9754
|
-
* checked state in response to user-generated
|
|
9755
|
-
* actions such as a click.
|
|
9954
|
+
* We do not check el.offsetParent because
|
|
9955
|
+
* that can be null if the host element has
|
|
9956
|
+
* position: fixed applied to it.
|
|
9957
|
+
* notchSpacerEl does not have position: fixed.
|
|
9756
9958
|
*/
|
|
9757
|
-
|
|
9758
|
-
|
|
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
|
-
|
|
9959
|
+
width === 0 &&
|
|
9960
|
+
notchSpacerEl.offsetParent === null &&
|
|
9961
|
+
win$1 !== undefined &&
|
|
9962
|
+
'IntersectionObserver' in win$1) {
|
|
9963
|
+
/**
|
|
9964
|
+
* If there is an IO already attached
|
|
9965
|
+
* then that will update the notch
|
|
9966
|
+
* once the element becomes visible.
|
|
9967
|
+
* As a result, there is no need to create
|
|
9968
|
+
* another one.
|
|
9969
|
+
*/
|
|
9970
|
+
if (notchVisibilityIO !== undefined) {
|
|
9971
|
+
return;
|
|
9972
|
+
}
|
|
9973
|
+
const io = (notchVisibilityIO = new IntersectionObserver((ev) => {
|
|
9974
|
+
/**
|
|
9975
|
+
* If the element is visible then we
|
|
9976
|
+
* can try setting the notch width again.
|
|
9977
|
+
*/
|
|
9978
|
+
if (ev[0].intersectionRatio === 1) {
|
|
9979
|
+
setNotchWidth();
|
|
9980
|
+
io.disconnect();
|
|
9981
|
+
notchVisibilityIO = undefined;
|
|
9982
|
+
}
|
|
9983
|
+
},
|
|
9984
|
+
/**
|
|
9985
|
+
* Set the root to be the host element
|
|
9986
|
+
* This causes the IO callback
|
|
9987
|
+
* to be fired in WebKit as soon as the element
|
|
9988
|
+
* is visible. If we used the default root value
|
|
9989
|
+
* then WebKit would only fire the IO callback
|
|
9990
|
+
* after any animations (such as a modal transition)
|
|
9991
|
+
* finished, and there would potentially be a flicker.
|
|
9992
|
+
*/
|
|
9993
|
+
{ threshold: 0.01, root: el }));
|
|
9994
|
+
io.observe(notchSpacerEl);
|
|
9995
|
+
return;
|
|
9996
|
+
}
|
|
9997
|
+
/**
|
|
9998
|
+
* If the element is visible then we can set the notch width.
|
|
9999
|
+
* The notch is only visible when the label is scaled,
|
|
10000
|
+
* which is why we multiply the width by 0.75 as this is
|
|
10001
|
+
* the same amount the label element is scaled by in the host CSS.
|
|
10002
|
+
* (See $form-control-label-stacked-scale in ionic.globals.scss).
|
|
10003
|
+
*/
|
|
10004
|
+
notchSpacerEl.style.setProperty('width', `${width * 0.75}px`);
|
|
10005
|
+
};
|
|
10006
|
+
const destroy = () => {
|
|
10007
|
+
if (notchVisibilityIO) {
|
|
10008
|
+
notchVisibilityIO.disconnect();
|
|
10009
|
+
notchVisibilityIO = undefined;
|
|
10010
|
+
}
|
|
10011
|
+
};
|
|
10012
|
+
return {
|
|
10013
|
+
calculateNotchWidth,
|
|
10014
|
+
destroy,
|
|
10015
|
+
};
|
|
10016
|
+
};
|
|
10017
|
+
|
|
10018
|
+
/**
|
|
10019
|
+
* Uses the compareWith param to compare two values to determine if they are equal.
|
|
10020
|
+
*
|
|
10021
|
+
* @param currentValue The current value of the control.
|
|
10022
|
+
* @param compareValue The value to compare against.
|
|
10023
|
+
* @param compareWith The function or property name to use to compare values.
|
|
10024
|
+
*/
|
|
10025
|
+
const compareOptions = (currentValue, compareValue, compareWith) => {
|
|
10026
|
+
if (typeof compareWith === 'function') {
|
|
10027
|
+
return compareWith(currentValue, compareValue);
|
|
10028
|
+
}
|
|
10029
|
+
else if (typeof compareWith === 'string') {
|
|
10030
|
+
return currentValue[compareWith] === compareValue[compareWith];
|
|
10031
|
+
}
|
|
10032
|
+
else {
|
|
10033
|
+
return Array.isArray(compareValue) ? compareValue.includes(currentValue) : currentValue === compareValue;
|
|
10034
|
+
}
|
|
10035
|
+
};
|
|
10036
|
+
/**
|
|
10037
|
+
* Compares a value against the current value(s) to determine if it is selected.
|
|
10038
|
+
*
|
|
10039
|
+
* @param currentValue The current value of the control.
|
|
10040
|
+
* @param compareValue The value to compare against.
|
|
10041
|
+
* @param compareWith The function or property name to use to compare values.
|
|
10042
|
+
*/
|
|
10043
|
+
const isOptionSelected = (currentValue, compareValue, compareWith) => {
|
|
10044
|
+
if (currentValue === undefined) {
|
|
10045
|
+
return false;
|
|
10046
|
+
}
|
|
10047
|
+
if (Array.isArray(currentValue)) {
|
|
10048
|
+
return currentValue.some((val) => compareOptions(val, compareValue, compareWith));
|
|
10049
|
+
}
|
|
10050
|
+
else {
|
|
10051
|
+
return compareOptions(currentValue, compareValue, compareWith);
|
|
10052
|
+
}
|
|
10053
|
+
};
|
|
10054
|
+
|
|
10055
|
+
/**
|
|
10056
|
+
* Checks if the form element is in an invalid state based on
|
|
10057
|
+
* Ionic validation classes.
|
|
10058
|
+
*
|
|
10059
|
+
* @param el The form element to check.
|
|
10060
|
+
* @returns `true` if the element is invalid, `false` otherwise.
|
|
10061
|
+
*/
|
|
10062
|
+
const checkInvalidState = (el) => {
|
|
10063
|
+
const hasIonTouched = el.classList.contains('ion-touched');
|
|
10064
|
+
const hasIonInvalid = el.classList.contains('ion-invalid');
|
|
10065
|
+
return hasIonTouched && hasIonInvalid;
|
|
10066
|
+
};
|
|
10067
|
+
|
|
10068
|
+
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}";
|
|
10069
|
+
|
|
10070
|
+
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}";
|
|
10071
|
+
|
|
10072
|
+
/**
|
|
10073
|
+
* @virtualProp {"ios" | "md"} mode - The mode determines which platform styles to use.
|
|
10074
|
+
*
|
|
10075
|
+
* @slot - The label text to associate with the checkbox. Use the "labelPlacement" property to control where the label is placed relative to the checkbox.
|
|
10076
|
+
*
|
|
10077
|
+
* @part container - The container for the checkbox mark.
|
|
10078
|
+
* @part label - The label text describing the checkbox.
|
|
10079
|
+
* @part mark - The checkmark used to indicate the checked state.
|
|
10080
|
+
* @part supporting-text - Supporting text displayed beneath the checkbox label.
|
|
10081
|
+
* @part helper-text - Supporting text displayed beneath the checkbox label when the checkbox is valid.
|
|
10082
|
+
* @part error-text - Supporting text displayed beneath the checkbox label when the checkbox is invalid and touched.
|
|
10083
|
+
*/
|
|
10084
|
+
class Checkbox {
|
|
10085
|
+
constructor(hostRef) {
|
|
10086
|
+
registerInstance(this, hostRef);
|
|
10087
|
+
this.ionChange = createEvent(this, "ionChange", 7);
|
|
10088
|
+
this.ionFocus = createEvent(this, "ionFocus", 7);
|
|
10089
|
+
this.ionBlur = createEvent(this, "ionBlur", 7);
|
|
10090
|
+
this.inputId = `ion-cb-${checkboxIds++}`;
|
|
10091
|
+
this.inputLabelId = `${this.inputId}-lbl`;
|
|
10092
|
+
this.helperTextId = `${this.inputId}-helper-text`;
|
|
10093
|
+
this.errorTextId = `${this.inputId}-error-text`;
|
|
10094
|
+
this.inheritedAttributes = {};
|
|
10095
|
+
/**
|
|
10096
|
+
* The name of the control, which is submitted with the form data.
|
|
10097
|
+
*/
|
|
10098
|
+
this.name = this.inputId;
|
|
10099
|
+
/**
|
|
10100
|
+
* If `true`, the checkbox is selected.
|
|
10101
|
+
*/
|
|
10102
|
+
this.checked = false;
|
|
10103
|
+
/**
|
|
10104
|
+
* If `true`, the checkbox will visually appear as indeterminate.
|
|
10105
|
+
*/
|
|
10106
|
+
this.indeterminate = false;
|
|
10107
|
+
/**
|
|
10108
|
+
* If `true`, the user cannot interact with the checkbox.
|
|
10109
|
+
*/
|
|
10110
|
+
this.disabled = false;
|
|
10111
|
+
/**
|
|
10112
|
+
* The value of the checkbox does not mean if it's checked or not, use the `checked`
|
|
10113
|
+
* property for that.
|
|
10114
|
+
*
|
|
10115
|
+
* The value of a checkbox is analogous to the value of an `<input type="checkbox">`,
|
|
10116
|
+
* it's only used when the checkbox participates in a native `<form>`.
|
|
10117
|
+
*/
|
|
10118
|
+
this.value = 'on';
|
|
10119
|
+
/**
|
|
10120
|
+
* Where to place the label relative to the checkbox.
|
|
10121
|
+
* `"start"`: The label will appear to the left of the checkbox in LTR and to the right in RTL.
|
|
10122
|
+
* `"end"`: The label will appear to the right of the checkbox in LTR and to the left in RTL.
|
|
10123
|
+
* `"fixed"`: The label has the same behavior as `"start"` except it also has a fixed width. Long text will be truncated with ellipses ("...").
|
|
10124
|
+
* `"stacked"`: The label will appear above the checkbox regardless of the direction. The alignment of the label can be controlled with the `alignment` property.
|
|
10125
|
+
*/
|
|
10126
|
+
this.labelPlacement = 'start';
|
|
10127
|
+
/**
|
|
10128
|
+
* If true, screen readers will announce it as a required field. This property
|
|
10129
|
+
* works only for accessibility purposes, it will not prevent the form from
|
|
10130
|
+
* submitting if the value is invalid.
|
|
10131
|
+
*/
|
|
10132
|
+
this.required = false;
|
|
10133
|
+
/**
|
|
10134
|
+
* Track validation state for proper aria-live announcements.
|
|
10135
|
+
*/
|
|
10136
|
+
this.isInvalid = false;
|
|
10137
|
+
/**
|
|
10138
|
+
* Sets the checked property and emits
|
|
10139
|
+
* the ionChange event. Use this to update the
|
|
10140
|
+
* checked state in response to user-generated
|
|
10141
|
+
* actions such as a click.
|
|
10142
|
+
*/
|
|
10143
|
+
this.setChecked = (state) => {
|
|
10144
|
+
const isChecked = (this.checked = state);
|
|
10145
|
+
this.ionChange.emit({
|
|
10146
|
+
checked: isChecked,
|
|
10147
|
+
value: this.value,
|
|
10148
|
+
});
|
|
10149
|
+
};
|
|
10150
|
+
this.toggleChecked = (ev) => {
|
|
10151
|
+
ev.preventDefault();
|
|
10152
|
+
this.setChecked(!this.checked);
|
|
10153
|
+
this.indeterminate = false;
|
|
10154
|
+
};
|
|
10155
|
+
this.onFocus = () => {
|
|
10156
|
+
this.ionFocus.emit();
|
|
10157
|
+
};
|
|
10158
|
+
this.onBlur = () => {
|
|
10159
|
+
this.ionBlur.emit();
|
|
10160
|
+
};
|
|
10161
|
+
this.onKeyDown = (ev) => {
|
|
10162
|
+
if (ev.key === ' ') {
|
|
10163
|
+
ev.preventDefault();
|
|
10164
|
+
if (!this.disabled) {
|
|
10165
|
+
this.toggleChecked(ev);
|
|
10166
|
+
}
|
|
10167
|
+
}
|
|
10168
|
+
};
|
|
10169
|
+
this.onClick = (ev) => {
|
|
10170
|
+
if (this.disabled) {
|
|
9785
10171
|
return;
|
|
9786
10172
|
}
|
|
9787
10173
|
this.toggleChecked(ev);
|
|
@@ -9794,16 +10180,29 @@ class Checkbox {
|
|
|
9794
10180
|
ev.stopPropagation();
|
|
9795
10181
|
};
|
|
9796
10182
|
}
|
|
10183
|
+
connectedCallback() {
|
|
10184
|
+
const { el } = this;
|
|
10185
|
+
// Always set initial state
|
|
10186
|
+
this.isInvalid = checkInvalidState(el);
|
|
10187
|
+
}
|
|
9797
10188
|
componentWillLoad() {
|
|
9798
10189
|
this.inheritedAttributes = Object.assign({}, inheritAriaAttributes(this.el));
|
|
10190
|
+
this.hintTextId = this.getHintTextId();
|
|
10191
|
+
}
|
|
10192
|
+
disconnectedCallback() {
|
|
10193
|
+
// Clean up validation observer to prevent memory leaks.
|
|
10194
|
+
if (this.validationObserver) {
|
|
10195
|
+
this.validationObserver.disconnect();
|
|
10196
|
+
this.validationObserver = undefined;
|
|
10197
|
+
}
|
|
9799
10198
|
}
|
|
9800
10199
|
/** @internal */
|
|
9801
10200
|
async setFocus() {
|
|
9802
10201
|
this.el.focus();
|
|
9803
10202
|
}
|
|
9804
|
-
|
|
9805
|
-
const {
|
|
9806
|
-
if (
|
|
10203
|
+
getHintTextId() {
|
|
10204
|
+
const { helperText, errorText, helperTextId, errorTextId, isInvalid } = this;
|
|
10205
|
+
if (isInvalid && errorText) {
|
|
9807
10206
|
return errorTextId;
|
|
9808
10207
|
}
|
|
9809
10208
|
if (helperText) {
|
|
@@ -9816,7 +10215,7 @@ class Checkbox {
|
|
|
9816
10215
|
* This element should only be rendered if hint text is set.
|
|
9817
10216
|
*/
|
|
9818
10217
|
renderHintText() {
|
|
9819
|
-
const { helperText, errorText, helperTextId, errorTextId } = this;
|
|
10218
|
+
const { helperText, errorText, helperTextId, errorTextId, isInvalid } = this;
|
|
9820
10219
|
/**
|
|
9821
10220
|
* undefined and empty string values should
|
|
9822
10221
|
* be treated as not having helper/error text.
|
|
@@ -9825,7 +10224,7 @@ class Checkbox {
|
|
|
9825
10224
|
if (!hasHintText) {
|
|
9826
10225
|
return;
|
|
9827
10226
|
}
|
|
9828
|
-
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)));
|
|
10227
|
+
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)));
|
|
9829
10228
|
}
|
|
9830
10229
|
render() {
|
|
9831
10230
|
const { color, checked, disabled, el, getSVGPath, indeterminate, inheritedAttributes, inputId, justify, labelPlacement, name, value, alignment, required, } = this;
|
|
@@ -9835,7 +10234,7 @@ class Checkbox {
|
|
|
9835
10234
|
renderHiddenInput(true, el, name, checked ? value : '', disabled);
|
|
9836
10235
|
// The host element must have a checkbox role to ensure proper VoiceOver
|
|
9837
10236
|
// support in Safari for accessibility.
|
|
9838
|
-
return (hAsync(Host, { key: '
|
|
10237
|
+
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, {
|
|
9839
10238
|
[mode]: true,
|
|
9840
10239
|
'in-item': hostContext('ion-item', el),
|
|
9841
10240
|
'checkbox-checked': checked,
|
|
@@ -9845,10 +10244,10 @@ class Checkbox {
|
|
|
9845
10244
|
[`checkbox-justify-${justify}`]: justify !== undefined,
|
|
9846
10245
|
[`checkbox-alignment-${alignment}`]: alignment !== undefined,
|
|
9847
10246
|
[`checkbox-label-placement-${labelPlacement}`]: true,
|
|
9848
|
-
}) }, hAsync("label", { key: '
|
|
10247
|
+
}) }, 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: {
|
|
9849
10248
|
'label-text-wrapper': true,
|
|
9850
10249
|
'label-text-wrapper-hidden': !hasLabelContent,
|
|
9851
|
-
}, part: "label", id: this.inputLabelId, onClick: this.onDivLabelClick }, hAsync("slot", { key: '
|
|
10250
|
+
}, 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)))));
|
|
9852
10251
|
}
|
|
9853
10252
|
getSVGPath(mode, indeterminate) {
|
|
9854
10253
|
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" }));
|
|
@@ -9878,6 +10277,8 @@ class Checkbox {
|
|
|
9878
10277
|
"justify": [1],
|
|
9879
10278
|
"alignment": [1],
|
|
9880
10279
|
"required": [4],
|
|
10280
|
+
"isInvalid": [32],
|
|
10281
|
+
"hintTextId": [32],
|
|
9881
10282
|
"setFocus": [64]
|
|
9882
10283
|
},
|
|
9883
10284
|
"$listeners$": undefined,
|
|
@@ -10266,6 +10667,15 @@ class Content {
|
|
|
10266
10667
|
}
|
|
10267
10668
|
resize() {
|
|
10268
10669
|
}
|
|
10670
|
+
/**
|
|
10671
|
+
* Recalculate content dimensions. Called by overlays (e.g., popover) when
|
|
10672
|
+
* sibling elements like headers or footers have finished rendering and their
|
|
10673
|
+
* heights are available, ensuring accurate offset-top calculations.
|
|
10674
|
+
* @internal
|
|
10675
|
+
*/
|
|
10676
|
+
async recalculateDimensions() {
|
|
10677
|
+
readTask(() => this.readDimensions());
|
|
10678
|
+
}
|
|
10269
10679
|
readDimensions() {
|
|
10270
10680
|
const page = getPageElement(this.el);
|
|
10271
10681
|
const top = Math.max(this.el.offsetTop, 0);
|
|
@@ -10434,7 +10844,7 @@ class Content {
|
|
|
10434
10844
|
const forceOverscroll = this.shouldForceOverscroll();
|
|
10435
10845
|
const transitionShadow = mode === 'ios';
|
|
10436
10846
|
this.resize();
|
|
10437
|
-
return (hAsync(Host, Object.assign({ key: '
|
|
10847
|
+
return (hAsync(Host, Object.assign({ key: 'cd8781f848d8dc926fe66f43d43c49564425a507', role: isMainContent ? 'main' : undefined, class: createColorClasses$1(this.color, {
|
|
10438
10848
|
[mode]: true,
|
|
10439
10849
|
'content-sizing': hostContext('ion-popover', this.el),
|
|
10440
10850
|
overscroll: forceOverscroll,
|
|
@@ -10442,12 +10852,12 @@ class Content {
|
|
|
10442
10852
|
}), style: {
|
|
10443
10853
|
'--offset-top': `${this.cTop}px`,
|
|
10444
10854
|
'--offset-bottom': `${this.cBottom}px`,
|
|
10445
|
-
} }, inheritedAttributes), hAsync("div", { key: '
|
|
10855
|
+
} }, 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: {
|
|
10446
10856
|
'inner-scroll': true,
|
|
10447
10857
|
'scroll-x': scrollX,
|
|
10448
10858
|
'scroll-y': scrollY,
|
|
10449
10859
|
overscroll: (scrollX || scrollY) && forceOverscroll,
|
|
10450
|
-
}, ref: (scrollEl) => (this.scrollEl = scrollEl), onScroll: this.scrollEvents ? (ev) => this.onScroll(ev) : undefined, part: "scroll" }, hAsync("slot", { key: '
|
|
10860
|
+
}, 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));
|
|
10451
10861
|
}
|
|
10452
10862
|
get el() { return getElement(this); }
|
|
10453
10863
|
static get style() { return contentCss; }
|
|
@@ -10462,6 +10872,7 @@ class Content {
|
|
|
10462
10872
|
"scrollX": [4, "scroll-x"],
|
|
10463
10873
|
"scrollY": [4, "scroll-y"],
|
|
10464
10874
|
"scrollEvents": [4, "scroll-events"],
|
|
10875
|
+
"recalculateDimensions": [64],
|
|
10465
10876
|
"getScrollElement": [64],
|
|
10466
10877
|
"getBackgroundElement": [64],
|
|
10467
10878
|
"scrollToTop": [64],
|
|
@@ -13022,6 +13433,28 @@ class Datetime {
|
|
|
13022
13433
|
destroyKeyboardMO();
|
|
13023
13434
|
}
|
|
13024
13435
|
};
|
|
13436
|
+
/**
|
|
13437
|
+
* TODO(FW-6931): Remove this fallback upon solving the root cause
|
|
13438
|
+
* Fallback to ensure the datetime becomes ready even if
|
|
13439
|
+
* IntersectionObserver never reports it as intersecting.
|
|
13440
|
+
*
|
|
13441
|
+
* This is primarily used in environments where the observer
|
|
13442
|
+
* might not fire as expected, such as when running under
|
|
13443
|
+
* synthetic tests that stub IntersectionObserver.
|
|
13444
|
+
*/
|
|
13445
|
+
this.ensureReadyIfVisible = () => {
|
|
13446
|
+
if (this.el.classList.contains('datetime-ready')) {
|
|
13447
|
+
return;
|
|
13448
|
+
}
|
|
13449
|
+
const rect = this.el.getBoundingClientRect();
|
|
13450
|
+
if (rect.width === 0 || rect.height === 0) {
|
|
13451
|
+
return;
|
|
13452
|
+
}
|
|
13453
|
+
this.initializeListeners();
|
|
13454
|
+
writeTask(() => {
|
|
13455
|
+
this.el.classList.add('datetime-ready');
|
|
13456
|
+
});
|
|
13457
|
+
};
|
|
13025
13458
|
this.processValue = (value) => {
|
|
13026
13459
|
const hasValue = value !== null && value !== undefined && value !== '' && (!Array.isArray(value) || value.length > 0);
|
|
13027
13460
|
const valueToProcess = hasValue ? parseDate(value) : this.defaultParts;
|
|
@@ -13339,6 +13772,17 @@ class Datetime {
|
|
|
13339
13772
|
* triggering the `hiddenIO` observer below.
|
|
13340
13773
|
*/
|
|
13341
13774
|
raf(() => visibleIO === null || visibleIO === void 0 ? void 0 : visibleIO.observe(intersectionTrackerRef));
|
|
13775
|
+
/**
|
|
13776
|
+
* TODO(FW-6931): Remove this fallback upon solving the root cause
|
|
13777
|
+
* Fallback: If IntersectionObserver never reports that the
|
|
13778
|
+
* datetime is visible but the host clearly has layout, ensure
|
|
13779
|
+
* we still initialize listeners and mark the component as ready.
|
|
13780
|
+
*
|
|
13781
|
+
* We schedule this after everything has had a chance to run.
|
|
13782
|
+
*/
|
|
13783
|
+
setTimeout(() => {
|
|
13784
|
+
this.ensureReadyIfVisible();
|
|
13785
|
+
}, 100);
|
|
13342
13786
|
/**
|
|
13343
13787
|
* We need to clean up listeners when the datetime is hidden
|
|
13344
13788
|
* in a popover/modal so that we can properly scroll containers
|
|
@@ -14094,7 +14538,7 @@ class Datetime {
|
|
|
14094
14538
|
const hasDatePresentation = presentation === 'date' || presentation === 'date-time' || presentation === 'time-date';
|
|
14095
14539
|
const hasWheelVariant = hasDatePresentation && preferWheel;
|
|
14096
14540
|
renderHiddenInput(true, el, name, formatValue(value), disabled);
|
|
14097
|
-
return (hAsync(Host, { key: '
|
|
14541
|
+
return (hAsync(Host, { key: 'efdbc0922670a841bc667ceac392cdc1dedffd01', "aria-disabled": disabled ? 'true' : null, onFocus: this.onFocus, onBlur: this.onBlur, class: Object.assign({}, createColorClasses$1(color, {
|
|
14098
14542
|
[mode]: true,
|
|
14099
14543
|
['datetime-readonly']: readonly,
|
|
14100
14544
|
['datetime-disabled']: disabled,
|
|
@@ -14104,7 +14548,7 @@ class Datetime {
|
|
|
14104
14548
|
[`datetime-size-${size}`]: true,
|
|
14105
14549
|
[`datetime-prefer-wheel`]: hasWheelVariant,
|
|
14106
14550
|
[`datetime-grid`]: isGridStyle,
|
|
14107
|
-
})) }, hAsync("div", { key: '
|
|
14551
|
+
})) }, hAsync("div", { key: '3f8bb75fcb0baff55182ef3aa1b535eacc58d81f', class: "intersection-tracker", ref: (el) => (this.intersectionTrackerRef = el) }), this.renderDatetime(mode)));
|
|
14108
14552
|
}
|
|
14109
14553
|
get el() { return getElement(this); }
|
|
14110
14554
|
static get watchers() { return {
|
|
@@ -14746,7 +15190,7 @@ class FabButton {
|
|
|
14746
15190
|
"translucent": [4],
|
|
14747
15191
|
"type": [1],
|
|
14748
15192
|
"size": [1],
|
|
14749
|
-
"closeIcon": [
|
|
15193
|
+
"closeIcon": [1, "close-icon"]
|
|
14750
15194
|
},
|
|
14751
15195
|
"$listeners$": undefined,
|
|
14752
15196
|
"$lazyBundleId$": "-",
|
|
@@ -16196,317 +16640,121 @@ class InfiniteScroll {
|
|
|
16196
16640
|
* Done.
|
|
16197
16641
|
*/
|
|
16198
16642
|
this.isBusy = true;
|
|
16199
|
-
// ******** DOM READ ****************
|
|
16200
|
-
// Save the current content dimensions before the UI updates
|
|
16201
|
-
const prev = scrollEl.scrollHeight - scrollEl.scrollTop;
|
|
16202
|
-
// ******** DOM READ ****************
|
|
16203
|
-
requestAnimationFrame(() => {
|
|
16204
|
-
readTask(() => {
|
|
16205
|
-
// UI has updated, save the new content dimensions
|
|
16206
|
-
const scrollHeight = scrollEl.scrollHeight;
|
|
16207
|
-
// New content was added on top, so the scroll position should be changed immediately to prevent it from jumping around
|
|
16208
|
-
const newScrollTop = scrollHeight - prev;
|
|
16209
|
-
// ******** DOM WRITE ****************
|
|
16210
|
-
requestAnimationFrame(() => {
|
|
16211
|
-
writeTask(() => {
|
|
16212
|
-
scrollEl.scrollTop = newScrollTop;
|
|
16213
|
-
this.isBusy = false;
|
|
16214
|
-
this.didFire = false;
|
|
16215
|
-
});
|
|
16216
|
-
});
|
|
16217
|
-
});
|
|
16218
|
-
});
|
|
16219
|
-
}
|
|
16220
|
-
else {
|
|
16221
|
-
this.didFire = false;
|
|
16222
|
-
}
|
|
16223
|
-
}
|
|
16224
|
-
canStart() {
|
|
16225
|
-
return !this.disabled && !this.isBusy && !!this.scrollEl && !this.isLoading;
|
|
16226
|
-
}
|
|
16227
|
-
enableScrollEvents(shouldListen) {
|
|
16228
|
-
if (this.scrollEl) {
|
|
16229
|
-
if (shouldListen) {
|
|
16230
|
-
this.scrollEl.addEventListener('scroll', this.onScroll);
|
|
16231
|
-
}
|
|
16232
|
-
else {
|
|
16233
|
-
this.scrollEl.removeEventListener('scroll', this.onScroll);
|
|
16234
|
-
}
|
|
16235
|
-
}
|
|
16236
|
-
}
|
|
16237
|
-
render() {
|
|
16238
|
-
const mode = getIonMode$1(this);
|
|
16239
|
-
const disabled = this.disabled;
|
|
16240
|
-
return (hAsync(Host, { key: 'e844956795f69be33396ce4480aa7a54ad01b28c', class: {
|
|
16241
|
-
[mode]: true,
|
|
16242
|
-
'infinite-scroll-loading': this.isLoading,
|
|
16243
|
-
'infinite-scroll-enabled': !disabled,
|
|
16244
|
-
} }));
|
|
16245
|
-
}
|
|
16246
|
-
get el() { return getElement(this); }
|
|
16247
|
-
static get watchers() { return {
|
|
16248
|
-
"threshold": ["thresholdChanged"],
|
|
16249
|
-
"disabled": ["disabledChanged"]
|
|
16250
|
-
}; }
|
|
16251
|
-
static get style() { return infiniteScrollCss; }
|
|
16252
|
-
static get cmpMeta() { return {
|
|
16253
|
-
"$flags$": 256,
|
|
16254
|
-
"$tagName$": "ion-infinite-scroll",
|
|
16255
|
-
"$members$": {
|
|
16256
|
-
"threshold": [1],
|
|
16257
|
-
"disabled": [4],
|
|
16258
|
-
"position": [1],
|
|
16259
|
-
"isLoading": [32],
|
|
16260
|
-
"complete": [64]
|
|
16261
|
-
},
|
|
16262
|
-
"$listeners$": undefined,
|
|
16263
|
-
"$lazyBundleId$": "-",
|
|
16264
|
-
"$attrsToReflect$": []
|
|
16265
|
-
}; }
|
|
16266
|
-
}
|
|
16267
|
-
|
|
16268
|
-
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))}";
|
|
16269
|
-
|
|
16270
|
-
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))}";
|
|
16271
|
-
|
|
16272
|
-
class InfiniteScrollContent {
|
|
16273
|
-
constructor(hostRef) {
|
|
16274
|
-
registerInstance(this, hostRef);
|
|
16275
|
-
this.customHTMLEnabled = config.get('innerHTMLTemplatesEnabled', ENABLE_HTML_CONTENT_DEFAULT);
|
|
16276
|
-
}
|
|
16277
|
-
componentDidLoad() {
|
|
16278
|
-
if (this.loadingSpinner === undefined) {
|
|
16279
|
-
const mode = getIonMode$1(this);
|
|
16280
|
-
this.loadingSpinner = config.get('infiniteLoadingSpinner', config.get('spinner', mode === 'ios' ? 'lines' : 'crescent'));
|
|
16281
|
-
}
|
|
16282
|
-
}
|
|
16283
|
-
renderLoadingText() {
|
|
16284
|
-
const { customHTMLEnabled, loadingText } = this;
|
|
16285
|
-
if (customHTMLEnabled) {
|
|
16286
|
-
return hAsync("div", { class: "infinite-loading-text", innerHTML: sanitizeDOMString(loadingText) });
|
|
16287
|
-
}
|
|
16288
|
-
return hAsync("div", { class: "infinite-loading-text" }, this.loadingText);
|
|
16289
|
-
}
|
|
16290
|
-
render() {
|
|
16291
|
-
const mode = getIonMode$1(this);
|
|
16292
|
-
return (hAsync(Host, { key: '7c16060dcfe2a0b0fb3e2f8f4c449589a76f1baa', class: {
|
|
16293
|
-
[mode]: true,
|
|
16294
|
-
// Used internally for styling
|
|
16295
|
-
[`infinite-scroll-content-${mode}`]: true,
|
|
16296
|
-
} }, 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())));
|
|
16297
|
-
}
|
|
16298
|
-
static get style() { return {
|
|
16299
|
-
ios: infiniteScrollContentIosCss,
|
|
16300
|
-
md: infiniteScrollContentMdCss
|
|
16301
|
-
}; }
|
|
16302
|
-
static get cmpMeta() { return {
|
|
16303
|
-
"$flags$": 288,
|
|
16304
|
-
"$tagName$": "ion-infinite-scroll-content",
|
|
16305
|
-
"$members$": {
|
|
16306
|
-
"loadingSpinner": [1025, "loading-spinner"],
|
|
16307
|
-
"loadingText": [1, "loading-text"]
|
|
16308
|
-
},
|
|
16309
|
-
"$listeners$": undefined,
|
|
16310
|
-
"$lazyBundleId$": "-",
|
|
16311
|
-
"$attrsToReflect$": []
|
|
16312
|
-
}; }
|
|
16313
|
-
}
|
|
16314
|
-
|
|
16315
|
-
/**
|
|
16316
|
-
* A utility to calculate the size of an outline notch
|
|
16317
|
-
* width relative to the content passed. This is used in
|
|
16318
|
-
* components such as `ion-select` with `fill="outline"`
|
|
16319
|
-
* where we need to pass slotted HTML content. This is not
|
|
16320
|
-
* needed when rendering plaintext content because we can
|
|
16321
|
-
* render the plaintext again hidden with `opacity: 0` inside
|
|
16322
|
-
* of the notch. As a result we can rely on the intrinsic size
|
|
16323
|
-
* of the element to correctly compute the notch width. We
|
|
16324
|
-
* cannot do this with slotted content because we cannot project
|
|
16325
|
-
* it into 2 places at once.
|
|
16326
|
-
*
|
|
16327
|
-
* @internal
|
|
16328
|
-
* @param el: The host element
|
|
16329
|
-
* @param getNotchSpacerEl: A function that returns a reference to the notch spacer element inside of the component template.
|
|
16330
|
-
* @param getLabelSlot: A function that returns a reference to the slotted content.
|
|
16331
|
-
*/
|
|
16332
|
-
const createNotchController = (el, getNotchSpacerEl, getLabelSlot) => {
|
|
16333
|
-
let notchVisibilityIO;
|
|
16334
|
-
const needsExplicitNotchWidth = () => {
|
|
16335
|
-
const notchSpacerEl = getNotchSpacerEl();
|
|
16336
|
-
if (
|
|
16337
|
-
/**
|
|
16338
|
-
* If the notch is not being used
|
|
16339
|
-
* then we do not need to set the notch width.
|
|
16340
|
-
*/
|
|
16341
|
-
notchSpacerEl === undefined ||
|
|
16342
|
-
/**
|
|
16343
|
-
* If either the label property is being
|
|
16344
|
-
* used or the label slot is not defined,
|
|
16345
|
-
* then we do not need to estimate the notch width.
|
|
16346
|
-
*/
|
|
16347
|
-
el.label !== undefined ||
|
|
16348
|
-
getLabelSlot() === null) {
|
|
16349
|
-
return false;
|
|
16350
|
-
}
|
|
16351
|
-
return true;
|
|
16352
|
-
};
|
|
16353
|
-
const calculateNotchWidth = () => {
|
|
16354
|
-
if (needsExplicitNotchWidth()) {
|
|
16355
|
-
/**
|
|
16356
|
-
* Run this the frame after
|
|
16357
|
-
* the browser has re-painted the host element.
|
|
16358
|
-
* Otherwise, the label element may have a width
|
|
16359
|
-
* of 0 and the IntersectionObserver will be used.
|
|
16360
|
-
*/
|
|
16361
|
-
raf(() => {
|
|
16362
|
-
setNotchWidth();
|
|
16363
|
-
});
|
|
16364
|
-
}
|
|
16365
|
-
};
|
|
16366
|
-
/**
|
|
16367
|
-
* When using a label prop we can render
|
|
16368
|
-
* the label value inside of the notch and
|
|
16369
|
-
* let the browser calculate the size of the notch.
|
|
16370
|
-
* However, we cannot render the label slot in multiple
|
|
16371
|
-
* places so we need to manually calculate the notch dimension
|
|
16372
|
-
* based on the size of the slotted content.
|
|
16373
|
-
*
|
|
16374
|
-
* This function should only be used to set the notch width
|
|
16375
|
-
* on slotted label content. The notch width for label prop
|
|
16376
|
-
* content is automatically calculated based on the
|
|
16377
|
-
* intrinsic size of the label text.
|
|
16378
|
-
*/
|
|
16379
|
-
const setNotchWidth = () => {
|
|
16380
|
-
const notchSpacerEl = getNotchSpacerEl();
|
|
16381
|
-
if (notchSpacerEl === undefined) {
|
|
16382
|
-
return;
|
|
16383
|
-
}
|
|
16384
|
-
if (!needsExplicitNotchWidth()) {
|
|
16385
|
-
notchSpacerEl.style.removeProperty('width');
|
|
16386
|
-
return;
|
|
16387
|
-
}
|
|
16388
|
-
const width = getLabelSlot().scrollWidth;
|
|
16389
|
-
if (
|
|
16390
|
-
/**
|
|
16391
|
-
* If the computed width of the label is 0
|
|
16392
|
-
* and notchSpacerEl's offsetParent is null
|
|
16393
|
-
* then that means the element is hidden.
|
|
16394
|
-
* As a result, we need to wait for the element
|
|
16395
|
-
* to become visible before setting the notch width.
|
|
16396
|
-
*
|
|
16397
|
-
* We do not check el.offsetParent because
|
|
16398
|
-
* that can be null if the host element has
|
|
16399
|
-
* position: fixed applied to it.
|
|
16400
|
-
* notchSpacerEl does not have position: fixed.
|
|
16401
|
-
*/
|
|
16402
|
-
width === 0 &&
|
|
16403
|
-
notchSpacerEl.offsetParent === null &&
|
|
16404
|
-
win$1 !== undefined &&
|
|
16405
|
-
'IntersectionObserver' in win$1) {
|
|
16406
|
-
/**
|
|
16407
|
-
* If there is an IO already attached
|
|
16408
|
-
* then that will update the notch
|
|
16409
|
-
* once the element becomes visible.
|
|
16410
|
-
* As a result, there is no need to create
|
|
16411
|
-
* another one.
|
|
16412
|
-
*/
|
|
16413
|
-
if (notchVisibilityIO !== undefined) {
|
|
16414
|
-
return;
|
|
16415
|
-
}
|
|
16416
|
-
const io = (notchVisibilityIO = new IntersectionObserver((ev) => {
|
|
16417
|
-
/**
|
|
16418
|
-
* If the element is visible then we
|
|
16419
|
-
* can try setting the notch width again.
|
|
16420
|
-
*/
|
|
16421
|
-
if (ev[0].intersectionRatio === 1) {
|
|
16422
|
-
setNotchWidth();
|
|
16423
|
-
io.disconnect();
|
|
16424
|
-
notchVisibilityIO = undefined;
|
|
16425
|
-
}
|
|
16426
|
-
},
|
|
16427
|
-
/**
|
|
16428
|
-
* Set the root to be the host element
|
|
16429
|
-
* This causes the IO callback
|
|
16430
|
-
* to be fired in WebKit as soon as the element
|
|
16431
|
-
* is visible. If we used the default root value
|
|
16432
|
-
* then WebKit would only fire the IO callback
|
|
16433
|
-
* after any animations (such as a modal transition)
|
|
16434
|
-
* finished, and there would potentially be a flicker.
|
|
16435
|
-
*/
|
|
16436
|
-
{ threshold: 0.01, root: el }));
|
|
16437
|
-
io.observe(notchSpacerEl);
|
|
16438
|
-
return;
|
|
16643
|
+
// ******** DOM READ ****************
|
|
16644
|
+
// Save the current content dimensions before the UI updates
|
|
16645
|
+
const prev = scrollEl.scrollHeight - scrollEl.scrollTop;
|
|
16646
|
+
// ******** DOM READ ****************
|
|
16647
|
+
requestAnimationFrame(() => {
|
|
16648
|
+
readTask(() => {
|
|
16649
|
+
// UI has updated, save the new content dimensions
|
|
16650
|
+
const scrollHeight = scrollEl.scrollHeight;
|
|
16651
|
+
// New content was added on top, so the scroll position should be changed immediately to prevent it from jumping around
|
|
16652
|
+
const newScrollTop = scrollHeight - prev;
|
|
16653
|
+
// ******** DOM WRITE ****************
|
|
16654
|
+
requestAnimationFrame(() => {
|
|
16655
|
+
writeTask(() => {
|
|
16656
|
+
scrollEl.scrollTop = newScrollTop;
|
|
16657
|
+
this.isBusy = false;
|
|
16658
|
+
this.didFire = false;
|
|
16659
|
+
});
|
|
16660
|
+
});
|
|
16661
|
+
});
|
|
16662
|
+
});
|
|
16439
16663
|
}
|
|
16440
|
-
|
|
16441
|
-
|
|
16442
|
-
* The notch is only visible when the label is scaled,
|
|
16443
|
-
* which is why we multiply the width by 0.75 as this is
|
|
16444
|
-
* the same amount the label element is scaled by in the host CSS.
|
|
16445
|
-
* (See $form-control-label-stacked-scale in ionic.globals.scss).
|
|
16446
|
-
*/
|
|
16447
|
-
notchSpacerEl.style.setProperty('width', `${width * 0.75}px`);
|
|
16448
|
-
};
|
|
16449
|
-
const destroy = () => {
|
|
16450
|
-
if (notchVisibilityIO) {
|
|
16451
|
-
notchVisibilityIO.disconnect();
|
|
16452
|
-
notchVisibilityIO = undefined;
|
|
16664
|
+
else {
|
|
16665
|
+
this.didFire = false;
|
|
16453
16666
|
}
|
|
16454
|
-
};
|
|
16455
|
-
return {
|
|
16456
|
-
calculateNotchWidth,
|
|
16457
|
-
destroy,
|
|
16458
|
-
};
|
|
16459
|
-
};
|
|
16460
|
-
|
|
16461
|
-
/**
|
|
16462
|
-
* Uses the compareWith param to compare two values to determine if they are equal.
|
|
16463
|
-
*
|
|
16464
|
-
* @param currentValue The current value of the control.
|
|
16465
|
-
* @param compareValue The value to compare against.
|
|
16466
|
-
* @param compareWith The function or property name to use to compare values.
|
|
16467
|
-
*/
|
|
16468
|
-
const compareOptions = (currentValue, compareValue, compareWith) => {
|
|
16469
|
-
if (typeof compareWith === 'function') {
|
|
16470
|
-
return compareWith(currentValue, compareValue);
|
|
16471
16667
|
}
|
|
16472
|
-
|
|
16473
|
-
return
|
|
16668
|
+
canStart() {
|
|
16669
|
+
return !this.disabled && !this.isBusy && !!this.scrollEl && !this.isLoading;
|
|
16474
16670
|
}
|
|
16475
|
-
|
|
16476
|
-
|
|
16671
|
+
enableScrollEvents(shouldListen) {
|
|
16672
|
+
if (this.scrollEl) {
|
|
16673
|
+
if (shouldListen) {
|
|
16674
|
+
this.scrollEl.addEventListener('scroll', this.onScroll);
|
|
16675
|
+
}
|
|
16676
|
+
else {
|
|
16677
|
+
this.scrollEl.removeEventListener('scroll', this.onScroll);
|
|
16678
|
+
}
|
|
16679
|
+
}
|
|
16477
16680
|
}
|
|
16478
|
-
|
|
16479
|
-
|
|
16480
|
-
|
|
16481
|
-
|
|
16482
|
-
|
|
16483
|
-
|
|
16484
|
-
|
|
16485
|
-
|
|
16486
|
-
const isOptionSelected = (currentValue, compareValue, compareWith) => {
|
|
16487
|
-
if (currentValue === undefined) {
|
|
16488
|
-
return false;
|
|
16681
|
+
render() {
|
|
16682
|
+
const mode = getIonMode$1(this);
|
|
16683
|
+
const disabled = this.disabled;
|
|
16684
|
+
return (hAsync(Host, { key: 'e844956795f69be33396ce4480aa7a54ad01b28c', class: {
|
|
16685
|
+
[mode]: true,
|
|
16686
|
+
'infinite-scroll-loading': this.isLoading,
|
|
16687
|
+
'infinite-scroll-enabled': !disabled,
|
|
16688
|
+
} }));
|
|
16489
16689
|
}
|
|
16490
|
-
|
|
16491
|
-
|
|
16690
|
+
get el() { return getElement(this); }
|
|
16691
|
+
static get watchers() { return {
|
|
16692
|
+
"threshold": ["thresholdChanged"],
|
|
16693
|
+
"disabled": ["disabledChanged"]
|
|
16694
|
+
}; }
|
|
16695
|
+
static get style() { return infiniteScrollCss; }
|
|
16696
|
+
static get cmpMeta() { return {
|
|
16697
|
+
"$flags$": 256,
|
|
16698
|
+
"$tagName$": "ion-infinite-scroll",
|
|
16699
|
+
"$members$": {
|
|
16700
|
+
"threshold": [1],
|
|
16701
|
+
"disabled": [4],
|
|
16702
|
+
"position": [1],
|
|
16703
|
+
"isLoading": [32],
|
|
16704
|
+
"complete": [64]
|
|
16705
|
+
},
|
|
16706
|
+
"$listeners$": undefined,
|
|
16707
|
+
"$lazyBundleId$": "-",
|
|
16708
|
+
"$attrsToReflect$": []
|
|
16709
|
+
}; }
|
|
16710
|
+
}
|
|
16711
|
+
|
|
16712
|
+
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))}";
|
|
16713
|
+
|
|
16714
|
+
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))}";
|
|
16715
|
+
|
|
16716
|
+
class InfiniteScrollContent {
|
|
16717
|
+
constructor(hostRef) {
|
|
16718
|
+
registerInstance(this, hostRef);
|
|
16719
|
+
this.customHTMLEnabled = config.get('innerHTMLTemplatesEnabled', ENABLE_HTML_CONTENT_DEFAULT);
|
|
16492
16720
|
}
|
|
16493
|
-
|
|
16494
|
-
|
|
16721
|
+
componentDidLoad() {
|
|
16722
|
+
if (this.loadingSpinner === undefined) {
|
|
16723
|
+
const mode = getIonMode$1(this);
|
|
16724
|
+
this.loadingSpinner = config.get('infiniteLoadingSpinner', config.get('spinner', mode === 'ios' ? 'lines' : 'crescent'));
|
|
16725
|
+
}
|
|
16495
16726
|
}
|
|
16496
|
-
|
|
16497
|
-
|
|
16498
|
-
|
|
16499
|
-
|
|
16500
|
-
|
|
16501
|
-
|
|
16502
|
-
|
|
16503
|
-
|
|
16504
|
-
|
|
16505
|
-
|
|
16506
|
-
|
|
16507
|
-
|
|
16508
|
-
|
|
16509
|
-
};
|
|
16727
|
+
renderLoadingText() {
|
|
16728
|
+
const { customHTMLEnabled, loadingText } = this;
|
|
16729
|
+
if (customHTMLEnabled) {
|
|
16730
|
+
return hAsync("div", { class: "infinite-loading-text", innerHTML: sanitizeDOMString(loadingText) });
|
|
16731
|
+
}
|
|
16732
|
+
return hAsync("div", { class: "infinite-loading-text" }, this.loadingText);
|
|
16733
|
+
}
|
|
16734
|
+
render() {
|
|
16735
|
+
const mode = getIonMode$1(this);
|
|
16736
|
+
return (hAsync(Host, { key: '7c16060dcfe2a0b0fb3e2f8f4c449589a76f1baa', class: {
|
|
16737
|
+
[mode]: true,
|
|
16738
|
+
// Used internally for styling
|
|
16739
|
+
[`infinite-scroll-content-${mode}`]: true,
|
|
16740
|
+
} }, 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())));
|
|
16741
|
+
}
|
|
16742
|
+
static get style() { return {
|
|
16743
|
+
ios: infiniteScrollContentIosCss,
|
|
16744
|
+
md: infiniteScrollContentMdCss
|
|
16745
|
+
}; }
|
|
16746
|
+
static get cmpMeta() { return {
|
|
16747
|
+
"$flags$": 288,
|
|
16748
|
+
"$tagName$": "ion-infinite-scroll-content",
|
|
16749
|
+
"$members$": {
|
|
16750
|
+
"loadingSpinner": [1025, "loading-spinner"],
|
|
16751
|
+
"loadingText": [1, "loading-text"]
|
|
16752
|
+
},
|
|
16753
|
+
"$listeners$": undefined,
|
|
16754
|
+
"$lazyBundleId$": "-",
|
|
16755
|
+
"$attrsToReflect$": []
|
|
16756
|
+
}; }
|
|
16757
|
+
}
|
|
16510
16758
|
|
|
16511
16759
|
/**
|
|
16512
16760
|
* Used to update a scoped component that uses emulated slots. This fires when
|
|
@@ -18227,7 +18475,7 @@ class Item {
|
|
|
18227
18475
|
"color": [513],
|
|
18228
18476
|
"button": [4],
|
|
18229
18477
|
"detail": [4],
|
|
18230
|
-
"detailIcon": [
|
|
18478
|
+
"detailIcon": [1, "detail-icon"],
|
|
18231
18479
|
"disabled": [516],
|
|
18232
18480
|
"download": [1],
|
|
18233
18481
|
"href": [1],
|
|
@@ -22963,7 +23211,13 @@ class Modal {
|
|
|
22963
23211
|
};
|
|
22964
23212
|
window.addEventListener(KEYBOARD_DID_OPEN, this.keyboardOpenCallback);
|
|
22965
23213
|
}
|
|
22966
|
-
|
|
23214
|
+
/**
|
|
23215
|
+
* Recalculate isSheetModal because framework bindings (e.g., Angular)
|
|
23216
|
+
* may not have been applied when componentWillLoad ran.
|
|
23217
|
+
*/
|
|
23218
|
+
const isSheetModal = this.breakpoints !== undefined && this.initialBreakpoint !== undefined;
|
|
23219
|
+
this.isSheetModal = isSheetModal;
|
|
23220
|
+
if (isSheetModal) {
|
|
22967
23221
|
this.initSheetGesture();
|
|
22968
23222
|
}
|
|
22969
23223
|
else if (hasCardModal) {
|
|
@@ -23045,6 +23299,79 @@ class Modal {
|
|
|
23045
23299
|
this.gesture = gesture;
|
|
23046
23300
|
this.moveSheetToBreakpoint = moveSheetToBreakpoint;
|
|
23047
23301
|
this.gesture.enable(true);
|
|
23302
|
+
/**
|
|
23303
|
+
* When backdrop interaction is allowed, nested router outlets from child routes
|
|
23304
|
+
* may block pointer events to parent content. Apply passthrough styles only when
|
|
23305
|
+
* the modal was the sole content of a child route page.
|
|
23306
|
+
* See https://github.com/ionic-team/ionic-framework/issues/30700
|
|
23307
|
+
*/
|
|
23308
|
+
const backdropNotBlocking = this.showBackdrop === false || this.focusTrap === false || backdropBreakpoint > 0;
|
|
23309
|
+
if (backdropNotBlocking) {
|
|
23310
|
+
this.setupChildRoutePassthrough();
|
|
23311
|
+
}
|
|
23312
|
+
}
|
|
23313
|
+
/**
|
|
23314
|
+
* For sheet modals that allow background interaction, sets up pointer-events
|
|
23315
|
+
* passthrough on child route page wrappers and nested router outlets.
|
|
23316
|
+
*/
|
|
23317
|
+
setupChildRoutePassthrough() {
|
|
23318
|
+
var _a;
|
|
23319
|
+
// Cache the page parent for cleanup
|
|
23320
|
+
this.cachedPageParent = this.getOriginalPageParent();
|
|
23321
|
+
const pageParent = this.cachedPageParent;
|
|
23322
|
+
// Skip ion-app (controller modals) and pages with visible sibling content next to the modal
|
|
23323
|
+
if (!pageParent || pageParent.tagName === 'ION-APP') {
|
|
23324
|
+
return;
|
|
23325
|
+
}
|
|
23326
|
+
const hasVisibleContent = Array.from(pageParent.children).some((child) => {
|
|
23327
|
+
var _a;
|
|
23328
|
+
return child !== this.el &&
|
|
23329
|
+
!(child instanceof HTMLElement && window.getComputedStyle(child).display === 'none') &&
|
|
23330
|
+
child.tagName !== 'TEMPLATE' &&
|
|
23331
|
+
child.tagName !== 'SLOT' &&
|
|
23332
|
+
!(child.nodeType === Node.TEXT_NODE && !((_a = child.textContent) === null || _a === void 0 ? void 0 : _a.trim()));
|
|
23333
|
+
});
|
|
23334
|
+
if (hasVisibleContent) {
|
|
23335
|
+
return;
|
|
23336
|
+
}
|
|
23337
|
+
// Child route case: page only contained the modal
|
|
23338
|
+
pageParent.classList.add('ion-page-overlay-passthrough');
|
|
23339
|
+
// Also make nested router outlets passthrough
|
|
23340
|
+
const routerOutlet = pageParent.parentElement;
|
|
23341
|
+
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') {
|
|
23342
|
+
routerOutlet.style.setProperty('pointer-events', 'none');
|
|
23343
|
+
routerOutlet.setAttribute('data-overlay-passthrough', 'true');
|
|
23344
|
+
}
|
|
23345
|
+
}
|
|
23346
|
+
/**
|
|
23347
|
+
* Finds the ion-page ancestor of the modal's original parent location.
|
|
23348
|
+
*/
|
|
23349
|
+
getOriginalPageParent() {
|
|
23350
|
+
if (!this.cachedOriginalParent) {
|
|
23351
|
+
return null;
|
|
23352
|
+
}
|
|
23353
|
+
let pageParent = this.cachedOriginalParent;
|
|
23354
|
+
while (pageParent && !pageParent.classList.contains('ion-page')) {
|
|
23355
|
+
pageParent = pageParent.parentElement;
|
|
23356
|
+
}
|
|
23357
|
+
return pageParent;
|
|
23358
|
+
}
|
|
23359
|
+
/**
|
|
23360
|
+
* Removes passthrough styles added by setupChildRoutePassthrough.
|
|
23361
|
+
*/
|
|
23362
|
+
cleanupChildRoutePassthrough() {
|
|
23363
|
+
const pageParent = this.cachedPageParent;
|
|
23364
|
+
if (!pageParent) {
|
|
23365
|
+
return;
|
|
23366
|
+
}
|
|
23367
|
+
pageParent.classList.remove('ion-page-overlay-passthrough');
|
|
23368
|
+
const routerOutlet = pageParent.parentElement;
|
|
23369
|
+
if (routerOutlet === null || routerOutlet === void 0 ? void 0 : routerOutlet.hasAttribute('data-overlay-passthrough')) {
|
|
23370
|
+
routerOutlet.style.removeProperty('pointer-events');
|
|
23371
|
+
routerOutlet.removeAttribute('data-overlay-passthrough');
|
|
23372
|
+
}
|
|
23373
|
+
// Clear the cached reference
|
|
23374
|
+
this.cachedPageParent = undefined;
|
|
23048
23375
|
}
|
|
23049
23376
|
sheetOnDismiss() {
|
|
23050
23377
|
/**
|
|
@@ -23134,6 +23461,7 @@ class Modal {
|
|
|
23134
23461
|
}
|
|
23135
23462
|
this.cleanupViewTransitionListener();
|
|
23136
23463
|
this.cleanupParentRemovalObserver();
|
|
23464
|
+
this.cleanupChildRoutePassthrough();
|
|
23137
23465
|
}
|
|
23138
23466
|
this.currentBreakpoint = undefined;
|
|
23139
23467
|
this.animation = undefined;
|
|
@@ -23330,6 +23658,17 @@ class Modal {
|
|
|
23330
23658
|
this.cachedOriginalParent.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {
|
|
23331
23659
|
return;
|
|
23332
23660
|
}
|
|
23661
|
+
/**
|
|
23662
|
+
* Don't observe for controller-based modals or when the parent is the
|
|
23663
|
+
* app root (document.body or ion-app). These parents won't be removed,
|
|
23664
|
+
* and observing document.body with subtree: true causes performance
|
|
23665
|
+
* issues with frameworks like Angular during change detection.
|
|
23666
|
+
*/
|
|
23667
|
+
if (this.hasController ||
|
|
23668
|
+
this.cachedOriginalParent === document.body ||
|
|
23669
|
+
this.cachedOriginalParent.tagName === 'ION-APP') {
|
|
23670
|
+
return;
|
|
23671
|
+
}
|
|
23333
23672
|
this.parentRemovalObserver = new MutationObserver((mutations) => {
|
|
23334
23673
|
mutations.forEach((mutation) => {
|
|
23335
23674
|
if (mutation.type === 'childList' && mutation.removedNodes.length > 0) {
|
|
@@ -23371,20 +23710,20 @@ class Modal {
|
|
|
23371
23710
|
const isCardModal = presentingElement !== undefined && mode === 'ios';
|
|
23372
23711
|
const isHandleCycle = handleBehavior === 'cycle';
|
|
23373
23712
|
const isSheetModalWithHandle = isSheetModal && showHandle;
|
|
23374
|
-
return (hAsync(Host, Object.assign({ key: '
|
|
23713
|
+
return (hAsync(Host, Object.assign({ key: '9a75095a13de0cfc96f1fa69fd92777d25da8daa', "no-router": true,
|
|
23375
23714
|
// Allow the modal to be navigable when the handle is focusable
|
|
23376
23715
|
tabIndex: isHandleCycle && isSheetModalWithHandle ? 0 : -1 }, htmlAttributes, { style: {
|
|
23377
23716
|
zIndex: `${20000 + this.overlayIndex}`,
|
|
23378
|
-
}, 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: '
|
|
23717
|
+
}, 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',
|
|
23379
23718
|
/*
|
|
23380
23719
|
role and aria-modal must be used on the
|
|
23381
23720
|
same element. They must also be set inside the
|
|
23382
23721
|
shadow DOM otherwise ion-button will not be highlighted
|
|
23383
23722
|
when using VoiceOver: https://bugs.webkit.org/show_bug.cgi?id=247134
|
|
23384
23723
|
*/
|
|
23385
|
-
role: "dialog" }, inheritedAttributes, { "aria-modal": "true", class: "modal-wrapper ion-overlay-wrapper", part: "content", ref: (el) => (this.wrapperEl = el) }), showHandle && (hAsync("button", { key: '
|
|
23724
|
+
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",
|
|
23386
23725
|
// Prevents the handle from receiving keyboard focus when it does not cycle
|
|
23387
|
-
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: '
|
|
23726
|
+
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 }))));
|
|
23388
23727
|
}
|
|
23389
23728
|
get el() { return getElement(this); }
|
|
23390
23729
|
static get watchers() { return {
|
|
@@ -23424,6 +23763,7 @@ class Modal {
|
|
|
23424
23763
|
"keepContentsMounted": [4, "keep-contents-mounted"],
|
|
23425
23764
|
"focusTrap": [4, "focus-trap"],
|
|
23426
23765
|
"canDismiss": [4, "can-dismiss"],
|
|
23766
|
+
"isSheetModal": [32],
|
|
23427
23767
|
"presented": [32],
|
|
23428
23768
|
"present": [64],
|
|
23429
23769
|
"dismiss": [64],
|
|
@@ -27491,6 +27831,10 @@ class Popover {
|
|
|
27491
27831
|
if (destroyTriggerInteraction) {
|
|
27492
27832
|
destroyTriggerInteraction();
|
|
27493
27833
|
}
|
|
27834
|
+
if (this.headerResizeObserver) {
|
|
27835
|
+
this.headerResizeObserver.disconnect();
|
|
27836
|
+
this.headerResizeObserver = undefined;
|
|
27837
|
+
}
|
|
27494
27838
|
}
|
|
27495
27839
|
componentWillLoad() {
|
|
27496
27840
|
var _a, _b;
|
|
@@ -27593,6 +27937,7 @@ class Popover {
|
|
|
27593
27937
|
*/
|
|
27594
27938
|
this.ionMount.emit();
|
|
27595
27939
|
this.usersElement = await attachComponent(delegate, el, this.component, ['popover-viewport'], this.componentProps, inline);
|
|
27940
|
+
this.recalculateContentOnHeaderReady();
|
|
27596
27941
|
if (!this.keyboardEvents) {
|
|
27597
27942
|
this.configureKeyboardInteraction();
|
|
27598
27943
|
}
|
|
@@ -27638,6 +27983,35 @@ class Popover {
|
|
|
27638
27983
|
}
|
|
27639
27984
|
unlock();
|
|
27640
27985
|
}
|
|
27986
|
+
/**
|
|
27987
|
+
* Watch the header for height changes and trigger content dimension
|
|
27988
|
+
* recalculation when the header has a height > 0. This sets the offset-top
|
|
27989
|
+
* of the content to the height of the header correctly.
|
|
27990
|
+
*/
|
|
27991
|
+
recalculateContentOnHeaderReady() {
|
|
27992
|
+
var _a;
|
|
27993
|
+
const popoverContent = (_a = this.el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.popover-content');
|
|
27994
|
+
if (!popoverContent) {
|
|
27995
|
+
return;
|
|
27996
|
+
}
|
|
27997
|
+
const contentContainer = this.usersElement || popoverContent;
|
|
27998
|
+
const header = contentContainer.querySelector('ion-header');
|
|
27999
|
+
const contentElements = contentContainer.querySelectorAll('ion-content');
|
|
28000
|
+
if (!header || contentElements.length === 0) {
|
|
28001
|
+
return;
|
|
28002
|
+
}
|
|
28003
|
+
this.headerResizeObserver = new ResizeObserver(async () => {
|
|
28004
|
+
var _a;
|
|
28005
|
+
if (header.offsetHeight > 0) {
|
|
28006
|
+
(_a = this.headerResizeObserver) === null || _a === void 0 ? void 0 : _a.disconnect();
|
|
28007
|
+
this.headerResizeObserver = undefined;
|
|
28008
|
+
for (const contentEl of contentElements) {
|
|
28009
|
+
await contentEl.recalculateDimensions();
|
|
28010
|
+
}
|
|
28011
|
+
}
|
|
28012
|
+
});
|
|
28013
|
+
this.headerResizeObserver.observe(header);
|
|
28014
|
+
}
|
|
27641
28015
|
/**
|
|
27642
28016
|
* Dismiss the popover overlay after it has been presented.
|
|
27643
28017
|
* This is a no-op if the overlay has not been presented yet. If you want
|
|
@@ -27699,9 +28073,9 @@ class Popover {
|
|
|
27699
28073
|
const { onLifecycle, parentPopover, dismissOnSelect, side, arrow, htmlAttributes, focusTrap } = this;
|
|
27700
28074
|
const desktop = isPlatform('desktop');
|
|
27701
28075
|
const enableArrow = arrow && !parentPopover;
|
|
27702
|
-
return (hAsync(Host, Object.assign({ key: '
|
|
28076
|
+
return (hAsync(Host, Object.assign({ key: '42863f748c93f709d433931d969230137b37d42d', "aria-modal": "true", "no-router": true, tabindex: "-1" }, htmlAttributes, { style: {
|
|
27703
28077
|
zIndex: `${20000 + this.overlayIndex}`,
|
|
27704
|
-
}, 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: '
|
|
28078
|
+
}, 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' })))));
|
|
27705
28079
|
}
|
|
27706
28080
|
get el() { return getElement(this); }
|
|
27707
28081
|
static get watchers() { return {
|
|
@@ -28051,6 +28425,10 @@ class RadioGroup {
|
|
|
28051
28425
|
this.helperTextId = `${this.inputId}-helper-text`;
|
|
28052
28426
|
this.errorTextId = `${this.inputId}-error-text`;
|
|
28053
28427
|
this.labelId = `${this.inputId}-lbl`;
|
|
28428
|
+
/**
|
|
28429
|
+
* Track validation state for proper aria-live announcements.
|
|
28430
|
+
*/
|
|
28431
|
+
this.isInvalid = false;
|
|
28054
28432
|
/**
|
|
28055
28433
|
* If `true`, the radios can be deselected.
|
|
28056
28434
|
*/
|
|
@@ -28132,6 +28510,18 @@ class RadioGroup {
|
|
|
28132
28510
|
this.labelId = label.id = this.name + '-lbl';
|
|
28133
28511
|
}
|
|
28134
28512
|
}
|
|
28513
|
+
// Always set initial state
|
|
28514
|
+
this.isInvalid = checkInvalidState(this.el);
|
|
28515
|
+
}
|
|
28516
|
+
componentWillLoad() {
|
|
28517
|
+
this.hintTextId = this.getHintTextId();
|
|
28518
|
+
}
|
|
28519
|
+
disconnectedCallback() {
|
|
28520
|
+
// Clean up validation observer to prevent memory leaks.
|
|
28521
|
+
if (this.validationObserver) {
|
|
28522
|
+
this.validationObserver.disconnect();
|
|
28523
|
+
this.validationObserver = undefined;
|
|
28524
|
+
}
|
|
28135
28525
|
}
|
|
28136
28526
|
getRadios() {
|
|
28137
28527
|
return Array.from(this.el.querySelectorAll('ion-radio'));
|
|
@@ -28207,16 +28597,16 @@ class RadioGroup {
|
|
|
28207
28597
|
* Renders the helper text or error text values
|
|
28208
28598
|
*/
|
|
28209
28599
|
renderHintText() {
|
|
28210
|
-
const { helperText, errorText, helperTextId, errorTextId } = this;
|
|
28600
|
+
const { helperText, errorText, helperTextId, errorTextId, isInvalid } = this;
|
|
28211
28601
|
const hasHintText = !!helperText || !!errorText;
|
|
28212
28602
|
if (!hasHintText) {
|
|
28213
28603
|
return;
|
|
28214
28604
|
}
|
|
28215
|
-
return (hAsync("div", { class: "radio-group-top" }, hAsync("div", { id: helperTextId, class: "helper-text" }, helperText), hAsync("div", { id: errorTextId, class: "error-text" }, errorText)));
|
|
28605
|
+
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)));
|
|
28216
28606
|
}
|
|
28217
|
-
|
|
28218
|
-
const {
|
|
28219
|
-
if (
|
|
28607
|
+
getHintTextId() {
|
|
28608
|
+
const { helperText, errorText, helperTextId, errorTextId, isInvalid } = this;
|
|
28609
|
+
if (isInvalid && errorText) {
|
|
28220
28610
|
return errorTextId;
|
|
28221
28611
|
}
|
|
28222
28612
|
if (helperText) {
|
|
@@ -28228,7 +28618,7 @@ class RadioGroup {
|
|
|
28228
28618
|
const { label, labelId, el, name, value } = this;
|
|
28229
28619
|
const mode = getIonMode$1(this);
|
|
28230
28620
|
renderHiddenInput(true, el, name, value, false);
|
|
28231
|
-
return (hAsync(Host, { key: '
|
|
28621
|
+
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' }))));
|
|
28232
28622
|
}
|
|
28233
28623
|
get el() { return getElement(this); }
|
|
28234
28624
|
static get watchers() { return {
|
|
@@ -28248,6 +28638,8 @@ class RadioGroup {
|
|
|
28248
28638
|
"value": [1032],
|
|
28249
28639
|
"helperText": [1, "helper-text"],
|
|
28250
28640
|
"errorText": [1, "error-text"],
|
|
28641
|
+
"isInvalid": [32],
|
|
28642
|
+
"hintTextId": [32],
|
|
28251
28643
|
"setFocus": [64]
|
|
28252
28644
|
},
|
|
28253
28645
|
"$listeners$": [[4, "keydown", "onKeydown"]],
|
|
@@ -33376,7 +33768,7 @@ class Select {
|
|
|
33376
33768
|
}
|
|
33377
33769
|
componentWillLoad() {
|
|
33378
33770
|
this.inheritedAttributes = inheritAttributes$1(this.el, ['aria-label']);
|
|
33379
|
-
this.
|
|
33771
|
+
this.hintTextId = this.getHintTextId();
|
|
33380
33772
|
}
|
|
33381
33773
|
componentDidLoad() {
|
|
33382
33774
|
/**
|
|
@@ -33555,13 +33947,18 @@ class Select {
|
|
|
33555
33947
|
.filter((cls) => cls !== 'hydrated')
|
|
33556
33948
|
.join(' ');
|
|
33557
33949
|
const optClass = `${OPTION_CLASS} ${copyClasses}`;
|
|
33950
|
+
const isSelected = isOptionSelected(selectValue, value, this.compareWith);
|
|
33558
33951
|
return {
|
|
33559
|
-
role:
|
|
33952
|
+
role: isSelected ? 'selected' : '',
|
|
33560
33953
|
text: option.textContent,
|
|
33561
33954
|
cssClass: optClass,
|
|
33562
33955
|
handler: () => {
|
|
33563
33956
|
this.setValue(value);
|
|
33564
33957
|
},
|
|
33958
|
+
htmlAttributes: {
|
|
33959
|
+
'aria-checked': isSelected ? 'true' : 'false',
|
|
33960
|
+
role: 'radio',
|
|
33961
|
+
},
|
|
33565
33962
|
};
|
|
33566
33963
|
});
|
|
33567
33964
|
// Add "cancel" button
|
|
@@ -33875,9 +34272,9 @@ class Select {
|
|
|
33875
34272
|
}
|
|
33876
34273
|
renderListbox() {
|
|
33877
34274
|
const { disabled, inputId, isExpanded, required } = this;
|
|
33878
|
-
return (hAsync("button", { disabled: disabled, id: inputId, "aria-label": this.ariaLabel, "aria-haspopup": "dialog", "aria-expanded": `${isExpanded}`, "aria-describedby": this.
|
|
34275
|
+
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) }));
|
|
33879
34276
|
}
|
|
33880
|
-
|
|
34277
|
+
getHintTextId() {
|
|
33881
34278
|
const { helperText, errorText, helperTextId, errorTextId, isInvalid } = this;
|
|
33882
34279
|
if (isInvalid && errorText) {
|
|
33883
34280
|
return errorTextId;
|
|
@@ -33942,7 +34339,7 @@ class Select {
|
|
|
33942
34339
|
* TODO(FW-5592): Remove hasStartEndSlots condition
|
|
33943
34340
|
*/
|
|
33944
34341
|
const labelShouldFloat = labelPlacement === 'stacked' || (labelPlacement === 'floating' && (hasValue || isExpanded || hasStartEndSlots));
|
|
33945
|
-
return (hAsync(Host, { key: '
|
|
34342
|
+
return (hAsync(Host, { key: 'd8026835993d0e6dce747098f741a06ae4e4f54d', onClick: this.onClick, class: createColorClasses$1(this.color, {
|
|
33946
34343
|
[mode]: true,
|
|
33947
34344
|
'in-item': inItem,
|
|
33948
34345
|
'in-item-color': hostContext('ion-item.ion-color', el),
|
|
@@ -33960,7 +34357,7 @@ class Select {
|
|
|
33960
34357
|
[`select-justify-${justify}`]: justifyEnabled,
|
|
33961
34358
|
[`select-shape-${shape}`]: shape !== undefined,
|
|
33962
34359
|
[`select-label-placement-${labelPlacement}`]: true,
|
|
33963
|
-
}) }, hAsync("label", { key: '
|
|
34360
|
+
}) }, 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()));
|
|
33964
34361
|
}
|
|
33965
34362
|
get el() { return getElement(this); }
|
|
33966
34363
|
static get watchers() { return {
|
|
@@ -34002,7 +34399,7 @@ class Select {
|
|
|
34002
34399
|
"isExpanded": [32],
|
|
34003
34400
|
"hasFocus": [32],
|
|
34004
34401
|
"isInvalid": [32],
|
|
34005
|
-
"
|
|
34402
|
+
"hintTextId": [32],
|
|
34006
34403
|
"open": [64]
|
|
34007
34404
|
},
|
|
34008
34405
|
"$listeners$": undefined,
|
|
@@ -36473,6 +36870,10 @@ class Toggle {
|
|
|
36473
36870
|
this.inheritedAttributes = {};
|
|
36474
36871
|
this.didLoad = false;
|
|
36475
36872
|
this.activated = false;
|
|
36873
|
+
/**
|
|
36874
|
+
* Track validation state for proper aria-live announcements.
|
|
36875
|
+
*/
|
|
36876
|
+
this.isInvalid = false;
|
|
36476
36877
|
/**
|
|
36477
36878
|
* The name of the control, which is submitted with the form data.
|
|
36478
36879
|
*/
|
|
@@ -36586,15 +36987,18 @@ class Toggle {
|
|
|
36586
36987
|
});
|
|
36587
36988
|
}
|
|
36588
36989
|
async connectedCallback() {
|
|
36990
|
+
const { didLoad, el } = this;
|
|
36589
36991
|
/**
|
|
36590
36992
|
* If we have not yet rendered
|
|
36591
36993
|
* ion-toggle, then toggleTrack is not defined.
|
|
36592
36994
|
* But if we are moving ion-toggle via appendChild,
|
|
36593
36995
|
* then toggleTrack will be defined.
|
|
36594
36996
|
*/
|
|
36595
|
-
if (
|
|
36997
|
+
if (didLoad) {
|
|
36596
36998
|
this.setupGesture();
|
|
36597
36999
|
}
|
|
37000
|
+
// Always set initial state
|
|
37001
|
+
this.isInvalid = checkInvalidState(el);
|
|
36598
37002
|
}
|
|
36599
37003
|
componentDidLoad() {
|
|
36600
37004
|
this.setupGesture();
|
|
@@ -36605,9 +37009,15 @@ class Toggle {
|
|
|
36605
37009
|
this.gesture.destroy();
|
|
36606
37010
|
this.gesture = undefined;
|
|
36607
37011
|
}
|
|
37012
|
+
// Clean up validation observer to prevent memory leaks.
|
|
37013
|
+
if (this.validationObserver) {
|
|
37014
|
+
this.validationObserver.disconnect();
|
|
37015
|
+
this.validationObserver = undefined;
|
|
37016
|
+
}
|
|
36608
37017
|
}
|
|
36609
37018
|
componentWillLoad() {
|
|
36610
37019
|
this.inheritedAttributes = Object.assign({}, inheritAriaAttributes(this.el));
|
|
37020
|
+
this.hintTextId = this.getHintTextId();
|
|
36611
37021
|
}
|
|
36612
37022
|
onStart() {
|
|
36613
37023
|
this.activated = true;
|
|
@@ -36648,9 +37058,9 @@ class Toggle {
|
|
|
36648
37058
|
get hasLabel() {
|
|
36649
37059
|
return this.el.textContent !== '';
|
|
36650
37060
|
}
|
|
36651
|
-
|
|
36652
|
-
const {
|
|
36653
|
-
if (
|
|
37061
|
+
getHintTextId() {
|
|
37062
|
+
const { helperText, errorText, helperTextId, errorTextId, isInvalid } = this;
|
|
37063
|
+
if (isInvalid && errorText) {
|
|
36654
37064
|
return errorTextId;
|
|
36655
37065
|
}
|
|
36656
37066
|
if (helperText) {
|
|
@@ -36663,7 +37073,7 @@ class Toggle {
|
|
|
36663
37073
|
* This element should only be rendered if hint text is set.
|
|
36664
37074
|
*/
|
|
36665
37075
|
renderHintText() {
|
|
36666
|
-
const { helperText, errorText, helperTextId, errorTextId } = this;
|
|
37076
|
+
const { helperText, errorText, helperTextId, errorTextId, isInvalid } = this;
|
|
36667
37077
|
/**
|
|
36668
37078
|
* undefined and empty string values should
|
|
36669
37079
|
* be treated as not having helper/error text.
|
|
@@ -36672,15 +37082,15 @@ class Toggle {
|
|
|
36672
37082
|
if (!hasHintText) {
|
|
36673
37083
|
return;
|
|
36674
37084
|
}
|
|
36675
|
-
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)));
|
|
37085
|
+
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)));
|
|
36676
37086
|
}
|
|
36677
37087
|
render() {
|
|
36678
|
-
const { activated, alignment, checked, color, disabled, el,
|
|
37088
|
+
const { activated, alignment, checked, color, disabled, el, hasLabel, inheritedAttributes, inputId, inputLabelId, justify, labelPlacement, name, required, } = this;
|
|
36679
37089
|
const mode = getIonMode$1(this);
|
|
36680
37090
|
const value = this.getValue();
|
|
36681
37091
|
const rtl = isRTL$1(el) ? 'rtl' : 'ltr';
|
|
36682
37092
|
renderHiddenInput(true, el, name, checked ? value : '', disabled);
|
|
36683
|
-
return (hAsync(Host, { key: '
|
|
37093
|
+
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, {
|
|
36684
37094
|
[mode]: true,
|
|
36685
37095
|
'in-item': hostContext('ion-item', el),
|
|
36686
37096
|
'toggle-activated': activated,
|
|
@@ -36690,10 +37100,10 @@ class Toggle {
|
|
|
36690
37100
|
[`toggle-alignment-${alignment}`]: alignment !== undefined,
|
|
36691
37101
|
[`toggle-label-placement-${labelPlacement}`]: true,
|
|
36692
37102
|
[`toggle-${rtl}`]: true,
|
|
36693
|
-
}) }, hAsync("label", { key: '
|
|
37103
|
+
}) }, 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: {
|
|
36694
37104
|
'label-text-wrapper': true,
|
|
36695
37105
|
'label-text-wrapper-hidden': !hasLabel,
|
|
36696
|
-
}, part: "label", id: inputLabelId, onClick: this.onDivLabelClick }, hAsync("slot", { key: '
|
|
37106
|
+
}, part: "label", id: inputLabelId, onClick: this.onDivLabelClick }, hAsync("slot", { key: '7b162b7dd27199cca2a4c995276a18b9f8e44aaf' }), this.renderHintText()), hAsync("div", { key: 'd13c34bd42fca01cc73ddb4ea7e471b33a282a3e', class: "native-wrapper" }, this.renderToggleControl()))));
|
|
36697
37107
|
}
|
|
36698
37108
|
get el() { return getElement(this); }
|
|
36699
37109
|
static get watchers() { return {
|
|
@@ -36719,7 +37129,9 @@ class Toggle {
|
|
|
36719
37129
|
"justify": [1],
|
|
36720
37130
|
"alignment": [1],
|
|
36721
37131
|
"required": [4],
|
|
36722
|
-
"activated": [32]
|
|
37132
|
+
"activated": [32],
|
|
37133
|
+
"isInvalid": [32],
|
|
37134
|
+
"hintTextId": [32]
|
|
36723
37135
|
},
|
|
36724
37136
|
"$listeners$": undefined,
|
|
36725
37137
|
"$lazyBundleId$": "-",
|