@ionic/core 8.0.0-dev.11712850753.10c4a960 → 8.0.0-dev.11713809015.1aabd368
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/checkbox.js +2 -2
- package/components/ion-content.js +4 -6
- package/components/ion-datetime-button.js +1 -1
- package/components/ion-datetime.js +13 -15
- package/components/ion-fab-button.js +2 -2
- package/components/ion-fab-list.js +2 -2
- package/components/ion-fab.js +2 -2
- package/components/ion-footer.js +2 -2
- package/components/ion-grid.js +2 -2
- package/components/ion-header.js +2 -2
- package/components/ion-img.js +1 -1
- package/components/ion-infinite-scroll-content.js +2 -2
- package/components/ion-infinite-scroll.js +1 -1
- package/components/ion-input-password-toggle.js +3 -3
- package/components/ion-input.js +4 -8
- package/components/ion-item-divider.js +2 -2
- package/components/ion-item-group.js +1 -1
- package/components/ion-item-option.js +2 -2
- package/components/ion-item-options.js +1 -1
- package/components/ion-item-sliding.js +1 -1
- package/components/ion-loading.js +2 -2
- package/components/ion-menu-button.js +2 -2
- package/components/ion-menu-toggle.js +2 -2
- package/components/ion-menu.js +2 -2
- package/components/ion-modal.js +7 -9
- package/components/ion-nav-link.js +1 -1
- package/components/ion-nav.js +1 -1
- package/components/ion-note.js +2 -2
- package/components/ion-picker-legacy.js +2 -2
- package/components/ion-progress-bar.js +1 -1
- package/components/ion-range.js +3 -3
- package/components/ion-refresher-content.js +1 -1
- package/components/ion-refresher.js +1 -1
- package/components/ion-reorder-group.js +1 -1
- package/components/ion-reorder.js +1 -1
- package/components/ion-router-link.js +2 -2
- package/components/ion-router-outlet.js +1 -1
- package/components/ion-row.js +1 -1
- package/components/ion-searchbar.js +4 -4
- package/components/ion-segment-button.js +3 -3
- package/components/ion-segment.js +2 -2
- package/components/ion-select-option.js +1 -1
- package/components/ion-select.js +2 -2
- package/components/ion-skeleton-text.js +2 -2
- package/components/ion-split-pane.js +2 -2
- package/components/ion-tab-bar.js +2 -2
- package/components/ion-tab-button.js +2 -2
- package/components/ion-tab.js +2 -2
- package/components/ion-tabs.js +1 -1
- package/components/ion-text.js +2 -2
- package/components/ion-textarea.js +2 -2
- package/components/ion-thumbnail.js +1 -1
- package/components/ion-title.js +2 -2
- package/components/ion-toast.js +2 -2
- package/components/ion-toggle.js +5 -5
- package/components/ion-toolbar.js +2 -2
- package/components/label.js +2 -2
- package/components/list-header.js +2 -2
- package/components/list.js +1 -1
- package/components/overlays.js +2 -3
- package/components/picker-column-option.js +2 -2
- package/components/picker-column.js +134 -14
- package/components/picker-column2.js +2 -2
- package/components/picker.js +2 -2
- package/components/popover.js +4 -6
- package/components/radio-group.js +1 -1
- package/components/radio.js +5 -5
- package/components/ripple-effect.js +1 -1
- package/components/select-popover.js +1 -1
- package/components/spinner.js +1 -1
- package/css/palettes/dark.always.css +1 -1
- package/css/palettes/dark.always.css.map +1 -1
- package/css/palettes/dark.class.css +1 -1
- package/css/palettes/dark.class.css.map +1 -1
- package/css/palettes/dark.system.css +1 -1
- package/css/palettes/dark.system.css.map +1 -1
- package/dist/cjs/index.cjs.js +1 -1
- package/dist/cjs/ion-action-sheet.cjs.entry.js +1 -1
- package/dist/cjs/ion-alert.cjs.entry.js +1 -1
- package/dist/cjs/ion-app_8.cjs.entry.js +13 -14
- package/dist/cjs/ion-avatar_3.cjs.entry.js +1 -1
- package/dist/cjs/ion-checkbox.cjs.entry.js +2 -2
- package/dist/cjs/ion-col_3.cjs.entry.js +3 -3
- package/dist/cjs/ion-datetime-button.cjs.entry.js +1 -1
- package/dist/cjs/ion-datetime_3.cjs.entry.js +18 -20
- package/dist/cjs/ion-fab_3.cjs.entry.js +6 -6
- package/dist/cjs/ion-img.cjs.entry.js +1 -1
- package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +3 -3
- package/dist/cjs/ion-input-password-toggle.cjs.entry.js +3 -3
- package/dist/cjs/ion-input.cjs.entry.js +4 -7
- package/dist/cjs/ion-item-option_3.cjs.entry.js +4 -4
- package/dist/cjs/ion-item_8.cjs.entry.js +12 -12
- package/dist/cjs/ion-loading.cjs.entry.js +3 -3
- package/dist/cjs/ion-menu_3.cjs.entry.js +7 -7
- package/dist/cjs/ion-modal.cjs.entry.js +7 -8
- package/dist/cjs/ion-nav_2.cjs.entry.js +2 -2
- package/dist/cjs/ion-picker-column-option.cjs.entry.js +2 -2
- package/dist/cjs/ion-picker-column.cjs.entry.js +132 -14
- package/dist/cjs/ion-picker.cjs.entry.js +2 -2
- package/dist/cjs/ion-popover.cjs.entry.js +4 -5
- package/dist/cjs/ion-progress-bar.cjs.entry.js +1 -1
- package/dist/cjs/ion-radio_2.cjs.entry.js +6 -6
- package/dist/cjs/ion-range.cjs.entry.js +3 -3
- package/dist/cjs/ion-refresher_2.cjs.entry.js +2 -2
- package/dist/cjs/ion-reorder_2.cjs.entry.js +2 -2
- package/dist/cjs/ion-ripple-effect.cjs.entry.js +1 -1
- package/dist/cjs/ion-route_4.cjs.entry.js +2 -2
- package/dist/cjs/ion-searchbar.cjs.entry.js +4 -4
- package/dist/cjs/ion-segment_2.cjs.entry.js +5 -5
- package/dist/cjs/ion-select_3.cjs.entry.js +5 -5
- package/dist/cjs/ion-spinner.cjs.entry.js +1 -1
- package/dist/cjs/ion-split-pane.cjs.entry.js +2 -2
- package/dist/cjs/ion-tab-bar_2.cjs.entry.js +4 -4
- package/dist/cjs/ion-tab_2.cjs.entry.js +3 -3
- package/dist/cjs/ion-text.cjs.entry.js +2 -2
- package/dist/cjs/ion-textarea.cjs.entry.js +2 -2
- package/dist/cjs/ion-toast.cjs.entry.js +3 -3
- package/dist/cjs/ion-toggle.cjs.entry.js +5 -5
- package/dist/cjs/ionic.cjs.js +1 -1
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/{overlays-66fcac49.js → overlays-6487955a.js} +1 -3
- package/dist/collection/components/checkbox/checkbox.ios.css +1 -0
- package/dist/collection/components/checkbox/checkbox.md.css +1 -0
- package/dist/collection/components/content/content.js +4 -23
- package/dist/collection/components/datetime/datetime.js +13 -15
- package/dist/collection/components/datetime-button/datetime-button.js +1 -1
- package/dist/collection/components/fab/fab.js +2 -2
- package/dist/collection/components/fab-button/fab-button.js +2 -2
- package/dist/collection/components/fab-list/fab-list.js +2 -2
- package/dist/collection/components/footer/footer.js +2 -2
- package/dist/collection/components/grid/grid.js +2 -2
- package/dist/collection/components/header/header.js +2 -2
- package/dist/collection/components/img/img.js +1 -1
- package/dist/collection/components/infinite-scroll/infinite-scroll.js +1 -1
- package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.js +2 -2
- package/dist/collection/components/input/input.js +4 -24
- package/dist/collection/components/input/test/input.spec.js +0 -13
- package/dist/collection/components/input-password-toggle/input-password-toggle.js +3 -3
- package/dist/collection/components/item-divider/item-divider.js +2 -2
- package/dist/collection/components/item-group/item-group.js +1 -1
- package/dist/collection/components/item-option/item-option.js +2 -2
- package/dist/collection/components/item-options/item-options.js +1 -1
- package/dist/collection/components/item-sliding/item-sliding.js +1 -1
- package/dist/collection/components/label/label.js +2 -2
- package/dist/collection/components/list/list.js +1 -1
- package/dist/collection/components/list-header/list-header.js +2 -2
- package/dist/collection/components/loading/loading.js +2 -2
- package/dist/collection/components/menu/menu.js +2 -2
- package/dist/collection/components/menu-button/menu-button.js +2 -2
- package/dist/collection/components/menu-toggle/menu-toggle.js +2 -2
- package/dist/collection/components/modal/gestures/sheet.js +2 -3
- package/dist/collection/components/modal/modal.js +5 -24
- package/dist/collection/components/modal/test/basic/modal.spec.js +0 -19
- package/dist/collection/components/nav/nav.js +1 -1
- package/dist/collection/components/nav-link/nav-link.js +1 -1
- package/dist/collection/components/note/note.js +2 -2
- package/dist/collection/components/picker/picker.js +2 -2
- package/dist/collection/components/picker-column/picker-column.css +19 -0
- package/dist/collection/components/picker-column/picker-column.js +136 -13
- package/dist/collection/components/picker-column/test/picker-column.spec.js +103 -0
- package/dist/collection/components/picker-column-option/picker-column-option.js +2 -2
- package/dist/collection/components/picker-legacy/picker.js +2 -2
- package/dist/collection/components/picker-legacy-column/picker-column.js +2 -2
- package/dist/collection/components/popover/popover.js +4 -23
- package/dist/collection/components/popover/test/basic/popover.spec.js +0 -19
- package/dist/collection/components/progress-bar/progress-bar.js +1 -1
- package/dist/collection/components/radio/radio.ios.css +1 -0
- package/dist/collection/components/radio/radio.js +3 -3
- package/dist/collection/components/radio/radio.md.css +1 -0
- package/dist/collection/components/radio-group/radio-group.js +1 -1
- package/dist/collection/components/range/range.js +3 -3
- package/dist/collection/components/refresher/refresher.js +1 -1
- package/dist/collection/components/refresher-content/refresher-content.js +1 -1
- package/dist/collection/components/reorder/reorder.js +1 -1
- package/dist/collection/components/reorder-group/reorder-group.js +1 -1
- package/dist/collection/components/ripple-effect/ripple-effect.js +1 -1
- package/dist/collection/components/router-link/router-link.js +2 -2
- package/dist/collection/components/router-outlet/router-outlet.js +1 -1
- package/dist/collection/components/row/row.js +1 -1
- package/dist/collection/components/searchbar/searchbar.js +4 -4
- package/dist/collection/components/segment/segment.js +2 -2
- package/dist/collection/components/segment-button/segment-button.js +3 -3
- package/dist/collection/components/select/select.js +2 -2
- package/dist/collection/components/select-option/select-option.js +1 -1
- package/dist/collection/components/select-popover/select-popover.js +1 -1
- package/dist/collection/components/skeleton-text/skeleton-text.js +2 -2
- package/dist/collection/components/spinner/spinner.js +1 -1
- package/dist/collection/components/split-pane/split-pane.js +2 -2
- package/dist/collection/components/tab/tab.js +2 -2
- package/dist/collection/components/tab-bar/tab-bar.js +2 -2
- package/dist/collection/components/tab-button/tab-button.js +2 -2
- package/dist/collection/components/tabs/tabs.js +1 -1
- package/dist/collection/components/text/text.js +2 -2
- package/dist/collection/components/textarea/textarea.js +2 -2
- package/dist/collection/components/thumbnail/thumbnail.js +1 -1
- package/dist/collection/components/title/title.js +2 -2
- package/dist/collection/components/toast/toast.js +2 -2
- package/dist/collection/components/toggle/toggle.ios.css +1 -0
- package/dist/collection/components/toggle/toggle.js +3 -3
- package/dist/collection/components/toggle/toggle.md.css +1 -0
- package/dist/collection/components/toolbar/toolbar.js +2 -2
- package/dist/collection/utils/overlays.js +1 -2
- package/dist/docs.json +1 -96
- package/dist/esm/index.js +1 -1
- package/dist/esm/ion-action-sheet.entry.js +1 -1
- package/dist/esm/ion-alert.entry.js +1 -1
- package/dist/esm/ion-app_8.entry.js +13 -14
- package/dist/esm/ion-avatar_3.entry.js +1 -1
- package/dist/esm/ion-checkbox.entry.js +2 -2
- package/dist/esm/ion-col_3.entry.js +3 -3
- package/dist/esm/ion-datetime-button.entry.js +1 -1
- package/dist/esm/ion-datetime_3.entry.js +18 -20
- package/dist/esm/ion-fab_3.entry.js +6 -6
- package/dist/esm/ion-img.entry.js +1 -1
- package/dist/esm/ion-infinite-scroll_2.entry.js +3 -3
- package/dist/esm/ion-input-password-toggle.entry.js +3 -3
- package/dist/esm/ion-input.entry.js +4 -7
- package/dist/esm/ion-item-option_3.entry.js +4 -4
- package/dist/esm/ion-item_8.entry.js +12 -12
- package/dist/esm/ion-loading.entry.js +3 -3
- package/dist/esm/ion-menu_3.entry.js +7 -7
- package/dist/esm/ion-modal.entry.js +7 -8
- package/dist/esm/ion-nav_2.entry.js +2 -2
- package/dist/esm/ion-picker-column-option.entry.js +2 -2
- package/dist/esm/ion-picker-column.entry.js +132 -14
- package/dist/esm/ion-picker.entry.js +2 -2
- package/dist/esm/ion-popover.entry.js +4 -5
- package/dist/esm/ion-progress-bar.entry.js +1 -1
- package/dist/esm/ion-radio_2.entry.js +6 -6
- package/dist/esm/ion-range.entry.js +3 -3
- package/dist/esm/ion-refresher_2.entry.js +2 -2
- package/dist/esm/ion-reorder_2.entry.js +2 -2
- package/dist/esm/ion-ripple-effect.entry.js +1 -1
- package/dist/esm/ion-route_4.entry.js +2 -2
- package/dist/esm/ion-searchbar.entry.js +4 -4
- package/dist/esm/ion-segment_2.entry.js +5 -5
- package/dist/esm/ion-select_3.entry.js +5 -5
- package/dist/esm/ion-spinner.entry.js +1 -1
- package/dist/esm/ion-split-pane.entry.js +2 -2
- package/dist/esm/ion-tab-bar_2.entry.js +4 -4
- package/dist/esm/ion-tab_2.entry.js +3 -3
- package/dist/esm/ion-text.entry.js +2 -2
- package/dist/esm/ion-textarea.entry.js +2 -2
- package/dist/esm/ion-toast.entry.js +3 -3
- package/dist/esm/ion-toggle.entry.js +5 -5
- package/dist/esm/ionic.js +1 -1
- package/dist/esm/loader.js +1 -1
- package/dist/esm/{overlays-634df4be.js → overlays-9472c98b.js} +2 -3
- 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-checkbox.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-password-toggle.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-option.entry.js +1 -1
- package/dist/esm-es5/ion-picker-column.entry.js +1 -1
- package/dist/esm-es5/ion-picker.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.js +1 -1
- package/dist/esm-es5/loader.js +1 -1
- package/dist/esm-es5/{overlays-634df4be.js → overlays-9472c98b.js} +1 -1
- package/dist/html.html-data.json +0 -24
- package/dist/ionic/index.esm.js +1 -1
- package/dist/ionic/ionic.esm.js +1 -1
- package/dist/ionic/p-0307a5ce.entry.js +4 -0
- package/dist/ionic/{p-64714af0.system.entry.js → p-04070329.system.entry.js} +1 -1
- package/dist/ionic/{p-5cf61334.system.entry.js → p-07ae133d.system.entry.js} +1 -1
- package/dist/ionic/{p-9ce13bcc.entry.js → p-0aa4682e.entry.js} +1 -1
- package/dist/ionic/{p-23a94a8e.system.entry.js → p-0bbb6edf.system.entry.js} +1 -1
- package/dist/ionic/{p-7820f3ab.system.entry.js → p-0ebb1fe7.system.entry.js} +1 -1
- package/dist/ionic/{p-5eafecd8.entry.js → p-0f2d99a6.entry.js} +1 -1
- package/dist/ionic/{p-d8ebc853.system.entry.js → p-100bedc4.system.entry.js} +1 -1
- package/dist/ionic/p-155f1939.entry.js +4 -0
- package/dist/ionic/{p-65e0d04e.system.entry.js → p-1672c4fd.system.entry.js} +2 -2
- package/dist/ionic/{p-61aa1ba6.entry.js → p-17978fce.entry.js} +1 -1
- package/dist/ionic/p-1c451f69.entry.js +4 -0
- package/dist/ionic/{p-f6f4f694.entry.js → p-1cff9cad.entry.js} +1 -1
- package/dist/ionic/{p-33444157.entry.js → p-1f9cdee2.entry.js} +1 -1
- package/dist/ionic/p-25575222.system.js +4 -0
- package/dist/ionic/{p-a70c90d8.entry.js → p-2e12bda2.entry.js} +1 -1
- package/dist/ionic/{p-715d10d2.system.entry.js → p-352f7037.system.entry.js} +1 -1
- package/dist/ionic/p-35722bba.system.entry.js +4 -0
- package/dist/ionic/{p-6c3c02d4.entry.js → p-35b9e842.entry.js} +1 -1
- package/dist/ionic/p-37a63e79.system.entry.js +4 -0
- package/dist/ionic/{p-1361399b.system.entry.js → p-3d6e882f.system.entry.js} +1 -1
- package/dist/ionic/{p-4264f999.system.entry.js → p-3e3b34f7.system.entry.js} +1 -1
- package/dist/ionic/{p-bf4609f9.system.entry.js → p-4196b2d1.system.entry.js} +1 -1
- package/dist/ionic/{p-0fad7a2d.system.entry.js → p-43505ff8.system.entry.js} +1 -1
- package/dist/ionic/{p-414d73bc.system.entry.js → p-4429fc97.system.entry.js} +1 -1
- package/dist/ionic/{p-33723893.system.entry.js → p-49b6fee0.system.entry.js} +1 -1
- package/dist/ionic/{p-fe246e19.system.entry.js → p-510578f3.system.entry.js} +1 -1
- package/dist/ionic/{p-8a6e15fc.system.entry.js → p-51b68ec9.system.entry.js} +1 -1
- package/dist/ionic/{p-ae21e7ab.entry.js → p-51ff648c.entry.js} +1 -1
- package/dist/ionic/p-5270f8e8.entry.js +4 -0
- package/dist/ionic/{p-9d9f20ce.system.entry.js → p-58ea73f7.system.entry.js} +1 -1
- package/dist/ionic/p-596e0cf8.system.entry.js +4 -0
- package/dist/ionic/p-5ae49f12.entry.js +4 -0
- package/dist/ionic/{p-69c8ec2a.system.entry.js → p-5b1273f4.system.entry.js} +1 -1
- package/dist/ionic/p-5d3f6707.entry.js +4 -0
- package/dist/ionic/{p-c8db6adb.entry.js → p-5da04d11.entry.js} +1 -1
- package/dist/ionic/p-5fa8587e.system.entry.js +4 -0
- package/dist/ionic/p-6771c0a9.system.entry.js +4 -0
- package/dist/ionic/{p-fb16b850.system.entry.js → p-68a1e274.system.entry.js} +1 -1
- package/dist/ionic/p-69bc14fd.entry.js +4 -0
- package/dist/ionic/{p-34272b1f.system.entry.js → p-6f4db5ce.system.entry.js} +1 -1
- package/dist/ionic/{p-8337ce33.system.entry.js → p-716ab5f8.system.entry.js} +1 -1
- package/dist/ionic/{p-3d72cae3.entry.js → p-7fc505bf.entry.js} +1 -1
- package/dist/ionic/{p-1bd294a2.entry.js → p-83321ee8.entry.js} +1 -1
- package/dist/ionic/p-83b070b7.entry.js +4 -0
- package/dist/ionic/{p-512cdc37.entry.js → p-896111fa.entry.js} +1 -1
- package/dist/ionic/p-89b59bd7.entry.js +4 -0
- package/dist/ionic/{p-32950317.system.entry.js → p-8bd567ba.system.entry.js} +1 -1
- package/dist/ionic/{p-db1d7caa.entry.js → p-8e9ac22d.entry.js} +1 -1
- package/dist/ionic/p-9540561f.entry.js +4 -0
- package/dist/ionic/p-9958874b.system.entry.js +4 -0
- package/dist/ionic/{p-240cac05.entry.js → p-99daf8b7.entry.js} +1 -1
- package/dist/ionic/{p-9e8cf5a2.system.entry.js → p-a1b4e619.system.entry.js} +1 -1
- package/dist/ionic/{p-f24e9676.system.js → p-a8f02173.system.js} +1 -1
- package/dist/ionic/{p-587643a6.system.entry.js → p-aa110ca0.system.entry.js} +1 -1
- package/dist/ionic/p-aa682cb9.system.entry.js +4 -0
- package/dist/ionic/{p-727255c2.entry.js → p-ab85debb.entry.js} +1 -1
- package/dist/ionic/p-ac9f44a8.system.entry.js +4 -0
- package/dist/ionic/p-bae993f0.entry.js +4 -0
- package/dist/ionic/{p-2d5e919f.entry.js → p-c04d5a75.entry.js} +1 -1
- package/dist/ionic/{p-fb1ee785.system.entry.js → p-c1d1d004.system.entry.js} +1 -1
- package/dist/ionic/{p-3001b2f5.entry.js → p-c41af68a.entry.js} +1 -1
- package/dist/ionic/p-c478747f.system.js +2 -2
- package/dist/ionic/{p-bd516c16.entry.js → p-c8f2b769.entry.js} +1 -1
- package/dist/ionic/{p-f4f3b780.entry.js → p-c99ccdc9.entry.js} +1 -1
- package/dist/ionic/{p-18609ea3.system.entry.js → p-c9c39c98.system.entry.js} +1 -1
- package/dist/ionic/p-d45c59a6.system.entry.js +4 -0
- package/dist/ionic/{p-17050343.system.entry.js → p-d8067ea4.system.entry.js} +1 -1
- package/dist/ionic/{p-23e0649d.entry.js → p-d8f66669.entry.js} +1 -1
- package/dist/ionic/{p-c872fcd2.entry.js → p-d98c0112.entry.js} +1 -1
- package/dist/ionic/{p-bcbce3d9.entry.js → p-dc1372e0.entry.js} +1 -1
- package/dist/ionic/p-df48edd6.entry.js +4 -0
- package/dist/ionic/{p-de3c33f3.entry.js → p-df6fa126.entry.js} +1 -1
- package/dist/ionic/{p-f96f7d38.entry.js → p-e8a0e731.entry.js} +1 -1
- package/dist/ionic/p-e8c7fa1b.system.entry.js +4 -0
- package/dist/ionic/{p-8bbc7271.entry.js → p-e955bf61.entry.js} +1 -1
- package/dist/ionic/{p-37ed0807.system.entry.js → p-ea2c16b5.system.entry.js} +2 -2
- package/dist/ionic/{p-4861159f.entry.js → p-f0392d49.entry.js} +1 -1
- package/dist/ionic/p-f4cb521c.js +4 -0
- package/dist/ionic/p-f818b01a.entry.js +4 -0
- package/dist/ionic/{p-745eb00b.system.entry.js → p-fab4ecad.system.entry.js} +1 -1
- package/dist/ionic/{p-c373bd37.system.entry.js → p-fb02eeec.system.entry.js} +1 -1
- package/dist/ionic/{p-ac6dd92b.system.entry.js → p-fb97326f.system.entry.js} +1 -1
- package/dist/ionic/{p-92210d07.entry.js → p-fbd30ec7.entry.js} +1 -1
- package/dist/ionic/{p-784d54d4.entry.js → p-fda4872f.entry.js} +1 -1
- package/dist/ionic/{p-5278521a.system.entry.js → p-ff2323ba.system.entry.js} +2 -2
- package/dist/types/components/content/content.d.ts +0 -8
- package/dist/types/components/input/input.d.ts +0 -4
- package/dist/types/components/modal/modal-interface.d.ts +0 -1
- package/dist/types/components/modal/modal.d.ts +0 -18
- package/dist/types/components/picker-column/picker-column.d.ts +33 -1
- package/dist/types/components/popover/popover-interface.d.ts +0 -1
- package/dist/types/components/popover/popover.d.ts +0 -18
- package/dist/types/components.d.ts +0 -32
- package/dist/types/utils/overlays.d.ts +0 -1
- package/hydrate/index.js +278 -172
- package/package.json +1 -1
- package/dist/collection/components/content/test/content.spec.js +0 -27
- package/dist/collection/components/datetime/test/overlay-roles/datetime.e2e.js +0 -34
- package/dist/ionic/p-07c88a2e.entry.js +0 -4
- package/dist/ionic/p-0d189eaf.entry.js +0 -4
- package/dist/ionic/p-14700c11.system.entry.js +0 -4
- package/dist/ionic/p-159a5b6a.system.entry.js +0 -4
- package/dist/ionic/p-1b235142.entry.js +0 -4
- package/dist/ionic/p-2b106d43.system.entry.js +0 -4
- package/dist/ionic/p-4e6ddce7.entry.js +0 -4
- package/dist/ionic/p-54f52179.system.entry.js +0 -4
- package/dist/ionic/p-73281e75.system.entry.js +0 -4
- package/dist/ionic/p-8370ef82.entry.js +0 -4
- package/dist/ionic/p-88250ff0.entry.js +0 -4
- package/dist/ionic/p-8b19c120.entry.js +0 -4
- package/dist/ionic/p-9399625f.entry.js +0 -4
- package/dist/ionic/p-95bc0add.system.entry.js +0 -4
- package/dist/ionic/p-9a45140d.system.entry.js +0 -4
- package/dist/ionic/p-aa4f2703.system.entry.js +0 -4
- package/dist/ionic/p-ab5db814.js +0 -4
- package/dist/ionic/p-be9f56eb.entry.js +0 -4
- package/dist/ionic/p-cec3bebe.entry.js +0 -4
- package/dist/ionic/p-cfdb1223.entry.js +0 -4
- package/dist/ionic/p-d104ba38.system.entry.js +0 -4
- package/dist/ionic/p-d2b175d3.entry.js +0 -4
- package/dist/ionic/p-d335115d.system.js +0 -4
- package/dist/ionic/p-e350ab4a.entry.js +0 -4
- package/dist/ionic/p-f31ef319.system.entry.js +0 -4
|
@@ -102,7 +102,7 @@ export class PickerColumn {
|
|
|
102
102
|
const enableHaptics = isPlatform('ios');
|
|
103
103
|
const { el, scrollEl } = this;
|
|
104
104
|
let timeout;
|
|
105
|
-
let activeEl = this.activeItem;
|
|
105
|
+
let { activeItem: activeEl } = this.activeItem;
|
|
106
106
|
const scrollCallback = () => {
|
|
107
107
|
raf(() => {
|
|
108
108
|
if (!scrollEl)
|
|
@@ -245,12 +245,121 @@ export class PickerColumn {
|
|
|
245
245
|
*/
|
|
246
246
|
this.el.classList.remove('picker-column-active');
|
|
247
247
|
};
|
|
248
|
+
/**
|
|
249
|
+
* Find the next enabled option after the active option.
|
|
250
|
+
* @param stride - How many options to "jump" over in order to select the next option.
|
|
251
|
+
* This can be used to implement PageUp/PageDown behaviors where pressing these keys
|
|
252
|
+
* scrolls the picker by more than 1 option. For example, a stride of 5 means select
|
|
253
|
+
* the enabled option 5 options after the active one. Note that the actual option selected
|
|
254
|
+
* may be past the stride if the option at the stride is disabled.
|
|
255
|
+
*/
|
|
256
|
+
this.findNextOption = (stride = 1) => {
|
|
257
|
+
const { activeItem } = this.activeItem;
|
|
258
|
+
if (!activeItem)
|
|
259
|
+
return null;
|
|
260
|
+
let prevNode = activeItem;
|
|
261
|
+
let node = activeItem.nextElementSibling;
|
|
262
|
+
while (node != null) {
|
|
263
|
+
if (stride > 0) {
|
|
264
|
+
stride--;
|
|
265
|
+
}
|
|
266
|
+
if (node.tagName === 'ION-PICKER-COLUMN-OPTION' && !node.disabled && stride === 0) {
|
|
267
|
+
return node;
|
|
268
|
+
}
|
|
269
|
+
prevNode = node;
|
|
270
|
+
// Use nextElementSibling instead of nextSibling to avoid text/comment nodes
|
|
271
|
+
node = node.nextElementSibling;
|
|
272
|
+
}
|
|
273
|
+
return prevNode;
|
|
274
|
+
};
|
|
275
|
+
/**
|
|
276
|
+
* Find the next enabled option after the active option.
|
|
277
|
+
* @param stride - How many options to "jump" over in order to select the next option.
|
|
278
|
+
* This can be used to implement PageUp/PageDown behaviors where pressing these keys
|
|
279
|
+
* scrolls the picker by more than 1 option. For example, a stride of 5 means select
|
|
280
|
+
* the enabled option 5 options before the active one. Note that the actual option selected
|
|
281
|
+
* may be past the stride if the option at the stride is disabled.
|
|
282
|
+
*/
|
|
283
|
+
this.findPreviousOption = (stride = 1) => {
|
|
284
|
+
const { activeItem } = this.activeItem;
|
|
285
|
+
if (!activeItem)
|
|
286
|
+
return null;
|
|
287
|
+
let nextNode = activeItem;
|
|
288
|
+
let node = activeItem.previousElementSibling;
|
|
289
|
+
while (node != null) {
|
|
290
|
+
if (stride > 0) {
|
|
291
|
+
stride--;
|
|
292
|
+
}
|
|
293
|
+
if (node.tagName === 'ION-PICKER-COLUMN-OPTION' && !node.disabled && stride === 0) {
|
|
294
|
+
return node;
|
|
295
|
+
}
|
|
296
|
+
nextNode = node;
|
|
297
|
+
// Use previousElementSibling instead of previousSibling to avoid text/comment nodes
|
|
298
|
+
node = node.previousElementSibling;
|
|
299
|
+
}
|
|
300
|
+
return nextNode;
|
|
301
|
+
};
|
|
302
|
+
this.onKeyDown = (ev) => {
|
|
303
|
+
let newOption = null;
|
|
304
|
+
switch (ev.key) {
|
|
305
|
+
case 'ArrowDown':
|
|
306
|
+
newOption = this.findNextOption();
|
|
307
|
+
break;
|
|
308
|
+
case 'ArrowUp':
|
|
309
|
+
newOption = this.findPreviousOption();
|
|
310
|
+
break;
|
|
311
|
+
case 'PageUp':
|
|
312
|
+
newOption = this.findPreviousOption(5);
|
|
313
|
+
break;
|
|
314
|
+
case 'PageDown':
|
|
315
|
+
newOption = this.findNextOption(5);
|
|
316
|
+
break;
|
|
317
|
+
case 'Home':
|
|
318
|
+
/**
|
|
319
|
+
* There is no guarantee that the first child will be an ion-picker-column-option,
|
|
320
|
+
* so we do not use firstElementChild.
|
|
321
|
+
*/
|
|
322
|
+
newOption = this.el.querySelector('ion-picker-column-option:first-of-type');
|
|
323
|
+
break;
|
|
324
|
+
case 'End':
|
|
325
|
+
/**
|
|
326
|
+
* There is no guarantee that the last child will be an ion-picker-column-option,
|
|
327
|
+
* so we do not use lastElementChild.
|
|
328
|
+
*/
|
|
329
|
+
newOption = this.el.querySelector('ion-picker-column-option:last-of-type');
|
|
330
|
+
break;
|
|
331
|
+
default:
|
|
332
|
+
break;
|
|
333
|
+
}
|
|
334
|
+
if (newOption !== null) {
|
|
335
|
+
this.value = newOption.value;
|
|
336
|
+
// This stops any default browser behavior such as scrolling
|
|
337
|
+
ev.preventDefault();
|
|
338
|
+
}
|
|
339
|
+
};
|
|
340
|
+
/**
|
|
341
|
+
* Render an element that overlays the column. This element is for assistive
|
|
342
|
+
* tech to allow users to navigate the column up/down. This element should receive
|
|
343
|
+
* focus as it listens for synthesized keyboard events as required by the
|
|
344
|
+
* slider role: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles/slider_role
|
|
345
|
+
*/
|
|
346
|
+
this.renderAssistiveFocusable = () => {
|
|
347
|
+
var _a;
|
|
348
|
+
const { activeItem, activeItemIndex } = this.activeItem;
|
|
349
|
+
const { el } = this;
|
|
350
|
+
const valueText = activeItem ? (_a = activeItem.getAttribute('aria-label')) !== null && _a !== void 0 ? _a : activeItem.innerText : '';
|
|
351
|
+
return (h("div", { class: "assistive-focusable", role: "slider", tabindex: this.disabled ? undefined : 0, "aria-label": this.ariaLabel, "aria-valuemin": 0, "aria-valuemax": el.childElementCount - 1, "aria-valuenow": activeItemIndex >= 0 ? activeItemIndex : 0, "aria-valuetext": valueText, "aria-orientation": "vertical", onKeyDown: (ev) => this.onKeyDown(ev) }));
|
|
352
|
+
};
|
|
353
|
+
this.ariaLabel = null;
|
|
248
354
|
this.isActive = false;
|
|
249
355
|
this.disabled = false;
|
|
250
356
|
this.value = undefined;
|
|
251
357
|
this.color = 'primary';
|
|
252
358
|
this.numericInput = false;
|
|
253
359
|
}
|
|
360
|
+
ariaLabelChanged(newValue) {
|
|
361
|
+
this.ariaLabel = newValue;
|
|
362
|
+
}
|
|
254
363
|
valueChange() {
|
|
255
364
|
if (this.isColumnVisible) {
|
|
256
365
|
/**
|
|
@@ -281,7 +390,8 @@ export class PickerColumn {
|
|
|
281
390
|
*/
|
|
282
391
|
const ev = entries[entries.length - 1];
|
|
283
392
|
if (ev.isIntersecting) {
|
|
284
|
-
const { activeItem
|
|
393
|
+
const { activeItem } = this.activeItem;
|
|
394
|
+
const { el } = this;
|
|
285
395
|
this.isColumnVisible = true;
|
|
286
396
|
/**
|
|
287
397
|
* Because this initial call to scrollActiveItemIntoView has to fire before
|
|
@@ -321,7 +431,8 @@ export class PickerColumn {
|
|
|
321
431
|
}
|
|
322
432
|
}
|
|
323
433
|
componentDidRender() {
|
|
324
|
-
const {
|
|
434
|
+
const { activeItem } = this.activeItem;
|
|
435
|
+
const { el, isColumnVisible, value } = this;
|
|
325
436
|
if (isColumnVisible && !activeItem) {
|
|
326
437
|
const firstOption = el.querySelector('ion-picker-column-option');
|
|
327
438
|
/**
|
|
@@ -338,7 +449,7 @@ export class PickerColumn {
|
|
|
338
449
|
}
|
|
339
450
|
/** @internal */
|
|
340
451
|
async scrollActiveItemIntoView(smooth = false) {
|
|
341
|
-
const activeEl = this.activeItem;
|
|
452
|
+
const { activeItem: activeEl } = this.activeItem;
|
|
342
453
|
if (activeEl) {
|
|
343
454
|
this.centerPickerItemInView(activeEl, smooth, false);
|
|
344
455
|
}
|
|
@@ -366,31 +477,39 @@ export class PickerColumn {
|
|
|
366
477
|
this.scrollEl.focus();
|
|
367
478
|
}
|
|
368
479
|
}
|
|
480
|
+
connectedCallback() {
|
|
481
|
+
var _a;
|
|
482
|
+
this.ariaLabel = (_a = this.el.getAttribute('aria-label')) !== null && _a !== void 0 ? _a : 'Select a value';
|
|
483
|
+
}
|
|
369
484
|
get activeItem() {
|
|
370
485
|
const { value } = this;
|
|
371
|
-
const options =
|
|
372
|
-
|
|
486
|
+
const options = this.el.querySelectorAll('ion-picker-column-option');
|
|
487
|
+
for (let i = 0; i <= options.length - 1; i++) {
|
|
488
|
+
const option = options[i];
|
|
373
489
|
/**
|
|
374
490
|
* If the whole picker column is disabled, the current value should appear active
|
|
375
491
|
* If the current value item is specifically disabled, it should not appear active
|
|
376
492
|
*/
|
|
377
|
-
if (
|
|
378
|
-
return
|
|
493
|
+
if (option.value === value && !option.disabled) {
|
|
494
|
+
return {
|
|
495
|
+
activeItem: option,
|
|
496
|
+
activeItemIndex: i,
|
|
497
|
+
};
|
|
379
498
|
}
|
|
380
|
-
|
|
381
|
-
}
|
|
499
|
+
}
|
|
500
|
+
return { activeItem: undefined, activeItemIndex: -1 };
|
|
382
501
|
}
|
|
383
502
|
render() {
|
|
384
503
|
const { color, disabled, isActive, numericInput } = this;
|
|
385
504
|
const mode = getIonMode(this);
|
|
386
|
-
return (h(Host, { key: '
|
|
505
|
+
return (h(Host, { key: '87534568ba47096dca1be00fee184052767087f5', class: createColorClasses(color, {
|
|
387
506
|
[mode]: true,
|
|
388
507
|
['picker-column-active']: isActive,
|
|
389
508
|
['picker-column-numeric-input']: numericInput,
|
|
390
509
|
['picker-column-disabled']: disabled,
|
|
391
|
-
}) }, h("slot", { key: '
|
|
510
|
+
}) }, this.renderAssistiveFocusable(), h("slot", { key: '8dedc4f294f1a6658a12151a765f6fa790f4d854', name: "prefix" }), h("div", { key: 'c82975dc3996d3ddb8dee12ad381ee733466a069', "aria-hidden": "true", class: "picker-opts", ref: (el) => {
|
|
392
511
|
this.scrollEl = el;
|
|
393
|
-
} }, h("div", { key: '
|
|
512
|
+
} }, h("div", { key: '2de49979f9339f4a9a384e115ea5a073b6467e50', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0"), h("div", { key: '304e0bcc506f4c4d35d053e95c85de9c9bdc303c', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0"), h("div", { key: '3da0eb1d7e1d8b196112f7d695447b40716eef1d', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0"), h("slot", { key: '43668a05c3eb39749bde1137e33872e1b406cba9' }), h("div", { key: '95d4ae922ad45aa541a70b08958b08a2d3c79fbe', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0"), h("div", { key: '412aca51c2d3b4cc1bcc1fffca68922db64f7745', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0"), h("div", { key: '2319fa61c7649dec3efa2ec2e7b93d5e9a775708', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0")), h("slot", { key: '010cee6ffdbe1a6d5331cb4e185b1aa0b6effd2d', name: "suffix" })));
|
|
394
513
|
}
|
|
395
514
|
static get is() { return "ion-picker-column"; }
|
|
396
515
|
static get encapsulation() { return "shadow"; }
|
|
@@ -490,6 +609,7 @@ export class PickerColumn {
|
|
|
490
609
|
}
|
|
491
610
|
static get states() {
|
|
492
611
|
return {
|
|
612
|
+
"ariaLabel": {},
|
|
493
613
|
"isActive": {}
|
|
494
614
|
};
|
|
495
615
|
}
|
|
@@ -594,6 +714,9 @@ export class PickerColumn {
|
|
|
594
714
|
static get elementRef() { return "el"; }
|
|
595
715
|
static get watchers() {
|
|
596
716
|
return [{
|
|
717
|
+
"propName": "aria-label",
|
|
718
|
+
"methodName": "ariaLabelChanged"
|
|
719
|
+
}, {
|
|
597
720
|
"propName": "value",
|
|
598
721
|
"methodName": "valueChange"
|
|
599
722
|
}];
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
|
+
*/
|
|
4
|
+
import { h } from "@stencil/core";
|
|
5
|
+
import { newSpecPage } from "@stencil/core/testing";
|
|
6
|
+
import { PickerColumn } from "../picker-column";
|
|
7
|
+
import { PickerColumnOption } from "../../picker-column-option/picker-column-option";
|
|
8
|
+
describe('picker-column: assistive element', () => {
|
|
9
|
+
beforeEach(() => {
|
|
10
|
+
const mockIntersectionObserver = jest.fn();
|
|
11
|
+
mockIntersectionObserver.mockReturnValue({
|
|
12
|
+
observe: () => null,
|
|
13
|
+
unobserve: () => null,
|
|
14
|
+
disconnect: () => null,
|
|
15
|
+
});
|
|
16
|
+
global.IntersectionObserver = mockIntersectionObserver;
|
|
17
|
+
});
|
|
18
|
+
it('should have a default label', async () => {
|
|
19
|
+
const page = await newSpecPage({
|
|
20
|
+
components: [PickerColumn],
|
|
21
|
+
template: () => h("ion-picker-column", null),
|
|
22
|
+
});
|
|
23
|
+
const pickerCol = page.body.querySelector('ion-picker-column');
|
|
24
|
+
const assistiveFocusable = pickerCol.shadowRoot.querySelector('.assistive-focusable');
|
|
25
|
+
expect(assistiveFocusable.getAttribute('aria-label')).not.toBe(null);
|
|
26
|
+
});
|
|
27
|
+
it('should have a custom label', async () => {
|
|
28
|
+
const page = await newSpecPage({
|
|
29
|
+
components: [PickerColumn],
|
|
30
|
+
template: () => h("ion-picker-column", { "aria-label": "my label" }),
|
|
31
|
+
});
|
|
32
|
+
const pickerCol = page.body.querySelector('ion-picker-column');
|
|
33
|
+
const assistiveFocusable = pickerCol.shadowRoot.querySelector('.assistive-focusable');
|
|
34
|
+
expect(assistiveFocusable.getAttribute('aria-label')).toBe('my label');
|
|
35
|
+
});
|
|
36
|
+
it('should update a custom label', async () => {
|
|
37
|
+
const page = await newSpecPage({
|
|
38
|
+
components: [PickerColumn],
|
|
39
|
+
template: () => h("ion-picker-column", null),
|
|
40
|
+
});
|
|
41
|
+
const pickerCol = page.body.querySelector('ion-picker-column');
|
|
42
|
+
const assistiveFocusable = pickerCol.shadowRoot.querySelector('.assistive-focusable');
|
|
43
|
+
pickerCol.setAttribute('aria-label', 'my label');
|
|
44
|
+
await page.waitForChanges();
|
|
45
|
+
expect(assistiveFocusable.getAttribute('aria-label')).toBe('my label');
|
|
46
|
+
});
|
|
47
|
+
it('should receive keyboard focus when enabled', async () => {
|
|
48
|
+
const page = await newSpecPage({
|
|
49
|
+
components: [PickerColumn],
|
|
50
|
+
template: () => h("ion-picker-column", null),
|
|
51
|
+
});
|
|
52
|
+
const pickerCol = page.body.querySelector('ion-picker-column');
|
|
53
|
+
const assistiveFocusable = pickerCol.shadowRoot.querySelector('.assistive-focusable');
|
|
54
|
+
expect(assistiveFocusable.tabIndex).toBe(0);
|
|
55
|
+
});
|
|
56
|
+
it('should not receive keyboard focus when disabled', async () => {
|
|
57
|
+
const page = await newSpecPage({
|
|
58
|
+
components: [PickerColumn],
|
|
59
|
+
template: () => h("ion-picker-column", { disabled: true }),
|
|
60
|
+
});
|
|
61
|
+
const pickerCol = page.body.querySelector('ion-picker-column');
|
|
62
|
+
const assistiveFocusable = pickerCol.shadowRoot.querySelector('.assistive-focusable');
|
|
63
|
+
expect(assistiveFocusable.tabIndex).toBe(-1);
|
|
64
|
+
});
|
|
65
|
+
it('should use option aria-label as assistive element aria-valuetext', async () => {
|
|
66
|
+
const page = await newSpecPage({
|
|
67
|
+
components: [PickerColumn, PickerColumnOption],
|
|
68
|
+
template: () => (h("ion-picker-column", { value: 1 }, h("ion-picker-column-option", { value: 1, "aria-label": "My Label" }, "My Text"))),
|
|
69
|
+
});
|
|
70
|
+
const pickerCol = page.body.querySelector('ion-picker-column');
|
|
71
|
+
const assistiveFocusable = pickerCol.shadowRoot.querySelector('.assistive-focusable');
|
|
72
|
+
expect(assistiveFocusable.getAttribute('aria-valuetext')).toBe('My Label');
|
|
73
|
+
});
|
|
74
|
+
it('should use option text as assistive element aria-valuetext when no label provided', async () => {
|
|
75
|
+
const page = await newSpecPage({
|
|
76
|
+
components: [PickerColumn, PickerColumnOption],
|
|
77
|
+
template: () => (h("ion-picker-column", { value: 1 }, h("ion-picker-column-option", { value: 1 }, "My Text"))),
|
|
78
|
+
});
|
|
79
|
+
const pickerCol = page.body.querySelector('ion-picker-column');
|
|
80
|
+
const assistiveFocusable = pickerCol.shadowRoot.querySelector('.assistive-focusable');
|
|
81
|
+
expect(assistiveFocusable.getAttribute('aria-valuetext')).toBe('My Text');
|
|
82
|
+
});
|
|
83
|
+
it('should have the correct value count attributes', async () => {
|
|
84
|
+
const page = await newSpecPage({
|
|
85
|
+
components: [PickerColumn, PickerColumnOption],
|
|
86
|
+
template: () => (h("ion-picker-column", { value: 2 }, h("ion-picker-column-option", { value: 1 }, "My Text"), h("ion-picker-column-option", { value: 2 }, "My Text"), h("ion-picker-column-option", { value: 3 }, "My Text"))),
|
|
87
|
+
});
|
|
88
|
+
const pickerCol = page.body.querySelector('ion-picker-column');
|
|
89
|
+
const assistiveFocusable = pickerCol.shadowRoot.querySelector('.assistive-focusable');
|
|
90
|
+
expect(assistiveFocusable.getAttribute('aria-valuemin')).toBe('0');
|
|
91
|
+
expect(assistiveFocusable.getAttribute('aria-valuemax')).toBe('2');
|
|
92
|
+
expect(assistiveFocusable.getAttribute('aria-valuenow')).toBe('1');
|
|
93
|
+
});
|
|
94
|
+
it('should clamp the value now attributes', async () => {
|
|
95
|
+
const page = await newSpecPage({
|
|
96
|
+
components: [PickerColumn, PickerColumnOption],
|
|
97
|
+
template: () => (h("ion-picker-column", null, h("ion-picker-column-option", { value: 1 }, "My Text"), h("ion-picker-column-option", { value: 2 }, "My Text"), h("ion-picker-column-option", { value: 3 }, "My Text"))),
|
|
98
|
+
});
|
|
99
|
+
const pickerCol = page.body.querySelector('ion-picker-column');
|
|
100
|
+
const assistiveFocusable = pickerCol.shadowRoot.querySelector('.assistive-focusable');
|
|
101
|
+
expect(assistiveFocusable.getAttribute('aria-valuenow')).toBe('0');
|
|
102
|
+
});
|
|
103
|
+
});
|
|
@@ -76,10 +76,10 @@ export class PickerColumnOption {
|
|
|
76
76
|
render() {
|
|
77
77
|
const { color, disabled, ariaLabel } = this;
|
|
78
78
|
const mode = getIonMode(this);
|
|
79
|
-
return (h(Host, { key: '
|
|
79
|
+
return (h(Host, { key: '9333d9ac8e9990fc840f31e00391177d9cd563b3', class: createColorClasses(color, {
|
|
80
80
|
[mode]: true,
|
|
81
81
|
['option-disabled']: disabled,
|
|
82
|
-
}) }, h("button", { key: '
|
|
82
|
+
}) }, h("button", { key: '6ca92bc584587230135982106eab542589fc4c9d', tabindex: "-1", "aria-label": ariaLabel, disabled: disabled, onClick: () => this.onClick() }, h("slot", { key: 'd9a68906017f77143a0691b9bbc59ae2142da6aa' }))));
|
|
83
83
|
}
|
|
84
84
|
static get is() { return "ion-picker-column-option"; }
|
|
85
85
|
static get encapsulation() { return "shadow"; }
|
|
@@ -182,11 +182,11 @@ export class Picker {
|
|
|
182
182
|
render() {
|
|
183
183
|
const { htmlAttributes } = this;
|
|
184
184
|
const mode = getIonMode(this);
|
|
185
|
-
return (h(Host, Object.assign({ key: '
|
|
185
|
+
return (h(Host, Object.assign({ key: '91d3d127c46d125a2a86222e3002d804ebd8bc84', "aria-modal": "true", tabindex: "-1" }, htmlAttributes, { style: {
|
|
186
186
|
zIndex: `${20000 + this.overlayIndex}`,
|
|
187
187
|
}, class: Object.assign({ [mode]: true,
|
|
188
188
|
// Used internally for styling
|
|
189
|
-
[`picker-${mode}`]: true, 'overlay-hidden': true }, getClassMap(this.cssClass)), onIonBackdropTap: this.onBackdropTap, onIonPickerWillDismiss: this.dispatchCancelHandler }), h("ion-backdrop", { key: '
|
|
189
|
+
[`picker-${mode}`]: true, 'overlay-hidden': true }, getClassMap(this.cssClass)), onIonBackdropTap: this.onBackdropTap, onIonPickerWillDismiss: this.dispatchCancelHandler }), h("ion-backdrop", { key: '63140c43f7a2e3000076adec0406197cb569f985', visible: this.showBackdrop, tappable: this.backdropDismiss }), h("div", { key: '3e86ec5e61adf40983a1d33ef24f66f4f75307e8', tabindex: "0" }), h("div", { key: '3c3844f369da33e35c9a498d88d1b7e4d686b8ce', class: "picker-wrapper ion-overlay-wrapper", role: "dialog" }, h("div", { key: 'e03200231976723409505b0c4070e7f596815e50', class: "picker-toolbar" }, this.buttons.map((b) => (h("div", { class: buttonWrapperClass(b) }, h("button", { type: "button", onClick: () => this.buttonClick(b), class: buttonClass(b) }, b.text))))), h("div", { key: 'd59de79e8c364376bc16d2edae3672b21443f3fe', class: "picker-columns" }, h("div", { key: 'e79cb88c5397047bc8c7e71efb4f1a338773e744', class: "picker-above-highlight" }), this.presented && this.columns.map((c) => h("ion-picker-legacy-column", { col: c })), h("div", { key: '776de64da09485ad1dbf78d4d402e297b94348a6', class: "picker-below-highlight" }))), h("div", { key: 'f0aa77e3b467c3fb4950389d27c13769dc913b14', tabindex: "0" })));
|
|
190
190
|
}
|
|
191
191
|
static get is() { return "ion-picker-legacy"; }
|
|
192
192
|
static get encapsulation() { return "scoped"; }
|
|
@@ -336,9 +336,9 @@ export class PickerColumnCmp {
|
|
|
336
336
|
render() {
|
|
337
337
|
const col = this.col;
|
|
338
338
|
const mode = getIonMode(this);
|
|
339
|
-
return (h(Host, { key: '
|
|
339
|
+
return (h(Host, { key: '90b9d07917c0643cf8a622f090abefcd2846ac96', class: Object.assign({ [mode]: true, 'picker-col': true, 'picker-opts-left': this.col.align === 'left', 'picker-opts-right': this.col.align === 'right' }, getClassMap(col.cssClass)), style: {
|
|
340
340
|
'max-width': this.col.columnWidth,
|
|
341
|
-
} }, col.prefix && (h("div", { class: "picker-prefix", style: { width: col.prefixWidth } }, col.prefix)), h("div", { key: '
|
|
341
|
+
} }, col.prefix && (h("div", { class: "picker-prefix", style: { width: col.prefixWidth } }, col.prefix)), h("div", { key: '4adca834de9295a18bdb355ebbfa49813f0f93f8', class: "picker-opts", style: { maxWidth: col.optionsWidth }, ref: (el) => (this.optsEl = el) }, col.options.map((o, index) => (h("button", { "aria-label": o.ariaLabel, class: { 'picker-opt': true, 'picker-opt-disabled': !!o.disabled }, "opt-index": index }, o.text)))), col.suffix && (h("div", { class: "picker-suffix", style: { width: col.suffixWidth } }, col.suffix))));
|
|
342
342
|
}
|
|
343
343
|
static get is() { return "ion-picker-legacy-column"; }
|
|
344
344
|
static get originalStyleUrls() {
|
|
@@ -7,7 +7,7 @@ import { CoreDelegate, attachComponent, detachComponent } from "../../utils/fram
|
|
|
7
7
|
import { addEventListener, raf, hasLazyBuild } from "../../utils/helpers";
|
|
8
8
|
import { createLockController } from "../../utils/lock-controller";
|
|
9
9
|
import { printIonWarning } from "../../utils/logging/index";
|
|
10
|
-
import { BACKDROP, dismiss, eventMethod, prepareOverlay, present, setOverlayId
|
|
10
|
+
import { BACKDROP, dismiss, eventMethod, prepareOverlay, present, setOverlayId } from "../../utils/overlays";
|
|
11
11
|
import { isPlatform } from "../../utils/platform";
|
|
12
12
|
import { getClassMap } from "../../utils/theme";
|
|
13
13
|
import { deepReady, waitForMount } from "../../utils/transition/index";
|
|
@@ -107,7 +107,6 @@ export class Popover {
|
|
|
107
107
|
this.arrow = true;
|
|
108
108
|
this.isOpen = false;
|
|
109
109
|
this.keyboardEvents = false;
|
|
110
|
-
this.focusTrap = true;
|
|
111
110
|
this.keepContentsMounted = false;
|
|
112
111
|
}
|
|
113
112
|
onTriggerChange() {
|
|
@@ -334,12 +333,12 @@ export class Popover {
|
|
|
334
333
|
}
|
|
335
334
|
render() {
|
|
336
335
|
const mode = getIonMode(this);
|
|
337
|
-
const { onLifecycle, parentPopover, dismissOnSelect, side, arrow, htmlAttributes
|
|
336
|
+
const { onLifecycle, parentPopover, dismissOnSelect, side, arrow, htmlAttributes } = this;
|
|
338
337
|
const desktop = isPlatform('desktop');
|
|
339
338
|
const enableArrow = arrow && !parentPopover;
|
|
340
|
-
return (h(Host, Object.assign({ key: '
|
|
339
|
+
return (h(Host, Object.assign({ key: '8e3ff2681dbd4d2a659633ba2d5419abb2646858', "aria-modal": "true", "no-router": true, tabindex: "-1" }, htmlAttributes, { style: {
|
|
341
340
|
zIndex: `${20000 + this.overlayIndex}`,
|
|
342
|
-
}, class: Object.assign(Object.assign({}, getClassMap(this.cssClass)), { [mode]: true, 'popover-translucent': this.translucent, 'overlay-hidden': true, 'popover-desktop': desktop, [`popover-side-${side}`]: true,
|
|
341
|
+
}, class: Object.assign(Object.assign({}, getClassMap(this.cssClass)), { [mode]: true, 'popover-translucent': this.translucent, 'overlay-hidden': true, 'popover-desktop': desktop, [`popover-side-${side}`]: true, 'popover-nested': !!parentPopover }), onIonPopoverDidPresent: onLifecycle, onIonPopoverWillPresent: onLifecycle, onIonPopoverWillDismiss: onLifecycle, onIonPopoverDidDismiss: onLifecycle, onIonBackdropTap: this.onBackdropTap }), !parentPopover && h("ion-backdrop", { tappable: this.backdropDismiss, visible: this.showBackdrop, part: "backdrop" }), h("div", { key: '9bdb7b263b7ecaee62fd091dbc55ea3b8cf02b45', class: "popover-wrapper ion-overlay-wrapper", onClick: dismissOnSelect ? () => this.dismiss() : undefined }, enableArrow && h("div", { class: "popover-arrow", part: "arrow" }), h("div", { key: '03bf042a104e8d019bd815ce0cc63a1b503cd644', class: "popover-content", part: "content" }, h("slot", { key: 'dd9e35e0af13da7b98d094cc1d5b1161afaf267b' })))));
|
|
343
342
|
}
|
|
344
343
|
static get is() { return "ion-popover"; }
|
|
345
344
|
static get encapsulation() { return "shadow"; }
|
|
@@ -861,24 +860,6 @@ export class Popover {
|
|
|
861
860
|
"reflect": false,
|
|
862
861
|
"defaultValue": "false"
|
|
863
862
|
},
|
|
864
|
-
"focusTrap": {
|
|
865
|
-
"type": "boolean",
|
|
866
|
-
"mutable": false,
|
|
867
|
-
"complexType": {
|
|
868
|
-
"original": "boolean",
|
|
869
|
-
"resolved": "boolean",
|
|
870
|
-
"references": {}
|
|
871
|
-
},
|
|
872
|
-
"required": false,
|
|
873
|
-
"optional": false,
|
|
874
|
-
"docs": {
|
|
875
|
-
"tags": [],
|
|
876
|
-
"text": "If `true`, focus will not be allowed to move outside of this overlay.\nIf 'false', focus will be allowed to move outside of the overlay.\n\nIn most scenarios this property should remain set to `true`. Setting\nthis property to `false` can cause severe accessibility issues as users\nrelying on assistive technologies may be able to move focus into\na confusing state. We recommend only setting this to `false` when\nabsolutely necessary.\n\nDevelopers may want to consider disabling focus trapping if this\noverlay presents a non-Ionic overlay from a 3rd party library.\nDevelopers would disable focus trapping on the Ionic overlay\nwhen presenting the 3rd party overlay and then re-enable\nfocus trapping when dismissing the 3rd party overlay and moving\nfocus back to the Ionic overlay."
|
|
877
|
-
},
|
|
878
|
-
"attribute": "focus-trap",
|
|
879
|
-
"reflect": false,
|
|
880
|
-
"defaultValue": "true"
|
|
881
|
-
},
|
|
882
863
|
"keepContentsMounted": {
|
|
883
864
|
"type": "boolean",
|
|
884
865
|
"mutable": false,
|
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
import { h } from "@stencil/core";
|
|
5
5
|
import { newSpecPage } from "@stencil/core/testing";
|
|
6
6
|
import { Popover } from "../../popover";
|
|
7
|
-
import { FOCUS_TRAP_DISABLE_CLASS } from "../../../../utils/overlays";
|
|
8
7
|
describe('popover: htmlAttributes inheritance', () => {
|
|
9
8
|
it('should correctly inherit attributes on host', async () => {
|
|
10
9
|
const page = await newSpecPage({
|
|
@@ -15,21 +14,3 @@ describe('popover: htmlAttributes inheritance', () => {
|
|
|
15
14
|
await expect(popover.getAttribute('data-testid')).toBe('basic-popover');
|
|
16
15
|
});
|
|
17
16
|
});
|
|
18
|
-
describe('popover: focus trap', () => {
|
|
19
|
-
it('should set the focus trap class when disabled', async () => {
|
|
20
|
-
const page = await newSpecPage({
|
|
21
|
-
components: [Popover],
|
|
22
|
-
template: () => h("ion-popover", { focusTrap: false, overlayIndex: 1 }),
|
|
23
|
-
});
|
|
24
|
-
const popover = page.body.querySelector('ion-popover');
|
|
25
|
-
expect(popover.classList.contains(FOCUS_TRAP_DISABLE_CLASS)).toBe(true);
|
|
26
|
-
});
|
|
27
|
-
it('should not set the focus trap class by default', async () => {
|
|
28
|
-
const page = await newSpecPage({
|
|
29
|
-
components: [Popover],
|
|
30
|
-
template: () => h("ion-popover", { overlayIndex: 1 }),
|
|
31
|
-
});
|
|
32
|
-
const popover = page.body.querySelector('ion-popover');
|
|
33
|
-
expect(popover.classList.contains(FOCUS_TRAP_DISABLE_CLASS)).toBe(false);
|
|
34
|
-
});
|
|
35
|
-
});
|
|
@@ -28,7 +28,7 @@ export class ProgressBar {
|
|
|
28
28
|
const mode = getIonMode(this);
|
|
29
29
|
// If the progress is displayed as a solid bar.
|
|
30
30
|
const progressSolid = buffer === 1;
|
|
31
|
-
return (h(Host, { key: '
|
|
31
|
+
return (h(Host, { key: '63b306c91da12d1fa18d6f6c4726871ef727c9f3', role: "progressbar", "aria-valuenow": type === 'determinate' ? value : null, "aria-valuemin": "0", "aria-valuemax": "1", class: createColorClasses(color, {
|
|
32
32
|
[mode]: true,
|
|
33
33
|
[`progress-bar-${type}`]: true,
|
|
34
34
|
'progress-paused': paused,
|
|
@@ -107,7 +107,7 @@ export class Radio {
|
|
|
107
107
|
const { checked, disabled, color, el, justify, labelPlacement, hasLabel, buttonTabindex, alignment } = this;
|
|
108
108
|
const mode = getIonMode(this);
|
|
109
109
|
const inItem = hostContext('ion-item', el);
|
|
110
|
-
return (h(Host, { key: '
|
|
110
|
+
return (h(Host, { key: '46bb0202f75b6cc81df10de71fbe971dc4dcaa68', onFocus: this.onFocus, onBlur: this.onBlur, onClick: this.onClick, class: createColorClasses(color, {
|
|
111
111
|
[mode]: true,
|
|
112
112
|
'in-item': inItem,
|
|
113
113
|
'radio-checked': checked,
|
|
@@ -118,10 +118,10 @@ export class Radio {
|
|
|
118
118
|
// Focus and active styling should not apply when the radio is in an item
|
|
119
119
|
'ion-activatable': !inItem,
|
|
120
120
|
'ion-focusable': !inItem,
|
|
121
|
-
}), role: "radio", "aria-checked": checked ? 'true' : 'false', "aria-disabled": disabled ? 'true' : null, tabindex: buttonTabindex }, h("label", { key: '
|
|
121
|
+
}), role: "radio", "aria-checked": checked ? 'true' : 'false', "aria-disabled": disabled ? 'true' : null, tabindex: buttonTabindex }, h("label", { key: '55061e8cc857752d963c9e4a65f46727f5c2cd9d', class: "radio-wrapper" }, h("div", { key: '589fd41fccd0e6d007e7bc502067f3f2447e4b80', class: {
|
|
122
122
|
'label-text-wrapper': true,
|
|
123
123
|
'label-text-wrapper-hidden': !hasLabel,
|
|
124
|
-
}, part: "label" }, h("slot", { key: '
|
|
124
|
+
}, part: "label" }, h("slot", { key: '0076f1f3b64c1a0cf2bc511424956a63d6cf2db9' })), h("div", { key: '1505a84e6dc8715f8fcb19ce94fab79e624a0622', class: "native-wrapper" }, this.renderRadioControl()))));
|
|
125
125
|
}
|
|
126
126
|
static get is() { return "ion-radio"; }
|
|
127
127
|
static get encapsulation() { return "shadow"; }
|
|
@@ -153,7 +153,7 @@ export class RadioGroup {
|
|
|
153
153
|
const { label, labelId, el, name, value } = this;
|
|
154
154
|
const mode = getIonMode(this);
|
|
155
155
|
renderHiddenInput(true, el, name, value, false);
|
|
156
|
-
return h(Host, { key: '
|
|
156
|
+
return h(Host, { key: '3d43aa6696c5293b49fc44cf91e3e41c4f4d12df', role: "radiogroup", "aria-labelledby": label ? labelId : null, onClick: this.onClick, class: mode });
|
|
157
157
|
}
|
|
158
158
|
static get is() { return "ion-radio-group"; }
|
|
159
159
|
static get properties() {
|
|
@@ -561,7 +561,7 @@ export class Range {
|
|
|
561
561
|
const needsEndAdjustment = inItem && !hasEndContent;
|
|
562
562
|
const mode = getIonMode(this);
|
|
563
563
|
renderHiddenInput(true, el, this.name, JSON.stringify(this.getValue()), disabled);
|
|
564
|
-
return (h(Host, { key: '
|
|
564
|
+
return (h(Host, { key: '201677b1146738b96d74081e59d3e13a8472326e', onFocusin: this.onFocus, onFocusout: this.onBlur, id: rangeId, class: createColorClasses(this.color, {
|
|
565
565
|
[mode]: true,
|
|
566
566
|
'in-item': inItem,
|
|
567
567
|
'range-disabled': disabled,
|
|
@@ -570,10 +570,10 @@ export class Range {
|
|
|
570
570
|
[`range-label-placement-${labelPlacement}`]: true,
|
|
571
571
|
'range-item-start-adjustment': needsStartAdjustment,
|
|
572
572
|
'range-item-end-adjustment': needsEndAdjustment,
|
|
573
|
-
}) }, h("label", { key: '
|
|
573
|
+
}) }, h("label", { key: '055dda4f2673432e639b7efdbb01b2794c91e705', class: "range-wrapper", id: "range-label" }, h("div", { key: '3efe1eda1f68810a739a42b7655f2dd71beccf1e', class: {
|
|
574
574
|
'label-text-wrapper': true,
|
|
575
575
|
'label-text-wrapper-hidden': !hasLabel,
|
|
576
|
-
}, part: "label" }, label !== undefined ? h("div", { class: "label-text" }, label) : h("slot", { name: "label" })), h("div", { key: '
|
|
576
|
+
}, part: "label" }, label !== undefined ? h("div", { class: "label-text" }, label) : h("slot", { name: "label" })), h("div", { key: '31458b02c2973f4ecf4a10de4c0ae1c4befda37a', class: "native-wrapper" }, h("slot", { key: '21c78b192f312396bd86bf52a0888312ffefea8a', name: "start" }), this.renderRangeSlider(), h("slot", { key: '843193879728ccfec62b4becb1b57d64b6d96804', name: "end" })))));
|
|
577
577
|
}
|
|
578
578
|
static get is() { return "ion-range"; }
|
|
579
579
|
static get encapsulation() { return "shadow"; }
|
|
@@ -594,7 +594,7 @@ export class Refresher {
|
|
|
594
594
|
}
|
|
595
595
|
render() {
|
|
596
596
|
const mode = getIonMode(this);
|
|
597
|
-
return (h(Host, { key: '
|
|
597
|
+
return (h(Host, { key: '8e4a99ce208ea3162186e91ba0d1e289b4f247a0', slot: "fixed", class: {
|
|
598
598
|
[mode]: true,
|
|
599
599
|
// Used internally for styling
|
|
600
600
|
[`refresher-${mode}`]: true,
|
|
@@ -52,7 +52,7 @@ export class RefresherContent {
|
|
|
52
52
|
const pullingIcon = this.pullingIcon;
|
|
53
53
|
const hasSpinner = pullingIcon != null && SPINNERS[pullingIcon] !== undefined;
|
|
54
54
|
const mode = getIonMode(this);
|
|
55
|
-
return (h(Host, { key: '
|
|
55
|
+
return (h(Host, { key: 'c84cb333293a4b8f749505268d019698f9df431c', class: mode }, h("div", { key: 'fb3c0cd2ca4636762060b6615fc2da3ce93da20c', class: "refresher-pulling" }, this.pullingIcon && hasSpinner && (h("div", { class: "refresher-pulling-icon" }, h("div", { class: "spinner-arrow-container" }, h("ion-spinner", { name: this.pullingIcon, paused: true }), mode === 'md' && this.pullingIcon === 'circular' && (h("div", { class: "arrow-container" }, h("ion-icon", { icon: caretBackSharp, "aria-hidden": "true" })))))), this.pullingIcon && !hasSpinner && (h("div", { class: "refresher-pulling-icon" }, h("ion-icon", { icon: this.pullingIcon, lazy: false, "aria-hidden": "true" }))), this.pullingText !== undefined && this.renderPullingText()), h("div", { key: '4a099f6a15854d9432d5e7ee8ade1023a6051965', class: "refresher-refreshing" }, this.refreshingSpinner && (h("div", { class: "refresher-refreshing-icon" }, h("ion-spinner", { name: this.refreshingSpinner }))), this.refreshingText !== undefined && this.renderRefreshingText())));
|
|
56
56
|
}
|
|
57
57
|
static get is() { return "ion-refresher-content"; }
|
|
58
58
|
static get properties() {
|
|
@@ -20,7 +20,7 @@ export class Reorder {
|
|
|
20
20
|
render() {
|
|
21
21
|
const mode = getIonMode(this);
|
|
22
22
|
const reorderIcon = mode === 'ios' ? reorderThreeOutline : reorderTwoSharp;
|
|
23
|
-
return (h(Host, { key: '
|
|
23
|
+
return (h(Host, { key: '4e02357926b0208480a043ee3fe0617633daca76', class: mode }, h("slot", { key: 'cedcbcdcc9702af91d00ee20664cb8be634f62d1' }, h("ion-icon", { key: 'd78d7035eae7a235f428132c2a80c8e0538c4441', icon: reorderIcon, lazy: false, class: "reorder-icon", part: "icon", "aria-hidden": "true" }))));
|
|
24
24
|
}
|
|
25
25
|
static get is() { return "ion-reorder"; }
|
|
26
26
|
static get encapsulation() { return "shadow"; }
|
|
@@ -238,7 +238,7 @@ export class ReorderGroup {
|
|
|
238
238
|
}
|
|
239
239
|
render() {
|
|
240
240
|
const mode = getIonMode(this);
|
|
241
|
-
return (h(Host, { key: '
|
|
241
|
+
return (h(Host, { key: 'b3a4a278423a196c0980ab8d03062175d8b1f52a', class: {
|
|
242
242
|
[mode]: true,
|
|
243
243
|
'reorder-enabled': !this.disabled,
|
|
244
244
|
'reorder-list-active': this.state !== 0 /* ReorderGroupState.Idle */,
|
|
@@ -59,7 +59,7 @@ export class RippleEffect {
|
|
|
59
59
|
}
|
|
60
60
|
render() {
|
|
61
61
|
const mode = getIonMode(this);
|
|
62
|
-
return (h(Host, { key: '
|
|
62
|
+
return (h(Host, { key: 'ca0ab0deaa7902cbc95e62d4b0c5baeac4387b41', role: "presentation", class: {
|
|
63
63
|
[mode]: true,
|
|
64
64
|
unbounded: this.unbounded,
|
|
65
65
|
} }));
|