@ionic/core 7.6.2-dev.11705355381.14b22962 → 7.6.2-dev.11705694334.11b34c62
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 +4 -4
- package/components/alert.js +2 -2
- package/components/animation.js +16 -1
- package/components/button-active.js +1 -1
- package/components/button.js +2 -2
- package/components/checkbox.js +2 -2
- package/components/ion-back-button.js +1 -1
- package/components/ion-badge.js +2 -2
- package/components/ion-content.js +3 -2
- package/components/ion-datetime-button.js +4 -4
- package/components/ion-datetime.js +1 -1
- package/components/ion-fab-button.js +2 -2
- package/components/ion-input.js +2 -2
- package/components/ion-item-option.js +2 -2
- package/components/ion-item-sliding.js +128 -7
- package/components/ion-loading.js +1 -1
- package/components/ion-menu-button.js +1 -1
- package/components/ion-menu.js +15 -21
- package/components/ion-modal.js +1 -1
- package/components/ion-picker-legacy.js +2 -2
- package/components/ion-progress-bar.js +5 -2
- package/components/ion-range.js +2 -2
- package/components/ion-refresher-content.js +1 -1
- package/components/ion-refresher.js +1 -1
- package/components/ion-router-link.js +1 -1
- package/components/ion-searchbar.js +1 -1
- package/components/ion-segment-button.js +1 -1
- package/components/ion-select.js +2 -2
- package/components/ion-split-pane.js +15 -26
- package/components/ion-tab-bar.js +2 -2
- package/components/ion-tab-button.js +1 -1
- package/components/ion-textarea.js +2 -2
- package/components/ion-toast.js +2 -2
- package/components/ion-toggle.js +2 -2
- package/components/item.js +2 -2
- package/components/label.js +1 -1
- package/components/picker-column2.js +1 -1
- package/components/radio.js +2 -2
- package/components/select-popover.js +1 -1
- package/css/core.css +34 -101
- package/css/core.css.map +1 -1
- package/css/global.bundle.css +1 -1
- package/css/ionic.bundle.css +1 -1
- package/css/ionic.bundle.css.map +1 -1
- package/css/typography.css +1 -1
- package/dist/cjs/{animation-9b401d39.js → animation-8a4f9df4.js} +16 -0
- package/dist/cjs/{button-active-5bf1cac0.js → button-active-466dfc8a.js} +1 -1
- package/dist/cjs/{index-3b012034.js → index-8023641e.js} +1 -1
- package/dist/cjs/{index-17ab7794.js → index-d8b5d5f9.js} +2 -2
- package/dist/cjs/index.cjs.js +5 -5
- package/dist/cjs/ion-action-sheet.cjs.entry.js +6 -6
- package/dist/cjs/ion-alert.cjs.entry.js +4 -4
- package/dist/cjs/ion-app_8.cjs.entry.js +4 -3
- package/dist/cjs/ion-avatar_3.cjs.entry.js +2 -2
- package/dist/cjs/ion-back-button.cjs.entry.js +1 -1
- package/dist/cjs/ion-button_2.cjs.entry.js +2 -2
- package/dist/cjs/ion-checkbox.cjs.entry.js +2 -2
- package/dist/cjs/ion-datetime-button.cjs.entry.js +4 -4
- package/dist/cjs/ion-datetime_3.cjs.entry.js +5 -5
- package/dist/cjs/ion-fab_3.cjs.entry.js +2 -2
- package/dist/cjs/ion-input.cjs.entry.js +2 -2
- package/dist/cjs/ion-item-option_3.cjs.entry.js +130 -10
- package/dist/cjs/ion-item_8.cjs.entry.js +3 -3
- package/dist/cjs/ion-loading.cjs.entry.js +2 -2
- package/dist/cjs/ion-menu_3.cjs.entry.js +19 -24
- package/dist/cjs/ion-modal.cjs.entry.js +3 -3
- package/dist/cjs/ion-nav_2.cjs.entry.js +1 -1
- package/dist/cjs/ion-popover.cjs.entry.js +2 -2
- package/dist/cjs/ion-progress-bar.cjs.entry.js +5 -2
- package/dist/cjs/ion-radio_2.cjs.entry.js +2 -2
- package/dist/cjs/ion-range.cjs.entry.js +2 -2
- package/dist/cjs/ion-refresher_2.cjs.entry.js +3 -3
- package/dist/cjs/ion-route_4.cjs.entry.js +1 -1
- package/dist/cjs/ion-searchbar.cjs.entry.js +1 -1
- package/dist/cjs/ion-segment_2.cjs.entry.js +1 -1
- package/dist/cjs/ion-select_3.cjs.entry.js +3 -3
- package/dist/cjs/ion-split-pane.cjs.entry.js +14 -24
- package/dist/cjs/ion-tab-bar_2.cjs.entry.js +3 -3
- package/dist/cjs/ion-textarea.cjs.entry.js +2 -2
- package/dist/cjs/ion-toast.cjs.entry.js +3 -3
- package/dist/cjs/ion-toggle.cjs.entry.js +2 -2
- package/dist/cjs/ionic.cjs.js +1 -1
- package/dist/cjs/{ios.transition-b5353f3e.js → ios.transition-34cad0cb.js} +2 -2
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/{md.transition-67157dd9.js → md.transition-5bcc289d.js} +2 -2
- package/dist/collection/components/action-sheet/action-sheet.ios.css +12 -5
- package/dist/collection/components/action-sheet/action-sheet.js +2 -2
- package/dist/collection/components/action-sheet/action-sheet.md.css +9 -2
- package/dist/collection/components/action-sheet/test/a11y/action-sheet.e2e.js +14 -23
- package/dist/collection/components/action-sheet/test/basic/action-sheet-rendering.e2e.js +19 -0
- package/dist/collection/components/action-sheet/test/basic/action-sheet.spec.js +22 -0
- package/dist/collection/components/alert/alert.ios.css +28 -27
- package/dist/collection/components/alert/alert.md.css +6 -6
- package/dist/collection/components/alert/test/a11y/alert.e2e.js +9 -22
- package/dist/collection/components/back-button/back-button.ios.css +1 -1
- package/dist/collection/components/back-button/test/a11y/back-button.e2e.js +0 -21
- package/dist/collection/components/badge/badge.ios.css +1 -1
- package/dist/collection/components/badge/badge.md.css +1 -1
- package/dist/collection/components/badge/test/a11y/badge.e2e.js +0 -18
- package/dist/collection/components/button/button.ios.css +10 -10
- package/dist/collection/components/button/button.md.css +8 -8
- package/dist/collection/components/button/test/a11y/button.e2e.js +0 -48
- package/dist/collection/components/checkbox/checkbox.ios.css +5 -5
- package/dist/collection/components/checkbox/checkbox.md.css +2 -3
- package/dist/collection/components/checkbox/test/a11y/checkbox.e2e.js +2 -11
- package/dist/collection/components/checkbox/test/basic/checkbox.e2e.js +10 -0
- package/dist/collection/components/content/content.js +3 -2
- package/dist/collection/components/datetime/datetime.ios.css +3 -2
- package/dist/collection/components/datetime-button/datetime-button.ios.css +107 -0
- package/dist/collection/components/datetime-button/datetime-button.js +4 -4
- package/dist/collection/components/datetime-button/{datetime-button.css → datetime-button.md.css} +9 -6
- package/dist/collection/components/datetime-button/test/basic/datetime-button.e2e.js +12 -0
- package/dist/collection/components/fab-button/fab-button.ios.css +13 -13
- package/dist/collection/components/fab-button/fab-button.md.css +4 -4
- package/dist/collection/components/fab-button/test/a11y/fab-button.e2e.js +0 -50
- package/dist/collection/components/input/input.ios.css +3 -3
- package/dist/collection/components/input/input.md.css +3 -3
- package/dist/collection/components/input/test/a11y/input.e2e.js +3 -41
- package/dist/collection/components/item/item.ios.css +3 -3
- package/dist/collection/components/item/item.md.css +4 -4
- package/dist/collection/components/item-option/item-option.ios.css +2 -2
- package/dist/collection/components/item-option/item-option.md.css +1 -1
- package/dist/collection/components/item-sliding/animations/item-sliding-options.js +59 -0
- package/dist/collection/components/item-sliding/item-sliding.css +8 -4
- package/dist/collection/components/item-sliding/item-sliding.js +89 -6
- package/dist/collection/components/item-sliding/test/a11y/item-sliding.e2e.js +0 -28
- package/dist/collection/components/item-sliding/test/basic/item-sliding.e2e.js +62 -25
- package/dist/collection/components/label/label.md.css +1 -1
- package/dist/collection/components/label/test/a11y/label.e2e.js +0 -20
- package/dist/collection/components/loading/loading.md.css +1 -1
- package/dist/collection/components/loading/test/a11y/loading.e2e.js +5 -21
- package/dist/collection/components/menu/menu.ios.css +3 -64
- package/dist/collection/components/menu/menu.js +13 -19
- package/dist/collection/components/menu/menu.md.css +3 -64
- package/dist/collection/components/menu-button/menu-button.ios.css +1 -1
- package/dist/collection/components/menu-button/test/a11y/menu-button.e2e.js +0 -14
- package/dist/collection/components/modal/gestures/swipe-to-close.js +1 -1
- package/dist/collection/components/picker-legacy/picker.ios.css +1 -1
- package/dist/collection/components/picker-legacy/picker.md.css +1 -1
- package/dist/collection/components/picker-legacy-column/picker-column.md.css +1 -1
- package/dist/collection/components/progress-bar/progress-bar.ios.css +17 -11
- package/dist/collection/components/progress-bar/progress-bar.js +3 -0
- package/dist/collection/components/progress-bar/progress-bar.md.css +8 -10
- package/dist/collection/components/radio/radio.ios.css +2 -2
- package/dist/collection/components/radio/radio.md.css +2 -2
- package/dist/collection/components/radio/test/a11y/radio.e2e.js +68 -101
- package/dist/collection/components/range/range.ios.css +1 -1
- package/dist/collection/components/range/range.md.css +3 -3
- package/dist/collection/components/range/test/a11y/range.e2e.js +8 -18
- package/dist/collection/components/refresher/refresher.md.css +2 -2
- package/dist/collection/components/refresher-content/refresher-content.js +1 -1
- package/dist/collection/components/router-link/router-link.css +1 -1
- package/dist/collection/components/searchbar/searchbar.ios.css +4 -4
- package/dist/collection/components/segment/test/a11y/segment.e2e.js +0 -23
- package/dist/collection/components/segment-button/segment-button.md.css +2 -2
- package/dist/collection/components/select/select.ios.css +3 -3
- package/dist/collection/components/select/select.md.css +3 -3
- package/dist/collection/components/select/test/a11y/select.e2e.js +4 -68
- package/dist/collection/components/select-popover/select-popover.md.css +4 -4
- package/dist/collection/components/split-pane/split-pane.ios.css +53 -1
- package/dist/collection/components/split-pane/split-pane.js +12 -46
- package/dist/collection/components/split-pane/split-pane.md.css +53 -1
- package/dist/collection/components/tab-bar/tab-bar.ios.css +1 -1
- package/dist/collection/components/tab-bar/tab-bar.md.css +1 -1
- package/dist/collection/components/tab-button/tab-button.ios.css +6 -1
- package/dist/collection/components/textarea/test/a11y/textarea.e2e.js +3 -41
- package/dist/collection/components/textarea/textarea.ios.css +3 -3
- package/dist/collection/components/textarea/textarea.md.css +3 -3
- package/dist/collection/components/toast/test/a11y/toast.e2e.js +24 -56
- package/dist/collection/components/toast/toast.ios.css +1 -1
- package/dist/collection/components/toast/toast.md.css +2 -2
- package/dist/collection/components/toggle/test/a11y/toggle.e2e.js +2 -8
- package/dist/collection/components/toggle/toggle.ios.css +8 -8
- package/dist/collection/components/toggle/toggle.md.css +2 -2
- package/dist/collection/css/test/a11y/typography.e2e.js +0 -18
- package/dist/collection/utils/animation/animation.js +15 -0
- package/dist/collection/utils/gesture/button-active.js +1 -1
- package/dist/collection/utils/test/playwright/generator.js +0 -1
- package/dist/collection/utils/test/playwright/page/utils/set-content.js +1 -1
- package/dist/docs.json +34 -7
- package/dist/esm/{animation-dde8cc0d.js → animation-ccab0993.js} +16 -1
- package/dist/esm/{button-active-48379dd2.js → button-active-2758ff14.js} +1 -1
- package/dist/esm/{index-4743453d.js → index-9dbb78a4.js} +2 -2
- package/dist/esm/{index-1193f005.js → index-b7e9478d.js} +1 -1
- package/dist/esm/index.js +5 -5
- package/dist/esm/ion-action-sheet.entry.js +6 -6
- package/dist/esm/ion-alert.entry.js +4 -4
- package/dist/esm/ion-app_8.entry.js +4 -3
- package/dist/esm/ion-avatar_3.entry.js +2 -2
- package/dist/esm/ion-back-button.entry.js +1 -1
- package/dist/esm/ion-button_2.entry.js +2 -2
- package/dist/esm/ion-checkbox.entry.js +2 -2
- package/dist/esm/ion-datetime-button.entry.js +4 -4
- package/dist/esm/ion-datetime_3.entry.js +5 -5
- package/dist/esm/ion-fab_3.entry.js +2 -2
- package/dist/esm/ion-input.entry.js +2 -2
- package/dist/esm/ion-item-option_3.entry.js +130 -10
- package/dist/esm/ion-item_8.entry.js +3 -3
- package/dist/esm/ion-loading.entry.js +2 -2
- package/dist/esm/ion-menu_3.entry.js +19 -24
- package/dist/esm/ion-modal.entry.js +3 -3
- package/dist/esm/ion-nav_2.entry.js +1 -1
- package/dist/esm/ion-popover.entry.js +2 -2
- package/dist/esm/ion-progress-bar.entry.js +5 -2
- package/dist/esm/ion-radio_2.entry.js +2 -2
- package/dist/esm/ion-range.entry.js +2 -2
- package/dist/esm/ion-refresher_2.entry.js +3 -3
- package/dist/esm/ion-route_4.entry.js +1 -1
- package/dist/esm/ion-searchbar.entry.js +1 -1
- package/dist/esm/ion-segment_2.entry.js +1 -1
- package/dist/esm/ion-select_3.entry.js +3 -3
- package/dist/esm/ion-split-pane.entry.js +14 -24
- package/dist/esm/ion-tab-bar_2.entry.js +3 -3
- package/dist/esm/ion-textarea.entry.js +2 -2
- package/dist/esm/ion-toast.entry.js +3 -3
- package/dist/esm/ion-toggle.entry.js +2 -2
- package/dist/esm/ionic.js +1 -1
- package/dist/esm/{ios.transition-3376ccb2.js → ios.transition-01176d76.js} +2 -2
- package/dist/esm/loader.js +1 -1
- package/dist/esm/{md.transition-f992779f.js → md.transition-558655c7.js} +2 -2
- package/dist/esm-es5/animation-ccab0993.js +4 -0
- package/dist/esm-es5/button-active-2758ff14.js +4 -0
- package/dist/esm-es5/{index-4743453d.js → index-9dbb78a4.js} +1 -1
- package/dist/esm-es5/{index-1193f005.js → index-b7e9478d.js} +1 -1
- package/dist/esm-es5/index.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-button_2.entry.js +1 -1
- package/dist/esm-es5/ion-checkbox.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-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-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-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-split-pane.entry.js +1 -1
- package/dist/esm-es5/ion-tab-bar_2.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.js +1 -1
- package/dist/esm-es5/{ios.transition-3376ccb2.js → ios.transition-01176d76.js} +1 -1
- package/dist/esm-es5/loader.js +1 -1
- package/dist/esm-es5/md.transition-558655c7.js +4 -0
- package/dist/html.html-data.json +12 -0
- package/dist/ionic/index.esm.js +1 -1
- package/dist/ionic/ionic.esm.js +1 -1
- package/dist/ionic/{p-ec0a9b2c.system.entry.js → p-019e0d80.system.entry.js} +1 -1
- package/dist/ionic/p-02dc8c5b.entry.js +4 -0
- package/dist/ionic/{p-c6e9ef77.entry.js → p-0cc80201.entry.js} +1 -1
- package/dist/ionic/{p-662a9a47.system.entry.js → p-0dfa4ab4.system.entry.js} +1 -1
- package/dist/ionic/{p-590447a5.system.entry.js → p-0e908476.system.entry.js} +1 -1
- package/dist/ionic/{p-df6f50ef.entry.js → p-10339dcc.entry.js} +1 -1
- package/dist/ionic/{p-1d5b03e3.system.entry.js → p-11bf2ad0.system.entry.js} +1 -1
- package/dist/ionic/{p-3796194b.system.entry.js → p-19c379da.system.entry.js} +1 -1
- package/dist/ionic/p-19d9ceb8.system.js +1 -1
- package/dist/ionic/p-1a22895e.system.entry.js +4 -0
- package/dist/ionic/p-1c69a4ca.system.entry.js +4 -0
- package/dist/ionic/{p-92bfb607.entry.js → p-20a4ee02.entry.js} +1 -1
- package/dist/ionic/{p-530bb2af.system.entry.js → p-2316de85.system.entry.js} +1 -1
- package/dist/ionic/{p-5cbfce20.entry.js → p-26ff1180.entry.js} +1 -1
- package/dist/ionic/p-289f354c.entry.js +4 -0
- package/dist/ionic/p-2a3b87cd.entry.js +4 -0
- package/dist/ionic/p-2e01f1c5.system.entry.js +4 -0
- package/dist/ionic/p-38531958.system.entry.js +4 -0
- package/dist/ionic/{p-5f1b0512.entry.js → p-3b043115.entry.js} +1 -1
- package/dist/ionic/p-3b434dee.system.entry.js +4 -0
- package/dist/ionic/{p-d88ed181.system.entry.js → p-41208f54.system.entry.js} +1 -1
- package/dist/ionic/{p-f0dbd73e.system.entry.js → p-42925096.system.entry.js} +1 -1
- package/dist/ionic/p-44791cff.entry.js +4 -0
- package/dist/ionic/p-4981ea0a.system.entry.js +4 -0
- package/dist/ionic/{p-13d4dfe7.entry.js → p-5074a526.entry.js} +1 -1
- package/dist/ionic/{p-a41eaff2.system.entry.js → p-56b1a872.system.entry.js} +1 -1
- package/dist/ionic/p-57785713.system.entry.js +4 -0
- package/dist/ionic/p-57e9de81.system.js +4 -0
- package/dist/ionic/{p-c001b24f.entry.js → p-5dc16594.entry.js} +1 -1
- package/dist/ionic/{p-9f94e34a.system.entry.js → p-614e63a9.system.entry.js} +1 -1
- package/dist/ionic/{p-8b160fba.entry.js → p-67e52d31.entry.js} +1 -1
- package/dist/ionic/{p-aa975ff8.entry.js → p-6855f26a.entry.js} +1 -1
- package/dist/ionic/{p-7dade589.system.entry.js → p-69ce8bba.system.entry.js} +1 -1
- package/dist/ionic/p-6fb2b5e3.js +4 -0
- package/dist/ionic/{p-8e961825.entry.js → p-799da666.entry.js} +1 -1
- package/dist/ionic/{p-04377cfa.js → p-7b4649d7.js} +1 -1
- package/dist/ionic/{p-4abb1251.entry.js → p-7c7bc0cc.entry.js} +1 -1
- package/dist/ionic/{p-a29db3a0.entry.js → p-7dcf795f.entry.js} +1 -1
- package/dist/ionic/{p-a074be82.system.js → p-7de7a5fd.system.js} +1 -1
- package/dist/ionic/{p-f38c1f8d.entry.js → p-806a9810.entry.js} +1 -1
- package/dist/ionic/p-80ad9792.system.js +4 -0
- package/dist/ionic/{p-d08e0136.entry.js → p-84b567a6.entry.js} +1 -1
- package/dist/ionic/{p-a49931aa.system.js → p-9093afb1.system.js} +1 -1
- package/dist/ionic/p-922c234e.js +4 -0
- package/dist/ionic/p-950c05ad.entry.js +4 -0
- package/dist/ionic/p-97a9d526.system.entry.js +4 -0
- package/dist/ionic/p-99d448ba.system.entry.js +4 -0
- package/dist/ionic/p-9c5e3a2c.system.entry.js +4 -0
- package/dist/ionic/{p-1c453add.system.entry.js → p-a1bd098f.system.entry.js} +1 -1
- package/dist/ionic/p-a619ecad.entry.js +4 -0
- package/dist/ionic/{p-354682e8.system.entry.js → p-abd5d0d5.system.entry.js} +1 -1
- package/dist/ionic/{p-e9431a58.entry.js → p-ae4b7df8.entry.js} +1 -1
- package/dist/ionic/p-b20717fc.system.entry.js +4 -0
- package/dist/ionic/p-b61d7624.entry.js +4 -0
- package/dist/ionic/p-b660ba8a.system.js +4 -0
- package/dist/ionic/{p-2716d76c.entry.js → p-b68d435f.entry.js} +1 -1
- package/dist/ionic/p-ba2b1ef5.entry.js +4 -0
- package/dist/ionic/{p-bc01c384.entry.js → p-ba5d9e27.entry.js} +1 -1
- package/dist/ionic/{p-9c48f42f.entry.js → p-bb3fd397.entry.js} +1 -1
- package/dist/ionic/{p-44a56556.js → p-c75dc92f.js} +1 -1
- package/dist/ionic/{p-1ab2642a.system.js → p-c8f7e8c8.system.js} +1 -1
- package/dist/ionic/p-cd729946.js +4 -0
- package/dist/ionic/{p-385bb983.entry.js → p-cf53213c.entry.js} +1 -1
- package/dist/ionic/{p-e403ff07.entry.js → p-d1ab26de.entry.js} +1 -1
- package/dist/ionic/p-d2a73201.system.entry.js +4 -0
- package/dist/ionic/p-d3525765.js +4 -0
- package/dist/ionic/{p-d01449a3.system.entry.js → p-da666998.system.entry.js} +1 -1
- package/dist/ionic/{p-cc700688.system.entry.js → p-db05ecb6.system.entry.js} +1 -1
- package/dist/ionic/p-dc43a79e.entry.js +4 -0
- package/dist/ionic/{p-0aa78a8d.system.js → p-e755af39.system.js} +1 -1
- package/dist/ionic/p-ee71caaa.system.entry.js +4 -0
- package/dist/ionic/{p-5aec2208.entry.js → p-f0eafd38.entry.js} +1 -1
- package/dist/ionic/{p-25312768.system.entry.js → p-f25b4396.system.entry.js} +1 -1
- package/dist/ionic/p-f65f4d3e.system.entry.js +4 -0
- package/dist/ionic/p-fd98debb.entry.js +4 -0
- package/dist/ionic/p-fe458994.system.entry.js +4 -0
- package/dist/types/components/action-sheet/action-sheet-interface.d.ts +8 -0
- package/dist/types/components/item-sliding/animations/item-sliding-options.d.ts +10 -0
- package/dist/types/components/item-sliding/item-sliding.d.ts +19 -0
- package/dist/types/components/menu/menu.d.ts +1 -11
- package/dist/types/components/split-pane/split-pane.d.ts +2 -14
- package/dist/types/components.d.ts +8 -1
- package/dist/types/utils/animation/animation-interface.d.ts +6 -0
- package/dist/types/utils/animation/animation.d.ts +2 -0
- package/hydrate/index.js +232 -108
- package/package.json +1 -1
- package/css/themes/dark.always.css +0 -122
- package/css/themes/dark.always.css.map +0 -1
- package/css/themes/dark.class.css +0 -122
- package/css/themes/dark.class.css.map +0 -1
- package/css/themes/dark.css +0 -3
- package/css/themes/dark.css.map +0 -1
- package/css/themes/dark.system.css +0 -124
- package/css/themes/dark.system.css.map +0 -1
- package/dist/collection/components/progress-bar/test/a11y/progress-bar.e2e.js +0 -24
- package/dist/collection/components/refresher/test/a11y/refresher.e2e.js +0 -25
- package/dist/collection/components/router-link/test/a11y/router-link.e2e.js +0 -23
- package/dist/collection/components/select-popover/test/a11y/select-popover.e2e.js +0 -32
- package/dist/collection/components/split-pane/test/wrapped-menu/split-pane.e2e.js +0 -41
- package/dist/collection/themes/test/colors/theme.e2e.js +0 -114
- package/dist/esm-es5/animation-dde8cc0d.js +0 -4
- package/dist/esm-es5/button-active-48379dd2.js +0 -4
- package/dist/esm-es5/md.transition-f992779f.js +0 -4
- package/dist/ionic/p-04d84d5d.entry.js +0 -4
- package/dist/ionic/p-068950da.entry.js +0 -4
- package/dist/ionic/p-0832dedf.entry.js +0 -4
- package/dist/ionic/p-11c55ac8.system.js +0 -4
- package/dist/ionic/p-1b60cc53.js +0 -4
- package/dist/ionic/p-24c3f2cd.system.entry.js +0 -4
- package/dist/ionic/p-2724403e.entry.js +0 -4
- package/dist/ionic/p-283bc1a1.system.entry.js +0 -4
- package/dist/ionic/p-29d03b3a.js +0 -4
- package/dist/ionic/p-38f2c6bb.system.js +0 -4
- package/dist/ionic/p-3af5faf8.system.entry.js +0 -4
- package/dist/ionic/p-4eae8c91.entry.js +0 -4
- package/dist/ionic/p-56944895.entry.js +0 -4
- package/dist/ionic/p-713af1fe.entry.js +0 -4
- package/dist/ionic/p-8a25bf30.system.entry.js +0 -4
- package/dist/ionic/p-97aaf697.system.entry.js +0 -4
- package/dist/ionic/p-98f35d98.js +0 -4
- package/dist/ionic/p-9a68d8ef.system.js +0 -4
- package/dist/ionic/p-9a8bc8f3.system.entry.js +0 -4
- package/dist/ionic/p-a6e5f54e.system.entry.js +0 -4
- package/dist/ionic/p-b231b7cf.system.entry.js +0 -4
- package/dist/ionic/p-b59fe3bd.system.entry.js +0 -4
- package/dist/ionic/p-b7e03ff0.system.entry.js +0 -4
- package/dist/ionic/p-bec6ae40.entry.js +0 -4
- package/dist/ionic/p-c16fbc5f.system.entry.js +0 -4
- package/dist/ionic/p-cb3ef9c1.system.entry.js +0 -4
- package/dist/ionic/p-cb6a1fa0.system.entry.js +0 -4
- package/dist/ionic/p-cd3e1a06.entry.js +0 -4
- package/dist/ionic/p-cd574dfa.js +0 -4
- package/dist/ionic/p-d1ad57d5.system.entry.js +0 -4
- package/dist/ionic/p-d2634efe.system.entry.js +0 -4
- package/dist/ionic/p-fc17f198.entry.js +0 -4
|
@@ -334,7 +334,7 @@ ion-ripple-effect {
|
|
|
334
334
|
* }
|
|
335
335
|
*/
|
|
336
336
|
:host {
|
|
337
|
-
--background: var(--ion-color-primary, #
|
|
337
|
+
--background: var(--ion-color-primary, #3880ff);
|
|
338
338
|
--background-activated: transparent;
|
|
339
339
|
--background-focused: currentColor;
|
|
340
340
|
--background-hover: currentColor;
|
|
@@ -359,10 +359,10 @@ ion-ripple-effect {
|
|
|
359
359
|
--color: rgba(var(--ion-text-color-rgb, 0, 0, 0), 0.54);
|
|
360
360
|
--color-activated: rgba(var(--ion-text-color-rgb, 0, 0, 0), 0.54);
|
|
361
361
|
--color-focused: var(--color-activated);
|
|
362
|
-
--background: var(--ion-color-light, #
|
|
362
|
+
--background: var(--ion-color-light, #f4f5f8);
|
|
363
363
|
--background-activated: transparent;
|
|
364
|
-
--background-focused: var(--ion-color-light-shade, #
|
|
365
|
-
--background-hover: var(--ion-color-light-tint, #
|
|
364
|
+
--background-focused: var(--ion-color-light-shade, #d7d8da);
|
|
365
|
+
--background-hover: var(--ion-color-light-tint, #f5f6f9);
|
|
366
366
|
}
|
|
367
367
|
|
|
368
368
|
:host(.fab-button-in-list) ::slotted(ion-icon) {
|
|
@@ -1,58 +1,8 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
3
|
*/
|
|
4
|
-
import AxeBuilder from "@axe-core/playwright";
|
|
5
4
|
import { expect } from "@playwright/test";
|
|
6
5
|
import { configs, test } from "../../../../utils/test/playwright/index";
|
|
7
|
-
configs({ directions: ['ltr'], themes: ['light', 'dark'] }).forEach(({ title, config }) => {
|
|
8
|
-
test.describe(title('fab-button: a11y'), () => {
|
|
9
|
-
test('should not have accessibility violations', async ({ page }) => {
|
|
10
|
-
await page.setContent(`
|
|
11
|
-
<ion-fab-button>FAB</ion-fab-button>
|
|
12
|
-
<ion-fab-button class="ion-activated">FAB</ion-fab-button>
|
|
13
|
-
`, config);
|
|
14
|
-
const results = await new AxeBuilder({ page }).analyze();
|
|
15
|
-
expect(results.violations).toEqual([]);
|
|
16
|
-
});
|
|
17
|
-
});
|
|
18
|
-
test.describe(title('fab-list: contrast'), () => {
|
|
19
|
-
test('should not have accessibility violations', async ({ page }) => {
|
|
20
|
-
await page.setContent(`
|
|
21
|
-
<ion-fab activated="true">
|
|
22
|
-
<ion-fab-button>
|
|
23
|
-
Open
|
|
24
|
-
</ion-fab-button>
|
|
25
|
-
<ion-fab-list side="bottom">
|
|
26
|
-
<ion-fab-button>Down</ion-fab-button>
|
|
27
|
-
<ion-fab-button class="ion-activated">Down</ion-fab-button>
|
|
28
|
-
<ion-fab-button class="ion-focused">Down</ion-fab-button>
|
|
29
|
-
</ion-fab-list>
|
|
30
|
-
</ion-fab>
|
|
31
|
-
`, config);
|
|
32
|
-
const results = await new AxeBuilder({ page }).analyze();
|
|
33
|
-
expect(results.violations).toEqual([]);
|
|
34
|
-
});
|
|
35
|
-
});
|
|
36
|
-
test.describe(title('fab: translucent contrast'), () => {
|
|
37
|
-
test('should not have accessibility violations', async ({ page }) => {
|
|
38
|
-
await page.setContent(`
|
|
39
|
-
<ion-fab-button translucent="true">FAB</ion-fab-button>
|
|
40
|
-
<ion-fab-button class="ion-focused" translucent="true">FAB</ion-fab-button>
|
|
41
|
-
<ion-fab activated="true">
|
|
42
|
-
<ion-fab-button>
|
|
43
|
-
Open
|
|
44
|
-
</ion-fab-button>
|
|
45
|
-
<ion-fab-list side="bottom">
|
|
46
|
-
<ion-fab-button translucent="true">Down</ion-fab-button>
|
|
47
|
-
<ion-fab-button class="ion-focused" translucent="true">Down</ion-fab-button>
|
|
48
|
-
</ion-fab-list>
|
|
49
|
-
</ion-fab>
|
|
50
|
-
`, config);
|
|
51
|
-
const results = await new AxeBuilder({ page }).analyze();
|
|
52
|
-
expect(results.violations).toEqual([]);
|
|
53
|
-
});
|
|
54
|
-
});
|
|
55
|
-
});
|
|
56
6
|
configs({ modes: ['md'], directions: ['ltr'] }).forEach(({ title, config }) => {
|
|
57
7
|
test.describe(title('fab-button: aria attributes'), () => {
|
|
58
8
|
test('should inherit aria attributes to inner button', async ({ page }) => {
|
|
@@ -89,9 +89,9 @@
|
|
|
89
89
|
--background: transparent;
|
|
90
90
|
--color: initial;
|
|
91
91
|
--border-style: solid;
|
|
92
|
-
--highlight-color-focused: var(--ion-color-primary, #
|
|
93
|
-
--highlight-color-valid: var(--ion-color-success, #
|
|
94
|
-
--highlight-color-invalid: var(--ion-color-danger, #
|
|
92
|
+
--highlight-color-focused: var(--ion-color-primary, #3880ff);
|
|
93
|
+
--highlight-color-valid: var(--ion-color-success, #2dd36f);
|
|
94
|
+
--highlight-color-invalid: var(--ion-color-danger, #eb445a);
|
|
95
95
|
/**
|
|
96
96
|
* This is a private API that is used to switch
|
|
97
97
|
* out the highlight color based on the state
|
|
@@ -89,9 +89,9 @@
|
|
|
89
89
|
--background: transparent;
|
|
90
90
|
--color: initial;
|
|
91
91
|
--border-style: solid;
|
|
92
|
-
--highlight-color-focused: var(--ion-color-primary, #
|
|
93
|
-
--highlight-color-valid: var(--ion-color-success, #
|
|
94
|
-
--highlight-color-invalid: var(--ion-color-danger, #
|
|
92
|
+
--highlight-color-focused: var(--ion-color-primary, #3880ff);
|
|
93
|
+
--highlight-color-valid: var(--ion-color-success, #2dd36f);
|
|
94
|
+
--highlight-color-invalid: var(--ion-color-danger, #eb445a);
|
|
95
95
|
/**
|
|
96
96
|
* This is a private API that is used to switch
|
|
97
97
|
* out the highlight color based on the state
|
|
@@ -4,52 +4,14 @@
|
|
|
4
4
|
import AxeBuilder from "@axe-core/playwright";
|
|
5
5
|
import { expect } from "@playwright/test";
|
|
6
6
|
import { configs, test } from "../../../../utils/test/playwright/index";
|
|
7
|
-
configs({ directions: ['ltr']
|
|
7
|
+
configs({ directions: ['ltr'] }).forEach(({ title, config, screenshot }) => {
|
|
8
8
|
test.describe(title('input: a11y'), () => {
|
|
9
|
-
test('
|
|
10
|
-
await page.
|
|
11
|
-
<main>
|
|
12
|
-
<ion-input label="Label" placeholder="Placeholder"></ion-input>
|
|
13
|
-
<ion-input placeholder="Placeholder">
|
|
14
|
-
<div slot="label">Label"></div>
|
|
15
|
-
</ion-input>
|
|
16
|
-
<ion-input label="Label" value="My Text"></ion-input>
|
|
17
|
-
<ion-input aria-label="Label"></ion-input>
|
|
18
|
-
<ion-input label="Email" fill="solid" value="hi@ionic.io">
|
|
19
|
-
<ion-icon slot="start" name="lock-closed" aria-hidden="true"></ion-icon>
|
|
20
|
-
<ion-button slot="end" aria-label="button">
|
|
21
|
-
<ion-icon slot="icon-only" name="lock-closed" aria-hidden="true"></ion-icon>
|
|
22
|
-
</ion-button>
|
|
23
|
-
</ion-input>
|
|
24
|
-
</main>
|
|
25
|
-
`, config);
|
|
26
|
-
const results = await new AxeBuilder({ page }).analyze();
|
|
27
|
-
expect(results.violations).toEqual([]);
|
|
28
|
-
});
|
|
29
|
-
test('focused state should not have accessibility violations', async ({ page }) => {
|
|
30
|
-
/**
|
|
31
|
-
* The primary color against the focus background
|
|
32
|
-
* when using fill="solid" does not meet AA
|
|
33
|
-
* contrast guidelines so it excluded from the test.
|
|
34
|
-
* The contrast here is a significant improvement
|
|
35
|
-
* over what Ionic has had in the past, so the team
|
|
36
|
-
* has decided that this tradeoff is acceptable since
|
|
37
|
-
* the scope of the problem is limited to the focus
|
|
38
|
-
* state with the primary color when fill="solid".
|
|
39
|
-
*/
|
|
40
|
-
await page.setContent(`
|
|
41
|
-
<main>
|
|
42
|
-
<ion-input class="has-focus" label="Label" value="My Text"></ion-input>
|
|
43
|
-
<ion-input class="has-focus" label-placement="floating" label="Label" value="My Text"></ion-input>
|
|
44
|
-
<ion-input class="has-focus" fill="outline" label-placement="floating" label="Label" value="My Text"></ion-input>
|
|
45
|
-
</main>
|
|
46
|
-
`, config);
|
|
9
|
+
test('should not have accessibility violations', async ({ page }) => {
|
|
10
|
+
await page.goto(`/src/components/input/test/a11y`, config);
|
|
47
11
|
const results = await new AxeBuilder({ page }).analyze();
|
|
48
12
|
expect(results.violations).toEqual([]);
|
|
49
13
|
});
|
|
50
14
|
});
|
|
51
|
-
});
|
|
52
|
-
configs({ directions: ['ltr'] }).forEach(({ title, config, screenshot }) => {
|
|
53
15
|
test.describe(title('input: font scaling'), () => {
|
|
54
16
|
test('should scale text on larger font sizes', async ({ page }) => {
|
|
55
17
|
await page.setContent(`
|
|
@@ -700,9 +700,9 @@ ion-ripple-effect {
|
|
|
700
700
|
--border-color: var(--ion-item-border-color, var(--ion-border-color, var(--ion-color-step-250, #c8c7cc)));
|
|
701
701
|
--color: var(--ion-item-color, var(--ion-text-color, #000));
|
|
702
702
|
--highlight-height: 0px;
|
|
703
|
-
--highlight-color-focused: var(--ion-color-primary, #
|
|
704
|
-
--highlight-color-valid: var(--ion-color-success, #
|
|
705
|
-
--highlight-color-invalid: var(--ion-color-danger, #
|
|
703
|
+
--highlight-color-focused: var(--ion-color-primary, #3880ff);
|
|
704
|
+
--highlight-color-valid: var(--ion-color-success, #2dd36f);
|
|
705
|
+
--highlight-color-invalid: var(--ion-color-danger, #eb445a);
|
|
706
706
|
--bottom-padding-start: 0px;
|
|
707
707
|
font-size: 1rem;
|
|
708
708
|
}
|
|
@@ -800,9 +800,9 @@ ion-ripple-effect {
|
|
|
800
800
|
--inner-padding-end: 16px;
|
|
801
801
|
--inner-border-width: 0 0 1px 0;
|
|
802
802
|
--highlight-height: 1px;
|
|
803
|
-
--highlight-color-focused: var(--ion-color-primary, #
|
|
804
|
-
--highlight-color-valid: var(--ion-color-success, #
|
|
805
|
-
--highlight-color-invalid: var(--ion-color-danger, #
|
|
803
|
+
--highlight-color-focused: var(--ion-color-primary, #3880ff);
|
|
804
|
+
--highlight-color-valid: var(--ion-color-success, #2dd36f);
|
|
805
|
+
--highlight-color-invalid: var(--ion-color-danger, #eb445a);
|
|
806
806
|
font-size: 1rem;
|
|
807
807
|
font-weight: normal;
|
|
808
808
|
text-transform: none;
|
|
@@ -1100,7 +1100,7 @@ ion-ripple-effect {
|
|
|
1100
1100
|
:host(.ion-focused:not(.ion-color)) ::slotted(.label-floating),
|
|
1101
1101
|
:host(.item-has-focus:not(.ion-color)) ::slotted(.label-stacked),
|
|
1102
1102
|
:host(.item-has-focus:not(.ion-color)) ::slotted(.label-floating) {
|
|
1103
|
-
color: var(--ion-color-primary, #
|
|
1103
|
+
color: var(--ion-color-primary, #3880ff);
|
|
1104
1104
|
}
|
|
1105
1105
|
|
|
1106
1106
|
:host(.ion-color) {
|
|
@@ -58,7 +58,7 @@
|
|
|
58
58
|
* @prop --background: Background of the item option
|
|
59
59
|
* @prop --color: Color of the item option
|
|
60
60
|
*/
|
|
61
|
-
--background: var(--ion-color-primary, #
|
|
61
|
+
--background: var(--ion-color-primary, #3880ff);
|
|
62
62
|
--color: var(--ion-color-primary-contrast, #fff);
|
|
63
63
|
background: var(--background);
|
|
64
64
|
color: var(--color);
|
|
@@ -234,7 +234,7 @@
|
|
|
234
234
|
}
|
|
235
235
|
|
|
236
236
|
:host(.ion-activated) {
|
|
237
|
-
background: var(--ion-color-primary-shade, #
|
|
237
|
+
background: var(--ion-color-primary-shade, #3171e0);
|
|
238
238
|
}
|
|
239
239
|
|
|
240
240
|
:host(.ion-color.ion-activated) {
|
|
@@ -58,7 +58,7 @@
|
|
|
58
58
|
* @prop --background: Background of the item option
|
|
59
59
|
* @prop --color: Color of the item option
|
|
60
60
|
*/
|
|
61
|
-
--background: var(--ion-color-primary, #
|
|
61
|
+
--background: var(--ion-color-primary, #3880ff);
|
|
62
62
|
--color: var(--ion-color-primary-contrast, #fff);
|
|
63
63
|
background: var(--background);
|
|
64
64
|
color: var(--color);
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
|
+
*/
|
|
4
|
+
import { createAnimation } from "../../../utils/animation/animation";
|
|
5
|
+
/**
|
|
6
|
+
* Animates the opening and closing of a sliding item option.
|
|
7
|
+
* @param el The element to animate.
|
|
8
|
+
* @param viewportOffset The offset of the element on the x-axis to locate it off-screen.
|
|
9
|
+
* @param progress The progress of the animation (0 - 1).
|
|
10
|
+
* @param isFinal Whether the animation is in its final state (collapsed or expanded).
|
|
11
|
+
* @param isReset Whether to reset the element to its initial state.
|
|
12
|
+
* @param zIndex _Optional_ The z-index to apply to the element.
|
|
13
|
+
*/
|
|
14
|
+
export const slidingItemAnimation = (el, viewportOffset, progress, isFinal, isReset, zIndex) => {
|
|
15
|
+
const styles = zIndex !== undefined ? { zIndex: `${zIndex}` } : {};
|
|
16
|
+
const swipeAnimation = createAnimation()
|
|
17
|
+
.addElement(el)
|
|
18
|
+
/**
|
|
19
|
+
* The specific value here does not actually
|
|
20
|
+
* matter. We just need this to be a positive
|
|
21
|
+
* value so the animation does not jump
|
|
22
|
+
* to the end when the user begins to drag.
|
|
23
|
+
*/
|
|
24
|
+
.duration(1)
|
|
25
|
+
.commitStyles()
|
|
26
|
+
.keyframes([
|
|
27
|
+
Object.assign({ offset: 0, transform: `translate3d(${viewportOffset}px,0,0)` }, styles),
|
|
28
|
+
Object.assign({ offset: 1, transform: `translate3d(0,0,0)` }, styles),
|
|
29
|
+
]);
|
|
30
|
+
if (isReset) {
|
|
31
|
+
swipeAnimation.destroy();
|
|
32
|
+
const leaveAnimation = createAnimation()
|
|
33
|
+
.addElement(el)
|
|
34
|
+
.duration(300)
|
|
35
|
+
.easing('ease-out')
|
|
36
|
+
.beforeStyles({
|
|
37
|
+
zIndex: zIndex,
|
|
38
|
+
})
|
|
39
|
+
.fromTo('transform', el.style.transform, `translate3d(${viewportOffset}px,0,0)`)
|
|
40
|
+
.afterClearStyles(['z-index', 'transform']);
|
|
41
|
+
leaveAnimation.play().then(() => leaveAnimation.destroy());
|
|
42
|
+
}
|
|
43
|
+
if (!isFinal) {
|
|
44
|
+
swipeAnimation.progressStart(true, progress);
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
swipeAnimation.destroy();
|
|
48
|
+
const expandAnimation = createAnimation()
|
|
49
|
+
.addElement(el)
|
|
50
|
+
.duration(300)
|
|
51
|
+
.easing('ease-out')
|
|
52
|
+
.beforeStyles({
|
|
53
|
+
zIndex: zIndex,
|
|
54
|
+
})
|
|
55
|
+
.fromTo('transform', el.style.transform, `translate3d(0,0,0)`)
|
|
56
|
+
.afterClearStyles(['z-index', 'transform']);
|
|
57
|
+
expandAnimation.play();
|
|
58
|
+
}
|
|
59
|
+
};
|
|
@@ -79,11 +79,7 @@ ion-item-sliding .item {
|
|
|
79
79
|
}
|
|
80
80
|
|
|
81
81
|
.item-sliding-active-swipe-end .item-options-end .item-option-expandable {
|
|
82
|
-
/* stylelint-disable-next-line property-disallowed-list */
|
|
83
|
-
padding-left: 100%;
|
|
84
82
|
order: 1;
|
|
85
|
-
transition-duration: 0.6s;
|
|
86
|
-
transition-property: padding-left;
|
|
87
83
|
}
|
|
88
84
|
:host-context([dir=rtl]) .item-sliding-active-swipe-end .item-options-end .item-option-expandable {
|
|
89
85
|
order: -1;
|
|
@@ -99,6 +95,14 @@ ion-item-sliding .item {
|
|
|
99
95
|
}
|
|
100
96
|
}
|
|
101
97
|
|
|
98
|
+
.item-sliding-animation-legacy.item-sliding-active-swipe-end .item-options-end .item-option-expandable,
|
|
99
|
+
.item-sliding-animation-modern.item-sliding-active-swipe-end .item-options-end .item-option-expandable {
|
|
100
|
+
/* stylelint-disable-next-line property-disallowed-list */
|
|
101
|
+
padding-left: 100%;
|
|
102
|
+
transition-duration: 0.6s;
|
|
103
|
+
transition-property: padding-left;
|
|
104
|
+
}
|
|
105
|
+
|
|
102
106
|
.item-sliding-active-swipe-start .item-options-start .item-option-expandable {
|
|
103
107
|
/* stylelint-disable-next-line property-disallowed-list */
|
|
104
108
|
padding-right: 100%;
|
|
@@ -2,10 +2,14 @@
|
|
|
2
2
|
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
3
|
*/
|
|
4
4
|
import { Host, h } from "@stencil/core";
|
|
5
|
+
import { supportsWebAnimations } from "../../utils/animation/animation";
|
|
5
6
|
import { findClosestIonContent, disableContentScrollY, resetContentScrollY } from "../../utils/content/index";
|
|
6
7
|
import { isEndSide } from "../../utils/helpers";
|
|
8
|
+
import { printIonWarning } from "../../utils/logging/index";
|
|
9
|
+
import { isRTL } from "../../utils/rtl/index";
|
|
7
10
|
import { watchForOptions } from "../../utils/watch-options";
|
|
8
11
|
import { getIonMode } from "../../global/ionic-global";
|
|
12
|
+
import { slidingItemAnimation } from "./animations/item-sliding-options";
|
|
9
13
|
const SWIPE_MARGIN = 30;
|
|
10
14
|
const ELASTIC_FACTOR = 0.55;
|
|
11
15
|
let openSlidingItem;
|
|
@@ -22,6 +26,7 @@ export class ItemSliding {
|
|
|
22
26
|
this.initialContentScrollY = true;
|
|
23
27
|
this.state = 2 /* SlidingState.Disabled */;
|
|
24
28
|
this.disabled = false;
|
|
29
|
+
this.animationType = 'legacy';
|
|
25
30
|
}
|
|
26
31
|
disabledChanged() {
|
|
27
32
|
if (this.gesture) {
|
|
@@ -70,6 +75,12 @@ export class ItemSliding {
|
|
|
70
75
|
this.mutationObserver = undefined;
|
|
71
76
|
}
|
|
72
77
|
}
|
|
78
|
+
componentWillLoad() {
|
|
79
|
+
if (!supportsWebAnimations && this.animationType === 'modern') {
|
|
80
|
+
printIonWarning('Animation type "modern" needs Web Animations API support. Falling back to "legacy".');
|
|
81
|
+
this.animationType = 'legacy';
|
|
82
|
+
}
|
|
83
|
+
}
|
|
73
84
|
/**
|
|
74
85
|
* Get the amount the item is open in pixels.
|
|
75
86
|
*/
|
|
@@ -174,6 +185,20 @@ export class ItemSliding {
|
|
|
174
185
|
return this.rightOptions;
|
|
175
186
|
}
|
|
176
187
|
}
|
|
188
|
+
/**
|
|
189
|
+
* Given a side, return the width of the options on that side.
|
|
190
|
+
*
|
|
191
|
+
* @param side The side of the options to get the width for.
|
|
192
|
+
*/
|
|
193
|
+
getOptionsWidth(side) {
|
|
194
|
+
if (side === 'start') {
|
|
195
|
+
return this.optsWidthLeftSide;
|
|
196
|
+
}
|
|
197
|
+
else if (side === 'end') {
|
|
198
|
+
return this.optsWidthRightSide;
|
|
199
|
+
}
|
|
200
|
+
return 0;
|
|
201
|
+
}
|
|
177
202
|
async updateOptions() {
|
|
178
203
|
const options = this.el.querySelectorAll('ion-item-options');
|
|
179
204
|
let sides = 0;
|
|
@@ -321,7 +346,8 @@ export class ItemSliding {
|
|
|
321
346
|
if (!this.item) {
|
|
322
347
|
return;
|
|
323
348
|
}
|
|
324
|
-
const { el } = this;
|
|
349
|
+
const { el, animationType } = this;
|
|
350
|
+
const rtl = isRTL(el);
|
|
325
351
|
const style = this.item.style;
|
|
326
352
|
this.openAmount = openAmount;
|
|
327
353
|
if (isFinal) {
|
|
@@ -365,14 +391,51 @@ export class ItemSliding {
|
|
|
365
391
|
}, 600);
|
|
366
392
|
openSlidingItem = undefined;
|
|
367
393
|
style.transform = '';
|
|
394
|
+
if (animationType === 'modern') {
|
|
395
|
+
this.animateSlidingItemOptions(0, rtl);
|
|
396
|
+
}
|
|
368
397
|
return;
|
|
369
398
|
}
|
|
370
399
|
style.transform = `translate3d(${-openAmount}px,0,0)`;
|
|
400
|
+
if (animationType === 'modern') {
|
|
401
|
+
this.animateSlidingItemOptions(openAmount, rtl);
|
|
402
|
+
}
|
|
371
403
|
this.ionDrag.emit({
|
|
372
404
|
amount: openAmount,
|
|
373
405
|
ratio: this.getSlidingRatioSync(),
|
|
374
406
|
});
|
|
375
407
|
}
|
|
408
|
+
animateSlidingItemOptions(openAmount, isRTL) {
|
|
409
|
+
var _a;
|
|
410
|
+
/**
|
|
411
|
+
* The total width of the 'processed' options.
|
|
412
|
+
* Used to calculate the offset to move each option off the
|
|
413
|
+
* screen, on top of each other.
|
|
414
|
+
*/
|
|
415
|
+
let optionWidthOffset = 0;
|
|
416
|
+
const side = this.state === 16 /* SlidingState.Start */ ? 'start' : 'end';
|
|
417
|
+
const options = Array.from(((_a = this.getOptions(side)) === null || _a === void 0 ? void 0 : _a.querySelectorAll('ion-item-option')) || []);
|
|
418
|
+
const optsWidth = this.getOptionsWidth(side);
|
|
419
|
+
const progress = Math.abs(openAmount / optsWidth);
|
|
420
|
+
options.forEach((option, index) => {
|
|
421
|
+
let isFinal = false;
|
|
422
|
+
let zIndex;
|
|
423
|
+
let viewportOffset = 0;
|
|
424
|
+
const isReset = openAmount === 0;
|
|
425
|
+
if (side === 'start') {
|
|
426
|
+
viewportOffset = isRTL ? -1 * (optsWidth - optionWidthOffset) : -1 * (option.clientWidth + optionWidthOffset);
|
|
427
|
+
isFinal = openAmount <= -optsWidth;
|
|
428
|
+
zIndex = isRTL ? undefined : options.length - index;
|
|
429
|
+
}
|
|
430
|
+
else {
|
|
431
|
+
viewportOffset = isRTL ? optionWidthOffset + option.clientWidth : optsWidth - optionWidthOffset;
|
|
432
|
+
isFinal = openAmount >= optsWidth;
|
|
433
|
+
zIndex = isRTL ? options.length - index : undefined;
|
|
434
|
+
}
|
|
435
|
+
slidingItemAnimation(option, viewportOffset, progress, isFinal, isReset, zIndex);
|
|
436
|
+
optionWidthOffset += option.clientWidth;
|
|
437
|
+
});
|
|
438
|
+
}
|
|
376
439
|
getSlidingRatioSync() {
|
|
377
440
|
if (this.openAmount > 0) {
|
|
378
441
|
return this.openAmount / this.optsWidthRightSide;
|
|
@@ -386,13 +449,15 @@ export class ItemSliding {
|
|
|
386
449
|
}
|
|
387
450
|
render() {
|
|
388
451
|
const mode = getIonMode(this);
|
|
452
|
+
const { state, animationType } = this;
|
|
389
453
|
return (h(Host, { class: {
|
|
390
454
|
[mode]: true,
|
|
391
|
-
|
|
392
|
-
'item-sliding-active-
|
|
393
|
-
'item-sliding-active-options-
|
|
394
|
-
'item-sliding-active-
|
|
395
|
-
'item-sliding-active-swipe-
|
|
455
|
+
[`item-sliding-animation-${animationType}`]: true,
|
|
456
|
+
'item-sliding-active-slide': state !== 2 /* SlidingState.Disabled */,
|
|
457
|
+
'item-sliding-active-options-end': (state & 8 /* SlidingState.End */) !== 0,
|
|
458
|
+
'item-sliding-active-options-start': (state & 16 /* SlidingState.Start */) !== 0,
|
|
459
|
+
'item-sliding-active-swipe-end': (state & 32 /* SlidingState.SwipeEnd */) !== 0,
|
|
460
|
+
'item-sliding-active-swipe-start': (state & 64 /* SlidingState.SwipeStart */) !== 0,
|
|
396
461
|
} }));
|
|
397
462
|
}
|
|
398
463
|
static get is() { return "ion-item-sliding"; }
|
|
@@ -425,6 +490,24 @@ export class ItemSliding {
|
|
|
425
490
|
"attribute": "disabled",
|
|
426
491
|
"reflect": false,
|
|
427
492
|
"defaultValue": "false"
|
|
493
|
+
},
|
|
494
|
+
"animationType": {
|
|
495
|
+
"type": "string",
|
|
496
|
+
"mutable": false,
|
|
497
|
+
"complexType": {
|
|
498
|
+
"original": "'modern' | 'legacy'",
|
|
499
|
+
"resolved": "\"legacy\" | \"modern\"",
|
|
500
|
+
"references": {}
|
|
501
|
+
},
|
|
502
|
+
"required": false,
|
|
503
|
+
"optional": false,
|
|
504
|
+
"docs": {
|
|
505
|
+
"tags": [],
|
|
506
|
+
"text": "Specifies the animation behavior for sliding item options.\nYou can choose between two available options: \"modern\" and \"legacy\".\n\n- \"legacy\": The item will be swiped to reveal the option buttons beneath it.\n- \"modern\": As the item is swiped, all item options will smoothly and gradually reveal themselves.\n\nThe \"modern\" animation type requires the [Web Animations API](https://developer.mozilla.org/en-US/docs/Web/API/Web_Animations_API).\nCheck [Browser Support](https://caniuse.com/web-animation) for more information."
|
|
507
|
+
},
|
|
508
|
+
"attribute": "animation-type",
|
|
509
|
+
"reflect": false,
|
|
510
|
+
"defaultValue": "'legacy'"
|
|
428
511
|
}
|
|
429
512
|
};
|
|
430
513
|
}
|
|
@@ -1,36 +1,8 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
3
|
*/
|
|
4
|
-
import AxeBuilder from "@axe-core/playwright";
|
|
5
|
-
import { expect } from "@playwright/test";
|
|
6
4
|
import { configs, test } from "../../../../utils/test/playwright/index";
|
|
7
5
|
import { testSlidingItem } from "../test.utils";
|
|
8
|
-
configs({ directions: ['ltr'], themes: ['light', 'dark'] }).forEach(({ title, config }) => {
|
|
9
|
-
test.describe(title('item-sliding: a11y for ion-color()'), () => {
|
|
10
|
-
test('should not have accessibility violations', async ({ page }) => {
|
|
11
|
-
await page.setContent(`
|
|
12
|
-
<main>
|
|
13
|
-
<ion-item-sliding id="axe">
|
|
14
|
-
<ion-item>
|
|
15
|
-
<ion-label>Sliding Item with End Options</ion-label>
|
|
16
|
-
</ion-item>
|
|
17
|
-
|
|
18
|
-
<ion-item-options>
|
|
19
|
-
<ion-item-option>Favorite</ion-item-option>
|
|
20
|
-
<ion-item-option class="ion-activated">Activated</ion-item-option>
|
|
21
|
-
</ion-item-options>
|
|
22
|
-
</ion-item-sliding>
|
|
23
|
-
</main>
|
|
24
|
-
`, config);
|
|
25
|
-
await page.locator(`#axe`).evaluate(async (el) => {
|
|
26
|
-
await el.open('end');
|
|
27
|
-
});
|
|
28
|
-
await page.waitForChanges();
|
|
29
|
-
const results = await new AxeBuilder({ page }).analyze();
|
|
30
|
-
expect(results.violations).toEqual([]);
|
|
31
|
-
});
|
|
32
|
-
});
|
|
33
|
-
});
|
|
34
6
|
/**
|
|
35
7
|
* This behavior does not vary across directions
|
|
36
8
|
*/
|
|
@@ -15,33 +15,70 @@ configs().forEach(({ title, screenshot, config }) => {
|
|
|
15
15
|
test.beforeEach(async ({ page }) => {
|
|
16
16
|
await page.goto(`/src/components/item-sliding/test/basic`, config);
|
|
17
17
|
});
|
|
18
|
-
test.describe('
|
|
19
|
-
test('
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
18
|
+
test.describe('legacy animation', () => {
|
|
19
|
+
test.describe('start options', () => {
|
|
20
|
+
test('should not have visual regressions', async ({ page }) => {
|
|
21
|
+
const item = page.locator('#item2');
|
|
22
|
+
/**
|
|
23
|
+
* Negative dragByX value to drag element from the right to the left
|
|
24
|
+
* to reveal the options on the right side.
|
|
25
|
+
* Positive dragByX value to drag element from the left to the right
|
|
26
|
+
* to reveal the options on the left side.
|
|
27
|
+
*/
|
|
28
|
+
const dragByX = config.direction === 'rtl' ? -150 : 150;
|
|
29
|
+
await dragElementBy(item, page, dragByX);
|
|
30
|
+
await page.waitForChanges();
|
|
31
|
+
await expect(item).toHaveScreenshot(screenshot('item-sliding-start'));
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
test.describe('end options', () => {
|
|
35
|
+
test('should not have visual regressions', async ({ page }) => {
|
|
36
|
+
const item = page.locator('#item2');
|
|
37
|
+
/**
|
|
38
|
+
* Negative dragByX value to drag element from the right to the left
|
|
39
|
+
* to reveal the options on the right side.
|
|
40
|
+
* Positive dragByX value to drag element from the left to the right
|
|
41
|
+
* to reveal the options on the left side.
|
|
42
|
+
*/
|
|
43
|
+
const dragByX = config.direction === 'rtl' ? 150 : -150;
|
|
44
|
+
await dragElementBy(item, page, dragByX);
|
|
45
|
+
await expect(item).toHaveScreenshot(screenshot('item-sliding-end'));
|
|
46
|
+
});
|
|
31
47
|
});
|
|
32
48
|
});
|
|
33
|
-
test.describe('
|
|
34
|
-
test('
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
49
|
+
test.describe('modern animation', () => {
|
|
50
|
+
test.describe('start options', () => {
|
|
51
|
+
test('should not have visual regressions', async ({ page }) => {
|
|
52
|
+
const useModernAnimationBtn = page.locator('#useModernAnimation');
|
|
53
|
+
await useModernAnimationBtn.click();
|
|
54
|
+
const item = page.locator('#item2');
|
|
55
|
+
/**
|
|
56
|
+
* Negative dragByX value to drag element from the right to the left
|
|
57
|
+
* to reveal the options on the right side.
|
|
58
|
+
* Positive dragByX value to drag element from the left to the right
|
|
59
|
+
* to reveal the options on the left side.
|
|
60
|
+
*/
|
|
61
|
+
const dragByX = config.direction === 'rtl' ? -150 : 150;
|
|
62
|
+
await dragElementBy(item, page, dragByX);
|
|
63
|
+
await page.waitForChanges();
|
|
64
|
+
await expect(item).toHaveScreenshot(screenshot('modern-item-sliding-start'));
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
test.describe('end options', () => {
|
|
68
|
+
test('should not have visual regressions', async ({ page }) => {
|
|
69
|
+
const useModernAnimationBtn = page.locator('#useModernAnimation');
|
|
70
|
+
await useModernAnimationBtn.click();
|
|
71
|
+
const item = page.locator('#item2');
|
|
72
|
+
/**
|
|
73
|
+
* Negative dragByX value to drag element from the right to the left
|
|
74
|
+
* to reveal the options on the right side.
|
|
75
|
+
* Positive dragByX value to drag element from the left to the right
|
|
76
|
+
* to reveal the options on the left side.
|
|
77
|
+
*/
|
|
78
|
+
const dragByX = config.direction === 'rtl' ? 150 : -150;
|
|
79
|
+
await dragElementBy(item, page, dragByX);
|
|
80
|
+
await expect(item).toHaveScreenshot(screenshot('modern-item-sliding-end'));
|
|
81
|
+
});
|
|
45
82
|
});
|
|
46
83
|
});
|
|
47
84
|
});
|
|
@@ -348,7 +348,7 @@
|
|
|
348
348
|
:host-context(.ion-focused).label-floating:not(.ion-color),
|
|
349
349
|
:host-context(.item-has-focus).label-stacked:not(.ion-color),
|
|
350
350
|
:host-context(.item-has-focus).label-floating:not(.ion-color) {
|
|
351
|
-
color: var(--ion-color-primary, #
|
|
351
|
+
color: var(--ion-color-primary, #3880ff);
|
|
352
352
|
}
|
|
353
353
|
|
|
354
354
|
:host-context(.ion-focused.ion-color).label-stacked:not(.ion-color),
|