voyager-ionic-core 7.5.0 → 7.5.5
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 +2 -2
- package/components/alert.js +2 -2
- package/components/animation.js +18 -3
- package/components/checkbox.js +2 -2
- package/components/form-controller.js +1 -5
- package/components/index8.js +0 -1
- package/components/input-shims.js +9 -1
- package/components/ion-accordion-group.js +11 -1
- package/components/ion-datetime.js +48 -23
- package/components/ion-fab-list.js +1 -1
- package/components/ion-fab.js +1 -1
- package/components/ion-header.js +1 -1
- package/components/ion-input.js +11 -4
- package/components/ion-item-divider.js +2 -2
- package/components/ion-item-option.js +2 -2
- package/components/ion-menu.js +17 -5
- package/components/ion-modal.js +8 -8
- package/components/ion-range.js +2 -2
- package/components/ion-refresher.js +8 -1
- package/components/ion-reorder.js +2 -2
- package/components/ion-searchbar.js +10 -3
- package/components/ion-segment.js +43 -17
- package/components/ion-select.js +2 -2
- package/components/ion-tab-bar.js +2 -2
- package/components/ion-tab-button.js +2 -2
- package/components/ion-textarea.js +11 -4
- package/components/ion-title.js +1 -1
- package/components/ion-toast.js +2 -2
- package/components/ion-toggle.js +2 -2
- package/components/ios.transition.js +209 -41
- package/components/item.js +2 -2
- package/components/list-header.js +2 -2
- package/components/list.js +2 -2
- package/components/picker-internal.js +2 -2
- package/components/popover.js +2 -2
- package/components/radio-group.js +10 -1
- package/components/radio.js +2 -3
- package/components/watch-options.js +14 -3
- package/css/core.css.map +1 -1
- package/css/display.css.map +1 -1
- package/css/float-elements.css.map +1 -1
- package/css/global.bundle.css.map +1 -1
- package/css/ionic.bundle.css.map +1 -1
- package/css/padding.css.map +1 -1
- package/css/structure.css.map +1 -1
- package/css/text-alignment.css.map +1 -1
- package/css/text-transformation.css.map +1 -1
- package/css/typography.css.map +1 -1
- package/css/utils.bundle.css.map +1 -1
- package/dist/cjs/{animation-c8bdd3c7.js → animation-1083855c.js} +18 -3
- package/dist/cjs/{app-globals-fe1ad535.js → app-globals-1d4c1dbf.js} +1 -1
- package/dist/cjs/{button-active-c0ff1915.js → button-active-af897e0e.js} +1 -1
- package/dist/cjs/{form-controller-5e223b54.js → form-controller-9343050c.js} +1 -5
- package/dist/cjs/{index-d93fb71d.js → index-573877f3.js} +3 -3
- package/dist/cjs/{index-305a23dc.js → index-c2940dc1.js} +127 -57
- package/dist/cjs/{index-5e7529f6.js → index-d7561763.js} +2 -2
- package/dist/cjs/{index-10873539.js → index-da2c7a37.js} +0 -1
- package/dist/cjs/index.cjs.js +8 -8
- package/dist/cjs/{input-shims-da7dc0de.js → input-shims-b0a75a01.js} +10 -2
- package/dist/cjs/ion-accordion_2.cjs.entry.js +13 -3
- package/dist/cjs/ion-action-sheet.cjs.entry.js +7 -7
- package/dist/cjs/ion-alert.cjs.entry.js +7 -7
- package/dist/cjs/ion-app_8.cjs.entry.js +8 -8
- package/dist/cjs/ion-avatar_3.cjs.entry.js +2 -2
- package/dist/cjs/ion-back-button.cjs.entry.js +2 -2
- package/dist/cjs/ion-backdrop.cjs.entry.js +2 -2
- package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +2 -2
- package/dist/cjs/ion-button_2.cjs.entry.js +2 -2
- package/dist/cjs/ion-card_5.cjs.entry.js +2 -2
- package/dist/cjs/ion-checkbox.cjs.entry.js +5 -5
- package/dist/cjs/ion-chip.cjs.entry.js +2 -2
- package/dist/cjs/ion-col_3.cjs.entry.js +2 -2
- package/dist/cjs/ion-datetime-button.cjs.entry.js +2 -2
- package/dist/cjs/ion-datetime_3.cjs.entry.js +52 -27
- package/dist/cjs/ion-fab_3.cjs.entry.js +4 -4
- package/dist/cjs/ion-img.cjs.entry.js +2 -2
- package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +3 -3
- package/dist/cjs/ion-input.cjs.entry.js +13 -6
- package/dist/cjs/ion-item-option_3.cjs.entry.js +6 -6
- package/dist/cjs/ion-item_8.cjs.entry.js +10 -10
- package/dist/cjs/ion-loading.cjs.entry.js +4 -4
- package/dist/cjs/ion-menu_3.cjs.entry.js +22 -10
- package/dist/cjs/ion-modal.cjs.entry.js +14 -14
- package/dist/cjs/ion-nav_2.cjs.entry.js +3 -3
- package/dist/cjs/ion-picker-column-internal.cjs.entry.js +2 -2
- package/dist/cjs/ion-picker-internal.cjs.entry.js +3 -3
- package/dist/cjs/ion-popover.cjs.entry.js +7 -7
- package/dist/cjs/ion-progress-bar.cjs.entry.js +2 -2
- package/dist/cjs/ion-radio_2.cjs.entry.js +15 -7
- package/dist/cjs/ion-range.cjs.entry.js +6 -6
- package/dist/cjs/ion-refresher_2.cjs.entry.js +12 -5
- package/dist/cjs/ion-reorder_2.cjs.entry.js +5 -5
- package/dist/cjs/ion-ripple-effect.cjs.entry.js +2 -2
- package/dist/cjs/ion-route_4.cjs.entry.js +2 -2
- package/dist/cjs/ion-searchbar.cjs.entry.js +11 -4
- package/dist/cjs/ion-segment_2.cjs.entry.js +45 -19
- package/dist/cjs/ion-select_3.cjs.entry.js +7 -7
- package/dist/cjs/ion-spinner.cjs.entry.js +2 -2
- package/dist/cjs/ion-split-pane.cjs.entry.js +2 -2
- package/dist/cjs/ion-tab-bar_2.cjs.entry.js +6 -6
- package/dist/cjs/ion-tab_2.cjs.entry.js +1 -1
- package/dist/cjs/ion-text.cjs.entry.js +2 -2
- package/dist/cjs/ion-textarea.cjs.entry.js +13 -6
- package/dist/cjs/ion-toast.cjs.entry.js +6 -6
- package/dist/cjs/ion-toggle.cjs.entry.js +5 -5
- package/dist/cjs/{ionic-global-fb752503.js → ionic-global-ea2901a3.js} +1 -1
- package/dist/cjs/ionic.cjs.js +4 -4
- package/dist/cjs/{ios.transition-a4d545dd.js → ios.transition-ac909bc8.js} +212 -44
- package/dist/cjs/loader.cjs.js +3 -3
- package/dist/cjs/{md.transition-80bb961b.js → md.transition-907af519.js} +3 -3
- package/dist/cjs/{overlays-1a734051.js → overlays-2ffc5f27.js} +1 -1
- package/dist/cjs/{status-tap-778e8054.js → status-tap-3fb2391a.js} +2 -2
- package/dist/cjs/{watch-options-f3f77e54.js → watch-options-53bbb124.js} +14 -3
- package/dist/collection/collection-manifest.json +1 -1
- package/dist/collection/components/accordion-group/accordion-group.js +10 -0
- package/dist/collection/components/accordion-group/accordion-group.md.css +2 -2
- package/dist/collection/components/action-sheet/action-sheet.ios.css +18 -5
- package/dist/collection/components/action-sheet/action-sheet.md.css +18 -5
- package/dist/collection/components/action-sheet/test/basic/action-sheet.e2e.js +59 -0
- package/dist/collection/components/alert/alert.ios.css +37 -4
- package/dist/collection/components/alert/alert.md.css +37 -4
- package/dist/collection/components/alert/test/a11y/alert.e2e.js +48 -0
- package/dist/collection/components/checkbox/checkbox.ios.css +3 -3
- package/dist/collection/components/checkbox/checkbox.md.css +3 -3
- package/dist/collection/components/datetime/datetime.ios.css +24 -4
- package/dist/collection/components/datetime/datetime.js +47 -22
- package/dist/collection/components/datetime/datetime.md.css +24 -8
- package/dist/collection/components/datetime/test/a11y/datetime.e2e.js +66 -0
- package/dist/collection/components/datetime/test/disabled/datetime.e2e.js +68 -0
- package/dist/collection/components/datetime/test/readonly/datetime.e2e.js +113 -0
- package/dist/collection/components/fab/fab.css +24 -36
- package/dist/collection/components/fab/test/safe-area/fab.e2e.js +63 -0
- package/dist/collection/components/fab-list/fab-list.css +2 -2
- package/dist/collection/components/header/header.ios.css +4 -1
- package/dist/collection/components/input/input.ios.css +15 -15
- package/dist/collection/components/input/input.js +9 -2
- package/dist/collection/components/input/input.md.css +22 -10
- package/dist/collection/components/item/item.ios.css +60 -12
- package/dist/collection/components/item/item.md.css +63 -15
- package/dist/collection/components/item/test/basic/item.e2e.js +26 -0
- package/dist/collection/components/item-divider/item-divider.ios.css +35 -8
- package/dist/collection/components/item-divider/item-divider.md.css +35 -8
- package/dist/collection/components/item-divider/test/basic/item-divider.e2e.js +22 -0
- package/dist/collection/components/item-option/item-option.ios.css +0 -10
- package/dist/collection/components/item-option/item-option.md.css +0 -10
- package/dist/collection/components/item-sliding/test/basic/item-sliding.e2e.js +77 -0
- package/dist/collection/components/label/label.ios.css +1 -1
- package/dist/collection/components/list/list.ios.css +15 -1
- package/dist/collection/components/list/list.md.css +41 -3
- package/dist/collection/components/list/test/lines/list.e2e.js +143 -0
- package/dist/collection/components/list-header/list-header.ios.css +15 -2
- package/dist/collection/components/list-header/list-header.md.css +15 -2
- package/dist/collection/components/list-header/test/basic/list-header.e2e.js +28 -0
- package/dist/collection/components/menu/menu.ios.css +4 -4
- package/dist/collection/components/menu/menu.js +15 -3
- package/dist/collection/components/menu/menu.md.css +4 -4
- package/dist/collection/components/modal/animations/ios.enter.js +3 -3
- package/dist/collection/components/modal/animations/ios.leave.js +4 -4
- package/dist/collection/components/modal/modal.ios.css +2 -2
- package/dist/collection/components/picker/picker.ios.css +1 -1
- package/dist/collection/components/picker/picker.md.css +1 -1
- package/dist/collection/components/picker-internal/picker-internal.ios.css +2 -2
- package/dist/collection/components/picker-internal/picker-internal.md.css +2 -2
- package/dist/collection/components/picker-internal/test/basic/picker-internal.e2e.js +5 -0
- package/dist/collection/components/popover/popover.ios.css +4 -4
- package/dist/collection/components/popover/popover.md.css +2 -2
- package/dist/collection/components/radio/radio.ios.css +4 -4
- package/dist/collection/components/radio/radio.js +5 -2
- package/dist/collection/components/radio/radio.md.css +4 -4
- package/dist/collection/components/radio/test/legacy/a11y/radio.e2e.js +5 -5
- package/dist/collection/components/radio-group/radio-group.js +10 -1
- package/dist/collection/components/range/range.ios.css +1 -1
- package/dist/collection/components/range/range.md.css +1 -1
- package/dist/collection/components/refresher/refresher.utils.js +8 -1
- package/dist/collection/components/reorder/reorder.ios.css +1 -34
- package/dist/collection/components/reorder/reorder.md.css +1 -34
- package/dist/collection/components/searchbar/searchbar.js +9 -2
- package/dist/collection/components/searchbar/searchbar.md.css +12 -6
- package/dist/collection/components/searchbar/test/basic/searchbar.e2e.js +25 -0
- package/dist/collection/components/segment/segment.js +43 -17
- package/dist/collection/components/select/select.ios.css +12 -15
- package/dist/collection/components/select/select.md.css +16 -7
- package/dist/collection/components/split-pane/test/multiple/split-pane.e2e.js +31 -0
- package/dist/collection/components/tab-bar/tab-bar.ios.css +4 -4
- package/dist/collection/components/tab-bar/tab-bar.md.css +4 -4
- package/dist/collection/components/tab-bar/test/basic/tab-bar.e2e.js +43 -0
- package/dist/collection/components/tab-button/tab-button.ios.css +3 -3
- package/dist/collection/components/tab-button/tab-button.md.css +3 -3
- package/dist/collection/components/textarea/textarea.ios.css +19 -19
- package/dist/collection/components/textarea/textarea.js +9 -2
- package/dist/collection/components/textarea/textarea.md.css +26 -20
- package/dist/collection/components/title/title.ios.css +11 -2
- package/dist/collection/components/toast/toast.ios.css +1 -1
- package/dist/collection/components/toast/toast.md.css +1 -1
- package/dist/collection/components/toggle/toggle.ios.css +3 -3
- package/dist/collection/components/toggle/toggle.md.css +3 -3
- package/dist/collection/utils/animation/animation.js +18 -3
- package/dist/collection/utils/content/index.js +0 -1
- package/dist/collection/utils/forms/form-controller.js +1 -5
- package/dist/collection/utils/input-shims/hacks/common.js +9 -1
- package/dist/collection/utils/transition/ios.transition.js +209 -41
- package/dist/collection/utils/watch-options.js +14 -3
- package/dist/docs.json +3 -3
- package/dist/esm/{animation-92066c62.js → animation-8aa13916.js} +18 -3
- package/dist/esm/{app-globals-ec816a70.js → app-globals-2398e405.js} +1 -1
- package/dist/esm/{button-active-d926d4f4.js → button-active-ce5cba4c.js} +1 -1
- package/dist/esm/{form-controller-ed77647a.js → form-controller-64edeaad.js} +1 -5
- package/dist/esm/{index-df55802d.js → index-0aa6e61f.js} +2 -2
- package/dist/esm/{index-746a238e.js → index-4392efa5.js} +0 -1
- package/dist/esm/{index-7d2b2808.js → index-6a0ccabb.js} +3 -3
- package/dist/esm/{index-b49b173c.js → index-7c9b1bca.js} +127 -57
- package/dist/esm/index.js +8 -8
- package/dist/esm/{input-shims-d78a3c77.js → input-shims-d0c93e5d.js} +10 -2
- package/dist/esm/ion-accordion_2.entry.js +13 -3
- package/dist/esm/ion-action-sheet.entry.js +7 -7
- package/dist/esm/ion-alert.entry.js +7 -7
- package/dist/esm/ion-app_8.entry.js +8 -8
- package/dist/esm/ion-avatar_3.entry.js +2 -2
- package/dist/esm/ion-back-button.entry.js +2 -2
- package/dist/esm/ion-backdrop.entry.js +2 -2
- package/dist/esm/ion-breadcrumb_2.entry.js +2 -2
- package/dist/esm/ion-button_2.entry.js +2 -2
- package/dist/esm/ion-card_5.entry.js +2 -2
- package/dist/esm/ion-checkbox.entry.js +5 -5
- package/dist/esm/ion-chip.entry.js +2 -2
- package/dist/esm/ion-col_3.entry.js +2 -2
- package/dist/esm/ion-datetime-button.entry.js +2 -2
- package/dist/esm/ion-datetime_3.entry.js +52 -27
- package/dist/esm/ion-fab_3.entry.js +4 -4
- package/dist/esm/ion-img.entry.js +2 -2
- package/dist/esm/ion-infinite-scroll_2.entry.js +3 -3
- package/dist/esm/ion-input.entry.js +14 -7
- package/dist/esm/ion-item-option_3.entry.js +6 -6
- package/dist/esm/ion-item_8.entry.js +10 -10
- package/dist/esm/ion-loading.entry.js +4 -4
- package/dist/esm/ion-menu_3.entry.js +22 -10
- package/dist/esm/ion-modal.entry.js +14 -14
- package/dist/esm/ion-nav_2.entry.js +3 -3
- package/dist/esm/ion-picker-column-internal.entry.js +2 -2
- package/dist/esm/ion-picker-internal.entry.js +3 -3
- package/dist/esm/ion-popover.entry.js +7 -7
- package/dist/esm/ion-progress-bar.entry.js +2 -2
- package/dist/esm/ion-radio_2.entry.js +15 -7
- package/dist/esm/ion-range.entry.js +6 -6
- package/dist/esm/ion-refresher_2.entry.js +12 -5
- package/dist/esm/ion-reorder_2.entry.js +5 -5
- package/dist/esm/ion-ripple-effect.entry.js +2 -2
- package/dist/esm/ion-route_4.entry.js +2 -2
- package/dist/esm/ion-searchbar.entry.js +12 -5
- package/dist/esm/ion-segment_2.entry.js +45 -19
- package/dist/esm/ion-select_3.entry.js +7 -7
- package/dist/esm/ion-spinner.entry.js +2 -2
- package/dist/esm/ion-split-pane.entry.js +2 -2
- package/dist/esm/ion-tab-bar_2.entry.js +6 -6
- package/dist/esm/ion-tab_2.entry.js +1 -1
- package/dist/esm/ion-text.entry.js +2 -2
- package/dist/esm/ion-textarea.entry.js +14 -7
- package/dist/esm/ion-toast.entry.js +6 -6
- package/dist/esm/ion-toggle.entry.js +5 -5
- package/dist/esm/{ionic-global-246ca78f.js → ionic-global-40e42e7f.js} +1 -1
- package/dist/esm/ionic.js +5 -5
- package/dist/esm/{ios.transition-a86d7bbe.js → ios.transition-1651c430.js} +212 -44
- package/dist/esm/loader.js +4 -4
- package/dist/esm/{md.transition-365ef6b6.js → md.transition-66f18369.js} +3 -3
- package/dist/esm/{overlays-cec6bac8.js → overlays-6c9feb7e.js} +1 -1
- package/dist/esm/{status-tap-9aeeaca5.js → status-tap-9ce68758.js} +2 -2
- package/dist/esm/{watch-options-355a920a.js → watch-options-02d8498b.js} +14 -3
- package/dist/esm-es5/animation-8aa13916.js +4 -0
- package/dist/esm-es5/app-globals-2398e405.js +4 -0
- package/dist/esm-es5/{button-active-d926d4f4.js → button-active-ce5cba4c.js} +1 -1
- package/dist/esm-es5/config-96c9ace3.js +1 -1
- package/dist/esm-es5/cubic-bezier-66542bc5.js +1 -1
- package/dist/esm-es5/data-44d9e816.js +1 -1
- package/dist/esm-es5/dir-912e3e13.js +1 -1
- package/dist/esm-es5/focus-visible-85493433.js +1 -1
- package/dist/esm-es5/form-controller-64edeaad.js +4 -0
- package/dist/esm-es5/framework-delegate-aa433dea.js +1 -1
- package/dist/esm-es5/gesture-controller-0fa396c4.js +1 -1
- package/dist/esm-es5/haptic-1243b917.js +1 -1
- package/dist/esm-es5/hardware-back-button-39299f84.js +1 -1
- package/dist/esm-es5/helpers-3379ba19.js +1 -1
- package/dist/esm-es5/index-0aa6e61f.js +4 -0
- package/dist/esm-es5/index-4392efa5.js +4 -0
- package/dist/esm-es5/index-6a0ccabb.js +4 -0
- package/dist/esm-es5/index-7c9b1bca.js +5 -0
- package/dist/esm-es5/index-f0cc4e14.js +1 -1
- package/dist/esm-es5/index-ff313b19.js +1 -1
- package/dist/esm-es5/index.js +1 -1
- package/dist/esm-es5/input-shims-d0c93e5d.js +4 -0
- package/dist/esm-es5/input.utils-ec063df4.js +1 -1
- package/dist/esm-es5/ion-accordion_2.entry.js +1 -1
- package/dist/esm-es5/ion-action-sheet.entry.js +1 -1
- package/dist/esm-es5/ion-alert.entry.js +1 -1
- package/dist/esm-es5/ion-app_8.entry.js +1 -1
- package/dist/esm-es5/ion-avatar_3.entry.js +1 -1
- package/dist/esm-es5/ion-back-button.entry.js +1 -1
- package/dist/esm-es5/ion-backdrop.entry.js +1 -1
- package/dist/esm-es5/ion-breadcrumb_2.entry.js +1 -1
- package/dist/esm-es5/ion-button_2.entry.js +1 -1
- package/dist/esm-es5/ion-card_5.entry.js +1 -1
- package/dist/esm-es5/ion-checkbox.entry.js +1 -1
- package/dist/esm-es5/ion-chip.entry.js +1 -1
- package/dist/esm-es5/ion-col_3.entry.js +1 -1
- package/dist/esm-es5/ion-datetime-button.entry.js +1 -1
- package/dist/esm-es5/ion-datetime_3.entry.js +1 -1
- package/dist/esm-es5/ion-fab_3.entry.js +1 -1
- package/dist/esm-es5/ion-img.entry.js +1 -1
- package/dist/esm-es5/ion-infinite-scroll_2.entry.js +1 -1
- package/dist/esm-es5/ion-input.entry.js +1 -1
- package/dist/esm-es5/ion-item-option_3.entry.js +1 -1
- package/dist/esm-es5/ion-item_8.entry.js +1 -1
- package/dist/esm-es5/ion-loading.entry.js +1 -1
- package/dist/esm-es5/ion-menu_3.entry.js +1 -1
- package/dist/esm-es5/ion-modal.entry.js +1 -1
- package/dist/esm-es5/ion-nav_2.entry.js +1 -1
- package/dist/esm-es5/ion-picker-column-internal.entry.js +1 -1
- package/dist/esm-es5/ion-picker-internal.entry.js +1 -1
- package/dist/esm-es5/ion-popover.entry.js +1 -1
- package/dist/esm-es5/ion-progress-bar.entry.js +1 -1
- package/dist/esm-es5/ion-radio_2.entry.js +1 -1
- package/dist/esm-es5/ion-range.entry.js +1 -1
- package/dist/esm-es5/ion-refresher_2.entry.js +1 -1
- package/dist/esm-es5/ion-reorder_2.entry.js +1 -1
- package/dist/esm-es5/ion-ripple-effect.entry.js +1 -1
- package/dist/esm-es5/ion-route_4.entry.js +1 -1
- package/dist/esm-es5/ion-searchbar.entry.js +1 -1
- package/dist/esm-es5/ion-segment_2.entry.js +1 -1
- package/dist/esm-es5/ion-select_3.entry.js +1 -1
- package/dist/esm-es5/ion-spinner.entry.js +1 -1
- package/dist/esm-es5/ion-split-pane.entry.js +1 -1
- package/dist/esm-es5/ion-tab-bar_2.entry.js +1 -1
- package/dist/esm-es5/ion-tab_2.entry.js +1 -1
- package/dist/esm-es5/ion-text.entry.js +1 -1
- package/dist/esm-es5/ion-textarea.entry.js +1 -1
- package/dist/esm-es5/ion-toast.entry.js +1 -1
- package/dist/esm-es5/ion-toggle.entry.js +1 -1
- package/dist/esm-es5/ionic-global-40e42e7f.js +4 -0
- package/dist/esm-es5/ionic.js +1 -1
- package/dist/esm-es5/ios.transition-1651c430.js +4 -0
- package/dist/esm-es5/keyboard-b551279d.js +1 -1
- package/dist/esm-es5/keyboard-controller-0c2dce71.js +1 -1
- package/dist/esm-es5/loader.js +1 -1
- package/dist/esm-es5/md.transition-66f18369.js +4 -0
- package/dist/esm-es5/notch-controller-8c9c0e54.js +1 -1
- package/dist/esm-es5/overlays-6c9feb7e.js +4 -0
- package/dist/esm-es5/spinner-configs-d09fbbbb.js +1 -1
- package/dist/esm-es5/status-tap-9ce68758.js +4 -0
- package/dist/esm-es5/swipe-back-cd4295f3.js +1 -1
- package/dist/esm-es5/watch-options-02d8498b.js +4 -0
- package/dist/html.html-data.json +1 -1
- package/dist/ionic/index.esm.js +1 -1
- package/dist/ionic/ionic.esm.js +1 -1
- package/dist/ionic/ionic.js +1 -1
- package/dist/ionic/p-0330f0a3.system.entry.js +4 -0
- package/dist/ionic/{p-a7f8dc42.entry.js → p-0492946a.entry.js} +1 -1
- package/dist/ionic/{p-78030c1f.system.entry.js → p-07d9e9cd.system.entry.js} +1 -1
- package/dist/ionic/{p-ced41304.system.js → p-09d142b3.system.js} +1 -1
- package/dist/ionic/{p-fcf47f80.entry.js → p-0a794e83.entry.js} +1 -1
- package/dist/ionic/p-0d8e9393.entry.js +4 -0
- package/dist/ionic/p-0dc0d9b5.entry.js +4 -0
- package/dist/ionic/p-0e23256e.system.entry.js +4 -0
- package/dist/ionic/p-14aca3fb.entry.js +4 -0
- package/dist/ionic/p-14b4348c.system.js +4 -0
- package/dist/ionic/{p-108f9d49.entry.js → p-174f3446.entry.js} +1 -1
- package/dist/ionic/p-18e01b30.system.entry.js +4 -0
- package/dist/ionic/p-1a8ae7a7.system.entry.js +4 -0
- package/dist/ionic/p-1cb5f2f8.system.entry.js +4 -0
- package/dist/ionic/{p-c42c86c0.system.entry.js → p-1d269117.system.entry.js} +1 -1
- package/dist/ionic/{p-0ac3fb2c.entry.js → p-1dc91702.entry.js} +1 -1
- package/dist/ionic/p-1e5165db.system.entry.js +4 -0
- package/dist/ionic/{p-0b00b937.entry.js → p-1e86a71b.entry.js} +1 -1
- package/dist/ionic/p-1f4f0d59.system.entry.js +4 -0
- package/dist/ionic/p-20cf4994.js +4 -0
- package/dist/ionic/p-236063ec.system.entry.js +4 -0
- package/dist/ionic/p-2b89ea1b.system.js +1 -1
- package/dist/ionic/p-2e8e0045.js +4 -0
- package/dist/ionic/{p-ce7d67a7.system.entry.js → p-34d2de14.system.entry.js} +2 -2
- package/dist/ionic/{p-303bf1e8.system.entry.js → p-352c0232.system.entry.js} +2 -2
- package/dist/ionic/p-3602001b.system.js +4 -0
- package/dist/ionic/p-3632220b.system.js +1 -1
- package/dist/ionic/p-377c636c.system.entry.js +4 -0
- package/dist/ionic/{p-f9fa802c.system.entry.js → p-39044fe6.system.entry.js} +2 -2
- package/dist/ionic/{p-38089641.entry.js → p-3ce8c3e3.entry.js} +1 -1
- package/dist/ionic/p-3d7fea9b.system.entry.js +4 -0
- package/dist/ionic/p-3de79805.entry.js +4 -0
- package/dist/ionic/{p-0bbede6a.system.entry.js → p-3fb57e1b.system.entry.js} +1 -1
- package/dist/ionic/{p-5c3e72a8.system.js → p-40903d34.system.js} +1 -1
- package/dist/ionic/p-41122cd6.system.js +4 -0
- package/dist/ionic/p-41477ad9.system.js +1 -1
- package/dist/ionic/p-44bc8b45.system.js +2 -2
- package/dist/ionic/p-4518e4c0.system.entry.js +4 -0
- package/dist/ionic/{p-eab10949.system.entry.js → p-45da1e68.system.entry.js} +1 -1
- package/dist/ionic/p-4794e0ac.system.entry.js +4 -0
- package/dist/ionic/p-479cdbf8.system.js +2 -2
- package/dist/ionic/{p-4e50b8d1.entry.js → p-48d9faa7.entry.js} +1 -1
- package/dist/ionic/{p-8d6728a1.system.entry.js → p-4a142496.system.entry.js} +1 -1
- package/dist/ionic/p-4c80afe1.system.entry.js +4 -0
- package/dist/ionic/p-4cd588b3.system.entry.js +4 -0
- package/dist/ionic/{p-afb6658f.entry.js → p-4dbac22d.entry.js} +1 -1
- package/dist/ionic/p-4e6a1efb.system.entry.js +4 -0
- package/dist/ionic/p-4ecb5692.entry.js +4 -0
- package/dist/ionic/p-5370e786.js +4 -0
- package/dist/ionic/p-55ed230e.system.js +4 -0
- package/dist/ionic/p-56dc022e.system.js +1 -1
- package/dist/ionic/p-5aac9314.system.js +4 -0
- package/dist/ionic/p-5bd4e009.entry.js +4 -0
- package/dist/ionic/{p-6f8a95a3.system.entry.js → p-5cfb3feb.system.entry.js} +2 -2
- package/dist/ionic/{p-181b7c2a.js → p-5d711127.js} +1 -1
- package/dist/ionic/p-5da0eb3e.system.entry.js +4 -0
- package/dist/ionic/p-5deff017.entry.js +4 -0
- package/dist/ionic/p-613d4042.system.js +2 -2
- package/dist/ionic/p-63d519fb.entry.js +4 -0
- package/dist/ionic/{p-8083aadb.entry.js → p-63f08fe3.entry.js} +1 -1
- package/dist/ionic/{p-35b26732.entry.js → p-64296b15.entry.js} +1 -1
- package/dist/ionic/p-64ed03a3.entry.js +4 -0
- package/dist/ionic/p-664d2b07.system.entry.js +4 -0
- package/dist/ionic/p-67aab78f.js +4 -0
- package/dist/ionic/{p-e0f52215.system.entry.js → p-67e18f02.system.entry.js} +1 -1
- package/dist/ionic/{p-572cce26.system.entry.js → p-67ed452a.system.entry.js} +2 -2
- package/dist/ionic/p-67eecef4.system.js +4 -0
- package/dist/ionic/{p-76378400.js → p-6c3d5383.js} +1 -1
- package/dist/ionic/{p-1289b3b5.system.entry.js → p-6e23777e.system.entry.js} +2 -2
- package/dist/ionic/p-702d85d8.system.js +4 -0
- package/dist/ionic/{p-1edb53a1.entry.js → p-7176cea3.entry.js} +1 -1
- package/dist/ionic/p-73411c1b.entry.js +4 -0
- package/dist/ionic/p-73420380.js +4 -0
- package/dist/ionic/{p-6ea2e653.entry.js → p-744973f3.entry.js} +1 -1
- package/dist/ionic/p-772f6c84.system.js +2 -2
- package/dist/ionic/p-77e7a9c8.entry.js +4 -0
- package/dist/ionic/p-7ab6fc5a.system.entry.js +4 -0
- package/dist/ionic/{p-31119a15.entry.js → p-7cee75c0.entry.js} +1 -1
- package/dist/ionic/{p-cf62e1c8.js → p-800ef057.js} +1 -1
- package/dist/ionic/p-815c2fba.system.js +2 -2
- package/dist/ionic/p-819ff3b9.system.js +1 -1
- package/dist/ionic/p-87411e39.system.js +1 -1
- package/dist/ionic/p-8a308596.system.js +4 -0
- package/dist/ionic/{p-3818f63f.entry.js → p-8ad82eb3.entry.js} +1 -1
- package/dist/ionic/{p-c4a5de01.entry.js → p-8b29691f.entry.js} +1 -1
- package/dist/ionic/p-8c15eda7.system.js +2 -2
- package/dist/ionic/p-8e1bded3.entry.js +4 -0
- package/dist/ionic/{p-15decbec.entry.js → p-9209d90c.entry.js} +1 -1
- package/dist/ionic/{p-96ba8eac.entry.js → p-92800752.entry.js} +1 -1
- package/dist/ionic/p-965677f1.entry.js +4 -0
- package/dist/ionic/{p-446230d7.js → p-97c65aa5.js} +1 -1
- package/dist/ionic/p-97e31c0a.system.js +4 -0
- package/dist/ionic/p-9ab6f3e6.system.js +1 -1
- package/dist/ionic/{p-62e7d4fa.js → p-9b89cbde.js} +1 -1
- package/dist/ionic/p-9e852ff1.system.js +1 -1
- package/dist/ionic/p-a0b6d438.js +4 -0
- package/dist/ionic/p-a545b4f1.system.js +4 -0
- package/dist/ionic/p-a5c1e6ce.entry.js +4 -0
- package/dist/ionic/p-a6d83a03.system.entry.js +4 -0
- package/dist/ionic/p-a8e68fd9.entry.js +4 -0
- package/dist/ionic/{p-aa377971.system.js → p-a936d224.system.js} +1 -1
- package/dist/ionic/{p-beb864e4.system.entry.js → p-a9c3699b.system.entry.js} +1 -1
- package/dist/ionic/p-ab4cff27.system.js +1 -1
- package/dist/ionic/{p-012952cd.system.entry.js → p-abacb44b.system.entry.js} +2 -2
- package/dist/ionic/{p-1f81b5be.entry.js → p-af016cd3.entry.js} +1 -1
- package/dist/ionic/{p-a9c32660.entry.js → p-b0cee324.entry.js} +1 -1
- package/dist/ionic/{p-f4309ac7.entry.js → p-b1142133.entry.js} +1 -1
- package/dist/ionic/p-b17b7c3c.system.entry.js +4 -0
- package/dist/ionic/p-b203659a.system.entry.js +4 -0
- package/dist/ionic/{p-c679fcb5.entry.js → p-b2a74a72.entry.js} +1 -1
- package/dist/ionic/p-b4b4bb29.system.js +1 -1
- package/dist/ionic/p-b6f8ee31.entry.js +4 -0
- package/dist/ionic/p-b8c3f071.system.js +1 -1
- package/dist/ionic/p-b906c5ca.entry.js +4 -0
- package/dist/ionic/p-b912e055.system.js +1 -1
- package/dist/ionic/{p-e42aaa8b.entry.js → p-b91fe549.entry.js} +1 -1
- package/dist/ionic/p-bba2ce59.system.js +1 -1
- package/dist/ionic/p-beb64be7.system.entry.js +4 -0
- package/dist/ionic/p-bed722c4.system.entry.js +4 -0
- package/dist/ionic/p-c0c81820.system.js +4 -0
- package/dist/ionic/p-c224b9a9.js +5 -0
- package/dist/ionic/p-c4042875.system.js +4 -0
- package/dist/ionic/p-c4f2dce7.system.js +1 -1
- package/dist/ionic/{p-6f6646bf.system.entry.js → p-c7b8c2ef.system.entry.js} +1 -1
- package/dist/ionic/{p-1ecba429.entry.js → p-c7d30db9.entry.js} +1 -1
- package/dist/ionic/{p-db1a1e00.entry.js → p-c919498d.entry.js} +1 -1
- package/dist/ionic/{p-54200074.entry.js → p-ca5219df.entry.js} +1 -1
- package/dist/ionic/p-ccdcb022.system.js +1 -1
- package/dist/ionic/p-cf425ec5.system.entry.js +4 -0
- package/dist/ionic/p-d2597b3e.system.js +5 -0
- package/dist/ionic/p-d3952bd5.system.entry.js +4 -0
- package/dist/ionic/{p-8c1805f4.system.entry.js → p-d7ea6a0d.system.entry.js} +1 -1
- package/dist/ionic/p-db5043df.system.entry.js +4 -0
- package/dist/ionic/p-dfa756ed.system.js +4 -0
- package/dist/ionic/{p-28ea45b9.js → p-e6b240a0.js} +1 -1
- package/dist/ionic/{p-cabd2c6d.entry.js → p-e76a4bc8.entry.js} +1 -1
- package/dist/ionic/{p-cf0c93e3.system.entry.js → p-e8400078.system.entry.js} +2 -2
- package/dist/ionic/{p-4e6e43c1.entry.js → p-ed636a74.entry.js} +1 -1
- package/dist/ionic/p-f10de93b.js +4 -0
- package/dist/ionic/{p-f919c026.entry.js → p-f4cc91f6.entry.js} +1 -1
- package/dist/ionic/p-f5a750e4.system.entry.js +4 -0
- package/dist/ionic/p-f8e620f1.entry.js +4 -0
- package/dist/ionic/p-fa8d4788.system.js +1 -1
- package/dist/ionic/{p-8a2801f1.system.entry.js → p-ff5144f3.system.entry.js} +1 -1
- package/dist/ionic/p-ff5a10f9.system.js +2 -2
- package/dist/ionic/{p-6129af0a.system.entry.js → p-ffb876b0.system.entry.js} +1 -1
- package/dist/types/components/datetime/datetime.d.ts +1 -1
- package/dist/types/components/menu/menu-interface.d.ts +15 -4
- package/dist/types/components/radio/radio.d.ts +1 -1
- package/dist/types/components.d.ts +627 -3
- package/dist/types/stencil-public-runtime.d.ts +21 -0
- package/dist/types/utils/content/index.d.ts +1 -1
- package/dist/types/utils/focus-visible.d.ts +3 -2
- package/dist/types/utils/menu-controller/index.d.ts +2 -21
- package/dist/types/utils/test/platform.utils.d.ts +9 -9
- package/dist/types/utils/watch-options.d.ts +9 -1
- package/hydrate/index.d.ts +1 -1
- package/hydrate/index.js +567 -238
- package/package.json +11 -14
- package/dist/esm-es5/animation-92066c62.js +0 -4
- package/dist/esm-es5/app-globals-ec816a70.js +0 -4
- package/dist/esm-es5/form-controller-ed77647a.js +0 -4
- package/dist/esm-es5/index-746a238e.js +0 -4
- package/dist/esm-es5/index-7d2b2808.js +0 -4
- package/dist/esm-es5/index-b49b173c.js +0 -5
- package/dist/esm-es5/index-df55802d.js +0 -4
- package/dist/esm-es5/input-shims-d78a3c77.js +0 -4
- package/dist/esm-es5/ionic-global-246ca78f.js +0 -4
- package/dist/esm-es5/ios.transition-a86d7bbe.js +0 -4
- package/dist/esm-es5/md.transition-365ef6b6.js +0 -4
- package/dist/esm-es5/overlays-cec6bac8.js +0 -4
- package/dist/esm-es5/status-tap-9aeeaca5.js +0 -4
- package/dist/esm-es5/watch-options-355a920a.js +0 -4
- package/dist/ionic/p-015187e5.system.js +0 -4
- package/dist/ionic/p-06ac429a.js +0 -5
- package/dist/ionic/p-0b7c25ee.system.entry.js +0 -4
- package/dist/ionic/p-0f1f59da.system.entry.js +0 -4
- package/dist/ionic/p-128a98e8.system.js +0 -4
- package/dist/ionic/p-16e44585.js +0 -4
- package/dist/ionic/p-19fba51c.entry.js +0 -4
- package/dist/ionic/p-1a463b1e.system.entry.js +0 -4
- package/dist/ionic/p-1f260a7b.entry.js +0 -4
- package/dist/ionic/p-29073efe.system.entry.js +0 -4
- package/dist/ionic/p-2bbf3ac4.system.entry.js +0 -4
- package/dist/ionic/p-33a8349a.system.entry.js +0 -4
- package/dist/ionic/p-34259245.system.entry.js +0 -4
- package/dist/ionic/p-35e399bd.entry.js +0 -4
- package/dist/ionic/p-38c5fe2b.system.entry.js +0 -4
- package/dist/ionic/p-3a58e3a4.system.entry.js +0 -4
- package/dist/ionic/p-3d726a67.system.js +0 -4
- package/dist/ionic/p-3f3da911.system.entry.js +0 -4
- package/dist/ionic/p-4215652f.system.entry.js +0 -4
- package/dist/ionic/p-4f97c112.entry.js +0 -4
- package/dist/ionic/p-54f6cd27.system.entry.js +0 -4
- package/dist/ionic/p-5b976d70.entry.js +0 -4
- package/dist/ionic/p-5bf16a18.js +0 -4
- package/dist/ionic/p-629aa3fd.system.js +0 -5
- package/dist/ionic/p-64475ab5.system.js +0 -4
- package/dist/ionic/p-673846f6.entry.js +0 -4
- package/dist/ionic/p-6ce0a709.system.entry.js +0 -4
- package/dist/ionic/p-818b2e75.entry.js +0 -4
- package/dist/ionic/p-81ef7437.system.entry.js +0 -4
- package/dist/ionic/p-8e24ebbc.js +0 -4
- package/dist/ionic/p-8f01a9a2.system.js +0 -4
- package/dist/ionic/p-939e0fa1.system.js +0 -4
- package/dist/ionic/p-95817276.system.entry.js +0 -4
- package/dist/ionic/p-9b9dcc3e.system.entry.js +0 -4
- package/dist/ionic/p-9dc85536.system.entry.js +0 -4
- package/dist/ionic/p-9f2e0db9.js +0 -4
- package/dist/ionic/p-a04bfada.entry.js +0 -4
- package/dist/ionic/p-a164e3ab.system.entry.js +0 -4
- package/dist/ionic/p-a200a7fc.entry.js +0 -4
- package/dist/ionic/p-a34fc12e.system.entry.js +0 -4
- package/dist/ionic/p-ad48dd13.system.js +0 -4
- package/dist/ionic/p-b132c2c0.system.js +0 -4
- package/dist/ionic/p-b3c68723.system.js +0 -4
- package/dist/ionic/p-b61a2fa0.system.entry.js +0 -4
- package/dist/ionic/p-b753ec0d.system.entry.js +0 -4
- package/dist/ionic/p-b9047b05.system.js +0 -4
- package/dist/ionic/p-c05315f5.system.entry.js +0 -4
- package/dist/ionic/p-c105bd36.entry.js +0 -4
- package/dist/ionic/p-c49672d8.system.js +0 -4
- package/dist/ionic/p-c87827ca.system.js +0 -4
- package/dist/ionic/p-c8c9d699.system.entry.js +0 -4
- package/dist/ionic/p-c92f0a6d.system.entry.js +0 -4
- package/dist/ionic/p-c956e82c.system.entry.js +0 -4
- package/dist/ionic/p-c994fff0.system.js +0 -4
- package/dist/ionic/p-ca5cf574.js +0 -4
- package/dist/ionic/p-cd2d17c3.system.entry.js +0 -4
- package/dist/ionic/p-d35217be.entry.js +0 -4
- package/dist/ionic/p-d6e53e66.entry.js +0 -4
- package/dist/ionic/p-e1d5752d.system.entry.js +0 -4
- package/dist/ionic/p-e2bb634f.js +0 -4
- package/dist/ionic/p-e38a5f77.js +0 -4
- package/dist/ionic/p-e65ebe96.entry.js +0 -4
- package/dist/ionic/p-e74faf2a.entry.js +0 -4
- package/dist/ionic/p-eac263dd.entry.js +0 -4
- package/dist/ionic/p-f34f001c.entry.js +0 -4
- package/dist/ionic/p-f5bf698b.entry.js +0 -4
- package/dist/ionic/p-f7566bad.entry.js +0 -4
- /package/dist/ionic/{p-b24aa895.js → p-114a36ed.js} +0 -0
|
@@ -122,12 +122,45 @@
|
|
|
122
122
|
overscroll-behavior-y: contain;
|
|
123
123
|
}
|
|
124
124
|
|
|
125
|
-
.alert-checkbox-
|
|
126
|
-
.alert-radio-
|
|
127
|
-
|
|
128
|
-
|
|
125
|
+
.alert-checkbox-label,
|
|
126
|
+
.alert-radio-label {
|
|
127
|
+
/**
|
|
128
|
+
* This allows long words to wrap to the next line
|
|
129
|
+
* instead of flowing outside of the container.
|
|
130
|
+
*
|
|
131
|
+
* The "anywhere" keyword should be used instead
|
|
132
|
+
* of the "break-word" keyword since the parent
|
|
133
|
+
* container is using flexbox. Flex relies on min-content and
|
|
134
|
+
* max-content intrinsic sizes to structure the layout. Flex will
|
|
135
|
+
* wrap content only until it reaches its min-content intrinsic size
|
|
136
|
+
* which in this case is equal to the longest word in this container.
|
|
137
|
+
* "break-word" does not shrink the min-content intrinsic size
|
|
138
|
+
* of the flex item which causes the long word to still overflow.
|
|
139
|
+
* "anywhere" on the other hand does shrink the min-content
|
|
140
|
+
* intrinsic size which allows the long word to wrap to the next line.
|
|
141
|
+
*/
|
|
142
|
+
overflow-wrap: anywhere;
|
|
129
143
|
}
|
|
130
144
|
|
|
145
|
+
/**
|
|
146
|
+
* Scrollbars on mobile devices will be hidden.
|
|
147
|
+
* Users can still scroll the content by swiping.
|
|
148
|
+
* If a user has a fine pointing device, such as a
|
|
149
|
+
* mouse or trackpad, then scrollbars will be
|
|
150
|
+
* visible. This allows users to scroll the
|
|
151
|
+
* content with their pointing device.
|
|
152
|
+
* Otherwise, the user would have to use the
|
|
153
|
+
* keyboard to navigate through the options.
|
|
154
|
+
* This may not be intuitive for users who
|
|
155
|
+
* are not familiar with keyboard navigation.
|
|
156
|
+
*/
|
|
157
|
+
@media (any-pointer: coarse) {
|
|
158
|
+
.alert-checkbox-group::-webkit-scrollbar,
|
|
159
|
+
.alert-radio-group::-webkit-scrollbar,
|
|
160
|
+
.alert-message::-webkit-scrollbar {
|
|
161
|
+
display: none;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
131
164
|
.alert-input {
|
|
132
165
|
padding-left: 0;
|
|
133
166
|
padding-right: 0;
|
|
@@ -19,6 +19,54 @@ const testAria = async (page, buttonID, expectedAriaLabelledBy, expectedAriaDesc
|
|
|
19
19
|
expect(ariaLabelledBy).toBe(expectedAriaLabelledBy);
|
|
20
20
|
expect(ariaDescribedBy).toBe(expectedAriaDescribedBy);
|
|
21
21
|
};
|
|
22
|
+
configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
|
|
23
|
+
test.describe(title('alert: text wrapping'), () => {
|
|
24
|
+
test('should break on words and white spaces for radios', async ({ page }, testInfo) => {
|
|
25
|
+
testInfo.annotations.push({
|
|
26
|
+
type: 'issue',
|
|
27
|
+
description: 'https://github.com/ionic-team/ionic-framework/issues/28406',
|
|
28
|
+
});
|
|
29
|
+
await page.setContent(`
|
|
30
|
+
<ion-alert header='Text Wrapping'></ion-alert>
|
|
31
|
+
|
|
32
|
+
<script>
|
|
33
|
+
const alert = document.querySelector('ion-alert');
|
|
34
|
+
alert.inputs = [
|
|
35
|
+
{ type: 'radio', value: 'a', label: 'ThisIsAllOneReallyLongWordThatShouldWrap' },
|
|
36
|
+
{ type: 'radio', value: 'b', label: 'These are separate words that should wrap' }
|
|
37
|
+
];
|
|
38
|
+
</script>
|
|
39
|
+
`, config);
|
|
40
|
+
const ionAlertDidPresent = await page.spyOnEvent('ionAlertDidPresent');
|
|
41
|
+
const alert = page.locator('ion-alert');
|
|
42
|
+
await alert.evaluate((el) => el.present());
|
|
43
|
+
await ionAlertDidPresent.next();
|
|
44
|
+
await expect(page).toHaveScreenshot(screenshot(`alert-radio-text-wrap`));
|
|
45
|
+
});
|
|
46
|
+
test('should break on words and white spaces for checkboxes', async ({ page }, testInfo) => {
|
|
47
|
+
testInfo.annotations.push({
|
|
48
|
+
type: 'issue',
|
|
49
|
+
description: 'https://github.com/ionic-team/ionic-framework/issues/28406',
|
|
50
|
+
});
|
|
51
|
+
await page.setContent(`
|
|
52
|
+
<ion-alert header='Text Wrapping'></ion-alert>
|
|
53
|
+
|
|
54
|
+
<script>
|
|
55
|
+
const alert = document.querySelector('ion-alert');
|
|
56
|
+
alert.inputs = [
|
|
57
|
+
{ type: 'checkbox', value: 'a', label: 'ThisIsAllOneReallyLongWordThatShouldWrap' },
|
|
58
|
+
{ type: 'checkbox', value: 'b', label: 'These are separate words that should wrap' }
|
|
59
|
+
];
|
|
60
|
+
</script>
|
|
61
|
+
`, config);
|
|
62
|
+
const ionAlertDidPresent = await page.spyOnEvent('ionAlertDidPresent');
|
|
63
|
+
const alert = page.locator('ion-alert');
|
|
64
|
+
await alert.evaluate((el) => el.present());
|
|
65
|
+
await ionAlertDidPresent.next();
|
|
66
|
+
await expect(page).toHaveScreenshot(screenshot(`alert-checkbox-text-wrap`));
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
});
|
|
22
70
|
configs({ directions: ['ltr'] }).forEach(({ config, title }) => {
|
|
23
71
|
test.describe(title('alert: a11y'), () => {
|
|
24
72
|
test.beforeEach(async ({ page }) => {
|
|
@@ -121,7 +121,7 @@
|
|
|
121
121
|
right: 0;
|
|
122
122
|
}
|
|
123
123
|
@supports selector(:dir(rtl)) {
|
|
124
|
-
:host(.legacy-checkbox
|
|
124
|
+
:host(.legacy-checkbox:dir(rtl)) label {
|
|
125
125
|
left: unset;
|
|
126
126
|
right: unset;
|
|
127
127
|
right: 0;
|
|
@@ -343,7 +343,7 @@ input {
|
|
|
343
343
|
}
|
|
344
344
|
|
|
345
345
|
@supports selector(:dir(rtl)) {
|
|
346
|
-
:host(.checkbox-label-placement-stacked.checkbox-alignment-start) .label-text-wrapper
|
|
346
|
+
:host(.checkbox-label-placement-stacked.checkbox-alignment-start:dir(rtl)) .label-text-wrapper {
|
|
347
347
|
transform-origin: right top;
|
|
348
348
|
}
|
|
349
349
|
}
|
|
@@ -356,7 +356,7 @@ input {
|
|
|
356
356
|
}
|
|
357
357
|
|
|
358
358
|
@supports selector(:dir(rtl)) {
|
|
359
|
-
:host(.checkbox-label-placement-stacked.checkbox-alignment-center) .label-text-wrapper
|
|
359
|
+
:host(.checkbox-label-placement-stacked.checkbox-alignment-center:dir(rtl)) .label-text-wrapper {
|
|
360
360
|
transform-origin: calc(100% - center) top;
|
|
361
361
|
}
|
|
362
362
|
}
|
|
@@ -121,7 +121,7 @@
|
|
|
121
121
|
right: 0;
|
|
122
122
|
}
|
|
123
123
|
@supports selector(:dir(rtl)) {
|
|
124
|
-
:host(.legacy-checkbox
|
|
124
|
+
:host(.legacy-checkbox:dir(rtl)) label {
|
|
125
125
|
left: unset;
|
|
126
126
|
right: unset;
|
|
127
127
|
right: 0;
|
|
@@ -343,7 +343,7 @@ input {
|
|
|
343
343
|
}
|
|
344
344
|
|
|
345
345
|
@supports selector(:dir(rtl)) {
|
|
346
|
-
:host(.checkbox-label-placement-stacked.checkbox-alignment-start) .label-text-wrapper
|
|
346
|
+
:host(.checkbox-label-placement-stacked.checkbox-alignment-start:dir(rtl)) .label-text-wrapper {
|
|
347
347
|
transform-origin: right top;
|
|
348
348
|
}
|
|
349
349
|
}
|
|
@@ -356,7 +356,7 @@ input {
|
|
|
356
356
|
}
|
|
357
357
|
|
|
358
358
|
@supports selector(:dir(rtl)) {
|
|
359
|
-
:host(.checkbox-label-placement-stacked.checkbox-alignment-center) .label-text-wrapper
|
|
359
|
+
:host(.checkbox-label-placement-stacked.checkbox-alignment-center:dir(rtl)) .label-text-wrapper {
|
|
360
360
|
transform-origin: calc(100% - center) top;
|
|
361
361
|
}
|
|
362
362
|
}
|
|
@@ -196,7 +196,7 @@ ion-picker-column-internal {
|
|
|
196
196
|
right: -99999px;
|
|
197
197
|
}
|
|
198
198
|
@supports selector(:dir(rtl)) {
|
|
199
|
-
:host(.show-month-and-year) .calendar-next-prev
|
|
199
|
+
:host(.show-month-and-year:dir(rtl)) .calendar-next-prev, :host(.show-month-and-year:dir(rtl)) .calendar-days-of-week, :host(.show-month-and-year:dir(rtl)) .calendar-body, :host(.show-month-and-year:dir(rtl)) .datetime-time {
|
|
200
200
|
left: unset;
|
|
201
201
|
right: unset;
|
|
202
202
|
right: -99999px;
|
|
@@ -224,15 +224,35 @@ ion-picker-column-internal {
|
|
|
224
224
|
display: none;
|
|
225
225
|
}
|
|
226
226
|
|
|
227
|
-
:host(.datetime-readonly),
|
|
228
227
|
:host(.datetime-disabled) {
|
|
229
228
|
pointer-events: none;
|
|
230
229
|
}
|
|
231
|
-
|
|
232
|
-
:host(.datetime-disabled) {
|
|
230
|
+
:host(.datetime-disabled) .calendar-days-of-week,
|
|
231
|
+
:host(.datetime-disabled) .datetime-time {
|
|
233
232
|
opacity: 0.4;
|
|
234
233
|
}
|
|
235
234
|
|
|
235
|
+
:host(.datetime-readonly) {
|
|
236
|
+
pointer-events: none;
|
|
237
|
+
/**
|
|
238
|
+
* Allow user to navigate months
|
|
239
|
+
* while in readonly mode
|
|
240
|
+
*/
|
|
241
|
+
/**
|
|
242
|
+
* Disabled buttons should have full opacity
|
|
243
|
+
* in readonly mode
|
|
244
|
+
*/
|
|
245
|
+
}
|
|
246
|
+
:host(.datetime-readonly) .calendar-action-buttons,
|
|
247
|
+
:host(.datetime-readonly) .calendar-body,
|
|
248
|
+
:host(.datetime-readonly) .datetime-year {
|
|
249
|
+
pointer-events: initial;
|
|
250
|
+
}
|
|
251
|
+
:host(.datetime-readonly) .calendar-day[disabled]:not(.calendar-day-constrained),
|
|
252
|
+
:host(.datetime-readonly) .datetime-action-buttons ion-button[disabled] {
|
|
253
|
+
opacity: 1;
|
|
254
|
+
}
|
|
255
|
+
|
|
236
256
|
/**
|
|
237
257
|
* Title should not wrap
|
|
238
258
|
* to the next line and should
|
|
@@ -94,6 +94,13 @@ export class Datetime {
|
|
|
94
94
|
this.workingParts = Object.assign({}, parts);
|
|
95
95
|
};
|
|
96
96
|
this.setActiveParts = (parts, removeDate = false) => {
|
|
97
|
+
/** if the datetime component is in readonly mode,
|
|
98
|
+
* allow browsing of the calendar without changing
|
|
99
|
+
* the set value
|
|
100
|
+
*/
|
|
101
|
+
if (this.readonly) {
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
97
104
|
const { multiple, minParts, maxParts, activeParts } = this;
|
|
98
105
|
/**
|
|
99
106
|
* When setting the active parts, it is possible
|
|
@@ -914,7 +921,13 @@ export class Datetime {
|
|
|
914
921
|
* are rendered independently of presentation.
|
|
915
922
|
*/
|
|
916
923
|
renderFooter() {
|
|
917
|
-
const { showDefaultButtons, showClearButton } = this;
|
|
924
|
+
const { disabled, readonly, showDefaultButtons, showClearButton } = this;
|
|
925
|
+
/**
|
|
926
|
+
* The cancel, clear, and confirm buttons
|
|
927
|
+
* should not be interactive if the datetime
|
|
928
|
+
* is disabled or readonly.
|
|
929
|
+
*/
|
|
930
|
+
const isButtonDisabled = disabled || readonly;
|
|
918
931
|
const hasSlottedButtons = this.el.querySelector('[slot="buttons"]') !== null;
|
|
919
932
|
if (!hasSlottedButtons && !showDefaultButtons && !showClearButton) {
|
|
920
933
|
return;
|
|
@@ -933,7 +946,7 @@ export class Datetime {
|
|
|
933
946
|
return (h("div", { class: "datetime-footer" }, h("div", { class: "datetime-buttons" }, h("div", { class: {
|
|
934
947
|
['datetime-action-buttons']: true,
|
|
935
948
|
['has-clear-button']: this.showClearButton,
|
|
936
|
-
} }, h("slot", { name: "buttons" }, h("ion-buttons", null, showDefaultButtons && (h("ion-button", { id: "cancel-button", color: this.color, onClick: () => this.cancel(true) }, this.cancelText)), h("div", { class: "datetime-action-buttons-container" }, showClearButton && (h("ion-button", { id: "clear-button", color: this.color, onClick: () => clearButtonClick() }, this.clearText)), showDefaultButtons && (h("ion-button", { id: "confirm-button", color: this.color, onClick: () => this.confirm(true) }, this.doneText)))))))));
|
|
949
|
+
} }, h("slot", { name: "buttons" }, h("ion-buttons", null, showDefaultButtons && (h("ion-button", { id: "cancel-button", color: this.color, onClick: () => this.cancel(true), disabled: isButtonDisabled }, this.cancelText)), h("div", { class: "datetime-action-buttons-container" }, showClearButton && (h("ion-button", { id: "clear-button", color: this.color, onClick: () => clearButtonClick(), disabled: isButtonDisabled }, this.clearText)), showDefaultButtons && (h("ion-button", { id: "confirm-button", color: this.color, onClick: () => this.confirm(true), disabled: isButtonDisabled }, this.doneText)))))))));
|
|
937
950
|
}
|
|
938
951
|
/**
|
|
939
952
|
* Wheel picker render methods
|
|
@@ -1224,13 +1237,14 @@ export class Datetime {
|
|
|
1224
1237
|
* Grid Render Methods
|
|
1225
1238
|
*/
|
|
1226
1239
|
renderCalendarHeader(mode) {
|
|
1240
|
+
const { disabled } = this;
|
|
1227
1241
|
const expandedIcon = mode === 'ios' ? chevronDown : caretUpSharp;
|
|
1228
1242
|
const collapsedIcon = mode === 'ios' ? chevronForward : caretDownSharp;
|
|
1229
|
-
const prevMonthDisabled = isPrevMonthDisabled(this.workingParts, this.minParts, this.maxParts);
|
|
1230
|
-
const nextMonthDisabled = isNextMonthDisabled(this.workingParts, this.maxParts);
|
|
1243
|
+
const prevMonthDisabled = disabled || isPrevMonthDisabled(this.workingParts, this.minParts, this.maxParts);
|
|
1244
|
+
const nextMonthDisabled = disabled || isNextMonthDisabled(this.workingParts, this.maxParts);
|
|
1231
1245
|
// don't use the inheritAttributes util because it removes dir from the host, and we still need that
|
|
1232
1246
|
const hostDir = this.el.getAttribute('dir') || undefined;
|
|
1233
|
-
return (h("div", { class: "calendar-header" }, h("div", { class: "calendar-action-buttons" }, h("div", { class: "calendar-month-year" }, h("ion-item", { part: "month-year-button", ref: (el) => (this.monthYearToggleItemRef = el), button: true, "aria-label": "Show year picker", detail: false, lines: "none", onClick: () => {
|
|
1247
|
+
return (h("div", { class: "calendar-header" }, h("div", { class: "calendar-action-buttons" }, h("div", { class: "calendar-month-year" }, h("ion-item", { part: "month-year-button", ref: (el) => (this.monthYearToggleItemRef = el), button: true, "aria-label": "Show year picker", detail: false, lines: "none", disabled: disabled, onClick: () => {
|
|
1234
1248
|
var _a;
|
|
1235
1249
|
this.toggleMonthAndYearView();
|
|
1236
1250
|
/**
|
|
@@ -1254,20 +1268,23 @@ export class Datetime {
|
|
|
1254
1268
|
}))));
|
|
1255
1269
|
}
|
|
1256
1270
|
renderMonth(month, year) {
|
|
1271
|
+
const { disabled, readonly } = this;
|
|
1257
1272
|
const yearAllowed = this.parsedYearValues === undefined || this.parsedYearValues.includes(year);
|
|
1258
1273
|
const monthAllowed = this.parsedMonthValues === undefined || this.parsedMonthValues.includes(month);
|
|
1259
1274
|
const isCalMonthDisabled = !yearAllowed || !monthAllowed;
|
|
1260
|
-
const
|
|
1261
|
-
|
|
1262
|
-
|
|
1263
|
-
|
|
1264
|
-
|
|
1265
|
-
|
|
1266
|
-
|
|
1267
|
-
|
|
1268
|
-
|
|
1269
|
-
|
|
1270
|
-
|
|
1275
|
+
const isDatetimeDisabled = disabled || readonly;
|
|
1276
|
+
const swipeDisabled = disabled ||
|
|
1277
|
+
isMonthDisabled({
|
|
1278
|
+
month,
|
|
1279
|
+
year,
|
|
1280
|
+
day: null,
|
|
1281
|
+
}, {
|
|
1282
|
+
// The day is not used when checking if a month is disabled.
|
|
1283
|
+
// Users should be able to access the min or max month, even if the
|
|
1284
|
+
// min/max date is out of bounds (e.g. min is set to Feb 15, Feb should not be disabled).
|
|
1285
|
+
minParts: Object.assign(Object.assign({}, this.minParts), { day: null }),
|
|
1286
|
+
maxParts: Object.assign(Object.assign({}, this.maxParts), { day: null }),
|
|
1287
|
+
});
|
|
1271
1288
|
// The working month should never have swipe disabled.
|
|
1272
1289
|
// Otherwise the CSS scroll snap will not work and the user
|
|
1273
1290
|
// can free-scroll the calendar.
|
|
@@ -1282,9 +1299,9 @@ export class Datetime {
|
|
|
1282
1299
|
const { el, highlightedDates, isDateEnabled, multiple } = this;
|
|
1283
1300
|
const referenceParts = { month, day, year };
|
|
1284
1301
|
const isCalendarPadding = day === null;
|
|
1285
|
-
const { isActive, isToday, ariaLabel, ariaSelected, disabled, text } = getCalendarDayState(this.locale, referenceParts, this.activeParts, this.todayParts, this.minParts, this.maxParts, this.parsedDayValues);
|
|
1302
|
+
const { isActive, isToday, ariaLabel, ariaSelected, disabled: isDayDisabled, text, } = getCalendarDayState(this.locale, referenceParts, this.activeParts, this.todayParts, this.minParts, this.maxParts, this.parsedDayValues);
|
|
1286
1303
|
const dateIsoString = convertDataToISO(referenceParts);
|
|
1287
|
-
let isCalDayDisabled = isCalMonthDisabled ||
|
|
1304
|
+
let isCalDayDisabled = isCalMonthDisabled || isDayDisabled;
|
|
1288
1305
|
if (!isCalDayDisabled && isDateEnabled !== undefined) {
|
|
1289
1306
|
try {
|
|
1290
1307
|
/**
|
|
@@ -1298,6 +1315,13 @@ export class Datetime {
|
|
|
1298
1315
|
printIonError('Exception thrown from provided `isDateEnabled` function. Please check your function and try again.', el, e);
|
|
1299
1316
|
}
|
|
1300
1317
|
}
|
|
1318
|
+
/**
|
|
1319
|
+
* Some days are constrained through max & min or allowed dates
|
|
1320
|
+
* and also disabled because the component is readonly or disabled.
|
|
1321
|
+
* These need to be displayed differently.
|
|
1322
|
+
*/
|
|
1323
|
+
const isCalDayConstrained = isCalDayDisabled && isDatetimeDisabled;
|
|
1324
|
+
const isButtonDisabled = isCalDayDisabled || isDatetimeDisabled;
|
|
1301
1325
|
let dateStyle = undefined;
|
|
1302
1326
|
/**
|
|
1303
1327
|
* Custom highlight styles should not override the style for selected dates,
|
|
@@ -1324,10 +1348,11 @@ export class Datetime {
|
|
|
1324
1348
|
el.style.setProperty('color', `${dateStyle ? dateStyle.textColor : ''}`, 'important');
|
|
1325
1349
|
el.style.setProperty('background-color', `${dateStyle ? dateStyle.backgroundColor : ''}`, 'important');
|
|
1326
1350
|
}
|
|
1327
|
-
}, tabindex: "-1", "data-day": day, "data-month": month, "data-year": year, "data-index": index, "data-day-of-week": dayOfWeek, disabled:
|
|
1351
|
+
}, tabindex: "-1", "data-day": day, "data-month": month, "data-year": year, "data-index": index, "data-day-of-week": dayOfWeek, disabled: isButtonDisabled, class: {
|
|
1328
1352
|
'calendar-day-padding': isCalendarPadding,
|
|
1329
1353
|
'calendar-day': true,
|
|
1330
1354
|
'calendar-day-active': isActive,
|
|
1355
|
+
'calendar-day-constrained': isCalDayConstrained,
|
|
1331
1356
|
'calendar-day-today': isToday,
|
|
1332
1357
|
}, part: dateParts, "aria-hidden": isCalendarPadding ? 'true' : null, "aria-selected": ariaSelected, "aria-label": ariaLabel, onClick: () => {
|
|
1333
1358
|
if (isCalendarPadding) {
|
|
@@ -1369,7 +1394,7 @@ export class Datetime {
|
|
|
1369
1394
|
return h("slot", { name: "time-label" }, "Time");
|
|
1370
1395
|
}
|
|
1371
1396
|
renderTimeOverlay() {
|
|
1372
|
-
const { hourCycle, isTimePopoverOpen, locale } = this;
|
|
1397
|
+
const { disabled, hourCycle, isTimePopoverOpen, locale } = this;
|
|
1373
1398
|
const computedHourCycle = getHourCycle(locale, hourCycle);
|
|
1374
1399
|
const activePart = this.getActivePartsWithFallback();
|
|
1375
1400
|
return [
|
|
@@ -1377,7 +1402,7 @@ export class Datetime {
|
|
|
1377
1402
|
h("button", { class: {
|
|
1378
1403
|
'time-body': true,
|
|
1379
1404
|
'time-body-active': isTimePopoverOpen,
|
|
1380
|
-
}, part: `time-button${isTimePopoverOpen ? ' active' : ''}`, "aria-expanded": "false", "aria-haspopup": "true", onClick: async (ev) => {
|
|
1405
|
+
}, part: `time-button${isTimePopoverOpen ? ' active' : ''}`, "aria-expanded": "false", "aria-haspopup": "true", disabled: disabled, onClick: async (ev) => {
|
|
1381
1406
|
const { popoverRef } = this;
|
|
1382
1407
|
if (popoverRef) {
|
|
1383
1408
|
this.isTimePopoverOpen = true;
|
|
@@ -1617,7 +1642,7 @@ export class Datetime {
|
|
|
1617
1642
|
"optional": false,
|
|
1618
1643
|
"docs": {
|
|
1619
1644
|
"tags": [],
|
|
1620
|
-
"text": "If `true`, the datetime appears normal but
|
|
1645
|
+
"text": "If `true`, the datetime appears normal but the selected date cannot be changed."
|
|
1621
1646
|
},
|
|
1622
1647
|
"attribute": "readonly",
|
|
1623
1648
|
"reflect": false,
|
|
@@ -196,7 +196,7 @@ ion-picker-column-internal {
|
|
|
196
196
|
right: -99999px;
|
|
197
197
|
}
|
|
198
198
|
@supports selector(:dir(rtl)) {
|
|
199
|
-
:host(.show-month-and-year) .calendar-next-prev
|
|
199
|
+
:host(.show-month-and-year:dir(rtl)) .calendar-next-prev, :host(.show-month-and-year:dir(rtl)) .calendar-days-of-week, :host(.show-month-and-year:dir(rtl)) .calendar-body, :host(.show-month-and-year:dir(rtl)) .datetime-time {
|
|
200
200
|
left: unset;
|
|
201
201
|
right: unset;
|
|
202
202
|
right: -99999px;
|
|
@@ -224,15 +224,35 @@ ion-picker-column-internal {
|
|
|
224
224
|
display: none;
|
|
225
225
|
}
|
|
226
226
|
|
|
227
|
-
:host(.datetime-readonly),
|
|
228
227
|
:host(.datetime-disabled) {
|
|
229
228
|
pointer-events: none;
|
|
230
229
|
}
|
|
231
|
-
|
|
232
|
-
:host(.datetime-disabled) {
|
|
230
|
+
:host(.datetime-disabled) .calendar-days-of-week,
|
|
231
|
+
:host(.datetime-disabled) .datetime-time {
|
|
233
232
|
opacity: 0.4;
|
|
234
233
|
}
|
|
235
234
|
|
|
235
|
+
:host(.datetime-readonly) {
|
|
236
|
+
pointer-events: none;
|
|
237
|
+
/**
|
|
238
|
+
* Allow user to navigate months
|
|
239
|
+
* while in readonly mode
|
|
240
|
+
*/
|
|
241
|
+
/**
|
|
242
|
+
* Disabled buttons should have full opacity
|
|
243
|
+
* in readonly mode
|
|
244
|
+
*/
|
|
245
|
+
}
|
|
246
|
+
:host(.datetime-readonly) .calendar-action-buttons,
|
|
247
|
+
:host(.datetime-readonly) .calendar-body,
|
|
248
|
+
:host(.datetime-readonly) .datetime-year {
|
|
249
|
+
pointer-events: initial;
|
|
250
|
+
}
|
|
251
|
+
:host(.datetime-readonly) .calendar-day[disabled]:not(.calendar-day-constrained),
|
|
252
|
+
:host(.datetime-readonly) .datetime-action-buttons ion-button[disabled] {
|
|
253
|
+
opacity: 1;
|
|
254
|
+
}
|
|
255
|
+
|
|
236
256
|
/**
|
|
237
257
|
* Title should not wrap
|
|
238
258
|
* to the next line and should
|
|
@@ -638,8 +658,4 @@ ion-picker-column-internal {
|
|
|
638
658
|
display: flex;
|
|
639
659
|
align-items: center;
|
|
640
660
|
justify-content: flex-end;
|
|
641
|
-
}
|
|
642
|
-
|
|
643
|
-
:host .datetime-view-buttons ion-button {
|
|
644
|
-
color: var(--ion-color-step-800, #333333);
|
|
645
661
|
}
|
|
@@ -26,3 +26,69 @@ configs({ directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
|
|
|
26
26
|
});
|
|
27
27
|
});
|
|
28
28
|
});
|
|
29
|
+
/**
|
|
30
|
+
* This behavior does not differ across
|
|
31
|
+
* modes/directions.
|
|
32
|
+
*/
|
|
33
|
+
configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) => {
|
|
34
|
+
test.describe(title('datetime: a11y'), () => {
|
|
35
|
+
test('datetime should be keyboard navigable', async ({ page, browserName }) => {
|
|
36
|
+
await page.setContent(`
|
|
37
|
+
<ion-datetime value="2022-02-22T16:30:00"></ion-datetime>
|
|
38
|
+
`, config);
|
|
39
|
+
const tabKey = browserName === 'webkit' ? 'Alt+Tab' : 'Tab';
|
|
40
|
+
const datetime = page.locator('ion-datetime');
|
|
41
|
+
const monthYearButton = page.locator('.calendar-month-year ion-item');
|
|
42
|
+
const prevButton = page.locator('.calendar-next-prev ion-button:nth-child(1)');
|
|
43
|
+
const nextButton = page.locator('.calendar-next-prev ion-button:nth-child(2)');
|
|
44
|
+
await page.keyboard.press(tabKey);
|
|
45
|
+
await expect(monthYearButton).toBeFocused();
|
|
46
|
+
await page.keyboard.press(tabKey);
|
|
47
|
+
await expect(prevButton).toBeFocused();
|
|
48
|
+
await page.keyboard.press(tabKey);
|
|
49
|
+
await expect(nextButton).toBeFocused();
|
|
50
|
+
// check value before & after selecting via keyboard
|
|
51
|
+
const initialValue = await datetime.evaluate((el) => el.value);
|
|
52
|
+
expect(initialValue).toBe('2022-02-22T16:30:00');
|
|
53
|
+
await page.keyboard.press(tabKey);
|
|
54
|
+
await page.waitForChanges();
|
|
55
|
+
await page.keyboard.press('ArrowLeft');
|
|
56
|
+
await page.waitForChanges();
|
|
57
|
+
await page.keyboard.press('Enter');
|
|
58
|
+
await page.waitForChanges();
|
|
59
|
+
const newValue = await datetime.evaluate((el) => el.value);
|
|
60
|
+
expect(newValue).not.toBe('2022-02-22T16:30:00');
|
|
61
|
+
});
|
|
62
|
+
test('buttons should be keyboard navigable', async ({ page }) => {
|
|
63
|
+
await page.setContent(`
|
|
64
|
+
|
|
65
|
+
<ion-datetime value="2022-02-22T16:30:00" show-default-buttons="true" show-clear-button="true"></ion-datetime>
|
|
66
|
+
`, config);
|
|
67
|
+
await page.waitForSelector('.datetime-ready');
|
|
68
|
+
const clearButton = page.locator('#clear-button button');
|
|
69
|
+
const selectedDay = page.locator('.calendar-day-active');
|
|
70
|
+
await expect(selectedDay).toHaveText('22');
|
|
71
|
+
await clearButton.focus();
|
|
72
|
+
await page.waitForChanges();
|
|
73
|
+
await expect(clearButton).toBeFocused();
|
|
74
|
+
await page.keyboard.press('Enter');
|
|
75
|
+
await page.waitForChanges();
|
|
76
|
+
await expect(selectedDay).toHaveCount(0);
|
|
77
|
+
});
|
|
78
|
+
test('should navigate through months via right arrow key', async ({ page }) => {
|
|
79
|
+
await page.setContent(`
|
|
80
|
+
|
|
81
|
+
<ion-datetime value="2022-02-28"></ion-datetime>
|
|
82
|
+
`, config);
|
|
83
|
+
await page.waitForSelector('.datetime-ready');
|
|
84
|
+
const calendarMonthYear = page.locator('ion-datetime .calendar-month-year');
|
|
85
|
+
const calendarBody = page.locator('.calendar-body');
|
|
86
|
+
await expect(calendarMonthYear).toHaveText('February 2022');
|
|
87
|
+
await calendarBody.focus();
|
|
88
|
+
await page.waitForChanges();
|
|
89
|
+
await page.keyboard.press('ArrowRight');
|
|
90
|
+
await page.waitForChanges();
|
|
91
|
+
await expect(calendarMonthYear).toHaveText('March 2022');
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
});
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
|
+
*/
|
|
4
|
+
import { expect } from "@playwright/test";
|
|
5
|
+
import { configs, test } from "../../../../utils/test/playwright/index";
|
|
6
|
+
/**
|
|
7
|
+
* This behavior does not differ across
|
|
8
|
+
* modes/directions.
|
|
9
|
+
*/
|
|
10
|
+
configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config, screenshot }) => {
|
|
11
|
+
test.describe(title('datetime: disabled'), () => {
|
|
12
|
+
test('should not have visual regressions', async ({ page }) => {
|
|
13
|
+
await page.setContent(`
|
|
14
|
+
<ion-datetime value="2022-02-05T00:00:00" min="2022-01-01T00:00:00" max="2022-02-20T23:59:59" day-values="5,6,10,11,15,16,20" show-default-buttons disabled></ion-datetime>
|
|
15
|
+
`, config);
|
|
16
|
+
const datetime = page.locator('ion-datetime');
|
|
17
|
+
await expect(datetime).toHaveScreenshot(screenshot(`datetime-disabled`));
|
|
18
|
+
});
|
|
19
|
+
test('date should be disabled', async ({ page }) => {
|
|
20
|
+
await page.setContent(`
|
|
21
|
+
<ion-datetime value="2022-02-28" disabled></ion-datetime>
|
|
22
|
+
`, config);
|
|
23
|
+
await page.waitForSelector('.datetime-ready');
|
|
24
|
+
const febFirstButton = page.locator(`.calendar-day[data-day='1'][data-month='2']`);
|
|
25
|
+
await expect(febFirstButton).toBeDisabled();
|
|
26
|
+
});
|
|
27
|
+
test('month-year button should be disabled', async ({ page }) => {
|
|
28
|
+
await page.setContent(`
|
|
29
|
+
<ion-datetime value="2022-02-28" disabled></ion-datetime>
|
|
30
|
+
`, config);
|
|
31
|
+
await page.waitForSelector('.datetime-ready');
|
|
32
|
+
const calendarMonthYear = page.locator('ion-datetime .calendar-month-year');
|
|
33
|
+
await expect(calendarMonthYear.locator('button')).toBeDisabled();
|
|
34
|
+
});
|
|
35
|
+
test('next and prev buttons should be disabled', async ({ page }) => {
|
|
36
|
+
await page.setContent(`
|
|
37
|
+
<ion-datetime value="2022-02-28" disabled></ion-datetime>
|
|
38
|
+
`, config);
|
|
39
|
+
const prevMonthButton = page.locator('ion-datetime .calendar-next-prev ion-button:first-of-type button');
|
|
40
|
+
const nextMonthButton = page.locator('ion-datetime .calendar-next-prev ion-button:last-of-type button');
|
|
41
|
+
await expect(prevMonthButton).toBeDisabled();
|
|
42
|
+
await expect(nextMonthButton).toBeDisabled();
|
|
43
|
+
});
|
|
44
|
+
test('clear button should be disabled', async ({ page }) => {
|
|
45
|
+
await page.setContent(`
|
|
46
|
+
|
|
47
|
+
<ion-datetime value="2022-02-22T16:30:00" show-default-buttons="true" show-clear-button="true" disabled></ion-datetime>
|
|
48
|
+
`, config);
|
|
49
|
+
await page.waitForSelector('.datetime-ready');
|
|
50
|
+
const clearButton = page.locator('#clear-button button');
|
|
51
|
+
await expect(clearButton).toBeDisabled();
|
|
52
|
+
});
|
|
53
|
+
test('should not navigate through months via right arrow key', async ({ page }) => {
|
|
54
|
+
await page.setContent(`
|
|
55
|
+
<ion-datetime value="2022-02-28" disabled></ion-datetime>
|
|
56
|
+
`, config);
|
|
57
|
+
await page.waitForSelector('.datetime-ready');
|
|
58
|
+
const calendarMonthYear = page.locator('ion-datetime .calendar-month-year');
|
|
59
|
+
const calendarBody = page.locator('.calendar-body');
|
|
60
|
+
await expect(calendarMonthYear).toHaveText('February 2022');
|
|
61
|
+
await calendarBody.focus();
|
|
62
|
+
await page.waitForChanges();
|
|
63
|
+
await page.keyboard.press('ArrowRight');
|
|
64
|
+
await page.waitForChanges();
|
|
65
|
+
await expect(calendarMonthYear).toHaveText('February 2022');
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
});
|