@ionic/core 8.8.6-dev.11777572994.1147595d → 8.8.6-nightly.20260501

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.
Files changed (280) hide show
  1. package/components/index.js +1 -1
  2. package/components/ion-action-sheet.js +1 -1
  3. package/components/ion-alert.js +1 -1
  4. package/components/ion-back-button.js +1 -1
  5. package/components/ion-button.js +1 -1
  6. package/components/ion-card.js +1 -1
  7. package/components/ion-chip.js +1 -1
  8. package/components/ion-datetime-button.js +1 -1
  9. package/components/ion-datetime.js +1 -1
  10. package/components/ion-fab-button.js +1 -1
  11. package/components/ion-infinite-scroll-content.js +1 -1
  12. package/components/ion-input-password-toggle.js +1 -1
  13. package/components/ion-item-option.js +1 -1
  14. package/components/ion-item.js +1 -1
  15. package/components/ion-loading.js +1 -1
  16. package/components/ion-menu-button.js +1 -1
  17. package/components/ion-menu.js +1 -1
  18. package/components/ion-modal.js +1 -1
  19. package/components/ion-picker-legacy-column.d.ts +11 -0
  20. package/components/ion-picker-legacy-column.js +4 -0
  21. package/components/ion-picker-legacy.d.ts +11 -0
  22. package/components/ion-picker-legacy.js +4 -0
  23. package/components/ion-popover.js +1 -1
  24. package/components/ion-progress-bar.js +1 -1
  25. package/components/ion-radio.js +1 -1
  26. package/components/ion-range.js +1 -1
  27. package/components/ion-refresher-content.js +1 -1
  28. package/components/ion-refresher.js +1 -1
  29. package/components/ion-reorder-group.js +1 -1
  30. package/components/ion-reorder.js +1 -1
  31. package/components/ion-ripple-effect.js +1 -1
  32. package/components/ion-router-link.js +1 -1
  33. package/components/ion-router-outlet.js +1 -1
  34. package/components/ion-row.js +1 -1
  35. package/components/ion-searchbar.js +1 -1
  36. package/components/ion-segment-button.js +1 -1
  37. package/components/ion-segment-content.js +1 -1
  38. package/components/ion-segment-view.js +1 -1
  39. package/components/ion-segment.js +1 -1
  40. package/components/ion-select-modal.js +1 -1
  41. package/components/ion-select-option.js +1 -1
  42. package/components/ion-select-popover.js +1 -1
  43. package/components/ion-select.js +1 -1
  44. package/components/ion-skeleton-text.js +1 -1
  45. package/components/ion-spinner.js +1 -1
  46. package/components/ion-split-pane.js +1 -1
  47. package/components/ion-tab-bar.js +1 -1
  48. package/components/ion-tab-button.js +1 -1
  49. package/components/ion-tab.js +1 -1
  50. package/components/ion-tabs.js +1 -1
  51. package/components/ion-text.js +1 -1
  52. package/components/ion-textarea.js +1 -1
  53. package/components/ion-thumbnail.js +1 -1
  54. package/components/ion-title.js +1 -1
  55. package/components/ion-toast.js +1 -1
  56. package/components/ion-toggle.js +1 -1
  57. package/components/ion-toolbar.js +1 -1
  58. package/components/p-1KVKSLu5.js +4 -0
  59. package/components/{p-DbISMmiI.js → p-BSB38Tek.js} +1 -1
  60. package/components/{p-CDXBV7oG.js → p-BTeL5HCK.js} +1 -1
  61. package/components/p-BegtE7nr.js +4 -0
  62. package/components/{p-Ct3FLpwo.js → p-BlNv564p.js} +1 -1
  63. package/components/p-CH0NYjKq.js +4 -0
  64. package/components/{p-DL2W2mt3.js → p-CgfaEEem.js} +1 -1
  65. package/components/p-Cq8cQ0NL.js +4 -0
  66. package/components/{p-nPoOPlPt.js → p-Cyxa_4PV.js} +1 -1
  67. package/components/{p-OOMJP0jy.js → p-D-cP12ZN.js} +1 -1
  68. package/components/p-DHsZWn1l.js +4 -0
  69. package/components/{p-BeL7B3Bb.js → p-DJMZehmW.js} +1 -1
  70. package/components/p-DUqnmRFi.js +4 -0
  71. package/components/{p-DrIm1s9R.js → p-fpbh6w3f.js} +1 -1
  72. package/components/{p-DxXmSp9Y.js → p-kvaDs24J.js} +1 -1
  73. package/dist/cjs/index.cjs.js +2 -1
  74. package/dist/cjs/ion-action-sheet.cjs.entry.js +4 -8
  75. package/dist/cjs/ion-alert.cjs.entry.js +3 -7
  76. package/dist/cjs/ion-app_8.cjs.entry.js +9 -23
  77. package/dist/cjs/ion-avatar_3.cjs.entry.js +1 -1
  78. package/dist/cjs/ion-col_3.cjs.entry.js +1 -1
  79. package/dist/cjs/{ion-datetime.cjs.entry.js → ion-datetime_3.cjs.entry.js} +639 -1
  80. package/dist/cjs/ion-item_8.cjs.entry.js +2 -2
  81. package/dist/cjs/ion-loading.cjs.entry.js +3 -7
  82. package/dist/cjs/ion-menu_3.cjs.entry.js +1 -1
  83. package/dist/cjs/ion-modal.cjs.entry.js +5 -9
  84. package/dist/cjs/ion-popover.cjs.entry.js +3 -7
  85. package/dist/cjs/ion-progress-bar.cjs.entry.js +1 -1
  86. package/dist/cjs/ion-radio_2.cjs.entry.js +3 -3
  87. package/dist/cjs/ion-range.cjs.entry.js +3 -3
  88. package/dist/cjs/ion-refresher_2.cjs.entry.js +2 -2
  89. package/dist/cjs/ion-reorder_2.cjs.entry.js +2 -2
  90. package/dist/cjs/ion-ripple-effect.cjs.entry.js +1 -1
  91. package/dist/cjs/ion-route_4.cjs.entry.js +2 -2
  92. package/dist/cjs/ion-searchbar.cjs.entry.js +4 -4
  93. package/dist/cjs/ion-segment-content.cjs.entry.js +1 -1
  94. package/dist/cjs/ion-segment-view.cjs.entry.js +2 -2
  95. package/dist/cjs/ion-segment_2.cjs.entry.js +4 -4
  96. package/dist/cjs/ion-select-modal.cjs.entry.js +2 -2
  97. package/dist/cjs/ion-select_3.cjs.entry.js +5 -5
  98. package/dist/cjs/ion-spinner.cjs.entry.js +1 -1
  99. package/dist/cjs/ion-split-pane.cjs.entry.js +2 -2
  100. package/dist/cjs/ion-tab-bar_2.cjs.entry.js +4 -4
  101. package/dist/cjs/ion-tab_2.cjs.entry.js +3 -3
  102. package/dist/cjs/ion-text.cjs.entry.js +2 -2
  103. package/dist/cjs/ion-textarea.cjs.entry.js +2 -2
  104. package/dist/cjs/ion-toast.cjs.entry.js +3 -3
  105. package/dist/cjs/ion-toggle.cjs.entry.js +3 -3
  106. package/dist/cjs/ionic.cjs.js +1 -1
  107. package/dist/cjs/loader.cjs.js +1 -1
  108. package/dist/cjs/{overlays-DIfHxkst.js → overlays-C2jiBSNQ.js} +7 -26
  109. package/dist/collection/collection-manifest.json +9 -5
  110. package/dist/collection/components/action-sheet/action-sheet.js +4 -8
  111. package/dist/collection/components/alert/alert.js +3 -7
  112. package/dist/collection/components/loading/loading.js +3 -7
  113. package/dist/collection/components/modal/modal.js +5 -9
  114. package/dist/collection/components/picker-legacy/animations/ios.enter.js +27 -0
  115. package/dist/collection/components/picker-legacy/animations/ios.leave.js +23 -0
  116. package/dist/collection/components/picker-legacy/picker-interface.js +1 -0
  117. package/dist/collection/components/picker-legacy/picker.ios.css +300 -0
  118. package/dist/collection/components/picker-legacy/picker.js +890 -0
  119. package/dist/collection/components/picker-legacy/picker.md.css +287 -0
  120. package/dist/collection/components/picker-legacy-column/picker-column.ios.css +231 -0
  121. package/dist/collection/components/picker-legacy-column/picker-column.js +422 -0
  122. package/dist/collection/components/picker-legacy-column/picker-column.md.css +222 -0
  123. package/dist/collection/components/picker-legacy-column/test/test.utils.js +43 -0
  124. package/dist/collection/components/popover/popover.js +3 -7
  125. package/dist/collection/components/progress-bar/progress-bar.js +1 -1
  126. package/dist/collection/components/radio/radio.js +4 -4
  127. package/dist/collection/components/range/range.js +3 -3
  128. package/dist/collection/components/refresher/refresher.js +1 -1
  129. package/dist/collection/components/refresher-content/refresher-content.js +1 -1
  130. package/dist/collection/components/reorder/reorder.js +1 -1
  131. package/dist/collection/components/reorder-group/reorder-group.js +1 -1
  132. package/dist/collection/components/ripple-effect/ripple-effect.js +1 -1
  133. package/dist/collection/components/router-link/router-link.js +2 -2
  134. package/dist/collection/components/router-outlet/router-outlet.js +5 -38
  135. package/dist/collection/components/row/row.js +1 -1
  136. package/dist/collection/components/searchbar/searchbar.js +4 -4
  137. package/dist/collection/components/segment/segment.js +2 -2
  138. package/dist/collection/components/segment-button/segment-button.js +2 -2
  139. package/dist/collection/components/segment-content/segment-content.js +1 -1
  140. package/dist/collection/components/segment-view/segment-view.js +2 -2
  141. package/dist/collection/components/select/select.js +2 -2
  142. package/dist/collection/components/select-modal/select-modal.js +1 -1
  143. package/dist/collection/components/select-option/select-option.js +1 -1
  144. package/dist/collection/components/select-popover/select-popover.js +1 -1
  145. package/dist/collection/components/skeleton-text/skeleton-text.js +2 -2
  146. package/dist/collection/components/spinner/spinner.js +1 -1
  147. package/dist/collection/components/split-pane/split-pane.js +2 -2
  148. package/dist/collection/components/tab/tab.js +2 -2
  149. package/dist/collection/components/tab-bar/tab-bar.js +2 -2
  150. package/dist/collection/components/tab-button/tab-button.js +2 -2
  151. package/dist/collection/components/tabs/tabs.js +1 -1
  152. package/dist/collection/components/text/text.js +2 -2
  153. package/dist/collection/components/textarea/textarea.js +2 -2
  154. package/dist/collection/components/thumbnail/thumbnail.js +1 -1
  155. package/dist/collection/components/title/title.js +2 -2
  156. package/dist/collection/components/toast/toast.js +2 -2
  157. package/dist/collection/components/toggle/toggle.js +3 -3
  158. package/dist/collection/components/toolbar/toolbar.js +2 -2
  159. package/dist/collection/index.js +1 -1
  160. package/dist/collection/utils/overlays.js +6 -25
  161. package/dist/docs.json +941 -28
  162. package/dist/esm/{index-AlrZKoWR.js → index-DV3sJJW8.js} +1 -1
  163. package/dist/esm/index.js +1 -1
  164. package/dist/esm/ion-accordion_2.entry.js +1 -1
  165. package/dist/esm/ion-action-sheet.entry.js +4 -8
  166. package/dist/esm/ion-alert.entry.js +3 -7
  167. package/dist/esm/ion-app_8.entry.js +9 -23
  168. package/dist/esm/ion-avatar_3.entry.js +1 -1
  169. package/dist/esm/ion-back-button.entry.js +1 -1
  170. package/dist/esm/ion-breadcrumb_2.entry.js +1 -1
  171. package/dist/esm/ion-col_3.entry.js +1 -1
  172. package/dist/esm/{ion-datetime.entry.js → ion-datetime_3.entry.js} +641 -5
  173. package/dist/esm/ion-fab_3.entry.js +1 -1
  174. package/dist/esm/ion-input-password-toggle.entry.js +1 -1
  175. package/dist/esm/ion-input.entry.js +1 -1
  176. package/dist/esm/ion-item_8.entry.js +3 -3
  177. package/dist/esm/ion-loading.entry.js +3 -7
  178. package/dist/esm/ion-menu_3.entry.js +2 -2
  179. package/dist/esm/ion-modal.entry.js +5 -9
  180. package/dist/esm/ion-popover.entry.js +3 -7
  181. package/dist/esm/ion-progress-bar.entry.js +1 -1
  182. package/dist/esm/ion-radio_2.entry.js +3 -3
  183. package/dist/esm/ion-range.entry.js +3 -3
  184. package/dist/esm/ion-refresher_2.entry.js +3 -3
  185. package/dist/esm/ion-reorder_2.entry.js +3 -3
  186. package/dist/esm/ion-ripple-effect.entry.js +1 -1
  187. package/dist/esm/ion-route_4.entry.js +2 -2
  188. package/dist/esm/ion-searchbar.entry.js +5 -5
  189. package/dist/esm/ion-segment-content.entry.js +1 -1
  190. package/dist/esm/ion-segment-view.entry.js +2 -2
  191. package/dist/esm/ion-segment_2.entry.js +4 -4
  192. package/dist/esm/ion-select-modal.entry.js +2 -2
  193. package/dist/esm/ion-select_3.entry.js +6 -6
  194. package/dist/esm/ion-spinner.entry.js +1 -1
  195. package/dist/esm/ion-split-pane.entry.js +2 -2
  196. package/dist/esm/ion-tab-bar_2.entry.js +4 -4
  197. package/dist/esm/ion-tab_2.entry.js +3 -3
  198. package/dist/esm/ion-text.entry.js +2 -2
  199. package/dist/esm/ion-textarea.entry.js +2 -2
  200. package/dist/esm/ion-toast.entry.js +3 -3
  201. package/dist/esm/ion-toggle.entry.js +4 -4
  202. package/dist/esm/ionic.js +1 -1
  203. package/dist/esm/loader.js +1 -1
  204. package/dist/esm/{overlays-BDGzTP3L.js → overlays-F8GHPo-e.js} +7 -26
  205. package/dist/html.html-data.json +59 -4
  206. package/dist/ionic/index.esm.js +1 -1
  207. package/dist/ionic/ionic.esm.js +1 -1
  208. package/dist/ionic/{p-f17d05e3.entry.js → p-031b76f7.entry.js} +1 -1
  209. package/dist/ionic/{p-ede28b71.entry.js → p-07506134.entry.js} +1 -1
  210. package/dist/ionic/{p-e9dd191b.entry.js → p-084c25b2.entry.js} +1 -1
  211. package/dist/ionic/{p-fed27c64.entry.js → p-0d8b5c38.entry.js} +1 -1
  212. package/dist/ionic/p-16813ce7.entry.js +4 -0
  213. package/dist/ionic/p-1b02923f.entry.js +4 -0
  214. package/dist/ionic/{p-898f9d11.entry.js → p-1b169fb6.entry.js} +1 -1
  215. package/dist/ionic/p-23fac490.entry.js +4 -0
  216. package/dist/ionic/{p-7fe42b71.entry.js → p-28a9e720.entry.js} +1 -1
  217. package/dist/ionic/{p-3b58996c.entry.js → p-294f4bb5.entry.js} +1 -1
  218. package/dist/ionic/{p-f7762013.entry.js → p-2a68388b.entry.js} +1 -1
  219. package/dist/ionic/p-2f5a8140.entry.js +4 -0
  220. package/dist/ionic/{p-34b3a309.entry.js → p-2fd110aa.entry.js} +1 -1
  221. package/dist/ionic/{p-4ed63122.entry.js → p-301c43f8.entry.js} +1 -1
  222. package/dist/ionic/p-4c67ce4c.entry.js +4 -0
  223. package/dist/ionic/p-51c11c47.entry.js +4 -0
  224. package/dist/ionic/p-53f750a5.entry.js +4 -0
  225. package/dist/ionic/p-6b701daa.entry.js +4 -0
  226. package/dist/ionic/{p-19adf785.entry.js → p-7620be24.entry.js} +1 -1
  227. package/dist/ionic/{p-18b5d5ff.entry.js → p-771b27a5.entry.js} +1 -1
  228. package/dist/ionic/p-7ca71c83.entry.js +4 -0
  229. package/dist/ionic/{p-66494f9b.entry.js → p-80cac7a2.entry.js} +1 -1
  230. package/dist/ionic/{p-506038d3.entry.js → p-8fda6a62.entry.js} +1 -1
  231. package/dist/ionic/{p-7f269aff.entry.js → p-9cbc6f1f.entry.js} +1 -1
  232. package/dist/ionic/{p-b6f16f18.entry.js → p-9cdbabbb.entry.js} +1 -1
  233. package/dist/ionic/p-DTPR1Wpn.js +4 -0
  234. package/dist/ionic/{p-AlrZKoWR.js → p-DV3sJJW8.js} +1 -1
  235. package/dist/ionic/{p-dc198c3a.entry.js → p-a84f2d21.entry.js} +1 -1
  236. package/dist/ionic/{p-b8f4a31c.entry.js → p-aa812c4b.entry.js} +1 -1
  237. package/dist/ionic/{p-30f5ad9e.entry.js → p-b325a113.entry.js} +1 -1
  238. package/dist/ionic/p-b5ea8cdd.entry.js +4 -0
  239. package/dist/ionic/{p-1d2163ad.entry.js → p-bcaa827e.entry.js} +1 -1
  240. package/dist/ionic/{p-6e99ae8d.entry.js → p-c3cce9d8.entry.js} +1 -1
  241. package/dist/ionic/{p-b553828c.entry.js → p-d4e8b473.entry.js} +1 -1
  242. package/dist/ionic/p-e0287f41.entry.js +4 -0
  243. package/dist/ionic/{p-6da572e7.entry.js → p-e863ffe8.entry.js} +1 -1
  244. package/dist/ionic/p-f2deaceb.entry.js +4 -0
  245. package/dist/ionic/{p-460fbe5b.entry.js → p-f69a5f71.entry.js} +1 -1
  246. package/dist/ionic/{p-4ea520a4.entry.js → p-f8186550.entry.js} +1 -1
  247. package/dist/ionic/{p-8a3a936b.entry.js → p-fdbc90d4.entry.js} +1 -1
  248. package/dist/types/components/picker-legacy/animations/ios.enter.d.ts +5 -0
  249. package/dist/types/components/picker-legacy/animations/ios.leave.d.ts +5 -0
  250. package/dist/types/components/picker-legacy/picker-interface.d.ts +52 -0
  251. package/dist/types/components/picker-legacy/picker.d.ts +158 -0
  252. package/dist/types/components/picker-legacy-column/picker-column.d.ts +46 -0
  253. package/dist/types/components/picker-legacy-column/test/test.utils.d.ts +9 -0
  254. package/dist/types/components/router-outlet/router-outlet.d.ts +0 -7
  255. package/dist/types/components.d.ts +272 -9
  256. package/dist/types/index.d.ts +1 -1
  257. package/dist/types/interface.d.ts +1 -0
  258. package/dist/types/utils/config.d.ts +8 -0
  259. package/dist/types/utils/overlays.d.ts +9 -11
  260. package/hydrate/index.js +788 -164
  261. package/hydrate/index.mjs +788 -164
  262. package/package.json +3 -3
  263. package/components/p-BHlzkIpO.js +0 -4
  264. package/components/p-Bg7NsGS9.js +0 -4
  265. package/components/p-CWpbvhwY.js +0 -4
  266. package/components/p-DBHdZu4y.js +0 -4
  267. package/components/p-DPdqO7R6.js +0 -4
  268. package/dist/ionic/p-2089f9cb.entry.js +0 -4
  269. package/dist/ionic/p-4c8d8c55.entry.js +0 -4
  270. package/dist/ionic/p-4f3a8ccf.entry.js +0 -4
  271. package/dist/ionic/p-528d4c1d.entry.js +0 -4
  272. package/dist/ionic/p-5430ae94.entry.js +0 -4
  273. package/dist/ionic/p-5c2cc090.entry.js +0 -4
  274. package/dist/ionic/p-6406d5a9.entry.js +0 -4
  275. package/dist/ionic/p-7f9db51b.entry.js +0 -4
  276. package/dist/ionic/p-Csx_Ej2k.js +0 -4
  277. package/dist/ionic/p-a39db980.entry.js +0 -4
  278. package/dist/ionic/p-b5e3e1f7.entry.js +0 -4
  279. package/dist/ionic/p-cce0cd26.entry.js +0 -4
  280. package/dist/ionic/p-d92ba088.entry.js +0 -4
@@ -5,7 +5,7 @@ import { Host, h, readTask } from "@stencil/core";
5
5
  import { createButtonActiveGesture } from "../../utils/gesture/button-active";
6
6
  import { raf } from "../../utils/helpers";
7
7
  import { createLockController } from "../../utils/lock-controller";
8
- import { BACKDROP, cleanupRootFocusTrapAccessibility, createDelegateController, createTriggerController, dismiss, eventMethod, isCancel, prepareOverlay, present, safeCall, setOverlayId, } from "../../utils/overlays";
8
+ import { BACKDROP, createDelegateController, createTriggerController, dismiss, eventMethod, isCancel, prepareOverlay, present, safeCall, setOverlayId, } from "../../utils/overlays";
9
9
  import { getClassMap } from "../../utils/theme";
10
10
  import { getIonMode } from "../../global/ionic-global";
11
11
  import { iosEnterAnimation } from "./animations/ios.enter";
@@ -284,10 +284,6 @@ export class ActionSheet {
284
284
  this.gesture = undefined;
285
285
  }
286
286
  this.triggerController.removeClickListener();
287
- // Clean up aria-hidden if removed without dismiss() being called
288
- if (this.presented) {
289
- cleanupRootFocusTrapAccessibility();
290
- }
291
287
  }
292
288
  componentWillLoad() {
293
289
  var _a;
@@ -391,12 +387,12 @@ export class ActionSheet {
391
387
  const cancelButton = allButtons.find((b) => b.role === 'cancel');
392
388
  const buttons = allButtons.filter((b) => b.role !== 'cancel');
393
389
  const headerID = `action-sheet-${overlayIndex}-header`;
394
- return (h(Host, Object.assign({ key: 'fc8e6c837c7e16d78348a3109f5dc992f111784a', role: "dialog", "aria-modal": "true", "aria-labelledby": header !== undefined ? headerID : null, tabindex: "-1" }, htmlAttributes, { style: {
390
+ return (h(Host, Object.assign({ key: '173fcff5b1da7c33c267de4667591c946b8c8d03', role: "dialog", "aria-modal": "true", "aria-labelledby": header !== undefined ? headerID : null, tabindex: "-1" }, htmlAttributes, { style: {
395
391
  zIndex: `${20000 + this.overlayIndex}`,
396
- }, class: Object.assign(Object.assign({ [mode]: true }, getClassMap(this.cssClass)), { 'overlay-hidden': true, 'action-sheet-translucent': this.translucent }), onIonActionSheetWillDismiss: this.dispatchCancelHandler, onIonBackdropTap: this.onBackdropTap }), h("ion-backdrop", { key: 'e558804050a8ba80dcca73308bbcb4b31687ba70', tappable: this.backdropDismiss }), h("div", { key: '6697622f6a62a460eac489afc5cd504eda002140', tabindex: "0", "aria-hidden": "true" }), h("div", { key: '4c05e7a9a20953faaa8ea0eab739b9b400895137', class: "action-sheet-wrapper ion-overlay-wrapper", ref: (el) => (this.wrapperEl = el) }, h("div", { key: '43bbc9b7217570cfc62789b4987e61a6e51a1c5f', class: "action-sheet-container" }, h("div", { key: '5f9b36b5396043997d7b74e29ad3738b2af8821e', class: "action-sheet-group", ref: (el) => (this.groupEl = el), role: hasRadioButtons ? 'radiogroup' : undefined }, header !== undefined && (h("div", { key: '3306e90dace90046d226b1eb95b06af11eebba5e', id: headerID, class: {
392
+ }, class: Object.assign(Object.assign({ [mode]: true }, getClassMap(this.cssClass)), { 'overlay-hidden': true, 'action-sheet-translucent': this.translucent }), onIonActionSheetWillDismiss: this.dispatchCancelHandler, onIonBackdropTap: this.onBackdropTap }), h("ion-backdrop", { key: '521ede659f747864f6c974e09016436eceb7158c', tappable: this.backdropDismiss }), h("div", { key: '7a7946fc434bc444f16a70638f5e948c69d33fcd', tabindex: "0", "aria-hidden": "true" }), h("div", { key: 'bcff39a580489dbafa255842e57aa8602c6d0f18', class: "action-sheet-wrapper ion-overlay-wrapper", ref: (el) => (this.wrapperEl = el) }, h("div", { key: '84bba13ce14261f0f0daa3f9c77648c9e7f36e0e', class: "action-sheet-container" }, h("div", { key: 'd9c8ac404fd6719a7adf8cb36549f67616f9a0c4', class: "action-sheet-group", ref: (el) => (this.groupEl = el), role: hasRadioButtons ? 'radiogroup' : undefined }, header !== undefined && (h("div", { key: '180433a8ad03ef5c54728a1a8f34715b6921d658', id: headerID, class: {
397
393
  'action-sheet-title': true,
398
394
  'action-sheet-has-sub-title': this.subHeader !== undefined,
399
- } }, header, this.subHeader && h("div", { key: 'ee8e87e627e8eb6afdb1f4c3f0ef34c29a2b69c6', class: "action-sheet-sub-title" }, this.subHeader))), this.renderActionSheetButtons(buttons)), cancelButton && (h("div", { key: 'cb568ea8502afd8d913c0d0107db4fc98b5e50c6', class: "action-sheet-group action-sheet-group-cancel" }, h("button", Object.assign({ key: 'd11ca6898fa308f494f2183ffc45bbcf971c14cb' }, cancelButton.htmlAttributes, { type: "button", class: buttonClass(cancelButton), onClick: () => this.buttonClick(cancelButton) }), h("span", { key: 'b18e80930fdd0515d3647846729d392971c7c511', class: "action-sheet-button-inner" }, cancelButton.icon && (h("ion-icon", { key: '4e0a3fdcedaa480329080a8597df29746c14fd06', icon: cancelButton.icon, "aria-hidden": "true", lazy: false, class: "action-sheet-icon" })), cancelButton.text), mode === 'md' && h("ion-ripple-effect", { key: 'fd2be8895b57b74bc83ee54a5d738472ad5fdb00' })))))), h("div", { key: 'b08dba5d658f9a5a64d76dc7eb8aba720c9333c3', tabindex: "0", "aria-hidden": "true" })));
395
+ } }, header, this.subHeader && h("div", { key: '7138e79e61b1a8f42bc5a9175c57fa2f15d7ec5a', class: "action-sheet-sub-title" }, this.subHeader))), this.renderActionSheetButtons(buttons)), cancelButton && (h("div", { key: 'b617c722f5b8028d73ed34b69310f312c65f34a7', class: "action-sheet-group action-sheet-group-cancel" }, h("button", Object.assign({ key: 'd0dd876fc48815df3710413c201c0b445a8e16c0' }, cancelButton.htmlAttributes, { type: "button", class: buttonClass(cancelButton), onClick: () => this.buttonClick(cancelButton) }), h("span", { key: 'e7b960157cc6fc5fe92a12090b2be55e8ae072e4', class: "action-sheet-button-inner" }, cancelButton.icon && (h("ion-icon", { key: '05498ffc60cab911dbff0ecbc6168dea59ada9a5', icon: cancelButton.icon, "aria-hidden": "true", lazy: false, class: "action-sheet-icon" })), cancelButton.text), mode === 'md' && h("ion-ripple-effect", { key: '3d401346cea301be4ca03671f7370f6f4b0b6bde' })))))), h("div", { key: '971f3c5fcc07f36c28eb469a47ec0290c692e139', tabindex: "0", "aria-hidden": "true" })));
400
396
  }
401
397
  static get is() { return "ion-action-sheet"; }
402
398
  static get encapsulation() { return "scoped"; }
@@ -7,7 +7,7 @@ import { createButtonActiveGesture } from "../../utils/gesture/button-active";
7
7
  import { raf } from "../../utils/helpers";
8
8
  import { createLockController } from "../../utils/lock-controller";
9
9
  import { printIonWarning } from "../../utils/logging/index";
10
- import { BACKDROP, cleanupRootFocusTrapAccessibility, createDelegateController, createTriggerController, dismiss, eventMethod, isCancel, prepareOverlay, present, safeCall, setOverlayId, } from "../../utils/overlays";
10
+ import { createDelegateController, createTriggerController, BACKDROP, dismiss, eventMethod, isCancel, prepareOverlay, present, safeCall, setOverlayId, } from "../../utils/overlays";
11
11
  import { sanitizeDOMString } from "../../utils/sanitization/index";
12
12
  import { getClassMap } from "../../utils/theme";
13
13
  import { config } from "../../global/config";
@@ -207,10 +207,6 @@ export class Alert {
207
207
  this.gesture.destroy();
208
208
  this.gesture = undefined;
209
209
  }
210
- // Clean up aria-hidden if removed without dismiss() being called
211
- if (this.presented) {
212
- cleanupRootFocusTrapAccessibility();
213
- }
214
210
  }
215
211
  componentDidLoad() {
216
212
  /**
@@ -444,9 +440,9 @@ export class Alert {
444
440
  * If neither are defined, do not set aria-labelledby.
445
441
  */
446
442
  const ariaLabelledBy = header && subHeader ? `${hdrId} ${subHdrId}` : header ? hdrId : subHeader ? subHdrId : null;
447
- return (h(Host, { key: '51ccec282f165dbaa02d7ee0c6413b870abae1d5', tabindex: "-1", style: {
443
+ return (h(Host, { key: '6025440b9cd369d4fac89e7e4296c84a10a0b8e0', tabindex: "-1", style: {
448
444
  zIndex: `${20000 + overlayIndex}`,
449
- }, class: Object.assign(Object.assign({}, getClassMap(this.cssClass)), { [mode]: true, 'overlay-hidden': true, 'alert-translucent': this.translucent }), onIonAlertWillDismiss: this.dispatchCancelHandler, onIonBackdropTap: this.onBackdropTap }, h("ion-backdrop", { key: '555fb7a0048d1ada0182925ca460956e65f43322', tappable: this.backdropDismiss }), h("div", { key: 'bce7b1466f5d3c2615a7478ec8903f9567c9b101', tabindex: "0", "aria-hidden": "true" }), h("div", Object.assign({ key: '8b0e8793070fee6cb3a69f0fc9b828b07672d0f9', class: "alert-wrapper ion-overlay-wrapper", role: role, "aria-modal": "true", "aria-labelledby": ariaLabelledBy, "aria-describedby": message !== undefined ? msgId : null, tabindex: "0", ref: (el) => (this.wrapperEl = el) }, htmlAttributes), h("div", { key: 'f9c99afdd4389421e9eaabaa7e2f9c17e2cb88f4', class: "alert-head" }, header && (h("h2", { key: '7aa37fe49189d714e7d4bc786d9895ab8191f25c', id: hdrId, class: "alert-title" }, header)), subHeader && !header && (h("h2", { key: '1c32cbb4d615672b669bfacff35079791a0ab50a', id: subHdrId, class: "alert-sub-title" }, subHeader)), subHeader && header && (h("h3", { key: 'fc7285499cee4cef323085e501d974d423102e94', id: subHdrId, class: "alert-sub-title" }, subHeader))), this.renderAlertMessage(msgId), this.renderAlertInputs(), this.renderAlertButtons()), h("div", { key: 'b69334b5643b2592053bc408a9ab3b623e2d2b9d', tabindex: "0", "aria-hidden": "true" })));
445
+ }, class: Object.assign(Object.assign({}, getClassMap(this.cssClass)), { [mode]: true, 'overlay-hidden': true, 'alert-translucent': this.translucent }), onIonAlertWillDismiss: this.dispatchCancelHandler, onIonBackdropTap: this.onBackdropTap }, h("ion-backdrop", { key: '3cd5ca8b99cb95b11dd22ab41a820d841142896f', tappable: this.backdropDismiss }), h("div", { key: '4cc62ae6e21424057d22aeef1e8fc77011e77cd5', tabindex: "0", "aria-hidden": "true" }), h("div", Object.assign({ key: '364057a69f25aa88904df17bdcf7e5bf714e7830', class: "alert-wrapper ion-overlay-wrapper", role: role, "aria-modal": "true", "aria-labelledby": ariaLabelledBy, "aria-describedby": message !== undefined ? msgId : null, tabindex: "0", ref: (el) => (this.wrapperEl = el) }, htmlAttributes), h("div", { key: '78694e3c0db2d408df3899fb1a90859bcc8d14cc', class: "alert-head" }, header && (h("h2", { key: 'ec88ff3e4e1ea871b5975133fdcf4cac38b05e0f', id: hdrId, class: "alert-title" }, header)), subHeader && !header && (h("h2", { key: '9b09bc8bb68af255ef8b7d22587acc946148e544', id: subHdrId, class: "alert-sub-title" }, subHeader)), subHeader && header && (h("h3", { key: '99abe815f75d2df7f1b77c0df9f3436724fea76f', id: subHdrId, class: "alert-sub-title" }, subHeader))), this.renderAlertMessage(msgId), this.renderAlertInputs(), this.renderAlertButtons()), h("div", { key: 'a43d0c22c0e46b1ef911f92ffeb253d7911b85f7', tabindex: "0", "aria-hidden": "true" })));
450
446
  }
451
447
  static get is() { return "ion-alert"; }
452
448
  static get encapsulation() { return "scoped"; }
@@ -5,7 +5,7 @@ import { Host, h } from "@stencil/core";
5
5
  import { ENABLE_HTML_CONTENT_DEFAULT } from "../../utils/config";
6
6
  import { raf } from "../../utils/helpers";
7
7
  import { createLockController } from "../../utils/lock-controller";
8
- import { BACKDROP, cleanupRootFocusTrapAccessibility, createDelegateController, createTriggerController, dismiss, eventMethod, prepareOverlay, present, setOverlayId, } from "../../utils/overlays";
8
+ import { BACKDROP, dismiss, eventMethod, prepareOverlay, present, createDelegateController, createTriggerController, setOverlayId, } from "../../utils/overlays";
9
9
  import { sanitizeDOMString } from "../../utils/sanitization/index";
10
10
  import { getClassMap } from "../../utils/theme";
11
11
  import { config } from "../../global/config";
@@ -114,10 +114,6 @@ export class Loading {
114
114
  }
115
115
  disconnectedCallback() {
116
116
  this.triggerController.removeClickListener();
117
- // Clean up aria-hidden if removed without dismiss() being called
118
- if (this.presented) {
119
- cleanupRootFocusTrapAccessibility();
120
- }
121
117
  }
122
118
  /**
123
119
  * Present the loading overlay after it has been created.
@@ -183,9 +179,9 @@ export class Loading {
183
179
  * Otherwise, don't set aria-labelledby.
184
180
  */
185
181
  const ariaLabelledBy = message !== undefined ? msgId : null;
186
- return (h(Host, Object.assign({ key: 'ab48bfcee8f7e3e33847a2f262fdc08b9ea804ca', role: "dialog", "aria-modal": "true", "aria-labelledby": ariaLabelledBy, tabindex: "-1" }, htmlAttributes, { style: {
182
+ return (h(Host, Object.assign({ key: 'f86ddbc600cb5c396b7de38fb5f49625388c3c3f', role: "dialog", "aria-modal": "true", "aria-labelledby": ariaLabelledBy, tabindex: "-1" }, htmlAttributes, { style: {
187
183
  zIndex: `${40000 + this.overlayIndex}`,
188
- }, onIonBackdropTap: this.onBackdropTap, class: Object.assign(Object.assign({}, getClassMap(this.cssClass)), { [mode]: true, 'overlay-hidden': true, 'loading-translucent': this.translucent }) }), h("ion-backdrop", { key: '41baccc7fb6474389a3a3431c208e829ef738b75', visible: this.showBackdrop, tappable: this.backdropDismiss }), h("div", { key: '7b7290974abbe8db8739b19835aca9f8b5c271c2', tabindex: "0", "aria-hidden": "true" }), h("div", { key: 'e32466abfcc92aaad47ea03b1dcb49f66abe4b63', class: "loading-wrapper ion-overlay-wrapper" }, spinner && (h("div", { key: 'c5e6e6f9e3f39dba0225d08d7dd2c1b96a1d83c7', class: "loading-spinner" }, h("ion-spinner", { key: 'f428038959d879404ea898011363aac0b807ad11', name: spinner, "aria-hidden": "true" }))), message !== undefined && this.renderLoadingMessage(msgId)), h("div", { key: '490e531367b86c319fa4260722dcff4dd631fa88', tabindex: "0", "aria-hidden": "true" })));
184
+ }, onIonBackdropTap: this.onBackdropTap, class: Object.assign(Object.assign({}, getClassMap(this.cssClass)), { [mode]: true, 'overlay-hidden': true, 'loading-translucent': this.translucent }) }), h("ion-backdrop", { key: 'b53727aaddc37ef3c685fcc150c6d5193290a847', visible: this.showBackdrop, tappable: this.backdropDismiss }), h("div", { key: '4c61bede8e0a4e47daa6f1f9d0f364ef6aec0bc3', tabindex: "0", "aria-hidden": "true" }), h("div", { key: '84e51ceb07118f1eaeb757df28801c255496931b', class: "loading-wrapper ion-overlay-wrapper" }, spinner && (h("div", { key: 'fc97f1912e0fc558b7c309a5bc084415f5f620b2', class: "loading-spinner" }, h("ion-spinner", { key: '6e186d856cd3f10f22c3e317ef00f31b4216459c', name: spinner, "aria-hidden": "true" }))), message !== undefined && this.renderLoadingMessage(msgId)), h("div", { key: 'dcbe9d9a619daa1c08174e73827bdabeb59dde92', tabindex: "0", "aria-hidden": "true" })));
189
185
  }
190
186
  static get is() { return "ion-loading"; }
191
187
  static get encapsulation() { return "scoped"; }
@@ -8,7 +8,7 @@ import { raf, inheritAttributes, hasLazyBuild, getElementRoot } from "../../util
8
8
  import { createLockController } from "../../utils/lock-controller";
9
9
  import { printIonWarning } from "../../utils/logging/index";
10
10
  import { Style as StatusBarStyle, StatusBar } from "../../utils/native/status-bar";
11
- import { BACKDROP, cleanupRootFocusTrapAccessibility, createTriggerController, dismiss, eventMethod, FOCUS_TRAP_DISABLE_CLASS, GESTURE, prepareOverlay, present, setOverlayId, } from "../../utils/overlays";
11
+ import { GESTURE, BACKDROP, dismiss, eventMethod, prepareOverlay, present, createTriggerController, setOverlayId, FOCUS_TRAP_DISABLE_CLASS, } from "../../utils/overlays";
12
12
  import { getClassMap } from "../../utils/theme";
13
13
  import { deepReady, waitForMount } from "../../utils/transition/index";
14
14
  import { config } from "../../global/config";
@@ -275,10 +275,6 @@ export class Modal {
275
275
  // Also called in dismiss() — intentional dual cleanup covers both
276
276
  // dismiss-then-remove and direct DOM removal without dismiss.
277
277
  this.cleanupSafeAreaOverrides();
278
- // Clean up aria-hidden if removed without dismiss() being called
279
- if (this.presented) {
280
- cleanupRootFocusTrapAccessibility();
281
- }
282
278
  }
283
279
  componentWillLoad() {
284
280
  var _a;
@@ -1166,20 +1162,20 @@ export class Modal {
1166
1162
  const isCardModal = presentingElement !== undefined && mode === 'ios';
1167
1163
  const isHandleCycle = handleBehavior === 'cycle';
1168
1164
  const isSheetModalWithHandle = isSheetModal && showHandle;
1169
- return (h(Host, Object.assign({ key: '8878518986eab4692754087d117b3b4a7968e4b2', "no-router": true,
1165
+ return (h(Host, Object.assign({ key: '4bf38aa67df9a3f977163bba5423960bbafd16de', "no-router": true,
1170
1166
  // Allow the modal to be navigable when the handle is focusable
1171
1167
  tabIndex: isHandleCycle && isSheetModalWithHandle ? 0 : -1 }, htmlAttributes, { style: {
1172
1168
  zIndex: `${20000 + this.overlayIndex}`,
1173
- }, class: Object.assign({ [mode]: true, ['modal-default']: !isCardModal && !isSheetModal, [`modal-card`]: isCardModal, [`modal-sheet`]: isSheetModal, [`modal-no-expand-scroll`]: isSheetModal && !expandToScroll, 'overlay-hidden': true, [FOCUS_TRAP_DISABLE_CLASS]: focusTrap === false }, getClassMap(this.cssClass)), onIonBackdropTap: this.onBackdropTap, onIonModalDidPresent: this.onLifecycle, onIonModalWillPresent: this.onLifecycle, onIonModalWillDismiss: this.onLifecycle, onIonModalDidDismiss: this.onLifecycle, onFocus: this.onModalFocus }), h("ion-backdrop", { key: '9566ae71e855f74ca44f54c98ba8e87ea987bb61', ref: (el) => (this.backdropEl = el), visible: this.showBackdrop, tappable: this.backdropDismiss, part: "backdrop" }), mode === 'ios' && h("div", { key: '7411fb2aa9f9bd1b43339d95903732039db97817', class: "modal-shadow" }), h("div", Object.assign({ key: '191dac7e097957a46a55bb45717e8762a6865d86',
1169
+ }, class: Object.assign({ [mode]: true, ['modal-default']: !isCardModal && !isSheetModal, [`modal-card`]: isCardModal, [`modal-sheet`]: isSheetModal, [`modal-no-expand-scroll`]: isSheetModal && !expandToScroll, 'overlay-hidden': true, [FOCUS_TRAP_DISABLE_CLASS]: focusTrap === false }, getClassMap(this.cssClass)), onIonBackdropTap: this.onBackdropTap, onIonModalDidPresent: this.onLifecycle, onIonModalWillPresent: this.onLifecycle, onIonModalWillDismiss: this.onLifecycle, onIonModalDidDismiss: this.onLifecycle, onFocus: this.onModalFocus }), h("ion-backdrop", { key: '866da40cc5fc8d3e36637098fb3066a5bc9f4e0f', ref: (el) => (this.backdropEl = el), visible: this.showBackdrop, tappable: this.backdropDismiss, part: "backdrop" }), mode === 'ios' && h("div", { key: '5a2a05514ea8592c8feb0465e504aa7c7af17963', class: "modal-shadow" }), h("div", Object.assign({ key: '4d327115306451f57d190b06ab8cbb6191a6f1d7',
1174
1170
  /*
1175
1171
  role and aria-modal must be used on the
1176
1172
  same element. They must also be set inside the
1177
1173
  shadow DOM otherwise ion-button will not be highlighted
1178
1174
  when using VoiceOver: https://bugs.webkit.org/show_bug.cgi?id=247134
1179
1175
  */
1180
- role: "dialog" }, inheritedAttributes, { "aria-modal": "true", class: "modal-wrapper ion-overlay-wrapper", part: "content", ref: (el) => (this.wrapperEl = el) }), showHandle && (h("button", { key: 'e1cacd56459934e33f5ffab9326d4dfa31764b8f', class: "modal-handle",
1176
+ role: "dialog" }, inheritedAttributes, { "aria-modal": "true", class: "modal-wrapper ion-overlay-wrapper", part: "content", ref: (el) => (this.wrapperEl = el) }), showHandle && (h("button", { key: 'd1882835cc049232c0d957e3ba1e79676a07d179', class: "modal-handle",
1181
1177
  // Prevents the handle from receiving keyboard focus when it does not cycle
1182
- tabIndex: !isHandleCycle ? -1 : 0, "aria-label": "Activate to adjust the size of the dialog overlaying the screen", onClick: isHandleCycle ? this.onHandleClick : undefined, part: "handle", ref: (el) => (this.dragHandleEl = el) })), h("slot", { key: 'b361c4609a107e2eb759926708178964e37132f2', onSlotchange: this.onSlotChange }))));
1178
+ tabIndex: !isHandleCycle ? -1 : 0, "aria-label": "Activate to adjust the size of the dialog overlaying the screen", onClick: isHandleCycle ? this.onHandleClick : undefined, part: "handle", ref: (el) => (this.dragHandleEl = el) })), h("slot", { key: '81dc58b09cf7d7022b04cd170f53113604364d5e', onSlotchange: this.onSlotChange }))));
1183
1179
  }
1184
1180
  static get is() { return "ion-modal"; }
1185
1181
  static get encapsulation() { return "shadow"; }
@@ -0,0 +1,27 @@
1
+ /*!
2
+ * (C) Ionic http://ionicframework.com - MIT License
3
+ */
4
+ import { createAnimation } from "../../../utils/animation/animation";
5
+ /**
6
+ * iOS Picker Enter Animation
7
+ */
8
+ export const iosEnterAnimation = (baseEl) => {
9
+ const baseAnimation = createAnimation();
10
+ const backdropAnimation = createAnimation();
11
+ const wrapperAnimation = createAnimation();
12
+ backdropAnimation
13
+ .addElement(baseEl.querySelector('ion-backdrop'))
14
+ .fromTo('opacity', 0.01, 'var(--backdrop-opacity)')
15
+ .beforeStyles({
16
+ 'pointer-events': 'none',
17
+ })
18
+ .afterClearStyles(['pointer-events']);
19
+ wrapperAnimation
20
+ .addElement(baseEl.querySelector('.picker-wrapper'))
21
+ .fromTo('transform', 'translateY(100%)', 'translateY(0%)');
22
+ return baseAnimation
23
+ .addElement(baseEl)
24
+ .easing('cubic-bezier(.36,.66,.04,1)')
25
+ .duration(400)
26
+ .addAnimation([backdropAnimation, wrapperAnimation]);
27
+ };
@@ -0,0 +1,23 @@
1
+ /*!
2
+ * (C) Ionic http://ionicframework.com - MIT License
3
+ */
4
+ import { createAnimation } from "../../../utils/animation/animation";
5
+ /**
6
+ * iOS Picker Leave Animation
7
+ */
8
+ export const iosLeaveAnimation = (baseEl) => {
9
+ const baseAnimation = createAnimation();
10
+ const backdropAnimation = createAnimation();
11
+ const wrapperAnimation = createAnimation();
12
+ backdropAnimation
13
+ .addElement(baseEl.querySelector('ion-backdrop'))
14
+ .fromTo('opacity', 'var(--backdrop-opacity)', 0.01);
15
+ wrapperAnimation
16
+ .addElement(baseEl.querySelector('.picker-wrapper'))
17
+ .fromTo('transform', 'translateY(0%)', 'translateY(100%)');
18
+ return baseAnimation
19
+ .addElement(baseEl)
20
+ .easing('cubic-bezier(.36,.66,.04,1)')
21
+ .duration(400)
22
+ .addAnimation([backdropAnimation, wrapperAnimation]);
23
+ };
@@ -0,0 +1,300 @@
1
+ /**
2
+ * Convert a font size to a dynamic font size.
3
+ * Fonts that participate in Dynamic Type should use
4
+ * dynamic font sizes.
5
+ * @param size - The initial font size including the unit (i.e. px or pt)
6
+ * @param unit (optional) - The unit to convert to. Use this if you want to
7
+ * convert to a unit other than $baselineUnit.
8
+ */
9
+ /**
10
+ * Convert a font size to a dynamic font size but impose
11
+ * a maximum font size.
12
+ * @param size - The initial font size including the unit (i.e. px or pt)
13
+ * @param maxScale - The maximum scale of the font (i.e. 2.5 for a maximum 250% scale).
14
+ * @param unit (optional) - The unit to convert the initial font size to. Use this if you want to
15
+ * convert to a unit other than $baselineUnit.
16
+ */
17
+ /**
18
+ * Convert a font size to a dynamic font size but impose
19
+ * a minimum font size.
20
+ * @param size - The initial font size including the unit (i.e. px or pt)
21
+ * @param minScale - The minimum scale of the font (i.e. 0.8 for a minimum 80% scale).
22
+ * @param unit (optional) - The unit to convert the initial font size to. Use this if you want to
23
+ * convert to a unit other than $baselineUnit.
24
+ */
25
+ /**
26
+ * Convert a font size to a dynamic font size but impose
27
+ * maximum and minimum font sizes.
28
+ * @param size - The initial font size including the unit (i.e. px or pt)
29
+ * @param minScale - The minimum scale of the font (i.e. 0.8 for a minimum 80% scale).
30
+ * @param maxScale - The maximum scale of the font (i.e. 2.5 for a maximum 250% scale).
31
+ * @param unit (optional) - The unit to convert the initial font size to. Use this if you want to
32
+ * convert to a unit other than $baselineUnit.
33
+ */
34
+ /**
35
+ * A heuristic that applies CSS to tablet
36
+ * viewports.
37
+ *
38
+ * Usage:
39
+ * @include tablet-viewport() {
40
+ * :host {
41
+ * background-color: green;
42
+ * }
43
+ * }
44
+ */
45
+ /**
46
+ * A heuristic that applies CSS to mobile
47
+ * viewports (i.e. phones, not tablets).
48
+ *
49
+ * Usage:
50
+ * @include mobile-viewport() {
51
+ * :host {
52
+ * background-color: blue;
53
+ * }
54
+ * }
55
+ */
56
+ :host {
57
+ /**
58
+ * @prop --background: Background of the picker
59
+ * @prop --background-rgb: Background of the picker in rgb format
60
+ *
61
+ * @prop --border-radius: Border radius of the picker
62
+ * @prop --border-color: Border color of the picker
63
+ * @prop --border-width: Border width of the picker
64
+ * @prop --border-style: Border style of the picker
65
+ *
66
+ * @prop --min-width: Minimum width of the picker
67
+ * @prop --width: Width of the picker
68
+ * @prop --max-width: Maximum width of the picker
69
+ *
70
+ * @prop --min-height: Minimum height of the picker
71
+ * @prop --height: Height of the picker
72
+ * @prop --max-height: Maximum height of the picker
73
+ *
74
+ * @prop --backdrop-opacity: Opacity of the backdrop
75
+ */
76
+ --border-radius: 0;
77
+ --border-style: solid;
78
+ --min-width: auto;
79
+ --width: 100%;
80
+ --max-width: 500px;
81
+ --min-height: auto;
82
+ --max-height: auto;
83
+ -moz-osx-font-smoothing: grayscale;
84
+ -webkit-font-smoothing: antialiased;
85
+ top: 0;
86
+ display: block;
87
+ position: absolute;
88
+ width: 100%;
89
+ height: 100%;
90
+ outline: none;
91
+ font-family: var(--ion-font-family, inherit);
92
+ contain: strict;
93
+ user-select: none;
94
+ z-index: 1001;
95
+ }
96
+ :host {
97
+ inset-inline-start: 0;
98
+ }
99
+
100
+ :host(.overlay-hidden) {
101
+ display: none;
102
+ }
103
+
104
+ .picker-wrapper {
105
+ border-radius: var(--border-radius);
106
+ left: 0;
107
+ right: 0;
108
+ bottom: 0;
109
+ -webkit-margin-start: auto;
110
+ margin-inline-start: auto;
111
+ -webkit-margin-end: auto;
112
+ margin-inline-end: auto;
113
+ margin-top: auto;
114
+ margin-bottom: auto;
115
+ transform: translate3d(0, 100%, 0);
116
+ display: flex;
117
+ position: absolute;
118
+ flex-direction: column;
119
+ width: var(--width);
120
+ min-width: var(--min-width);
121
+ max-width: var(--max-width);
122
+ height: var(--height);
123
+ min-height: var(--min-height);
124
+ max-height: var(--max-height);
125
+ border-width: var(--border-width);
126
+ border-style: var(--border-style);
127
+ border-color: var(--border-color);
128
+ background: var(--background);
129
+ contain: strict;
130
+ overflow: hidden;
131
+ z-index: 10;
132
+ }
133
+
134
+ .picker-toolbar {
135
+ width: 100%;
136
+ background: transparent;
137
+ contain: strict;
138
+ z-index: 1;
139
+ }
140
+
141
+ .picker-button {
142
+ border: 0;
143
+ font-family: inherit;
144
+ }
145
+
146
+ .picker-button:active, .picker-button:focus {
147
+ outline: none;
148
+ }
149
+
150
+ .picker-columns {
151
+ display: flex;
152
+ position: relative;
153
+ justify-content: center;
154
+ margin-bottom: var(--ion-safe-area-bottom, 0);
155
+ contain: strict;
156
+ overflow: hidden;
157
+ }
158
+
159
+ .picker-above-highlight,
160
+ .picker-below-highlight {
161
+ display: none;
162
+ pointer-events: none;
163
+ }
164
+
165
+ /**
166
+ * Convert a font size to a dynamic font size.
167
+ * Fonts that participate in Dynamic Type should use
168
+ * dynamic font sizes.
169
+ * @param size - The initial font size including the unit (i.e. px or pt)
170
+ * @param unit (optional) - The unit to convert to. Use this if you want to
171
+ * convert to a unit other than $baselineUnit.
172
+ */
173
+ /**
174
+ * Convert a font size to a dynamic font size but impose
175
+ * a maximum font size.
176
+ * @param size - The initial font size including the unit (i.e. px or pt)
177
+ * @param maxScale - The maximum scale of the font (i.e. 2.5 for a maximum 250% scale).
178
+ * @param unit (optional) - The unit to convert the initial font size to. Use this if you want to
179
+ * convert to a unit other than $baselineUnit.
180
+ */
181
+ /**
182
+ * Convert a font size to a dynamic font size but impose
183
+ * a minimum font size.
184
+ * @param size - The initial font size including the unit (i.e. px or pt)
185
+ * @param minScale - The minimum scale of the font (i.e. 0.8 for a minimum 80% scale).
186
+ * @param unit (optional) - The unit to convert the initial font size to. Use this if you want to
187
+ * convert to a unit other than $baselineUnit.
188
+ */
189
+ /**
190
+ * Convert a font size to a dynamic font size but impose
191
+ * maximum and minimum font sizes.
192
+ * @param size - The initial font size including the unit (i.e. px or pt)
193
+ * @param minScale - The minimum scale of the font (i.e. 0.8 for a minimum 80% scale).
194
+ * @param maxScale - The maximum scale of the font (i.e. 2.5 for a maximum 250% scale).
195
+ * @param unit (optional) - The unit to convert the initial font size to. Use this if you want to
196
+ * convert to a unit other than $baselineUnit.
197
+ */
198
+ /**
199
+ * A heuristic that applies CSS to tablet
200
+ * viewports.
201
+ *
202
+ * Usage:
203
+ * @include tablet-viewport() {
204
+ * :host {
205
+ * background-color: green;
206
+ * }
207
+ * }
208
+ */
209
+ /**
210
+ * A heuristic that applies CSS to mobile
211
+ * viewports (i.e. phones, not tablets).
212
+ *
213
+ * Usage:
214
+ * @include mobile-viewport() {
215
+ * :host {
216
+ * background-color: blue;
217
+ * }
218
+ * }
219
+ */
220
+ :host {
221
+ --background: var(--ion-background-color, #fff);
222
+ --border-width: 1px 0 0;
223
+ --border-color: var(--ion-item-border-color, var(--ion-border-color, var(--ion-color-step-250, var(--ion-background-color-step-250, #c8c7cc))));
224
+ --height: 260px;
225
+ --backdrop-opacity: var(--ion-backdrop-opacity, 0.26);
226
+ color: var(--ion-item-color, var(--ion-text-color, #000));
227
+ }
228
+
229
+ .picker-toolbar {
230
+ display: flex;
231
+ height: 44px;
232
+ border-bottom: 0.55px solid var(--border-color);
233
+ }
234
+
235
+ .picker-toolbar-button {
236
+ flex: 1;
237
+ text-align: end;
238
+ }
239
+
240
+ .picker-toolbar-button:last-child .picker-button {
241
+ font-weight: 600;
242
+ }
243
+
244
+ .picker-toolbar-button:first-child {
245
+ font-weight: normal;
246
+ text-align: start;
247
+ }
248
+
249
+ .picker-button,
250
+ .picker-button.ion-activated {
251
+ margin-left: 0;
252
+ margin-right: 0;
253
+ margin-top: 0;
254
+ margin-bottom: 0;
255
+ -webkit-padding-start: 1em;
256
+ padding-inline-start: 1em;
257
+ -webkit-padding-end: 1em;
258
+ padding-inline-end: 1em;
259
+ padding-top: 0;
260
+ padding-bottom: 0;
261
+ height: 44px;
262
+ background: transparent;
263
+ color: var(--ion-color-primary, #0054e9);
264
+ font-size: 16px;
265
+ }
266
+
267
+ .picker-columns {
268
+ height: 215px;
269
+ perspective: 1000px;
270
+ }
271
+
272
+ .picker-above-highlight {
273
+ top: 0;
274
+ transform: translate3d(0, 0, 90px);
275
+ display: block;
276
+ position: absolute;
277
+ width: 100%;
278
+ height: 81px;
279
+ border-bottom: 1px solid var(--border-color);
280
+ background: linear-gradient(to bottom, var(--background, var(--ion-background-color, #fff)) 20%, rgba(var(--background-rgb, var(--ion-background-color-rgb, 255, 255, 255)), 0.8) 100%);
281
+ z-index: 10;
282
+ }
283
+ .picker-above-highlight {
284
+ inset-inline-start: 0;
285
+ }
286
+
287
+ .picker-below-highlight {
288
+ top: 115px;
289
+ transform: translate3d(0, 0, 90px);
290
+ display: block;
291
+ position: absolute;
292
+ width: 100%;
293
+ height: 119px;
294
+ border-top: 1px solid var(--border-color);
295
+ background: linear-gradient(to top, var(--background, var(--ion-background-color, #fff)) 30%, rgba(var(--background-rgb, var(--ion-background-color-rgb, 255, 255, 255)), 0.8) 100%);
296
+ z-index: 11;
297
+ }
298
+ .picker-below-highlight {
299
+ inset-inline-start: 0;
300
+ }