@ionic/core 8.8.7-dev.11779400352.127ba526 → 8.8.7-dev.11779467048.1641d05e
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/index.js +1 -1
- package/components/ion-action-sheet.js +1 -1
- package/components/ion-alert.js +1 -1
- package/components/ion-back-button.js +1 -1
- package/components/ion-button.js +1 -1
- package/components/ion-card.js +1 -1
- package/components/ion-chip.js +1 -1
- package/components/ion-datetime-button.js +1 -1
- package/components/ion-datetime.js +1 -1
- package/components/ion-fab-button.js +1 -1
- package/components/ion-gallery.js +1 -1
- package/components/ion-grid.js +1 -1
- package/components/ion-header.js +1 -1
- package/components/ion-img.js +1 -1
- package/components/ion-infinite-scroll-content.js +1 -1
- package/components/ion-infinite-scroll.js +1 -1
- package/components/ion-input-otp.js +1 -1
- package/components/ion-input-password-toggle.js +1 -1
- package/components/ion-input.js +1 -1
- package/components/ion-item-divider.js +1 -1
- package/components/ion-item-group.js +1 -1
- package/components/ion-item-option.js +1 -1
- package/components/ion-item-options.js +1 -1
- package/components/ion-item-sliding.js +1 -1
- package/components/ion-item.js +1 -1
- package/components/ion-label.js +1 -1
- package/components/ion-list-header.js +1 -1
- package/components/ion-list.js +1 -1
- package/components/ion-loading.js +1 -1
- package/components/ion-menu-button.js +1 -1
- package/components/ion-menu-toggle.js +1 -1
- package/components/ion-menu.js +1 -1
- package/components/ion-modal.js +1 -1
- package/components/ion-nav-link.js +1 -1
- package/components/ion-nav.js +1 -1
- package/components/ion-note.js +1 -1
- package/components/ion-picker-column-option.js +1 -1
- package/components/ion-picker-legacy-column.js +1 -1
- package/components/ion-picker-legacy.js +1 -1
- package/components/ion-popover.js +1 -1
- package/components/ion-progress-bar.js +1 -1
- package/components/ion-radio-group.js +1 -1
- package/components/ion-radio.js +1 -1
- package/components/ion-range.js +1 -1
- 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-ripple-effect.js +1 -1
- package/components/ion-router-link.js +1 -1
- package/components/ion-router-outlet.js +1 -1
- package/components/ion-row.js +1 -1
- package/components/ion-searchbar.js +1 -1
- package/components/ion-segment-button.js +1 -1
- package/components/ion-segment-content.js +1 -1
- package/components/ion-segment-view.js +1 -1
- package/components/ion-segment.js +1 -1
- package/components/ion-select-modal.js +1 -1
- package/components/ion-select-option.js +1 -1
- package/components/ion-select-popover.js +1 -1
- package/components/ion-select.js +1 -1
- package/components/ion-skeleton-text.js +1 -1
- package/components/ion-spinner.js +1 -1
- package/components/ion-split-pane.js +1 -1
- package/components/ion-tab-bar.js +1 -1
- package/components/ion-tab-button.js +1 -1
- package/components/ion-tab.js +1 -1
- package/components/ion-tabs.js +1 -1
- package/components/ion-text.js +1 -1
- package/components/ion-textarea.js +1 -1
- package/components/ion-thumbnail.js +1 -1
- package/components/ion-title.js +1 -1
- package/components/ion-toast.js +1 -1
- package/components/ion-toggle.js +1 -1
- package/components/ion-toolbar.js +1 -1
- package/components/{p-B-oPDoNQ.js → p-BFbsici0.js} +1 -1
- package/components/{p-6_r-Odtt.js → p-BLCuPAtN.js} +1 -1
- package/components/{p-CSf_VKpz.js → p-BRWWcnBq.js} +1 -1
- package/components/{p-CvljGih0.js → p-BXcCGjEc.js} +1 -1
- package/components/{p-DZOqbnq2.js → p-BqImG3uk.js} +1 -1
- package/components/{p-D42P_qbe.js → p-C38HUpU5.js} +1 -1
- package/components/{p-Ddl4_R29.js → p-C4G6C9fP.js} +1 -1
- package/components/{p-C-Vjb84N.js → p-C8ktKu9j.js} +1 -1
- package/components/{p-J7srYGKf.js → p-CIoAIKEr.js} +1 -1
- package/components/{p-BhkRbo3L.js → p-CN-WzkJE.js} +1 -1
- package/components/p-CVRxImH6.js +4 -0
- package/components/{p-KF2RUDHO.js → p-CoFDGTFO.js} +1 -1
- package/components/{p-n94Bzx6_.js → p-CoFqDNc5.js} +1 -1
- package/components/{p-vGxjPSKT.js → p-CykCvfXQ.js} +1 -1
- package/components/p-DHTe6lDL.js +4 -0
- package/components/{p-C75do9pU.js → p-DH_9VCbD.js} +1 -1
- package/components/{p-Ct1_qpJ-.js → p-DTtRWhIZ.js} +1 -1
- package/components/{p-BdmDSErh.js → p-DXUyXgVL.js} +1 -1
- package/components/{p-BLHs-wsh.js → p-IMXp2Inn.js} +1 -1
- package/components/{p-lEYPO4ZC.js → p-TR4ubkPu.js} +1 -1
- package/components/{p-CieebRr6.js → p-qZr7hBPz.js} +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 +7 -7
- package/dist/cjs/ion-avatar_3.cjs.entry.js +2 -2
- package/dist/cjs/ion-col_3.cjs.entry.js +4 -4
- package/dist/cjs/ion-datetime_3.cjs.entry.js +5 -5
- package/dist/cjs/ion-gallery.cjs.entry.js +8 -57
- package/dist/cjs/ion-img.cjs.entry.js +2 -2
- package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +3 -3
- package/dist/cjs/ion-input-otp.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 -4
- 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 +5 -5
- 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-popover.cjs.entry.js +3 -3
- package/dist/cjs/ion-progress-bar.cjs.entry.js +1 -1
- package/dist/cjs/ion-radio_2.cjs.entry.js +5 -5
- package/dist/cjs/ion-range.cjs.entry.js +3 -3
- package/dist/cjs/ion-refresher_2.cjs.entry.js +3 -3
- package/dist/cjs/ion-reorder_2.cjs.entry.js +3 -3
- 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-content.cjs.entry.js +1 -1
- package/dist/cjs/ion-segment-view.cjs.entry.js +2 -2
- package/dist/cjs/ion-segment_2.cjs.entry.js +4 -4
- package/dist/cjs/ion-select-modal.cjs.entry.js +2 -2
- package/dist/cjs/ion-select_3.cjs.entry.js +7 -7
- 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 +3 -3
- package/dist/cjs/ion-toast.cjs.entry.js +3 -3
- package/dist/cjs/ion-toggle.cjs.entry.js +3 -3
- package/dist/cjs/ionic.cjs.js +1 -1
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/{overlays-Hci_7vw_.js → overlays-C54DhaTC.js} +187 -10
- package/dist/collection/collection-manifest.json +0 -1
- package/dist/collection/components/gallery/gallery.css +24 -0
- package/dist/collection/components/gallery/gallery.js +7 -56
- package/dist/collection/components/gallery/test/utils.js +13 -13
- 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 +2 -2
- 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 -4
- package/dist/collection/components/input-otp/input-otp.js +3 -3
- 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/modal.js +4 -4
- 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-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 +2 -2
- package/dist/collection/components/progress-bar/progress-bar.js +1 -1
- package/dist/collection/components/radio/radio.js +3 -3
- package/dist/collection/components/radio-group/radio-group.js +2 -2
- 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 +2 -2
- package/dist/collection/components/reorder/reorder.js +2 -2
- 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 +2 -2
- 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 +2 -2
- package/dist/collection/components/segment-content/segment-content.js +1 -1
- package/dist/collection/components/segment-view/segment-view.js +2 -2
- package/dist/collection/components/select/select.js +3 -3
- package/dist/collection/components/select-modal/select-modal.js +1 -1
- package/dist/collection/components/select-option/select-option.js +1 -1
- package/dist/collection/components/select-popover/select-popover.js +2 -2
- 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 +3 -3
- package/dist/collection/components/thumbnail/thumbnail.js +2 -2
- package/dist/collection/components/title/title.js +2 -2
- package/dist/collection/components/toast/toast.js +2 -2
- package/dist/collection/components/toggle/toggle.js +3 -3
- package/dist/collection/components/toolbar/toolbar.js +2 -2
- package/dist/collection/utils/overlays.js +187 -10
- package/dist/docs.json +1 -85
- 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 +7 -7
- package/dist/esm/ion-avatar_3.entry.js +2 -2
- package/dist/esm/ion-col_3.entry.js +4 -4
- package/dist/esm/ion-datetime_3.entry.js +5 -5
- package/dist/esm/ion-gallery.entry.js +8 -57
- package/dist/esm/ion-img.entry.js +2 -2
- package/dist/esm/ion-infinite-scroll_2.entry.js +3 -3
- package/dist/esm/ion-input-otp.entry.js +3 -3
- package/dist/esm/ion-input-password-toggle.entry.js +3 -3
- package/dist/esm/ion-input.entry.js +4 -4
- 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 +5 -5
- 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-popover.entry.js +3 -3
- package/dist/esm/ion-progress-bar.entry.js +1 -1
- package/dist/esm/ion-radio_2.entry.js +5 -5
- package/dist/esm/ion-range.entry.js +3 -3
- package/dist/esm/ion-refresher_2.entry.js +3 -3
- package/dist/esm/ion-reorder_2.entry.js +3 -3
- 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-content.entry.js +1 -1
- package/dist/esm/ion-segment-view.entry.js +2 -2
- package/dist/esm/ion-segment_2.entry.js +4 -4
- package/dist/esm/ion-select-modal.entry.js +2 -2
- package/dist/esm/ion-select_3.entry.js +7 -7
- 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 +3 -3
- package/dist/esm/ion-toast.entry.js +3 -3
- package/dist/esm/ion-toggle.entry.js +3 -3
- package/dist/esm/ionic.js +1 -1
- package/dist/esm/loader.js +1 -1
- package/dist/esm/{overlays-rwDDzEs4.js → overlays-ttYCMKRp.js} +187 -10
- package/dist/html.html-data.json +0 -42
- package/dist/ionic/index.esm.js +1 -1
- package/dist/ionic/ionic.esm.js +1 -1
- package/dist/ionic/{p-6911beb3.entry.js → p-00c0bd38.entry.js} +1 -1
- package/dist/ionic/p-06bd033b.entry.js +4 -0
- package/dist/ionic/{p-b8f7e970.entry.js → p-1709b0aa.entry.js} +1 -1
- package/dist/ionic/{p-7761b69d.entry.js → p-1c2c1869.entry.js} +1 -1
- package/dist/ionic/{p-bd3ae730.entry.js → p-1c4de46b.entry.js} +1 -1
- package/dist/ionic/p-1e1c8d61.entry.js +4 -0
- package/dist/ionic/{p-fe073307.entry.js → p-1f74b8d4.entry.js} +1 -1
- package/dist/ionic/p-2aa7567e.entry.js +4 -0
- package/dist/ionic/{p-455ac83a.entry.js → p-2ad79c23.entry.js} +1 -1
- package/dist/ionic/{p-2c252788.entry.js → p-2f8aa0ac.entry.js} +1 -1
- package/dist/ionic/{p-3d939d55.entry.js → p-3331cfa9.entry.js} +1 -1
- package/dist/ionic/{p-dd1e95c5.entry.js → p-33c34361.entry.js} +1 -1
- package/dist/ionic/{p-636aa79b.entry.js → p-3f79f594.entry.js} +1 -1
- package/dist/ionic/{p-8291455b.entry.js → p-48026d15.entry.js} +1 -1
- package/dist/ionic/{p-e5976b28.entry.js → p-5061a8d4.entry.js} +1 -1
- package/dist/ionic/{p-fc01563c.entry.js → p-50b61fab.entry.js} +1 -1
- package/dist/ionic/{p-c55a5578.entry.js → p-50cd2d57.entry.js} +1 -1
- package/dist/ionic/{p-503219b5.entry.js → p-5274f999.entry.js} +1 -1
- package/dist/ionic/{p-c1d6501a.entry.js → p-586d4270.entry.js} +1 -1
- package/dist/ionic/{p-e342b205.entry.js → p-7054a1b9.entry.js} +1 -1
- package/dist/ionic/{p-cecceb9f.entry.js → p-72491468.entry.js} +1 -1
- package/dist/ionic/{p-02a1a45c.entry.js → p-76307d10.entry.js} +1 -1
- package/dist/ionic/{p-5b164421.entry.js → p-7d5057c4.entry.js} +1 -1
- package/dist/ionic/{p-bb2d2635.entry.js → p-83c693c4.entry.js} +1 -1
- package/dist/ionic/{p-fdf0e290.entry.js → p-8537b2fb.entry.js} +1 -1
- package/dist/ionic/{p-4a0260e6.entry.js → p-8f04bd89.entry.js} +1 -1
- package/dist/ionic/{p-0ef2fcda.entry.js → p-90e653e3.entry.js} +1 -1
- package/dist/ionic/p-967576f8.entry.js +4 -0
- package/dist/ionic/{p-d604defc.entry.js → p-9d789053.entry.js} +1 -1
- package/dist/ionic/p-DdyNaGpi.js +4 -0
- package/dist/ionic/{p-65159e09.entry.js → p-ae667493.entry.js} +1 -1
- package/dist/ionic/{p-e73a7fe2.entry.js → p-b2fe6c1c.entry.js} +1 -1
- package/dist/ionic/{p-92427c9d.entry.js → p-b3c9f19c.entry.js} +1 -1
- package/dist/ionic/{p-83c0eb9b.entry.js → p-b653f4c2.entry.js} +1 -1
- package/dist/ionic/{p-9f914d43.entry.js → p-bb898d47.entry.js} +1 -1
- package/dist/ionic/{p-0c3bf0a7.entry.js → p-bd71a4a7.entry.js} +1 -1
- package/dist/ionic/{p-3fd97ea9.entry.js → p-d4ed5710.entry.js} +1 -1
- package/dist/ionic/{p-874945f3.entry.js → p-d6299c37.entry.js} +1 -1
- package/dist/ionic/{p-229c8fb5.entry.js → p-dea52cb3.entry.js} +1 -1
- package/dist/ionic/{p-2a66b899.entry.js → p-e18d3fdb.entry.js} +1 -1
- package/dist/ionic/{p-6ec1e450.entry.js → p-fad05840.entry.js} +1 -1
- package/dist/ionic/{p-432c5888.entry.js → p-fc796d48.entry.js} +1 -1
- package/dist/types/components/gallery/gallery.d.ts +2 -10
- package/dist/types/components/gallery/test/utils.d.ts +1 -1
- package/dist/types/components.d.ts +0 -29
- package/hydrate/index.js +317 -269
- package/hydrate/index.mjs +317 -269
- package/package.json +1 -1
- package/components/ion-gallery-item.d.ts +0 -11
- package/components/ion-gallery-item.js +0 -4
- package/components/p-C4dDZdpz.js +0 -4
- package/components/p-CtiqM786.js +0 -4
- package/dist/cjs/ion-gallery-item.cjs.entry.js +0 -72
- package/dist/collection/components/gallery-item/gallery-item.css +0 -87
- package/dist/collection/components/gallery-item/gallery-item.js +0 -87
- package/dist/esm/ion-gallery-item.entry.js +0 -70
- package/dist/ionic/p-1ab01507.entry.js +0 -4
- package/dist/ionic/p-21ca5788.entry.js +0 -4
- package/dist/ionic/p-2981a0bd.entry.js +0 -4
- package/dist/ionic/p-2d5a2511.entry.js +0 -4
- package/dist/ionic/p-76de7898.entry.js +0 -4
- package/dist/ionic/p-C4uUM9DM.js +0 -4
- package/dist/types/components/gallery-item/gallery-item.d.ts +0 -25
|
@@ -14,8 +14,101 @@ import { addEventListener, componentOnReady, focusVisibleElement, getElementRoot
|
|
|
14
14
|
let lastOverlayIndex = 0;
|
|
15
15
|
let lastId = 0;
|
|
16
16
|
export const activeAnimations = new WeakMap();
|
|
17
|
+
const OVERLAY_FOCUS_TRAP_SELECTOR = 'ion-alert,ion-action-sheet,ion-loading,ion-modal,ion-picker-legacy,ion-popover';
|
|
18
|
+
const ION_SELECT_MODAL_SELECTOR = 'ion-select-modal';
|
|
19
|
+
const isSelectModalOptionControl = (el) => el.tagName === 'ION-RADIO' || el.tagName === 'ION-CHECKBOX';
|
|
17
20
|
/**
|
|
18
|
-
*
|
|
21
|
+
* Returns the currently focused element for keyboard focus checks.
|
|
22
|
+
*
|
|
23
|
+
* Starts from `document.activeElement` (non-shadow / light DOM focus).
|
|
24
|
+
* If focus is inside one or more open shadow roots
|
|
25
|
+
* (e.g. native control inside `ion-radio`), walks through nested
|
|
26
|
+
* `shadowRoot.activeElement` values until the innermost focused node is reached.
|
|
27
|
+
*/
|
|
28
|
+
const getActiveElement = (ownerDoc) => {
|
|
29
|
+
var _a;
|
|
30
|
+
let active = ownerDoc.activeElement;
|
|
31
|
+
if (!active) {
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
while ((_a = active.shadowRoot) === null || _a === void 0 ? void 0 : _a.activeElement) {
|
|
35
|
+
active = active.shadowRoot.activeElement;
|
|
36
|
+
}
|
|
37
|
+
return active;
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* Walks from a focused node (possibly deep inside shadow roots)
|
|
41
|
+
* up to the nearest `ion-radio` / `ion-checkbox` host.
|
|
42
|
+
*/
|
|
43
|
+
const getOptionControlHost = (active) => {
|
|
44
|
+
let n = active;
|
|
45
|
+
while (n) {
|
|
46
|
+
if (isSelectModalOptionControl(n)) {
|
|
47
|
+
return n;
|
|
48
|
+
}
|
|
49
|
+
const root = n.getRootNode();
|
|
50
|
+
if (root instanceof ShadowRoot && root.host instanceof HTMLElement) {
|
|
51
|
+
n = root.host;
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return null;
|
|
58
|
+
};
|
|
59
|
+
/**
|
|
60
|
+
* Sheet modals can have visual order that differs from DOM order.
|
|
61
|
+
* Without sorting, Tab can skip the handle after option traversal.
|
|
62
|
+
*
|
|
63
|
+
* Order: option controls (radio/checkbox) → sheet handle → end-slot
|
|
64
|
+
* header button. Any other focusables are appended after.
|
|
65
|
+
*/
|
|
66
|
+
const sortSheetModalFocusables = (overlay, elements) => {
|
|
67
|
+
const optionControls = elements.filter((el) => {
|
|
68
|
+
return overlay.contains(el) && isSelectModalOptionControl(el) && el.tabIndex >= 0;
|
|
69
|
+
});
|
|
70
|
+
const cancelControl = elements.find((el) => overlay.contains(el) &&
|
|
71
|
+
el.tagName === 'ION-BUTTON' &&
|
|
72
|
+
el.closest('ion-header ion-buttons[slot="end"]') !== null);
|
|
73
|
+
const handleControl = elements.find((el) => el.classList.contains('modal-handle'));
|
|
74
|
+
const sortByGeometry = (els) => [...els].sort((a, b) => {
|
|
75
|
+
const ra = a.getBoundingClientRect();
|
|
76
|
+
const rb = b.getBoundingClientRect();
|
|
77
|
+
const topDiff = ra.top - rb.top;
|
|
78
|
+
if (Math.abs(topDiff) > 1) {
|
|
79
|
+
return topDiff;
|
|
80
|
+
}
|
|
81
|
+
return ra.left - rb.left;
|
|
82
|
+
});
|
|
83
|
+
const ordered = [];
|
|
84
|
+
ordered.push(...sortByGeometry(optionControls));
|
|
85
|
+
if (handleControl) {
|
|
86
|
+
ordered.push(handleControl);
|
|
87
|
+
}
|
|
88
|
+
if (cancelControl) {
|
|
89
|
+
ordered.push(cancelControl);
|
|
90
|
+
}
|
|
91
|
+
const used = new Set(ordered);
|
|
92
|
+
for (const el of elements) {
|
|
93
|
+
if (!used.has(el)) {
|
|
94
|
+
ordered.push(el);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return ordered;
|
|
98
|
+
};
|
|
99
|
+
/**
|
|
100
|
+
* Option controls in groups use a tabindex pattern where only one
|
|
101
|
+
* option is tabbable (`tabIndex="0"`) while the others are `-1`.
|
|
102
|
+
* This returns the index of that current tabbable option.
|
|
103
|
+
*/
|
|
104
|
+
const getTabbableOptionControlIndex = (elements, overlay) => {
|
|
105
|
+
return elements.findIndex((el) => {
|
|
106
|
+
return overlay.contains(el) && isSelectModalOptionControl(el) && el.tabIndex >= 0;
|
|
107
|
+
});
|
|
108
|
+
};
|
|
109
|
+
/**
|
|
110
|
+
* Determines if the overlay's backdrop is always blocking
|
|
111
|
+
* (no background interaction).
|
|
19
112
|
* Returns false if showBackdrop=false or backdropBreakpoint > 0.
|
|
20
113
|
*/
|
|
21
114
|
const isBackdropAlwaysBlocking = (el) => {
|
|
@@ -136,7 +229,7 @@ const focusElementInOverlay = (hostToFocus, overlay) => {
|
|
|
136
229
|
* Should NOT include: Toast
|
|
137
230
|
*/
|
|
138
231
|
const trapKeyboardFocus = (ev, doc) => {
|
|
139
|
-
const lastOverlay = getPresentedOverlay(doc,
|
|
232
|
+
const lastOverlay = getPresentedOverlay(doc, OVERLAY_FOCUS_TRAP_SELECTOR);
|
|
140
233
|
const target = ev.target;
|
|
141
234
|
/**
|
|
142
235
|
* If no active overlay, ignore this event.
|
|
@@ -319,6 +412,30 @@ const connectListeners = (doc) => {
|
|
|
319
412
|
doc.addEventListener('focus', (ev) => {
|
|
320
413
|
trapKeyboardFocus(ev, doc);
|
|
321
414
|
}, true);
|
|
415
|
+
/**
|
|
416
|
+
* Remember which option control last received focus
|
|
417
|
+
* (arrows, click, or Tab). This pattern keeps `tabIndex=0` on the
|
|
418
|
+
* checked/first radio, so the Tab trap uses this when wrapping back
|
|
419
|
+
* into the list or focusing the option-group slot.
|
|
420
|
+
*/
|
|
421
|
+
doc.addEventListener('focusin', (ev) => {
|
|
422
|
+
const lastOverlay = getPresentedOverlay(doc, OVERLAY_FOCUS_TRAP_SELECTOR);
|
|
423
|
+
if (!lastOverlay || lastOverlay.classList.contains(FOCUS_TRAP_DISABLE_CLASS)) {
|
|
424
|
+
return;
|
|
425
|
+
}
|
|
426
|
+
const isSheetModal = lastOverlay.classList.contains('modal-sheet');
|
|
427
|
+
if (!isSheetModal) {
|
|
428
|
+
return;
|
|
429
|
+
}
|
|
430
|
+
const target = ev.target;
|
|
431
|
+
if (!(target instanceof HTMLElement)) {
|
|
432
|
+
return;
|
|
433
|
+
}
|
|
434
|
+
const optionHost = getOptionControlHost(target);
|
|
435
|
+
if (optionHost && lastOverlay.contains(optionHost)) {
|
|
436
|
+
lastOverlay.trapLastSheetOptionControl = optionHost;
|
|
437
|
+
}
|
|
438
|
+
}, true);
|
|
322
439
|
// Listen for keydown events to intercept Tab navigation.
|
|
323
440
|
// This is needed for Safari and Firefox which may skip focusable
|
|
324
441
|
// elements or allow focus to escape the overlay.
|
|
@@ -328,10 +445,10 @@ const connectListeners = (doc) => {
|
|
|
328
445
|
var _a, _b, _c;
|
|
329
446
|
if (ev.key !== 'Tab' && ev.key !== 'Alt+Tab')
|
|
330
447
|
return;
|
|
331
|
-
const lastOverlay = getPresentedOverlay(doc,
|
|
448
|
+
const lastOverlay = getPresentedOverlay(doc, OVERLAY_FOCUS_TRAP_SELECTOR);
|
|
332
449
|
if (!lastOverlay || lastOverlay.classList.contains(FOCUS_TRAP_DISABLE_CLASS))
|
|
333
450
|
return;
|
|
334
|
-
const activeElement = doc
|
|
451
|
+
const activeElement = getActiveElement(doc);
|
|
335
452
|
if (activeElement === lastOverlay) {
|
|
336
453
|
ev.preventDefault();
|
|
337
454
|
focusFirstDescendant(lastOverlay);
|
|
@@ -347,16 +464,32 @@ const connectListeners = (doc) => {
|
|
|
347
464
|
if (!isInsideOverlay)
|
|
348
465
|
return;
|
|
349
466
|
// Get all focusable elements from both light and shadow DOM
|
|
350
|
-
|
|
467
|
+
let allFocusable = [
|
|
351
468
|
...lastOverlay.querySelectorAll(focusableQueryString),
|
|
352
469
|
...(((_c = lastOverlay.shadowRoot) === null || _c === void 0 ? void 0 : _c.querySelectorAll(focusableQueryString)) || []),
|
|
353
470
|
];
|
|
471
|
+
const selectModalEl = lastOverlay.querySelector(ION_SELECT_MODAL_SELECTOR);
|
|
472
|
+
const isSheetModal = lastOverlay.classList.contains('modal-sheet');
|
|
473
|
+
/**
|
|
474
|
+
* Some sheet modal content, including ion-select-modal,
|
|
475
|
+
* renders option containers as `ion-item.select-interface-option`.
|
|
476
|
+
* These can match focusable selectors in some builds but
|
|
477
|
+
* are not intended tab stops. Keep only true interactive
|
|
478
|
+
* controls so Tab can move from options to header
|
|
479
|
+
* controls/handle.
|
|
480
|
+
*/
|
|
481
|
+
if (selectModalEl) {
|
|
482
|
+
allFocusable = allFocusable.filter((el) => !el.matches('ion-item.select-interface-option'));
|
|
483
|
+
}
|
|
484
|
+
if (isSheetModal) {
|
|
485
|
+
allFocusable = sortSheetModalFocusables(lastOverlay, allFocusable);
|
|
486
|
+
}
|
|
354
487
|
if (allFocusable.length === 0) {
|
|
355
488
|
ev.preventDefault();
|
|
356
489
|
return;
|
|
357
490
|
}
|
|
358
491
|
// Find current element's index (accounting for shadow DOM)
|
|
359
|
-
|
|
492
|
+
let currentIndex = activeElement
|
|
360
493
|
? allFocusable.findIndex((el) => {
|
|
361
494
|
var _a;
|
|
362
495
|
if (el === activeElement)
|
|
@@ -367,6 +500,31 @@ const connectListeners = (doc) => {
|
|
|
367
500
|
return rootNode instanceof ShadowRoot && rootNode.host === el;
|
|
368
501
|
})
|
|
369
502
|
: -1;
|
|
503
|
+
/**
|
|
504
|
+
* Radio/checkbox groups can move focus onto an option with
|
|
505
|
+
* `tabIndex=-1`, while another option still has `tabIndex=0`
|
|
506
|
+
* in the list. `findIndex` then yields -1 and Tab incorrectly
|
|
507
|
+
* wraps to `allFocusable[0]`.
|
|
508
|
+
* Treat focus on any option control inside the sheet modal
|
|
509
|
+
* as the same trap slot as the listed tabbable option
|
|
510
|
+
* (`tabIndex >= 0`) so Tab goes handle → Cancel, not back
|
|
511
|
+
* to the first radio.
|
|
512
|
+
*/
|
|
513
|
+
if (currentIndex < 0 && isSheetModal && activeElement) {
|
|
514
|
+
const optionHost = getOptionControlHost(activeElement);
|
|
515
|
+
if (optionHost && lastOverlay.contains(optionHost)) {
|
|
516
|
+
const directIndex = allFocusable.indexOf(optionHost);
|
|
517
|
+
if (directIndex >= 0) {
|
|
518
|
+
currentIndex = directIndex;
|
|
519
|
+
}
|
|
520
|
+
else {
|
|
521
|
+
const tabbableOptionIndex = getTabbableOptionControlIndex(allFocusable, lastOverlay);
|
|
522
|
+
if (tabbableOptionIndex >= 0) {
|
|
523
|
+
currentIndex = tabbableOptionIndex;
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
}
|
|
527
|
+
}
|
|
370
528
|
ev.preventDefault();
|
|
371
529
|
// Helper to focus an element, handling shadow DOM properly
|
|
372
530
|
const focusElement = (element) => {
|
|
@@ -380,24 +538,43 @@ const connectListeners = (doc) => {
|
|
|
380
538
|
}
|
|
381
539
|
focusVisibleElement(element);
|
|
382
540
|
};
|
|
541
|
+
let nextIndex;
|
|
383
542
|
if (ev.shiftKey) {
|
|
384
543
|
// Shift+Tab: previous element, wrap to last if at first
|
|
385
544
|
if (currentIndex <= 0) {
|
|
386
|
-
|
|
545
|
+
nextIndex = allFocusable.length - 1;
|
|
387
546
|
}
|
|
388
547
|
else {
|
|
389
|
-
|
|
548
|
+
nextIndex = currentIndex - 1;
|
|
390
549
|
}
|
|
391
550
|
}
|
|
392
551
|
else {
|
|
393
552
|
// Tab: next element, wrap to first if at last
|
|
394
553
|
if (currentIndex < 0 || currentIndex >= allFocusable.length - 1) {
|
|
395
|
-
|
|
554
|
+
nextIndex = 0;
|
|
396
555
|
}
|
|
397
556
|
else {
|
|
398
|
-
|
|
557
|
+
nextIndex = currentIndex + 1;
|
|
558
|
+
}
|
|
559
|
+
}
|
|
560
|
+
const nextEl = allFocusable[nextIndex];
|
|
561
|
+
const overlayTrap = lastOverlay;
|
|
562
|
+
const tabbableOptionIndex = isSheetModal ? getTabbableOptionControlIndex(allFocusable, lastOverlay) : -1;
|
|
563
|
+
/**
|
|
564
|
+
* The trap list only includes one tabbable option host
|
|
565
|
+
* (`tabIndex >= 0`), usually the checked/first radio.
|
|
566
|
+
* `focusin` tracks the real last-focused option; use it
|
|
567
|
+
* whenever Tab would focus that slot (wrap from Cancel,
|
|
568
|
+
* Shift+Tab from handle, etc.).
|
|
569
|
+
*/
|
|
570
|
+
let focusTarget = nextEl;
|
|
571
|
+
if (isSheetModal && tabbableOptionIndex >= 0 && nextIndex === tabbableOptionIndex) {
|
|
572
|
+
const saved = overlayTrap.trapLastSheetOptionControl;
|
|
573
|
+
if ((saved === null || saved === void 0 ? void 0 : saved.isConnected) && lastOverlay.contains(saved) && saved !== nextEl) {
|
|
574
|
+
focusTarget = saved;
|
|
399
575
|
}
|
|
400
576
|
}
|
|
577
|
+
focusElement(focusTarget);
|
|
401
578
|
}, true);
|
|
402
579
|
// handle back-button click
|
|
403
580
|
doc.addEventListener('ionBackButton', (ev) => {
|
package/dist/docs.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"timestamp": "2026-05-
|
|
2
|
+
"timestamp": "2026-05-22T16:26:35",
|
|
3
3
|
"compiler": {
|
|
4
4
|
"name": "@stencil/core",
|
|
5
5
|
"version": "4.43.0",
|
|
@@ -14469,90 +14469,6 @@
|
|
|
14469
14469
|
"dependencies": [],
|
|
14470
14470
|
"dependencyGraph": {}
|
|
14471
14471
|
},
|
|
14472
|
-
{
|
|
14473
|
-
"filePath": "src/components/gallery-item/gallery-item.tsx",
|
|
14474
|
-
"encapsulation": "shadow",
|
|
14475
|
-
"tag": "ion-gallery-item",
|
|
14476
|
-
"docs": "",
|
|
14477
|
-
"docsTags": [
|
|
14478
|
-
{
|
|
14479
|
-
"name": "virtualProp",
|
|
14480
|
-
"text": "{\"ios\" | \"md\"} mode - The mode determines the platform behaviors of the component."
|
|
14481
|
-
},
|
|
14482
|
-
{
|
|
14483
|
-
"name": "virtualProp",
|
|
14484
|
-
"text": "{\"ios\" | \"md\" | \"ionic\"} theme - The theme determines the visual appearance of the component."
|
|
14485
|
-
},
|
|
14486
|
-
{
|
|
14487
|
-
"name": "slot",
|
|
14488
|
-
"text": "- Wrap elements that should be grouped in an `ion-gallery`."
|
|
14489
|
-
}
|
|
14490
|
-
],
|
|
14491
|
-
"usage": {},
|
|
14492
|
-
"props": [
|
|
14493
|
-
{
|
|
14494
|
-
"name": "mode",
|
|
14495
|
-
"type": "\"ios\" | \"md\"",
|
|
14496
|
-
"mutable": false,
|
|
14497
|
-
"attr": "mode",
|
|
14498
|
-
"reflectToAttr": false,
|
|
14499
|
-
"docs": "The mode determines the platform behaviors of the component.",
|
|
14500
|
-
"docsTags": [],
|
|
14501
|
-
"values": [
|
|
14502
|
-
{
|
|
14503
|
-
"value": "ios",
|
|
14504
|
-
"type": "string"
|
|
14505
|
-
},
|
|
14506
|
-
{
|
|
14507
|
-
"value": "md",
|
|
14508
|
-
"type": "string"
|
|
14509
|
-
}
|
|
14510
|
-
],
|
|
14511
|
-
"optional": true,
|
|
14512
|
-
"required": false
|
|
14513
|
-
},
|
|
14514
|
-
{
|
|
14515
|
-
"name": "theme",
|
|
14516
|
-
"type": "\"ios\" | \"md\" | \"ionic\"",
|
|
14517
|
-
"mutable": false,
|
|
14518
|
-
"attr": "theme",
|
|
14519
|
-
"reflectToAttr": false,
|
|
14520
|
-
"docs": "The theme determines the visual appearance of the component.",
|
|
14521
|
-
"docsTags": [],
|
|
14522
|
-
"values": [
|
|
14523
|
-
{
|
|
14524
|
-
"value": "ios",
|
|
14525
|
-
"type": "string"
|
|
14526
|
-
},
|
|
14527
|
-
{
|
|
14528
|
-
"value": "md",
|
|
14529
|
-
"type": "string"
|
|
14530
|
-
},
|
|
14531
|
-
{
|
|
14532
|
-
"value": "ionic",
|
|
14533
|
-
"type": "string"
|
|
14534
|
-
}
|
|
14535
|
-
],
|
|
14536
|
-
"optional": true,
|
|
14537
|
-
"required": false
|
|
14538
|
-
}
|
|
14539
|
-
],
|
|
14540
|
-
"methods": [],
|
|
14541
|
-
"events": [],
|
|
14542
|
-
"listeners": [],
|
|
14543
|
-
"styles": [],
|
|
14544
|
-
"slots": [
|
|
14545
|
-
{
|
|
14546
|
-
"name": "",
|
|
14547
|
-
"docs": "Wrap elements that should be grouped in an `ion-gallery`."
|
|
14548
|
-
}
|
|
14549
|
-
],
|
|
14550
|
-
"parts": [],
|
|
14551
|
-
"states": [],
|
|
14552
|
-
"dependents": [],
|
|
14553
|
-
"dependencies": [],
|
|
14554
|
-
"dependencyGraph": {}
|
|
14555
|
-
},
|
|
14556
14472
|
{
|
|
14557
14473
|
"filePath": "src/components/grid/grid.tsx",
|
|
14558
14474
|
"encapsulation": "shadow",
|
package/dist/esm/index.js
CHANGED
|
@@ -14,7 +14,7 @@ export { I as IonicSafeString } from './index-D4ugF_sT.js';
|
|
|
14
14
|
export { g as getMode, s as setupConfig } from './config-BwKpO3Is.js';
|
|
15
15
|
export { o as openURL } from './theme-DaJxRxSQ.js';
|
|
16
16
|
export { m as menuController } from './index-hpH08p5s.js';
|
|
17
|
-
export { b as actionSheetController, a as alertController, l as loadingController, m as modalController, p as pickerController, c as popoverController, t as toastController } from './overlays-
|
|
17
|
+
export { b as actionSheetController, a as alertController, l as loadingController, m as modalController, p as pickerController, c as popoverController, t as toastController } from './overlays-ttYCMKRp.js';
|
|
18
18
|
import './gesture-controller-BTEOs1at.js';
|
|
19
19
|
import './focus-visible-vXpMhGrs.js';
|
|
20
20
|
import './framework-delegate-CjVwn_KZ.js';
|
|
@@ -5,7 +5,7 @@ import { r as registerInstance, c as createEvent, a as readTask, h, d as Host, g
|
|
|
5
5
|
import { c as createButtonActiveGesture } from './button-active-g6ZnZzDZ.js';
|
|
6
6
|
import { r as raf } from './helpers-Do7zwvM1.js';
|
|
7
7
|
import { c as createLockController } from './lock-controller-B-hirT0v.js';
|
|
8
|
-
import { d as createDelegateController, e as createTriggerController, B as BACKDROP, i as isCancel, f as present, g as dismiss, h as eventMethod, s as safeCall, j as prepareOverlay, k as setOverlayId } from './overlays-
|
|
8
|
+
import { d as createDelegateController, e as createTriggerController, B as BACKDROP, i as isCancel, f as present, g as dismiss, h as eventMethod, s as safeCall, j as prepareOverlay, k as setOverlayId } from './overlays-ttYCMKRp.js';
|
|
9
9
|
import { r as renderOptionLabel } from './select-option-render-B2qc5ZP7.js';
|
|
10
10
|
import { g as getClassMap } from './theme-DaJxRxSQ.js';
|
|
11
11
|
import { b as getIonMode, c as getIonTheme } from './ionic-global-CAZb-5i-.js';
|
|
@@ -6,7 +6,7 @@ import { E as ENABLE_HTML_CONTENT_DEFAULT } from './config-BwKpO3Is.js';
|
|
|
6
6
|
import { c as createButtonActiveGesture } from './button-active-g6ZnZzDZ.js';
|
|
7
7
|
import { r as raf } from './helpers-Do7zwvM1.js';
|
|
8
8
|
import { c as createLockController } from './lock-controller-B-hirT0v.js';
|
|
9
|
-
import { d as createDelegateController, e as createTriggerController, B as BACKDROP, i as isCancel, j as prepareOverlay, k as setOverlayId, f as present, g as dismiss, h as eventMethod, s as safeCall } from './overlays-
|
|
9
|
+
import { d as createDelegateController, e as createTriggerController, B as BACKDROP, i as isCancel, j as prepareOverlay, k as setOverlayId, f as present, g as dismiss, h as eventMethod, s as safeCall } from './overlays-ttYCMKRp.js';
|
|
10
10
|
import { s as sanitizeDOMString } from './index-D4ugF_sT.js';
|
|
11
11
|
import { r as renderOptionLabel } from './select-option-render-B2qc5ZP7.js';
|
|
12
12
|
import { g as getClassMap } from './theme-DaJxRxSQ.js';
|
|
@@ -1066,7 +1066,7 @@ const Header = class {
|
|
|
1066
1066
|
const isCondensed = collapse === 'condense';
|
|
1067
1067
|
// banner role must be at top level, so remove role if inside a menu
|
|
1068
1068
|
const roleType = getRoleType(hostContext('ion-menu', this.el), isCondensed, theme);
|
|
1069
|
-
return (h(Host, Object.assign({ key: '
|
|
1069
|
+
return (h(Host, Object.assign({ key: 'b43e5f542bdcec5e94c299556183cf6d9d673438', role: roleType, class: {
|
|
1070
1070
|
[theme]: true,
|
|
1071
1071
|
// Used internally for styling
|
|
1072
1072
|
[`header-${theme}`]: true,
|
|
@@ -1074,7 +1074,7 @@ const Header = class {
|
|
|
1074
1074
|
[`header-collapse-${collapse}`]: true,
|
|
1075
1075
|
[`header-translucent-${theme}`]: this.translucent,
|
|
1076
1076
|
['header-divider']: divider,
|
|
1077
|
-
} }, inheritedAttributes), theme !== 'md' && translucent && h("div", { key: '
|
|
1077
|
+
} }, inheritedAttributes), theme !== 'md' && translucent && h("div", { key: 'fd9938f02edd38e1afc83025373ec0aec5633711', class: "header-background" }), h("slot", { key: '900aaa7da5d6f08e6f94b128fa065348d595159e' })));
|
|
1078
1078
|
}
|
|
1079
1079
|
get el() { return getElement(this); }
|
|
1080
1080
|
};
|
|
@@ -1261,7 +1261,7 @@ const RouterOutlet = class {
|
|
|
1261
1261
|
return true;
|
|
1262
1262
|
}
|
|
1263
1263
|
render() {
|
|
1264
|
-
return h("slot", { key: '
|
|
1264
|
+
return h("slot", { key: 'f59dfdc11831ed91f5f7d8147cdc14f3c07bc289' });
|
|
1265
1265
|
}
|
|
1266
1266
|
get el() { return getElement(this); }
|
|
1267
1267
|
static get watchers() { return {
|
|
@@ -1301,11 +1301,11 @@ const ToolbarTitle = class {
|
|
|
1301
1301
|
render() {
|
|
1302
1302
|
const theme = getIonTheme(this);
|
|
1303
1303
|
const size = this.getSize();
|
|
1304
|
-
return (h(Host, { key: '
|
|
1304
|
+
return (h(Host, { key: '87bb5264f4c13d0d6eeef874ed114539d0b59062', class: createColorClasses(this.color, {
|
|
1305
1305
|
[theme]: true,
|
|
1306
1306
|
[`title-${size}`]: true,
|
|
1307
1307
|
'title-rtl': document.dir === 'rtl',
|
|
1308
|
-
}) }, h("div", { key: '
|
|
1308
|
+
}) }, h("div", { key: '75f2ddfaf693ffdec13d909eefdb09b441d76e80', class: "toolbar-title" }, h("slot", { key: '00539af5e250bee78fdd1c55f2ecdc8e53bc18b0' }))));
|
|
1309
1309
|
}
|
|
1310
1310
|
get el() { return getElement(this); }
|
|
1311
1311
|
static get watchers() { return {
|
|
@@ -1551,11 +1551,11 @@ const Toolbar = class {
|
|
|
1551
1551
|
Object.assign(childStyles, style);
|
|
1552
1552
|
});
|
|
1553
1553
|
const titlePlacement = this.getTitlePlacement();
|
|
1554
|
-
return (h(Host, { key: '
|
|
1554
|
+
return (h(Host, { key: '069913e9241b8e9a2dee8e7d088d181b6faeab5e', class: Object.assign(Object.assign({}, createColorClasses(this.color, {
|
|
1555
1555
|
[theme]: true,
|
|
1556
1556
|
'in-toolbar': hostContext('ion-toolbar', this.el),
|
|
1557
1557
|
[`toolbar-title-placement-${titlePlacement}`]: true,
|
|
1558
|
-
})), childStyles) }, h("div", { key: '
|
|
1558
|
+
})), childStyles) }, h("div", { key: '3255531be492b9afa7b47476a805f923beea09db', class: "toolbar-background", part: "background" }), h("div", { key: '8758189374c0a12f293c30ca7f8f049b732d2cab', class: "toolbar-container", part: "container" }, h("slot", { key: '74c3705f717968893bf94ea95c99cae313ce68f3', name: "start", onSlotchange: () => this.updateSlotClasses }), h("slot", { key: '298c78f93291442f140f8c52983871215f20ea87', name: "secondary", onSlotchange: () => this.updateSlotClasses }), h("div", { key: 'f7376320b704b8ce375fe2223ae30d51bfc05acb', class: "toolbar-content", part: "content" }, h("slot", { key: 'ddaec08b1fbd13384d834ba4c3b4441c4d749faf' })), h("slot", { key: '6d5bce85159859bb548e4d3fb6b22208dcb48987', name: "primary", onSlotchange: () => this.updateSlotClasses }), h("slot", { key: 'd1d21752ed3bcc7bf15c20de1c0a6fd956373450', name: "end", onSlotchange: () => this.updateSlotClasses }))));
|
|
1559
1559
|
}
|
|
1560
1560
|
get el() { return getElement(this); }
|
|
1561
1561
|
static get watchers() { return {
|
|
@@ -159,9 +159,9 @@ const Thumbnail = class {
|
|
|
159
159
|
}
|
|
160
160
|
render() {
|
|
161
161
|
const theme = getIonTheme(this);
|
|
162
|
-
return (h(Host, { key: '
|
|
162
|
+
return (h(Host, { key: '2fb4e6f9f650badf2bc492fc4b1c43cad64141c0', class: {
|
|
163
163
|
[theme]: true,
|
|
164
|
-
} }, h("slot", { key: '
|
|
164
|
+
} }, h("slot", { key: 'ea18f4572b2b019af3470c6bdb7915d4a5dd84bb' })));
|
|
165
165
|
}
|
|
166
166
|
};
|
|
167
167
|
Thumbnail.style = thumbnailCss();
|
|
@@ -126,10 +126,10 @@ const Grid = class {
|
|
|
126
126
|
}
|
|
127
127
|
render() {
|
|
128
128
|
const theme = getIonTheme(this);
|
|
129
|
-
return (h(Host, { key: '
|
|
129
|
+
return (h(Host, { key: '43b4e05ef076160d901c70dc37e177f19b524349', class: {
|
|
130
130
|
[theme]: true,
|
|
131
131
|
'grid-fixed': this.fixed,
|
|
132
|
-
} }, h("slot", { key: '
|
|
132
|
+
} }, h("slot", { key: 'f3805936034708e6783223ded72c0ecfd40e5fb0' })));
|
|
133
133
|
}
|
|
134
134
|
};
|
|
135
135
|
Grid.style = gridCss();
|
|
@@ -142,9 +142,9 @@ const Row = class {
|
|
|
142
142
|
}
|
|
143
143
|
render() {
|
|
144
144
|
const theme = getIonTheme(this);
|
|
145
|
-
return (h(Host, { key: '
|
|
145
|
+
return (h(Host, { key: '64ff6346d95be8d99d6500a6263067081f3fe254', class: {
|
|
146
146
|
[theme]: true,
|
|
147
|
-
} }, h("slot", { key: '
|
|
147
|
+
} }, h("slot", { key: 'e9b4c111f3a49515a721bf679ef2f1a039c9822a' })));
|
|
148
148
|
}
|
|
149
149
|
};
|
|
150
150
|
Row.style = rowCss();
|
|
@@ -6,7 +6,7 @@ import { c as caretLeftSvg } from './caret-left-fIOYmaqA.js';
|
|
|
6
6
|
import { c as caretRightSvg } from './caret-right-BYSs-jZz.js';
|
|
7
7
|
import { startFocusVisible } from './focus-visible-vXpMhGrs.js';
|
|
8
8
|
import { r as raf, g as getElementRoot, a as renderHiddenInput, e as clamp } from './helpers-Do7zwvM1.js';
|
|
9
|
-
import { F as FOCUS_TRAP_DISABLE_CLASS, d as createDelegateController, e as createTriggerController, B as BACKDROP, i as isCancel, j as prepareOverlay, k as setOverlayId, f as present, g as dismiss, h as eventMethod, s as safeCall } from './overlays-
|
|
9
|
+
import { F as FOCUS_TRAP_DISABLE_CLASS, d as createDelegateController, e as createTriggerController, B as BACKDROP, i as isCancel, j as prepareOverlay, k as setOverlayId, f as present, g as dismiss, h as eventMethod, s as safeCall } from './overlays-ttYCMKRp.js';
|
|
10
10
|
import { i as isRTL } from './dir-C53feagD.js';
|
|
11
11
|
import { c as createColorClasses, g as getClassMap } from './theme-DaJxRxSQ.js';
|
|
12
12
|
import { o as chevronForward, c as chevronBack, p as caretDownSharp, q as caretUpSharp, l as chevronDown } from './index-D2tu5BUg.js';
|
|
@@ -2309,11 +2309,11 @@ const Picker = class {
|
|
|
2309
2309
|
render() {
|
|
2310
2310
|
const { htmlAttributes } = this;
|
|
2311
2311
|
const theme = getIonTheme(this);
|
|
2312
|
-
return (h(Host, Object.assign({ key: '
|
|
2312
|
+
return (h(Host, Object.assign({ key: 'b0c1fc8eee284f03c696f0c8aaa29f4a6d7be0be', "aria-modal": "true", tabindex: "-1" }, htmlAttributes, { style: {
|
|
2313
2313
|
zIndex: `${20000 + this.overlayIndex}`,
|
|
2314
2314
|
}, class: Object.assign({ [theme]: true,
|
|
2315
2315
|
// Used internally for styling
|
|
2316
|
-
[`picker-${theme}`]: true, 'overlay-hidden': true }, getClassMap(this.cssClass)), onIonBackdropTap: this.onBackdropTap, onIonPickerWillDismiss: this.dispatchCancelHandler }), h("ion-backdrop", { key: '
|
|
2316
|
+
[`picker-${theme}`]: true, 'overlay-hidden': true }, getClassMap(this.cssClass)), onIonBackdropTap: this.onBackdropTap, onIonPickerWillDismiss: this.dispatchCancelHandler }), h("ion-backdrop", { key: 'b56a9f94c7a95efc047d7be95e76ba3a2284801d', visible: this.showBackdrop, tappable: this.backdropDismiss }), h("div", { key: 'f134d49a3afcfd2a809147b55949cea43fc34462', tabindex: "0", "aria-hidden": "true" }), h("div", { key: '9ae98dc10164e182a13eaef2105894a717a03cc4', class: "picker-wrapper ion-overlay-wrapper", role: "dialog" }, h("div", { key: '96acad60c1214e13098282182fa855b19f0a386c', 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: 'af26cd644ed9bb50c22f06624da3726e7e60426f', class: "picker-columns" }, h("div", { key: 'c0d8bf724f7dc081c314bef61fa08894a75c657b', class: "picker-above-highlight" }), this.presented && this.columns.map((c) => h("ion-picker-legacy-column", { col: c })), h("div", { key: '7315333742b5b0c9533f30e5ce3dfc6ec9112dc1', class: "picker-below-highlight" }))), h("div", { key: '454546aaf27319ae7973e74063c0a026cfc88834', tabindex: "0", "aria-hidden": "true" })));
|
|
2317
2317
|
}
|
|
2318
2318
|
get el() { return getElement(this); }
|
|
2319
2319
|
static get watchers() { return {
|
|
@@ -2671,9 +2671,9 @@ const PickerColumnCmp = class {
|
|
|
2671
2671
|
render() {
|
|
2672
2672
|
const col = this.col;
|
|
2673
2673
|
const theme = getIonTheme(this);
|
|
2674
|
-
return (h(Host, { key: '
|
|
2674
|
+
return (h(Host, { key: '5751788e3b7ecd2fe269c096db883b0681646270', class: Object.assign({ [theme]: true, 'picker-col': true, 'picker-opts-left': this.col.align === 'left', 'picker-opts-right': this.col.align === 'right' }, getClassMap(col.cssClass)), style: {
|
|
2675
2675
|
'max-width': this.col.columnWidth,
|
|
2676
|
-
} }, col.prefix && (h("div", { key: '
|
|
2676
|
+
} }, col.prefix && (h("div", { key: '833f3309c8c77e1faa773f7eaa066516dfd51067', class: "picker-prefix", style: { width: col.prefixWidth } }, col.prefix)), h("div", { key: 'a39f38e60938e70425e4d7674f5e481885b6b548', 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", { key: 'a2f1e0eab834c85e84cee0a716eb1083aa6c7741', class: "picker-suffix", style: { width: col.suffixWidth } }, col.suffix))));
|
|
2677
2677
|
}
|
|
2678
2678
|
get el() { return getElement(this); }
|
|
2679
2679
|
static get watchers() { return {
|