@ionic/core 8.0.0-dev.11709632212.139b6f63 → 8.0.0-dev.11711408410.14d71406

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 (947) hide show
  1. package/components/action-sheet.js +11 -6
  2. package/components/alert.js +12 -8
  3. package/components/animation.js +9 -250
  4. package/components/backdrop.js +8 -4
  5. package/components/button.js +25 -9
  6. package/components/buttons.js +10 -6
  7. package/components/checkbox.js +13 -9
  8. package/components/data.js +27 -42
  9. package/components/haptic.js +6 -54
  10. package/components/hardware-back-button.js +3 -3
  11. package/components/helpers.js +1 -57
  12. package/components/index4.js +8 -7
  13. package/components/index6.js +25 -30
  14. package/components/index7.js +124 -25
  15. package/components/index8.js +150 -111
  16. package/components/input-shims.js +1 -1
  17. package/components/input.utils.js +13 -1
  18. package/components/ion-accordion-group.js +9 -6
  19. package/components/ion-accordion.js +10 -6
  20. package/components/ion-app.js +8 -9
  21. package/components/ion-avatar.js +9 -2
  22. package/components/ion-back-button.js +12 -8
  23. package/components/ion-badge.js +9 -5
  24. package/components/ion-breadcrumb.js +11 -7
  25. package/components/ion-breadcrumbs.js +9 -5
  26. package/components/ion-card-content.js +9 -5
  27. package/components/ion-card-header.js +9 -5
  28. package/components/ion-card-subtitle.js +9 -5
  29. package/components/ion-card-title.js +9 -5
  30. package/components/ion-card.js +11 -7
  31. package/components/ion-chip.js +9 -5
  32. package/components/ion-col.js +5 -5
  33. package/components/ion-content.js +10 -10
  34. package/components/ion-datetime-button.js +19 -15
  35. package/components/ion-datetime.js +93 -27
  36. package/components/ion-fab-button.js +10 -6
  37. package/components/ion-fab-list.js +5 -5
  38. package/components/ion-fab.js +5 -5
  39. package/components/ion-footer.js +14 -10
  40. package/components/ion-grid.js +5 -5
  41. package/components/ion-header.js +15 -11
  42. package/components/ion-img.js +5 -2
  43. package/components/ion-infinite-scroll-content.js +12 -8
  44. package/components/ion-infinite-scroll.js +5 -5
  45. package/components/ion-input.js +17 -14
  46. package/components/ion-item-divider.js +9 -5
  47. package/components/ion-item-group.js +9 -5
  48. package/components/ion-item-option.js +9 -5
  49. package/components/ion-item-options.js +9 -5
  50. package/components/ion-item-sliding.js +5 -5
  51. package/components/ion-loading.js +10 -6
  52. package/components/ion-menu-button.js +11 -7
  53. package/components/ion-menu-toggle.js +5 -5
  54. package/components/ion-menu.js +14 -31
  55. package/components/ion-modal.js +45 -10
  56. package/components/ion-nav-link.js +1 -1
  57. package/components/ion-nav.js +6 -5
  58. package/components/ion-note.js +47 -1
  59. package/components/ion-picker-legacy.js +5 -6
  60. package/components/ion-progress-bar.js +8 -4
  61. package/components/ion-range.js +145 -50
  62. package/components/ion-refresher-content.js +9 -8
  63. package/components/ion-refresher.js +10 -6
  64. package/components/ion-reorder-group.js +5 -5
  65. package/components/ion-reorder.js +11 -5
  66. package/components/ion-router-link.js +5 -5
  67. package/components/ion-router-outlet.js +1 -1
  68. package/components/ion-router.js +1 -1
  69. package/components/ion-row.js +5 -2
  70. package/components/ion-searchbar.js +46 -13
  71. package/components/ion-segment-button.js +10 -6
  72. package/components/ion-segment.js +9 -5
  73. package/components/ion-select-option.js +5 -2
  74. package/components/ion-select.js +48 -50
  75. package/components/ion-skeleton-text.js +5 -5
  76. package/components/ion-split-pane.js +10 -6
  77. package/components/ion-tab-bar.js +9 -5
  78. package/components/ion-tab-button.js +9 -5
  79. package/components/ion-tab.js +2 -2
  80. package/components/ion-tabs.js +1 -1
  81. package/components/ion-text.js +5 -5
  82. package/components/ion-textarea.js +15 -12
  83. package/components/ion-thumbnail.js +5 -2
  84. package/components/ion-title.js +9 -5
  85. package/components/ion-toast.js +13 -9
  86. package/components/ion-toggle.js +17 -13
  87. package/components/ion-toolbar.js +9 -5
  88. package/components/ionic-global.js +190 -13
  89. package/components/ios.transition.js +1 -0
  90. package/components/item.js +39 -102
  91. package/components/label.js +12 -8
  92. package/components/list-header.js +9 -5
  93. package/components/list.js +10 -6
  94. package/components/overlays.js +141 -57
  95. package/components/picker-column-option.js +9 -5
  96. package/components/picker-column.js +28 -9
  97. package/components/picker-column2.js +4 -4
  98. package/components/picker.js +6 -2
  99. package/components/popover.js +11 -8
  100. package/components/radio-group.js +5 -3
  101. package/components/radio.js +10 -6
  102. package/components/ripple-effect.js +4 -4
  103. package/components/select-popover.js +21 -20
  104. package/components/spinner.js +6 -6
  105. package/components/status-tap.js +1 -1
  106. package/css/core.ionic.css +13 -0
  107. package/css/core.ionic.css.map +1 -0
  108. package/css/palettes/dark.always.css.map +1 -0
  109. package/css/{themes → palettes}/dark.class.css +4 -4
  110. package/css/palettes/dark.class.css.map +1 -0
  111. package/css/palettes/dark.system.css.map +1 -0
  112. package/css/palettes/high-contrast-dark.always.css.map +1 -0
  113. package/css/{themes → palettes}/high-contrast-dark.class.css +10 -10
  114. package/css/palettes/high-contrast-dark.class.css.map +1 -0
  115. package/css/palettes/high-contrast-dark.system.css.map +1 -0
  116. package/css/palettes/high-contrast.always.css.map +1 -0
  117. package/css/{themes → palettes}/high-contrast.class.css +31 -31
  118. package/css/palettes/high-contrast.class.css.map +1 -0
  119. package/css/palettes/high-contrast.system.css.map +1 -0
  120. package/dist/cjs/{animation-4ad55058.js → animation-b4fdf128.js} +9 -250
  121. package/dist/cjs/{app-globals-92ad1b3d.js → app-globals-98e49326.js} +1 -1
  122. package/dist/cjs/{button-active-8f6a8e77.js → button-active-e2ed5329.js} +2 -2
  123. package/dist/cjs/{data-e2bf21de.js → data-f2ccf911.js} +28 -45
  124. package/dist/cjs/{framework-delegate-53817ef1.js → framework-delegate-55f5683a.js} +1 -1
  125. package/dist/cjs/{haptic-b882e0bb.js → haptic-f6b37aa3.js} +6 -54
  126. package/dist/cjs/{hardware-back-button-2696acaf.js → hardware-back-button-f66bce00.js} +5 -5
  127. package/dist/cjs/{helpers-b71ca811.js → helpers-afaa9001.js} +0 -58
  128. package/dist/cjs/{index-0ffe376d.js → index-2d21d526.js} +443 -14
  129. package/dist/cjs/{index-88b3bd6f.js → index-5643c839.js} +4 -4
  130. package/dist/cjs/{index-347883f6.js → index-91435ed0.js} +3 -3
  131. package/dist/cjs/{index-7574e3d2.js → index-9509ecad.js} +5 -34
  132. package/dist/cjs/{index-16fc2c94.js → index-f5fcf972.js} +15 -14
  133. package/dist/cjs/index.cjs.js +11 -12
  134. package/dist/cjs/{input-shims-679d87bc.js → input-shims-837af288.js} +4 -3
  135. package/dist/cjs/{input.utils-5175aea1.js → input.utils-01c2fa15.js} +15 -3
  136. package/dist/cjs/ion-accordion_2.cjs.entry.js +20 -13
  137. package/dist/cjs/ion-action-sheet.cjs.entry.js +19 -15
  138. package/dist/cjs/ion-alert.cjs.entry.js +20 -17
  139. package/dist/cjs/ion-app_8.cjs.entry.js +87 -68
  140. package/dist/cjs/ion-avatar_3.cjs.entry.js +22 -8
  141. package/dist/cjs/ion-back-button.cjs.entry.js +13 -9
  142. package/dist/cjs/ion-backdrop.cjs.entry.js +9 -5
  143. package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +20 -12
  144. package/dist/cjs/ion-button_2.cjs.entry.js +28 -13
  145. package/dist/cjs/ion-card_5.cjs.entry.js +45 -25
  146. package/dist/cjs/ion-checkbox.cjs.entry.js +15 -11
  147. package/dist/cjs/ion-chip.cjs.entry.js +10 -6
  148. package/dist/cjs/ion-col_3.cjs.entry.js +14 -11
  149. package/dist/cjs/ion-datetime-button.cjs.entry.js +25 -21
  150. package/dist/cjs/ion-datetime_3.cjs.entry.js +175 -112
  151. package/dist/cjs/ion-fab_3.cjs.entry.js +19 -15
  152. package/dist/cjs/ion-img.cjs.entry.js +7 -4
  153. package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +18 -15
  154. package/dist/cjs/ion-input.cjs.entry.js +19 -17
  155. package/dist/cjs/ion-item-option_3.cjs.entry.js +23 -16
  156. package/dist/cjs/ion-item_8.cjs.entry.js +89 -116
  157. package/dist/cjs/ion-loading.cjs.entry.js +16 -13
  158. package/dist/cjs/ion-menu_3.cjs.entry.js +32 -46
  159. package/dist/cjs/ion-modal.cjs.entry.js +57 -22
  160. package/dist/cjs/ion-nav_2.cjs.entry.js +12 -10
  161. package/dist/cjs/ion-picker-column-option.cjs.entry.js +11 -7
  162. package/dist/cjs/ion-picker-column.cjs.entry.js +31 -12
  163. package/dist/cjs/ion-picker.cjs.entry.js +8 -4
  164. package/dist/cjs/ion-popover.cjs.entry.js +20 -17
  165. package/dist/cjs/ion-progress-bar.cjs.entry.js +10 -6
  166. package/dist/cjs/ion-radio_2.cjs.entry.js +16 -10
  167. package/dist/cjs/ion-range.cjs.entry.js +151 -56
  168. package/dist/cjs/ion-refresher_2.cjs.entry.js +21 -17
  169. package/dist/cjs/ion-reorder_2.cjs.entry.js +17 -12
  170. package/dist/cjs/ion-ripple-effect.cjs.entry.js +5 -5
  171. package/dist/cjs/ion-route_4.cjs.entry.js +7 -7
  172. package/dist/cjs/ion-searchbar.cjs.entry.js +41 -13
  173. package/dist/cjs/ion-segment_2.cjs.entry.js +20 -12
  174. package/dist/cjs/ion-select_3.cjs.entry.js +46 -33
  175. package/dist/cjs/ion-spinner.cjs.entry.js +7 -7
  176. package/dist/cjs/ion-split-pane.cjs.entry.js +11 -7
  177. package/dist/cjs/ion-tab-bar_2.cjs.entry.js +19 -11
  178. package/dist/cjs/ion-tab_2.cjs.entry.js +6 -6
  179. package/dist/cjs/ion-text.cjs.entry.js +6 -6
  180. package/dist/cjs/ion-textarea.cjs.entry.js +18 -16
  181. package/dist/cjs/ion-toast.cjs.entry.js +39 -35
  182. package/dist/cjs/ion-toggle.cjs.entry.js +19 -15
  183. package/dist/cjs/ionic-global-94d8021d.js +411 -0
  184. package/dist/cjs/ionic.cjs.js +28 -5
  185. package/dist/cjs/{ios.transition-b102ee38.js → ios.transition-19155451.js} +5 -4
  186. package/dist/cjs/loader.cjs.js +4 -4
  187. package/dist/cjs/{md.transition-a5454240.js → md.transition-1b1135b1.js} +4 -4
  188. package/dist/cjs/{notch-controller-8e0ae870.js → notch-controller-d69150f5.js} +1 -1
  189. package/dist/cjs/{overlays-6b7d156b.js → overlays-de847251.js} +143 -58
  190. package/dist/cjs/{status-tap-b60dcbd8.js → status-tap-3ef7ca2b.js} +4 -4
  191. package/dist/cjs/{swipe-back-72c5c8b7.js → swipe-back-0303a5e4.js} +1 -1
  192. package/dist/collection/collection-manifest.json +1 -1
  193. package/dist/collection/components/accordion/accordion.js +11 -8
  194. package/dist/collection/components/accordion-group/accordion-group.js +11 -8
  195. package/dist/collection/components/action-sheet/action-sheet.js +14 -10
  196. package/dist/collection/components/action-sheet/test/a11y/action-sheet.e2e.js +1 -1
  197. package/dist/collection/components/alert/alert.js +15 -12
  198. package/dist/collection/components/alert/test/a11y/alert.e2e.js +5 -1
  199. package/dist/collection/components/alert/test/basic/alert.e2e.js +1 -1
  200. package/dist/collection/components/app/app.js +11 -7
  201. package/dist/collection/components/avatar/avatar.js +13 -4
  202. package/dist/collection/components/back-button/back-button.js +13 -10
  203. package/dist/collection/components/back-button/test/a11y/back-button.e2e.js +1 -1
  204. package/dist/collection/components/backdrop/backdrop.js +12 -6
  205. package/dist/collection/components/badge/badge.js +11 -8
  206. package/dist/collection/components/badge/test/a11y/badge.e2e.js +1 -1
  207. package/dist/collection/components/breadcrumb/breadcrumb.js +12 -9
  208. package/dist/collection/components/breadcrumbs/breadcrumbs.js +11 -9
  209. package/dist/collection/components/button/button.ios.css +32 -10
  210. package/dist/collection/components/button/button.js +28 -8
  211. package/dist/collection/components/button/button.md.css +28 -13
  212. package/dist/collection/components/button/test/a11y/button.e2e.js +2 -2
  213. package/dist/collection/components/button/test/round/button.e2e.js +39 -4
  214. package/dist/collection/components/buttons/buttons.js +14 -8
  215. package/dist/collection/components/card/card.js +13 -10
  216. package/dist/collection/components/card-content/card-content.js +11 -8
  217. package/dist/collection/components/card-header/card-header.js +12 -9
  218. package/dist/collection/components/card-subtitle/card-subtitle.js +11 -8
  219. package/dist/collection/components/card-title/card-title.js +11 -8
  220. package/dist/collection/components/checkbox/checkbox.js +15 -12
  221. package/dist/collection/components/checkbox/test/a11y/checkbox.e2e.js +1 -1
  222. package/dist/collection/components/checkbox/test/checkbox.spec.js +12 -0
  223. package/dist/collection/components/chip/chip.js +11 -8
  224. package/dist/collection/components/col/col.js +9 -5
  225. package/dist/collection/components/content/content.js +13 -10
  226. package/dist/collection/components/datetime/datetime.js +75 -28
  227. package/dist/collection/components/datetime/test/basic/datetime.e2e.js +80 -1
  228. package/dist/collection/components/datetime/test/format.spec.js +65 -15
  229. package/dist/collection/components/datetime/utils/data.js +3 -3
  230. package/dist/collection/components/datetime/utils/format.js +24 -37
  231. package/dist/collection/components/datetime/utils/validate.js +45 -0
  232. package/dist/collection/components/datetime-button/datetime-button.js +21 -17
  233. package/dist/collection/components/datetime-button/test/basic/datetime-button.e2e.js +65 -0
  234. package/dist/collection/components/fab/fab.js +9 -5
  235. package/dist/collection/components/fab-button/fab-button.js +12 -9
  236. package/dist/collection/components/fab-button/test/a11y/fab-button.e2e.js +1 -1
  237. package/dist/collection/components/fab-list/fab-list.js +9 -5
  238. package/dist/collection/components/footer/footer.js +17 -14
  239. package/dist/collection/components/grid/grid.js +9 -5
  240. package/dist/collection/components/header/header.ios.css +5 -2
  241. package/dist/collection/components/header/header.js +17 -14
  242. package/dist/collection/components/header/test/basic/header.e2e.js +77 -0
  243. package/dist/collection/components/img/img.js +8 -2
  244. package/dist/collection/components/infinite-scroll/infinite-scroll.js +8 -4
  245. package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.js +16 -10
  246. package/dist/collection/components/input/input.ios.css +4 -2
  247. package/dist/collection/components/input/input.js +16 -37
  248. package/dist/collection/components/input/input.md.css +6 -4
  249. package/dist/collection/components/input/test/a11y/input.e2e.js +1 -1
  250. package/dist/collection/components/input/test/highlight/input.e2e.js +144 -0
  251. package/dist/collection/components/input/test/item/input.e2e.js +21 -0
  252. package/dist/collection/components/input/test/slot/input.e2e.js +8 -0
  253. package/dist/collection/components/item/item.ios.css +6 -198
  254. package/dist/collection/components/item/item.js +33 -178
  255. package/dist/collection/components/item/item.md.css +8 -361
  256. package/dist/collection/components/item/test/basic/item.e2e.js +0 -5
  257. package/dist/collection/components/item/test/buttons/item.e2e.js +20 -4
  258. package/dist/collection/components/item/test/item.spec.js +1 -1
  259. package/dist/collection/components/item-divider/item-divider.js +11 -8
  260. package/dist/collection/components/item-group/item-group.js +13 -7
  261. package/dist/collection/components/item-option/item-option.js +11 -8
  262. package/dist/collection/components/item-options/item-options.js +13 -7
  263. package/dist/collection/components/item-sliding/item-sliding.js +8 -4
  264. package/dist/collection/components/item-sliding/test/a11y/item-sliding.e2e.js +1 -1
  265. package/dist/collection/components/label/label.ios.css +0 -5
  266. package/dist/collection/components/label/label.js +11 -8
  267. package/dist/collection/components/label/label.md.css +0 -75
  268. package/dist/collection/components/label/test/a11y/label.e2e.js +1 -1
  269. package/dist/collection/components/list/list.js +12 -9
  270. package/dist/collection/components/list-header/list-header.js +11 -8
  271. package/dist/collection/components/loading/loading.js +13 -10
  272. package/dist/collection/components/loading/test/a11y/loading.e2e.js +1 -1
  273. package/dist/collection/components/menu/menu.js +26 -35
  274. package/dist/collection/components/menu-button/menu-button.js +12 -9
  275. package/dist/collection/components/menu-button/test/a11y/menu-button.e2e.js +1 -1
  276. package/dist/collection/components/menu-toggle/menu-toggle.js +8 -5
  277. package/dist/collection/components/modal/modal.js +46 -11
  278. package/dist/collection/components/modal/test/modal-attributes.spec.js +32 -0
  279. package/dist/collection/components/nav/nav.js +11 -5
  280. package/dist/collection/components/nav-link/nav-link.js +5 -1
  281. package/dist/collection/components/note/note.js +11 -8
  282. package/dist/collection/components/picker/picker.js +8 -5
  283. package/dist/collection/components/picker-column/picker-column.js +30 -10
  284. package/dist/collection/components/picker-column-option/picker-column-option.js +13 -7
  285. package/dist/collection/components/picker-legacy/picker.js +7 -6
  286. package/dist/collection/components/picker-legacy-column/picker-column.js +4 -4
  287. package/dist/collection/components/popover/popover.js +18 -14
  288. package/dist/collection/components/progress-bar/progress-bar.js +10 -7
  289. package/dist/collection/components/progress-bar/test/a11y/progress-bar.e2e.js +1 -1
  290. package/dist/collection/components/radio/radio.js +12 -9
  291. package/dist/collection/components/radio/test/a11y/radio.e2e.js +1 -1
  292. package/dist/collection/components/radio-group/radio-group.js +9 -3
  293. package/dist/collection/components/range/range.js +146 -51
  294. package/dist/collection/components/range/test/a11y/range.e2e.js +1 -1
  295. package/dist/collection/components/range/test/label/range.spec.js +24 -0
  296. package/dist/collection/components/range/test/range-events.e2e.js +27 -0
  297. package/dist/collection/components/refresher/refresher.js +11 -8
  298. package/dist/collection/components/refresher/test/a11y/refresher.e2e.js +1 -1
  299. package/dist/collection/components/refresher-content/refresher-content.js +12 -7
  300. package/dist/collection/components/reorder/reorder.js +13 -6
  301. package/dist/collection/components/reorder-group/reorder-group.js +8 -4
  302. package/dist/collection/components/ripple-effect/ripple-effect.js +8 -4
  303. package/dist/collection/components/route/route.js +4 -0
  304. package/dist/collection/components/router/router.js +4 -0
  305. package/dist/collection/components/router-link/router-link.js +9 -5
  306. package/dist/collection/components/router-link/test/a11y/router-link.e2e.js +1 -1
  307. package/dist/collection/components/router-outlet/router-outlet.js +5 -2
  308. package/dist/collection/components/row/row.js +9 -2
  309. package/dist/collection/components/searchbar/searchbar.js +101 -19
  310. package/dist/collection/components/searchbar/test/searchbar.spec.js +20 -2
  311. package/dist/collection/components/segment/segment.js +11 -8
  312. package/dist/collection/components/segment/test/a11y/segment.e2e.js +1 -1
  313. package/dist/collection/components/segment-button/segment-button.js +12 -9
  314. package/dist/collection/components/select/select.ios.css +7 -2
  315. package/dist/collection/components/select/select.js +32 -29
  316. package/dist/collection/components/select/select.md.css +6 -29
  317. package/dist/collection/components/select/test/a11y/select.e2e.js +1 -1
  318. package/dist/collection/components/select/test/highlight/select.e2e.js +88 -4
  319. package/dist/collection/components/select/test/select.spec.js +22 -0
  320. package/dist/collection/components/select/test/slot/select.e2e.js +8 -0
  321. package/dist/collection/components/select-option/select-option.js +9 -2
  322. package/dist/collection/components/select-popover/select-popover.js +12 -4
  323. package/dist/collection/components/select-popover/test/a11y/select-popover.e2e.js +1 -1
  324. package/dist/collection/components/skeleton-text/skeleton-text.js +9 -5
  325. package/dist/collection/components/spinner/spinner.js +10 -6
  326. package/dist/collection/components/split-pane/split-pane.js +14 -8
  327. package/dist/collection/components/tab/tab.js +6 -2
  328. package/dist/collection/components/tab-bar/tab-bar.js +12 -9
  329. package/dist/collection/components/tab-button/tab-button.js +11 -8
  330. package/dist/collection/components/tabs/tabs.js +4 -1
  331. package/dist/collection/components/text/text.js +7 -6
  332. package/dist/collection/components/textarea/test/a11y/textarea.e2e.js +1 -1
  333. package/dist/collection/components/textarea/test/highlight/textarea.e2e.js +144 -0
  334. package/dist/collection/components/textarea/test/item/textarea.e2e.js +21 -0
  335. package/dist/collection/components/textarea/test/slot/textarea.e2e.js +8 -0
  336. package/dist/collection/components/textarea/textarea.ios.css +4 -22
  337. package/dist/collection/components/textarea/textarea.js +15 -36
  338. package/dist/collection/components/textarea/textarea.md.css +6 -17
  339. package/dist/collection/components/thumbnail/thumbnail.js +9 -2
  340. package/dist/collection/components/title/title.js +13 -7
  341. package/dist/collection/components/toast/animations/utils.js +1 -1
  342. package/dist/collection/components/toast/test/a11y/toast.e2e.js +2 -2
  343. package/dist/collection/components/toast/toast.js +15 -11
  344. package/dist/collection/components/toggle/test/a11y/toggle.e2e.js +1 -1
  345. package/dist/collection/components/toggle/toggle.js +19 -16
  346. package/dist/collection/components/toolbar/toolbar.js +13 -10
  347. package/dist/collection/css/test/a11y/typography.e2e.js +1 -1
  348. package/dist/collection/global/ionic-global.js +160 -12
  349. package/dist/collection/global/test/ionic-global.spec.js +109 -0
  350. package/dist/collection/themes/test/colors/theme.e2e.js +2 -2
  351. package/dist/collection/utils/animation/animation-utils.js +0 -102
  352. package/dist/collection/utils/animation/animation.js +10 -141
  353. package/dist/collection/utils/animation/test/animation.spec.js +0 -89
  354. package/dist/collection/utils/animation/test/animationbuilder/animation.e2e.js +0 -4
  355. package/dist/collection/utils/animation/test/basic/animation.e2e.js +0 -4
  356. package/dist/collection/utils/animation/test/display/animation.e2e.js +0 -4
  357. package/dist/collection/utils/animation/test/hooks/animation.e2e.js +0 -4
  358. package/dist/collection/utils/animation/test/multiple/animation.e2e.js +0 -7
  359. package/dist/collection/utils/focus-trap.js +78 -0
  360. package/dist/collection/utils/forms/index.js +0 -1
  361. package/dist/collection/utils/hardware-back-button.js +2 -2
  362. package/dist/collection/utils/helpers.js +0 -53
  363. package/dist/collection/utils/menu-controller/animations/overlay.js +3 -3
  364. package/dist/collection/utils/menu-controller/animations/push.js +2 -1
  365. package/dist/collection/utils/menu-controller/animations/reveal.js +2 -1
  366. package/dist/collection/utils/native/haptic.js +6 -54
  367. package/dist/collection/utils/overlays.js +64 -53
  368. package/dist/collection/utils/slot-mutation-controller.js +12 -0
  369. package/dist/collection/utils/tap-click/index.js +5 -34
  370. package/dist/collection/utils/test/overlays/overlays.spec.js +53 -0
  371. package/dist/collection/utils/test/playwright/generator.js +48 -25
  372. package/dist/collection/utils/test/playwright/page/utils/goto.js +13 -4
  373. package/dist/collection/utils/test/playwright/page/utils/set-content.js +14 -2
  374. package/dist/collection/utils/transition/ios.transition.js +1 -0
  375. package/dist/docs.json +3992 -478
  376. package/dist/esm/{animation-a4acf150.js → animation-eab5a4ca.js} +9 -250
  377. package/dist/esm/{app-globals-5cf6195b.js → app-globals-4194f7b0.js} +1 -1
  378. package/dist/esm/{button-active-4407b98c.js → button-active-6f657ae4.js} +2 -2
  379. package/dist/esm/{data-691286f1.js → data-735635b1.js} +27 -42
  380. package/dist/esm/{framework-delegate-1eb3236c.js → framework-delegate-63d1a679.js} +1 -1
  381. package/dist/esm/{haptic-554688a5.js → haptic-ac164e4c.js} +6 -54
  382. package/dist/esm/{hardware-back-button-b410a047.js → hardware-back-button-ff84501f.js} +5 -5
  383. package/dist/esm/{helpers-ae74b3c9.js → helpers-da915de8.js} +1 -57
  384. package/dist/esm/{index-4c30cddd.js → index-3a495cc6.js} +443 -15
  385. package/dist/esm/{index-66871a1d.js → index-4bbc4ca3.js} +2 -2
  386. package/dist/esm/{index-8758824c.js → index-62041d9c.js} +11 -10
  387. package/dist/esm/{index-1f563746.js → index-79b30591.js} +5 -34
  388. package/dist/esm/{index-1eff8599.js → index-e3f4491c.js} +4 -4
  389. package/dist/esm/index.js +11 -12
  390. package/dist/esm/{input-shims-56c1f603.js → input-shims-131a3f9f.js} +4 -3
  391. package/dist/esm/{input.utils-482fc893.js → input.utils-41b26b54.js} +14 -2
  392. package/dist/esm/ion-accordion_2.entry.js +19 -12
  393. package/dist/esm/ion-action-sheet.entry.js +19 -15
  394. package/dist/esm/ion-alert.entry.js +20 -17
  395. package/dist/esm/ion-app_8.entry.js +76 -57
  396. package/dist/esm/ion-avatar_3.entry.js +22 -8
  397. package/dist/esm/ion-back-button.entry.js +13 -9
  398. package/dist/esm/ion-backdrop.entry.js +9 -5
  399. package/dist/esm/ion-breadcrumb_2.entry.js +20 -12
  400. package/dist/esm/ion-button_2.entry.js +25 -10
  401. package/dist/esm/ion-card_5.entry.js +45 -25
  402. package/dist/esm/ion-checkbox.entry.js +15 -11
  403. package/dist/esm/ion-chip.entry.js +10 -6
  404. package/dist/esm/ion-col_3.entry.js +14 -11
  405. package/dist/esm/ion-datetime-button.entry.js +21 -17
  406. package/dist/esm/ion-datetime_3.entry.js +103 -40
  407. package/dist/esm/ion-fab_3.entry.js +19 -15
  408. package/dist/esm/ion-img.entry.js +7 -4
  409. package/dist/esm/ion-infinite-scroll_2.entry.js +18 -15
  410. package/dist/esm/ion-input.entry.js +19 -17
  411. package/dist/esm/ion-item-option_3.entry.js +23 -16
  412. package/dist/esm/ion-item_8.entry.js +89 -116
  413. package/dist/esm/ion-loading.entry.js +16 -13
  414. package/dist/esm/ion-menu_3.entry.js +32 -46
  415. package/dist/esm/ion-modal.entry.js +52 -17
  416. package/dist/esm/ion-nav_2.entry.js +12 -10
  417. package/dist/esm/ion-picker-column-option.entry.js +11 -7
  418. package/dist/esm/ion-picker-column.entry.js +31 -12
  419. package/dist/esm/ion-picker.entry.js +8 -4
  420. package/dist/esm/ion-popover.entry.js +17 -14
  421. package/dist/esm/ion-progress-bar.entry.js +10 -6
  422. package/dist/esm/ion-radio_2.entry.js +16 -10
  423. package/dist/esm/ion-range.entry.js +146 -51
  424. package/dist/esm/ion-refresher_2.entry.js +21 -17
  425. package/dist/esm/ion-reorder_2.entry.js +17 -12
  426. package/dist/esm/ion-ripple-effect.entry.js +5 -5
  427. package/dist/esm/ion-route_4.entry.js +7 -7
  428. package/dist/esm/ion-searchbar.entry.js +41 -13
  429. package/dist/esm/ion-segment_2.entry.js +20 -12
  430. package/dist/esm/ion-select_3.entry.js +46 -33
  431. package/dist/esm/ion-spinner.entry.js +7 -7
  432. package/dist/esm/ion-split-pane.entry.js +11 -7
  433. package/dist/esm/ion-tab-bar_2.entry.js +19 -11
  434. package/dist/esm/ion-tab_2.entry.js +6 -6
  435. package/dist/esm/ion-text.entry.js +6 -6
  436. package/dist/esm/ion-textarea.entry.js +18 -16
  437. package/dist/esm/ion-toast.entry.js +19 -15
  438. package/dist/esm/ion-toggle.entry.js +19 -15
  439. package/dist/esm/ionic-global-d47e129d.js +401 -0
  440. package/dist/esm/ionic.js +29 -6
  441. package/dist/esm/{ios.transition-189b73b7.js → ios.transition-2187a9fd.js} +5 -4
  442. package/dist/esm/loader.js +5 -5
  443. package/dist/esm/{md.transition-c9761eef.js → md.transition-a8d52fcb.js} +4 -4
  444. package/dist/esm/{notch-controller-18bf9f76.js → notch-controller-55b09e11.js} +1 -1
  445. package/dist/esm/{overlays-c69d2a07.js → overlays-213b5a21.js} +142 -58
  446. package/dist/esm/{status-tap-1d638ee6.js → status-tap-8838c434.js} +4 -4
  447. package/dist/esm/{swipe-back-348f1971.js → swipe-back-e5394307.js} +1 -1
  448. package/dist/esm-es5/animation-eab5a4ca.js +4 -0
  449. package/dist/esm-es5/app-globals-4194f7b0.js +4 -0
  450. package/dist/esm-es5/{button-active-4407b98c.js → button-active-6f657ae4.js} +1 -1
  451. package/dist/esm-es5/data-735635b1.js +4 -0
  452. package/dist/esm-es5/{framework-delegate-1eb3236c.js → framework-delegate-63d1a679.js} +1 -1
  453. package/dist/esm-es5/haptic-ac164e4c.js +4 -0
  454. package/dist/esm-es5/hardware-back-button-ff84501f.js +4 -0
  455. package/dist/esm-es5/helpers-da915de8.js +4 -0
  456. package/dist/esm-es5/index-3a495cc6.js +5 -0
  457. package/dist/esm-es5/index-4bbc4ca3.js +4 -0
  458. package/dist/esm-es5/index-62041d9c.js +4 -0
  459. package/dist/esm-es5/index-79b30591.js +4 -0
  460. package/dist/esm-es5/{index-1eff8599.js → index-e3f4491c.js} +1 -1
  461. package/dist/esm-es5/index.js +1 -1
  462. package/dist/esm-es5/input-shims-131a3f9f.js +4 -0
  463. package/dist/esm-es5/input.utils-41b26b54.js +4 -0
  464. package/dist/esm-es5/ion-accordion_2.entry.js +1 -1
  465. package/dist/esm-es5/ion-action-sheet.entry.js +1 -1
  466. package/dist/esm-es5/ion-alert.entry.js +1 -1
  467. package/dist/esm-es5/ion-app_8.entry.js +1 -1
  468. package/dist/esm-es5/ion-avatar_3.entry.js +1 -1
  469. package/dist/esm-es5/ion-back-button.entry.js +1 -1
  470. package/dist/esm-es5/ion-backdrop.entry.js +1 -1
  471. package/dist/esm-es5/ion-breadcrumb_2.entry.js +1 -1
  472. package/dist/esm-es5/ion-button_2.entry.js +1 -1
  473. package/dist/esm-es5/ion-card_5.entry.js +1 -1
  474. package/dist/esm-es5/ion-checkbox.entry.js +1 -1
  475. package/dist/esm-es5/ion-chip.entry.js +1 -1
  476. package/dist/esm-es5/ion-col_3.entry.js +1 -1
  477. package/dist/esm-es5/ion-datetime-button.entry.js +1 -1
  478. package/dist/esm-es5/ion-datetime_3.entry.js +1 -1
  479. package/dist/esm-es5/ion-fab_3.entry.js +1 -1
  480. package/dist/esm-es5/ion-img.entry.js +1 -1
  481. package/dist/esm-es5/ion-infinite-scroll_2.entry.js +1 -1
  482. package/dist/esm-es5/ion-input.entry.js +1 -1
  483. package/dist/esm-es5/ion-item-option_3.entry.js +1 -1
  484. package/dist/esm-es5/ion-item_8.entry.js +1 -1
  485. package/dist/esm-es5/ion-loading.entry.js +1 -1
  486. package/dist/esm-es5/ion-menu_3.entry.js +1 -1
  487. package/dist/esm-es5/ion-modal.entry.js +1 -1
  488. package/dist/esm-es5/ion-nav_2.entry.js +1 -1
  489. package/dist/esm-es5/ion-picker-column-option.entry.js +1 -1
  490. package/dist/esm-es5/ion-picker-column.entry.js +1 -1
  491. package/dist/esm-es5/ion-picker.entry.js +1 -1
  492. package/dist/esm-es5/ion-popover.entry.js +1 -1
  493. package/dist/esm-es5/ion-progress-bar.entry.js +1 -1
  494. package/dist/esm-es5/ion-radio_2.entry.js +1 -1
  495. package/dist/esm-es5/ion-range.entry.js +1 -1
  496. package/dist/esm-es5/ion-refresher_2.entry.js +1 -1
  497. package/dist/esm-es5/ion-reorder_2.entry.js +1 -1
  498. package/dist/esm-es5/ion-ripple-effect.entry.js +1 -1
  499. package/dist/esm-es5/ion-route_4.entry.js +1 -1
  500. package/dist/esm-es5/ion-searchbar.entry.js +1 -1
  501. package/dist/esm-es5/ion-segment_2.entry.js +1 -1
  502. package/dist/esm-es5/ion-select_3.entry.js +1 -1
  503. package/dist/esm-es5/ion-spinner.entry.js +1 -1
  504. package/dist/esm-es5/ion-split-pane.entry.js +1 -1
  505. package/dist/esm-es5/ion-tab-bar_2.entry.js +1 -1
  506. package/dist/esm-es5/ion-tab_2.entry.js +1 -1
  507. package/dist/esm-es5/ion-text.entry.js +1 -1
  508. package/dist/esm-es5/ion-textarea.entry.js +1 -1
  509. package/dist/esm-es5/ion-toast.entry.js +1 -1
  510. package/dist/esm-es5/ion-toggle.entry.js +1 -1
  511. package/dist/esm-es5/ionic-global-d47e129d.js +4 -0
  512. package/dist/esm-es5/ionic.js +1 -1
  513. package/dist/esm-es5/ios.transition-2187a9fd.js +4 -0
  514. package/dist/esm-es5/loader.js +1 -1
  515. package/dist/esm-es5/{md.transition-c9761eef.js → md.transition-a8d52fcb.js} +1 -1
  516. package/dist/esm-es5/{notch-controller-18bf9f76.js → notch-controller-55b09e11.js} +1 -1
  517. package/dist/esm-es5/overlays-213b5a21.js +4 -0
  518. package/dist/esm-es5/status-tap-8838c434.js +4 -0
  519. package/dist/esm-es5/{swipe-back-348f1971.js → swipe-back-e5394307.js} +1 -1
  520. package/dist/html.html-data.json +1916 -132
  521. package/dist/ionic/index.esm.js +1 -1
  522. package/dist/ionic/ionic.esm.js +1 -1
  523. package/dist/ionic/ionic.js +1 -1
  524. package/dist/ionic/p-0507489e.system.entry.js +4 -0
  525. package/dist/ionic/p-09b71030.entry.js +4 -0
  526. package/dist/ionic/p-0c0065e8.js +4 -0
  527. package/dist/ionic/p-0daf382b.system.entry.js +4 -0
  528. package/dist/ionic/p-1126b6fb.entry.js +4 -0
  529. package/dist/ionic/p-116239e0.system.entry.js +4 -0
  530. package/dist/ionic/p-11f25a12.system.js +4 -0
  531. package/dist/ionic/{p-de55ec45.js → p-139e8ff1.js} +1 -1
  532. package/dist/ionic/p-13aa1338.entry.js +4 -0
  533. package/dist/ionic/p-16b3b748.system.js +4 -0
  534. package/dist/ionic/p-18d1e318.system.js +4 -0
  535. package/dist/ionic/p-197fca36.system.entry.js +4 -0
  536. package/dist/ionic/{p-8a50f8d6.system.js → p-19ea7bff.system.js} +1 -1
  537. package/dist/ionic/{p-98e6b3b8.system.js → p-1a488d6f.system.js} +1 -1
  538. package/dist/ionic/p-1f04779e.entry.js +4 -0
  539. package/dist/ionic/p-226bdf0f.entry.js +4 -0
  540. package/dist/ionic/p-23132e1f.js +4 -0
  541. package/dist/ionic/p-23a3320b.js +4 -0
  542. package/dist/ionic/p-23e053d0.system.entry.js +4 -0
  543. package/dist/ionic/p-24cc69ab.entry.js +4 -0
  544. package/dist/ionic/p-24e9aa21.entry.js +4 -0
  545. package/dist/ionic/p-29ceda88.js +4 -0
  546. package/dist/ionic/p-2a4641fb.system.entry.js +4 -0
  547. package/dist/ionic/p-2bc784c2.system.entry.js +4 -0
  548. package/dist/ionic/p-2c8cb8c0.system.entry.js +4 -0
  549. package/dist/ionic/p-2fad37de.system.entry.js +4 -0
  550. package/dist/ionic/p-30aed000.system.entry.js +4 -0
  551. package/dist/ionic/{p-892e2567.system.entry.js → p-30b7a6a6.system.entry.js} +2 -2
  552. package/dist/ionic/p-322eb715.system.js +4 -0
  553. package/dist/ionic/{p-8d4d902b.js → p-34b11c24.js} +1 -1
  554. package/dist/ionic/p-35b46c05.entry.js +4 -0
  555. package/dist/ionic/p-365d2cfe.system.entry.js +4 -0
  556. package/dist/ionic/p-385c76dc.system.entry.js +4 -0
  557. package/dist/ionic/p-3ad285e3.system.js +4 -0
  558. package/dist/ionic/p-3b03dd5b.entry.js +4 -0
  559. package/dist/ionic/{p-15708968.js → p-3cc276f4.js} +1 -1
  560. package/dist/ionic/p-3d7001d7.js +4 -0
  561. package/dist/ionic/p-3e47e61e.entry.js +4 -0
  562. package/dist/ionic/p-3e8cfe35.system.entry.js +4 -0
  563. package/dist/ionic/p-3e9e667a.entry.js +4 -0
  564. package/dist/ionic/p-3ecd1809.entry.js +4 -0
  565. package/dist/ionic/p-3ed32307.system.entry.js +4 -0
  566. package/dist/ionic/p-41908d5c.entry.js +4 -0
  567. package/dist/ionic/{p-d9b6b588.entry.js → p-44d8d5c3.entry.js} +1 -1
  568. package/dist/ionic/p-45684f75.system.entry.js +4 -0
  569. package/dist/ionic/p-46e489c1.entry.js +4 -0
  570. package/dist/ionic/p-4c2d5b80.system.js +4 -0
  571. package/dist/ionic/p-4c55c5ce.entry.js +4 -0
  572. package/dist/ionic/p-4c6278ca.system.entry.js +4 -0
  573. package/dist/ionic/p-4e7a18b3.entry.js +4 -0
  574. package/dist/ionic/p-4f30e4c3.system.entry.js +4 -0
  575. package/dist/ionic/p-52698131.entry.js +4 -0
  576. package/dist/ionic/p-56dfd814.entry.js +4 -0
  577. package/dist/ionic/{p-ab427719.entry.js → p-57082094.entry.js} +1 -1
  578. package/dist/ionic/{p-ceceac26.js → p-57a4c6c3.js} +1 -1
  579. package/dist/ionic/{p-c8d61b6c.system.entry.js → p-57b76977.system.entry.js} +1 -1
  580. package/dist/ionic/p-5919403e.js +4 -0
  581. package/dist/ionic/p-5fed4c24.system.entry.js +4 -0
  582. package/dist/ionic/p-605c456e.system.entry.js +4 -0
  583. package/dist/ionic/p-6087c7ac.system.entry.js +4 -0
  584. package/dist/ionic/p-617a8c10.system.entry.js +4 -0
  585. package/dist/ionic/p-62ad354a.system.entry.js +4 -0
  586. package/dist/ionic/{p-0a8a78db.system.entry.js → p-644df0cc.system.entry.js} +1 -1
  587. package/dist/ionic/p-6718dfd8.system.entry.js +4 -0
  588. package/dist/ionic/p-6770c46d.system.entry.js +4 -0
  589. package/dist/ionic/p-6981ada8.entry.js +4 -0
  590. package/dist/ionic/p-69e691df.system.entry.js +4 -0
  591. package/dist/ionic/p-6a5b979b.system.js +4 -0
  592. package/dist/ionic/p-6d1854de.system.entry.js +4 -0
  593. package/dist/ionic/p-70a396e0.entry.js +4 -0
  594. package/dist/ionic/p-716cc857.entry.js +4 -0
  595. package/dist/ionic/p-71784639.entry.js +4 -0
  596. package/dist/ionic/p-72812e99.js +4 -0
  597. package/dist/ionic/{p-f2473724.js → p-72bc8a1c.js} +1 -1
  598. package/dist/ionic/p-75257a79.system.js +5 -0
  599. package/dist/ionic/p-77cdf8f0.system.entry.js +4 -0
  600. package/dist/ionic/{p-1e07fdb2.system.entry.js → p-7c6ba817.system.entry.js} +2 -2
  601. package/dist/ionic/p-7d6993fa.entry.js +4 -0
  602. package/dist/ionic/{p-1ea88de9.system.js → p-7fefe43e.system.js} +2 -2
  603. package/dist/ionic/{p-8fe3c4ef.entry.js → p-820be1bf.entry.js} +1 -1
  604. package/dist/ionic/p-84dd4f6c.system.entry.js +4 -0
  605. package/dist/ionic/{p-19f6ac6c.system.js → p-8635f5e6.system.js} +1 -1
  606. package/dist/ionic/p-89b61afc.js +4 -0
  607. package/dist/ionic/{p-12b55b00.system.entry.js → p-8cd83c08.system.entry.js} +1 -1
  608. package/dist/ionic/p-8fbf7c49.entry.js +4 -0
  609. package/dist/ionic/p-8fd110c6.entry.js +4 -0
  610. package/dist/ionic/p-9146695e.system.js +4 -0
  611. package/dist/ionic/p-92b3df98.system.js +4 -0
  612. package/dist/ionic/{p-973c7550.system.entry.js → p-98ced5a7.system.entry.js} +2 -2
  613. package/dist/ionic/p-9a76dbbb.entry.js +4 -0
  614. package/dist/ionic/p-a15ddedb.system.js +4 -0
  615. package/dist/ionic/p-a5456295.entry.js +4 -0
  616. package/dist/ionic/p-a68b1b19.entry.js +4 -0
  617. package/dist/ionic/p-a93873de.system.js +4 -0
  618. package/dist/ionic/{p-df504a37.system.js → p-ac1eb107.system.js} +1 -1
  619. package/dist/ionic/p-ae2c6708.system.entry.js +4 -0
  620. package/dist/ionic/p-ae3fdd38.entry.js +4 -0
  621. package/dist/ionic/{p-eb9803e9.system.js → p-af732189.system.js} +1 -1
  622. package/dist/ionic/p-afeebbc2.entry.js +4 -0
  623. package/dist/ionic/p-b0bd2f28.system.entry.js +4 -0
  624. package/dist/ionic/p-b0da0e7e.entry.js +4 -0
  625. package/dist/ionic/p-b51e4004.js +4 -0
  626. package/dist/ionic/p-b69db5bf.entry.js +4 -0
  627. package/dist/ionic/{p-9f84474d.entry.js → p-b8df09fa.entry.js} +1 -1
  628. package/dist/ionic/p-bb01995b.entry.js +4 -0
  629. package/dist/ionic/p-bb4431d3.entry.js +4 -0
  630. package/dist/ionic/{p-31e02742.system.js → p-c11232d6.system.js} +1 -1
  631. package/dist/ionic/p-c1d0861e.entry.js +4 -0
  632. package/dist/ionic/p-c78731fc.system.js +4 -0
  633. package/dist/ionic/p-c7e16491.js +4 -0
  634. package/dist/ionic/p-c7e3ef1f.js +4 -0
  635. package/dist/ionic/p-c8985963.system.js +4 -0
  636. package/dist/ionic/p-c957dcbd.system.entry.js +4 -0
  637. package/dist/ionic/p-cb4da696.js +5 -0
  638. package/dist/ionic/p-cc1dabd2.system.entry.js +4 -0
  639. package/dist/ionic/p-cd1250d7.js +4 -0
  640. package/dist/ionic/p-cd94b05a.system.entry.js +4 -0
  641. package/dist/ionic/p-d2a65df9.js +4 -0
  642. package/dist/ionic/p-d6788bde.system.entry.js +4 -0
  643. package/dist/ionic/p-d83f3852.system.entry.js +4 -0
  644. package/dist/ionic/p-de5f6929.system.entry.js +4 -0
  645. package/dist/ionic/{p-89ca4c4b.system.js → p-df92bab7.system.js} +1 -1
  646. package/dist/ionic/p-dff73ffc.system.js +4 -0
  647. package/dist/ionic/p-e399a113.entry.js +4 -0
  648. package/dist/ionic/p-e4cd4316.system.entry.js +4 -0
  649. package/dist/ionic/p-e557901b.entry.js +4 -0
  650. package/dist/ionic/p-e62f29e0.system.entry.js +4 -0
  651. package/dist/ionic/p-e7522003.js +4 -0
  652. package/dist/ionic/p-e86fef55.system.js +4 -0
  653. package/dist/ionic/p-eab67c46.system.entry.js +4 -0
  654. package/dist/ionic/p-ed454419.entry.js +4 -0
  655. package/dist/ionic/p-efdba78a.system.entry.js +4 -0
  656. package/dist/ionic/p-f7a041dc.js +4 -0
  657. package/dist/ionic/p-f85988bd.entry.js +4 -0
  658. package/dist/ionic/p-f9398178.entry.js +4 -0
  659. package/dist/ionic/p-f977c8c5.entry.js +4 -0
  660. package/dist/ionic/p-fe1345b7.js +4 -0
  661. package/dist/ionic/{p-97248203.system.entry.js → p-fea6e789.system.entry.js} +1 -1
  662. package/dist/ionic/p-ff584ff5.entry.js +4 -0
  663. package/dist/ionic/p-ff93a0f3.entry.js +4 -0
  664. package/dist/types/components/accordion/accordion.d.ts +2 -1
  665. package/dist/types/components/accordion-group/accordion-group.d.ts +2 -1
  666. package/dist/types/components/action-sheet/action-sheet-interface.d.ts +3 -7
  667. package/dist/types/components/action-sheet/action-sheet.d.ts +3 -2
  668. package/dist/types/components/alert/alert-interface.d.ts +3 -7
  669. package/dist/types/components/alert/alert.d.ts +3 -2
  670. package/dist/types/components/app/app.d.ts +4 -0
  671. package/dist/types/components/avatar/avatar.d.ts +4 -0
  672. package/dist/types/components/back-button/back-button.d.ts +2 -1
  673. package/dist/types/components/backdrop/backdrop.d.ts +4 -0
  674. package/dist/types/components/badge/badge.d.ts +2 -1
  675. package/dist/types/components/breadcrumb/breadcrumb.d.ts +2 -1
  676. package/dist/types/components/breadcrumbs/breadcrumbs.d.ts +2 -2
  677. package/dist/types/components/button/button.d.ts +7 -1
  678. package/dist/types/components/buttons/buttons.d.ts +5 -1
  679. package/dist/types/components/card/card.d.ts +2 -1
  680. package/dist/types/components/card-content/card-content.d.ts +2 -1
  681. package/dist/types/components/card-header/card-header.d.ts +3 -2
  682. package/dist/types/components/card-subtitle/card-subtitle.d.ts +2 -1
  683. package/dist/types/components/card-title/card-title.d.ts +2 -1
  684. package/dist/types/components/checkbox/checkbox.d.ts +2 -1
  685. package/dist/types/components/chip/chip.d.ts +2 -1
  686. package/dist/types/components/col/col.d.ts +4 -0
  687. package/dist/types/components/content/content.d.ts +3 -0
  688. package/dist/types/components/datetime/datetime-interface.d.ts +10 -0
  689. package/dist/types/components/datetime/datetime.d.ts +12 -2
  690. package/dist/types/components/datetime/utils/data.d.ts +3 -3
  691. package/dist/types/components/datetime/utils/format.d.ts +7 -13
  692. package/dist/types/components/datetime/utils/validate.d.ts +8 -0
  693. package/dist/types/components/datetime-button/datetime-button.d.ts +2 -1
  694. package/dist/types/components/fab/fab.d.ts +4 -0
  695. package/dist/types/components/fab-button/fab-button.d.ts +3 -2
  696. package/dist/types/components/fab-list/fab-list.d.ts +4 -0
  697. package/dist/types/components/footer/footer.d.ts +4 -3
  698. package/dist/types/components/grid/grid.d.ts +4 -0
  699. package/dist/types/components/header/header.d.ts +4 -3
  700. package/dist/types/components/img/img.d.ts +3 -0
  701. package/dist/types/components/infinite-scroll/infinite-scroll.d.ts +4 -0
  702. package/dist/types/components/infinite-scroll-content/infinite-scroll-content.d.ts +4 -0
  703. package/dist/types/components/input/input.d.ts +4 -8
  704. package/dist/types/components/item/item.d.ts +4 -35
  705. package/dist/types/components/item-divider/item-divider.d.ts +2 -1
  706. package/dist/types/components/item-group/item-group.d.ts +4 -0
  707. package/dist/types/components/item-option/item-option.d.ts +2 -1
  708. package/dist/types/components/item-options/item-options.d.ts +4 -0
  709. package/dist/types/components/item-sliding/item-sliding.d.ts +4 -0
  710. package/dist/types/components/label/label.d.ts +2 -1
  711. package/dist/types/components/list/list.d.ts +2 -1
  712. package/dist/types/components/list-header/list-header.d.ts +2 -1
  713. package/dist/types/components/loading/loading-interface.d.ts +2 -7
  714. package/dist/types/components/loading/loading.d.ts +3 -2
  715. package/dist/types/components/menu/menu-interface.d.ts +1 -0
  716. package/dist/types/components/menu/menu.d.ts +5 -4
  717. package/dist/types/components/menu-button/menu-button.d.ts +2 -1
  718. package/dist/types/components/menu-toggle/menu-toggle.d.ts +3 -0
  719. package/dist/types/components/modal/modal-interface.d.ts +3 -7
  720. package/dist/types/components/modal/modal.d.ts +2 -1
  721. package/dist/types/components/nav/nav-interface.d.ts +9 -1
  722. package/dist/types/components/nav/nav.d.ts +5 -1
  723. package/dist/types/components/nav-link/nav-link.d.ts +4 -0
  724. package/dist/types/components/note/note.d.ts +2 -1
  725. package/dist/types/components/picker/picker.d.ts +2 -1
  726. package/dist/types/components/picker-column/picker-column.d.ts +2 -1
  727. package/dist/types/components/picker-column-option/picker-column-option.d.ts +4 -0
  728. package/dist/types/components/picker-legacy/picker.d.ts +2 -1
  729. package/dist/types/components/popover/popover-interface.d.ts +3 -7
  730. package/dist/types/components/popover/popover.d.ts +6 -5
  731. package/dist/types/components/progress-bar/progress-bar.d.ts +2 -1
  732. package/dist/types/components/radio/radio.d.ts +2 -1
  733. package/dist/types/components/radio-group/radio-group.d.ts +4 -0
  734. package/dist/types/components/range/range.d.ts +31 -1
  735. package/dist/types/components/refresher/refresher.d.ts +2 -1
  736. package/dist/types/components/refresher-content/refresher-content.d.ts +4 -0
  737. package/dist/types/components/reorder/reorder.d.ts +3 -0
  738. package/dist/types/components/reorder-group/reorder-group.d.ts +4 -0
  739. package/dist/types/components/ripple-effect/ripple-effect.d.ts +4 -0
  740. package/dist/types/components/route/route.d.ts +4 -0
  741. package/dist/types/components/router/router.d.ts +4 -0
  742. package/dist/types/components/router-link/router-link.d.ts +4 -0
  743. package/dist/types/components/router-outlet/router-outlet.d.ts +4 -1
  744. package/dist/types/components/row/row.d.ts +4 -0
  745. package/dist/types/components/searchbar/searchbar.d.ts +46 -7
  746. package/dist/types/components/segment/segment.d.ts +2 -1
  747. package/dist/types/components/segment-button/segment-button.d.ts +2 -1
  748. package/dist/types/components/select/select.d.ts +6 -5
  749. package/dist/types/components/select-option/select-option.d.ts +4 -0
  750. package/dist/types/components/select-popover/select-popover.d.ts +3 -0
  751. package/dist/types/components/skeleton-text/skeleton-text.d.ts +4 -0
  752. package/dist/types/components/spinner/spinner.d.ts +4 -0
  753. package/dist/types/components/split-pane/split-pane.d.ts +4 -0
  754. package/dist/types/components/tab/tab.d.ts +4 -0
  755. package/dist/types/components/tab-bar/tab-bar.d.ts +3 -2
  756. package/dist/types/components/tab-button/tab-button.d.ts +2 -1
  757. package/dist/types/components/tabs/tabs.d.ts +3 -0
  758. package/dist/types/components/text/text.d.ts +2 -1
  759. package/dist/types/components/textarea/textarea.d.ts +4 -8
  760. package/dist/types/components/thumbnail/thumbnail.d.ts +4 -0
  761. package/dist/types/components/title/title.d.ts +4 -0
  762. package/dist/types/components/toast/animations/utils.d.ts +2 -2
  763. package/dist/types/components/toast/toast-interface.d.ts +3 -7
  764. package/dist/types/components/toast/toast.d.ts +3 -2
  765. package/dist/types/components/toggle/toggle.d.ts +3 -2
  766. package/dist/types/components/toolbar/toolbar.d.ts +4 -3
  767. package/dist/types/components.d.ts +1220 -206
  768. package/dist/types/global/ionic-global.d.ts +25 -2
  769. package/dist/types/interface.d.ts +3 -0
  770. package/dist/types/utils/animation/animation-utils.d.ts +0 -12
  771. package/dist/types/utils/config.d.ts +17 -2
  772. package/dist/types/utils/focus-trap.d.ts +35 -0
  773. package/dist/types/utils/forms/index.d.ts +0 -1
  774. package/dist/types/utils/hardware-back-button.d.ts +1 -1
  775. package/dist/types/utils/helpers.d.ts +0 -19
  776. package/dist/types/utils/overlays-interface.d.ts +31 -1
  777. package/dist/types/utils/overlays.d.ts +0 -6
  778. package/dist/types/utils/test/playwright/generator.d.ts +9 -2
  779. package/hydrate/index.js +1723 -1180
  780. package/package.json +7 -2
  781. package/components/index9.js +0 -196
  782. package/components/note.js +0 -48
  783. package/css/themes/dark.always.css.map +0 -1
  784. package/css/themes/dark.class.css.map +0 -1
  785. package/css/themes/dark.system.css.map +0 -1
  786. package/css/themes/high-contrast-dark.always.css.map +0 -1
  787. package/css/themes/high-contrast-dark.class.css.map +0 -1
  788. package/css/themes/high-contrast-dark.system.css.map +0 -1
  789. package/css/themes/high-contrast.always.css.map +0 -1
  790. package/css/themes/high-contrast.class.css.map +0 -1
  791. package/css/themes/high-contrast.system.css.map +0 -1
  792. package/dist/cjs/index-5915f9b3.js +0 -38
  793. package/dist/cjs/ionic-global-59a10130.js +0 -230
  794. package/dist/collection/components/item/test/legacy/disabled/item.e2e.js +0 -14
  795. package/dist/collection/components/modal/test/a11y/modal.spec.js +0 -22
  796. package/dist/collection/utils/forms/form-controller.js +0 -61
  797. package/dist/collection/utils/test/aria.spec.js +0 -80
  798. package/dist/esm/index-9b0d46f4.js +0 -34
  799. package/dist/esm/ionic-global-ad9a1810.js +0 -224
  800. package/dist/esm-es5/animation-a4acf150.js +0 -4
  801. package/dist/esm-es5/app-globals-5cf6195b.js +0 -4
  802. package/dist/esm-es5/data-691286f1.js +0 -4
  803. package/dist/esm-es5/haptic-554688a5.js +0 -4
  804. package/dist/esm-es5/hardware-back-button-b410a047.js +0 -4
  805. package/dist/esm-es5/helpers-ae74b3c9.js +0 -4
  806. package/dist/esm-es5/index-1f563746.js +0 -4
  807. package/dist/esm-es5/index-4c30cddd.js +0 -5
  808. package/dist/esm-es5/index-66871a1d.js +0 -4
  809. package/dist/esm-es5/index-8758824c.js +0 -4
  810. package/dist/esm-es5/index-9b0d46f4.js +0 -4
  811. package/dist/esm-es5/input-shims-56c1f603.js +0 -4
  812. package/dist/esm-es5/input.utils-482fc893.js +0 -4
  813. package/dist/esm-es5/ionic-global-ad9a1810.js +0 -4
  814. package/dist/esm-es5/ios.transition-189b73b7.js +0 -4
  815. package/dist/esm-es5/overlays-c69d2a07.js +0 -4
  816. package/dist/esm-es5/status-tap-1d638ee6.js +0 -4
  817. package/dist/ionic/p-00a762c9.entry.js +0 -4
  818. package/dist/ionic/p-0612cdcc.system.entry.js +0 -4
  819. package/dist/ionic/p-069388dd.system.js +0 -4
  820. package/dist/ionic/p-06fee233.js +0 -4
  821. package/dist/ionic/p-0b34d3a7.system.js +0 -4
  822. package/dist/ionic/p-0dca0eee.system.entry.js +0 -4
  823. package/dist/ionic/p-0dfbbdbe.entry.js +0 -4
  824. package/dist/ionic/p-0f25a7bb.system.js +0 -4
  825. package/dist/ionic/p-11bb459e.system.entry.js +0 -4
  826. package/dist/ionic/p-13e8ad2e.entry.js +0 -4
  827. package/dist/ionic/p-16e06393.system.js +0 -4
  828. package/dist/ionic/p-17082c91.system.js +0 -4
  829. package/dist/ionic/p-174856b4.system.js +0 -4
  830. package/dist/ionic/p-174b0d50.system.entry.js +0 -4
  831. package/dist/ionic/p-1a4db355.system.entry.js +0 -4
  832. package/dist/ionic/p-1d545773.entry.js +0 -4
  833. package/dist/ionic/p-1deadb7f.system.js +0 -4
  834. package/dist/ionic/p-1df25966.entry.js +0 -4
  835. package/dist/ionic/p-1f79e54a.entry.js +0 -4
  836. package/dist/ionic/p-2b3544ad.entry.js +0 -4
  837. package/dist/ionic/p-2c768965.entry.js +0 -4
  838. package/dist/ionic/p-2dcf2ec2.system.entry.js +0 -4
  839. package/dist/ionic/p-3209217f.entry.js +0 -4
  840. package/dist/ionic/p-32fb7d95.entry.js +0 -4
  841. package/dist/ionic/p-34d0f143.system.entry.js +0 -4
  842. package/dist/ionic/p-3807cd45.system.entry.js +0 -4
  843. package/dist/ionic/p-385f66bc.entry.js +0 -4
  844. package/dist/ionic/p-3c47c5c8.system.entry.js +0 -4
  845. package/dist/ionic/p-3c51cf97.system.entry.js +0 -4
  846. package/dist/ionic/p-3d77b300.system.entry.js +0 -4
  847. package/dist/ionic/p-415ccddd.entry.js +0 -4
  848. package/dist/ionic/p-42f189f4.js +0 -4
  849. package/dist/ionic/p-446f3909.system.entry.js +0 -4
  850. package/dist/ionic/p-4a8f173c.system.js +0 -4
  851. package/dist/ionic/p-4aba0454.system.entry.js +0 -4
  852. package/dist/ionic/p-4bbc949f.system.entry.js +0 -4
  853. package/dist/ionic/p-4dfe0487.system.entry.js +0 -4
  854. package/dist/ionic/p-4e7abe76.js +0 -4
  855. package/dist/ionic/p-5133c4a3.system.entry.js +0 -4
  856. package/dist/ionic/p-5289aade.js +0 -4
  857. package/dist/ionic/p-5797981d.system.entry.js +0 -4
  858. package/dist/ionic/p-5d530ae5.entry.js +0 -4
  859. package/dist/ionic/p-5d64e680.entry.js +0 -4
  860. package/dist/ionic/p-5d7e32ce.js +0 -4
  861. package/dist/ionic/p-5dbf7222.entry.js +0 -4
  862. package/dist/ionic/p-5e70f800.system.entry.js +0 -4
  863. package/dist/ionic/p-5eabaa80.js +0 -4
  864. package/dist/ionic/p-5f9fbad0.entry.js +0 -4
  865. package/dist/ionic/p-60a92a48.system.entry.js +0 -4
  866. package/dist/ionic/p-640fac4a.system.entry.js +0 -4
  867. package/dist/ionic/p-6525a8cd.system.js +0 -4
  868. package/dist/ionic/p-66e6860f.system.js +0 -4
  869. package/dist/ionic/p-67c4deed.system.entry.js +0 -4
  870. package/dist/ionic/p-6ad90d41.entry.js +0 -4
  871. package/dist/ionic/p-6aeb0272.entry.js +0 -4
  872. package/dist/ionic/p-6d659d62.entry.js +0 -4
  873. package/dist/ionic/p-6dbea874.system.entry.js +0 -4
  874. package/dist/ionic/p-6e14d3ca.system.entry.js +0 -4
  875. package/dist/ionic/p-717c4b72.entry.js +0 -4
  876. package/dist/ionic/p-7292add8.entry.js +0 -4
  877. package/dist/ionic/p-72fa96bf.system.js +0 -5
  878. package/dist/ionic/p-75861cd3.entry.js +0 -4
  879. package/dist/ionic/p-760dbd5e.js +0 -4
  880. package/dist/ionic/p-7e185a31.entry.js +0 -4
  881. package/dist/ionic/p-80704be1.entry.js +0 -4
  882. package/dist/ionic/p-816476b0.system.js +0 -4
  883. package/dist/ionic/p-842777af.js +0 -4
  884. package/dist/ionic/p-8ab308e9.js +0 -4
  885. package/dist/ionic/p-8b8b900d.entry.js +0 -4
  886. package/dist/ionic/p-916a4e14.entry.js +0 -4
  887. package/dist/ionic/p-93e79b55.js +0 -4
  888. package/dist/ionic/p-94f85e19.system.entry.js +0 -4
  889. package/dist/ionic/p-96107183.js +0 -4
  890. package/dist/ionic/p-986a47ee.system.entry.js +0 -4
  891. package/dist/ionic/p-993da5df.entry.js +0 -4
  892. package/dist/ionic/p-9c93fdcd.js +0 -4
  893. package/dist/ionic/p-9d6f351e.js +0 -4
  894. package/dist/ionic/p-9d795c4b.entry.js +0 -4
  895. package/dist/ionic/p-9e3b3f15.system.js +0 -4
  896. package/dist/ionic/p-9ecc1e42.entry.js +0 -4
  897. package/dist/ionic/p-a6cc38d4.js +0 -4
  898. package/dist/ionic/p-aaaefef6.entry.js +0 -4
  899. package/dist/ionic/p-acf70e64.system.entry.js +0 -4
  900. package/dist/ionic/p-b2d58604.system.entry.js +0 -4
  901. package/dist/ionic/p-b434ded7.system.entry.js +0 -4
  902. package/dist/ionic/p-bca27ea7.entry.js +0 -4
  903. package/dist/ionic/p-c68e75ea.system.js +0 -4
  904. package/dist/ionic/p-c6dbc089.system.entry.js +0 -4
  905. package/dist/ionic/p-c880c809.js +0 -4
  906. package/dist/ionic/p-c995da88.system.js +0 -4
  907. package/dist/ionic/p-c9e21694.system.entry.js +0 -4
  908. package/dist/ionic/p-cb944b1a.system.js +0 -4
  909. package/dist/ionic/p-cd0ffc8c.entry.js +0 -4
  910. package/dist/ionic/p-cefbb7b7.entry.js +0 -4
  911. package/dist/ionic/p-d13689a6.entry.js +0 -4
  912. package/dist/ionic/p-d47a1a78.system.entry.js +0 -4
  913. package/dist/ionic/p-d7c78a97.system.entry.js +0 -4
  914. package/dist/ionic/p-d7dc29c5.entry.js +0 -4
  915. package/dist/ionic/p-d84c9fc4.entry.js +0 -4
  916. package/dist/ionic/p-d8643420.system.entry.js +0 -4
  917. package/dist/ionic/p-dd7c79ce.system.entry.js +0 -4
  918. package/dist/ionic/p-de0a7606.system.entry.js +0 -4
  919. package/dist/ionic/p-df6a1571.entry.js +0 -4
  920. package/dist/ionic/p-e1819aee.js +0 -4
  921. package/dist/ionic/p-e311af42.entry.js +0 -4
  922. package/dist/ionic/p-e46adaf1.system.entry.js +0 -4
  923. package/dist/ionic/p-e4eeb3af.entry.js +0 -4
  924. package/dist/ionic/p-e755046f.system.entry.js +0 -4
  925. package/dist/ionic/p-ec77b7ad.system.entry.js +0 -4
  926. package/dist/ionic/p-ed7a529f.js +0 -5
  927. package/dist/ionic/p-ef636601.entry.js +0 -4
  928. package/dist/ionic/p-ef9736b9.entry.js +0 -4
  929. package/dist/ionic/p-f0a7e80b.js +0 -4
  930. package/dist/ionic/p-f7c3d736.system.entry.js +0 -4
  931. package/dist/ionic/p-f7ccf8d9.entry.js +0 -4
  932. package/dist/ionic/p-f7d802e1.entry.js +0 -4
  933. package/dist/ionic/p-fd783a38.system.entry.js +0 -4
  934. package/dist/ionic/p-ff4b7e40.system.js +0 -4
  935. package/dist/types/utils/forms/form-controller.d.ts +0 -15
  936. package/css/{themes → palettes}/dark.always.css +0 -0
  937. package/css/{themes → palettes}/dark.css +0 -0
  938. package/css/{themes → palettes}/dark.css.map +0 -0
  939. package/css/{themes → palettes}/dark.system.css +0 -0
  940. package/css/{themes → palettes}/high-contrast-dark.always.css +1 -1
  941. package/css/{themes → palettes}/high-contrast-dark.css +0 -0
  942. package/css/{themes → palettes}/high-contrast-dark.css.map +0 -0
  943. package/css/{themes → palettes}/high-contrast-dark.system.css +1 -1
  944. package/css/{themes → palettes}/high-contrast.always.css +25 -25
  945. package/css/{themes → palettes}/high-contrast.css +0 -0
  946. package/css/{themes → palettes}/high-contrast.css.map +0 -0
  947. package/css/{themes → palettes}/high-contrast.system.css +25 -25
@@ -2,15 +2,16 @@
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
4
  import { Host, h } from "@stencil/core";
5
+ import { focusFirstDescendant } from "../../utils/focus-trap";
5
6
  import { CoreDelegate, attachComponent, detachComponent } from "../../utils/framework-delegate";
6
7
  import { addEventListener, raf, hasLazyBuild } from "../../utils/helpers";
7
8
  import { createLockController } from "../../utils/lock-controller";
8
9
  import { printIonWarning } from "../../utils/logging/index";
9
- import { BACKDROP, dismiss, eventMethod, focusFirstDescendant, prepareOverlay, present, setOverlayId, } from "../../utils/overlays";
10
+ import { BACKDROP, dismiss, eventMethod, prepareOverlay, present, setOverlayId } from "../../utils/overlays";
10
11
  import { isPlatform } from "../../utils/platform";
11
12
  import { getClassMap } from "../../utils/theme";
12
13
  import { deepReady, waitForMount } from "../../utils/transition/index";
13
- import { getIonMode } from "../../global/ionic-global";
14
+ import { getIonTheme } from "../../global/ionic-global";
14
15
  import { iosEnterAnimation } from "./animations/ios.enter";
15
16
  import { iosLeaveAnimation } from "./animations/ios.leave";
16
17
  import { mdEnterAnimation } from "./animations/md.enter";
@@ -18,12 +19,13 @@ import { mdLeaveAnimation } from "./animations/md.leave";
18
19
  import { configureDismissInteraction, configureKeyboardInteraction, configureTriggerInteraction } from "./utils";
19
20
  // TODO(FW-2832): types
20
21
  /**
21
- * @virtualProp {"ios" | "md"} mode - The mode determines which platform styles to use.
22
+ * @virtualProp {"ios" | "md"} mode - The mode determines the platform behaviors of the component.
23
+ * @virtualProp {"ios" | "md" | "ionic"} theme - The theme determines the visual appearance of the component.
22
24
  *
23
25
  * @slot - Content is placed inside of the `.popover-content` element.
24
26
  *
25
27
  * @part backdrop - The `ion-backdrop` element.
26
- * @part arrow - The arrow that points to the reference element. Only applies on `ios` mode.
28
+ * @part arrow - The arrow that points to the reference element. Only applies on `"ios"` theme.
27
29
  * @part content - The wrapper element for the default slot.
28
30
  */
29
31
  export class Popover {
@@ -135,7 +137,7 @@ export class Popover {
135
137
  const popoverId = setOverlayId(el);
136
138
  this.parentPopover = el.closest(`ion-popover:not(#${popoverId})`);
137
139
  if (this.alignment === undefined) {
138
- this.alignment = getIonMode(this) === 'ios' ? 'center' : 'start';
140
+ this.alignment = getIonTheme(this) === 'ios' ? 'center' : 'start';
139
141
  }
140
142
  }
141
143
  componentDidLoad() {
@@ -269,7 +271,7 @@ export class Popover {
269
271
  * descendant inside of the popover.
270
272
  */
271
273
  if (this.focusDescendantOnPresent) {
272
- focusFirstDescendant(this.el, this.el);
274
+ focusFirstDescendant(el);
273
275
  }
274
276
  unlock();
275
277
  }
@@ -331,26 +333,28 @@ export class Popover {
331
333
  return eventMethod(this.el, 'ionPopoverWillDismiss');
332
334
  }
333
335
  render() {
334
- const mode = getIonMode(this);
336
+ const theme = getIonTheme(this);
335
337
  const { onLifecycle, parentPopover, dismissOnSelect, side, arrow, htmlAttributes } = this;
336
338
  const desktop = isPlatform('desktop');
337
339
  const enableArrow = arrow && !parentPopover;
338
- return (h(Host, Object.assign({ key: '71557e45cb839792d51f44786a3e8c1f92fd070c', "aria-modal": "true", "no-router": true, tabindex: "-1" }, htmlAttributes, { style: {
340
+ return (h(Host, Object.assign({ key: '293fdb68feb3dcb009faf04d9abd42ee47deab20', "aria-modal": "true", "no-router": true, tabindex: "-1" }, htmlAttributes, { style: {
339
341
  zIndex: `${20000 + this.overlayIndex}`,
340
- }, class: Object.assign(Object.assign({}, getClassMap(this.cssClass)), { [mode]: true, 'popover-translucent': this.translucent, 'overlay-hidden': true, 'popover-desktop': desktop, [`popover-side-${side}`]: true, 'popover-nested': !!parentPopover }), onIonPopoverDidPresent: onLifecycle, onIonPopoverWillPresent: onLifecycle, onIonPopoverWillDismiss: onLifecycle, onIonPopoverDidDismiss: onLifecycle, onIonBackdropTap: this.onBackdropTap }), !parentPopover && h("ion-backdrop", { tappable: this.backdropDismiss, visible: this.showBackdrop, part: "backdrop" }), h("div", { key: '6b829c9938f208c55fe2ac749875e7acc3b95b93', class: "popover-wrapper ion-overlay-wrapper", onClick: dismissOnSelect ? () => this.dismiss() : undefined }, enableArrow && h("div", { class: "popover-arrow", part: "arrow" }), h("div", { key: '29f3706a787a4eae20b12c9589272f0b8026d0b2', class: "popover-content", part: "content" }, h("slot", { key: '51c20057566904cbfe4cc5e199180bd144b65ca6' })))));
342
+ }, class: Object.assign(Object.assign({}, getClassMap(this.cssClass)), { [theme]: true, 'popover-translucent': this.translucent, 'overlay-hidden': true, 'popover-desktop': desktop, [`popover-side-${side}`]: true, 'popover-nested': !!parentPopover }), onIonPopoverDidPresent: onLifecycle, onIonPopoverWillPresent: onLifecycle, onIonPopoverWillDismiss: onLifecycle, onIonPopoverDidDismiss: onLifecycle, onIonBackdropTap: this.onBackdropTap }), !parentPopover && h("ion-backdrop", { tappable: this.backdropDismiss, visible: this.showBackdrop, part: "backdrop" }), h("div", { key: 'd8ed7168116c1cb828deb79e6d447fe98a47dab6', class: "popover-wrapper ion-overlay-wrapper", onClick: dismissOnSelect ? () => this.dismiss() : undefined }, enableArrow && h("div", { class: "popover-arrow", part: "arrow" }), h("div", { key: '627572f2ed7aa416f24013e2c3d1ead160c80703', class: "popover-content", part: "content" }, h("slot", { key: '8b158aef271c8bb8485fd5ed77b092964dabf63b' })))));
341
343
  }
342
344
  static get is() { return "ion-popover"; }
343
345
  static get encapsulation() { return "shadow"; }
344
346
  static get originalStyleUrls() {
345
347
  return {
346
348
  "ios": ["popover.ios.scss"],
347
- "md": ["popover.md.scss"]
349
+ "md": ["popover.md.scss"],
350
+ "ionic": ["popover.md.scss"]
348
351
  };
349
352
  }
350
353
  static get styleUrls() {
351
354
  return {
352
355
  "ios": ["popover.ios.css"],
353
- "md": ["popover.md.css"]
356
+ "md": ["popover.md.css"],
357
+ "ionic": ["popover.md.css"]
354
358
  };
355
359
  }
356
360
  static get properties() {
@@ -609,7 +613,7 @@ export class Popover {
609
613
  "optional": false,
610
614
  "docs": {
611
615
  "tags": [],
612
- "text": "If `true`, the popover will be translucent.\nOnly applies when the mode is `\"ios\"` and the device supports\n[`backdrop-filter`](https://developer.mozilla.org/en-US/docs/Web/CSS/backdrop-filter#Browser_compatibility)."
616
+ "text": "If `true`, the popover will be translucent.\nOnly applies when the theme is `\"ios\"` and the device supports\n[`backdrop-filter`](https://developer.mozilla.org/en-US/docs/Web/CSS/backdrop-filter#Browser_compatibility)."
613
617
  },
614
618
  "attribute": "translucent",
615
619
  "reflect": false,
@@ -797,7 +801,7 @@ export class Popover {
797
801
  "optional": true,
798
802
  "docs": {
799
803
  "tags": [],
800
- "text": "Describes how to align the popover content with the `reference` point.\nDefaults to `\"center\"` for `ios` mode, and `\"start\"` for `md` mode."
804
+ "text": "Describes how to align the popover content with the `reference` point.\nDefaults to `\"center\"` for `\"ios\"` theme, and `\"start\"` for `\"md\"` theme."
801
805
  },
802
806
  "attribute": "alignment",
803
807
  "reflect": false
@@ -814,7 +818,7 @@ export class Popover {
814
818
  "optional": false,
815
819
  "docs": {
816
820
  "tags": [],
817
- "text": "If `true`, the popover will display an arrow that points at the\n`reference` when running in `ios` mode. Does not apply in `md` mode."
821
+ "text": "If `true`, the popover will display an arrow that points at the\n`reference` on `\"ios\"` theme."
818
822
  },
819
823
  "attribute": "arrow",
820
824
  "reflect": false,
@@ -5,9 +5,10 @@ import { Host, h } from "@stencil/core";
5
5
  import { clamp } from "../../utils/helpers";
6
6
  import { createColorClasses } from "../../utils/theme";
7
7
  import { config } from "../../global/config";
8
- import { getIonMode } from "../../global/ionic-global";
8
+ import { getIonTheme } from "../../global/ionic-global";
9
9
  /**
10
- * @virtualProp {"ios" | "md"} mode - The mode determines which platform styles to use.
10
+ * @virtualProp {"ios" | "md"} mode - The mode determines the platform behaviors of the component.
11
+ * @virtualProp {"ios" | "md" | "ionic"} theme - The theme determines the visual appearance of the component.
11
12
  *
12
13
  * @part progress - The progress bar that shows the current value when `type` is `"determinate"` and slides back and forth when `type` is `"indeterminate"`.
13
14
  * @part stream - The animated circles that appear while buffering. This only shows when `buffer` is set and `type` is `"determinate"`.
@@ -25,11 +26,11 @@ export class ProgressBar {
25
26
  render() {
26
27
  const { color, type, reversed, value, buffer } = this;
27
28
  const paused = config.getBoolean('_testing');
28
- const mode = getIonMode(this);
29
+ const theme = getIonTheme(this);
29
30
  // If the progress is displayed as a solid bar.
30
31
  const progressSolid = buffer === 1;
31
- return (h(Host, { key: '78a32304c7164cb78145a91be7bb9b86ecd11b66', role: "progressbar", "aria-valuenow": type === 'determinate' ? value : null, "aria-valuemin": "0", "aria-valuemax": "1", class: createColorClasses(color, {
32
- [mode]: true,
32
+ return (h(Host, { key: 'da38e6bb5b787eb5f892fc365bfd7bd005bbd00e', role: "progressbar", "aria-valuenow": type === 'determinate' ? value : null, "aria-valuemin": "0", "aria-valuemax": "1", class: createColorClasses(color, {
33
+ [theme]: true,
33
34
  [`progress-bar-${type}`]: true,
34
35
  'progress-paused': paused,
35
36
  'progress-bar-reversed': document.dir === 'rtl' ? !reversed : reversed,
@@ -41,13 +42,15 @@ export class ProgressBar {
41
42
  static get originalStyleUrls() {
42
43
  return {
43
44
  "ios": ["progress-bar.ios.scss"],
44
- "md": ["progress-bar.md.scss"]
45
+ "md": ["progress-bar.md.scss"],
46
+ "ionic": ["progress-bar.md.scss"]
45
47
  };
46
48
  }
47
49
  static get styleUrls() {
48
50
  return {
49
51
  "ios": ["progress-bar.ios.css"],
50
- "md": ["progress-bar.md.css"]
52
+ "md": ["progress-bar.md.css"],
53
+ "ionic": ["progress-bar.md.css"]
51
54
  };
52
55
  }
53
56
  static get properties() {
@@ -4,7 +4,7 @@
4
4
  import AxeBuilder from "@axe-core/playwright";
5
5
  import { expect } from "@playwright/test";
6
6
  import { configs, test } from "../../../../utils/test/playwright/index";
7
- configs({ directions: ['ltr'], themes: ['light', 'dark'] }).forEach(({ title, config }) => {
7
+ configs({ directions: ['ltr'], palettes: ['light', 'dark'] }).forEach(({ title, config }) => {
8
8
  test.describe(title('progress-bar: a11y'), () => {
9
9
  test('should not have accessibility violations', async ({ page }) => {
10
10
  /**
@@ -5,9 +5,10 @@ import { Host, h } from "@stencil/core";
5
5
  import { isOptionSelected } from "../../utils/forms/index";
6
6
  import { addEventListener, removeEventListener } from "../../utils/helpers";
7
7
  import { createColorClasses, hostContext } from "../../utils/theme";
8
- import { getIonMode } from "../../global/ionic-global";
8
+ import { getIonTheme } from "../../global/ionic-global";
9
9
  /**
10
- * @virtualProp {"ios" | "md"} mode - The mode determines which platform styles to use.
10
+ * @virtualProp {"ios" | "md"} mode - The mode determines the platform behaviors of the component.
11
+ * @virtualProp {"ios" | "md" | "ionic"} theme - The theme determines the visual appearance of the component.
11
12
  *
12
13
  * @slot - The label text to associate with the radio. Use the "labelPlacement" property to control where the label is placed relative to the radio.
13
14
  *
@@ -105,10 +106,10 @@ export class Radio {
105
106
  }
106
107
  render() {
107
108
  const { checked, disabled, color, el, justify, labelPlacement, hasLabel, buttonTabindex, alignment } = this;
108
- const mode = getIonMode(this);
109
+ const theme = getIonTheme(this);
109
110
  const inItem = hostContext('ion-item', el);
110
- return (h(Host, { key: '46bb0202f75b6cc81df10de71fbe971dc4dcaa68', onFocus: this.onFocus, onBlur: this.onBlur, onClick: this.onClick, class: createColorClasses(color, {
111
- [mode]: true,
111
+ return (h(Host, { key: 'be72367929b09ef023194d02bc44ef2039fd7a4c', onFocus: this.onFocus, onBlur: this.onBlur, onClick: this.onClick, class: createColorClasses(color, {
112
+ [theme]: true,
112
113
  'in-item': inItem,
113
114
  'radio-checked': checked,
114
115
  'radio-disabled': disabled,
@@ -118,23 +119,25 @@ export class Radio {
118
119
  // Focus and active styling should not apply when the radio is in an item
119
120
  'ion-activatable': !inItem,
120
121
  'ion-focusable': !inItem,
121
- }), role: "radio", "aria-checked": checked ? 'true' : 'false', "aria-disabled": disabled ? 'true' : null, tabindex: buttonTabindex }, h("label", { key: '55061e8cc857752d963c9e4a65f46727f5c2cd9d', class: "radio-wrapper" }, h("div", { key: '589fd41fccd0e6d007e7bc502067f3f2447e4b80', class: {
122
+ }), role: "radio", "aria-checked": checked ? 'true' : 'false', "aria-disabled": disabled ? 'true' : null, tabindex: buttonTabindex }, h("label", { key: 'f7c23a823a1e6ae31eaac7f59eccf02c654306f3', class: "radio-wrapper" }, h("div", { key: '4fe9047d16fef014a4bd114a1e106e8cb6fa638b', class: {
122
123
  'label-text-wrapper': true,
123
124
  'label-text-wrapper-hidden': !hasLabel,
124
- }, part: "label" }, h("slot", { key: '0076f1f3b64c1a0cf2bc511424956a63d6cf2db9' })), h("div", { key: '1505a84e6dc8715f8fcb19ce94fab79e624a0622', class: "native-wrapper" }, this.renderRadioControl()))));
125
+ }, part: "label" }, h("slot", { key: '307437c2882f9658f486522e9caa45932ea095a5' })), h("div", { key: '4a58e19043a4d8712fd204ddc56714a855392a9e', class: "native-wrapper" }, this.renderRadioControl()))));
125
126
  }
126
127
  static get is() { return "ion-radio"; }
127
128
  static get encapsulation() { return "shadow"; }
128
129
  static get originalStyleUrls() {
129
130
  return {
130
131
  "ios": ["radio.ios.scss"],
131
- "md": ["radio.md.scss"]
132
+ "md": ["radio.md.scss"],
133
+ "ionic": ["radio.md.scss"]
132
134
  };
133
135
  }
134
136
  static get styleUrls() {
135
137
  return {
136
138
  "ios": ["radio.ios.css"],
137
- "md": ["radio.md.css"]
139
+ "md": ["radio.md.css"],
140
+ "ionic": ["radio.md.css"]
138
141
  };
139
142
  }
140
143
  static get properties() {
@@ -4,7 +4,7 @@
4
4
  import AxeBuilder from "@axe-core/playwright";
5
5
  import { expect } from "@playwright/test";
6
6
  import { configs, test } from "../../../../utils/test/playwright/index";
7
- configs({ directions: ['ltr'], themes: ['light', 'dark'] }).forEach(({ title, config }) => {
7
+ configs({ directions: ['ltr'], palettes: ['light', 'dark'] }).forEach(({ title, config }) => {
8
8
  test.describe(title('radio: a11y'), () => {
9
9
  test('default layout should not have accessibility violations', async ({ page }) => {
10
10
  await page.setContent(`
@@ -3,7 +3,11 @@
3
3
  */
4
4
  import { Host, h } from "@stencil/core";
5
5
  import { renderHiddenInput } from "../../utils/helpers";
6
- import { getIonMode } from "../../global/ionic-global";
6
+ import { getIonTheme } from "../../global/ionic-global";
7
+ /**
8
+ * @virtualProp {"ios" | "md"} mode - The mode determines the platform behaviors of the component.
9
+ * @virtualProp {"ios" | "md" | "ionic"} theme - The theme determines the visual appearance of the component.
10
+ */
7
11
  export class RadioGroup {
8
12
  constructor() {
9
13
  this.inputId = `ion-rg-${radioGroupIds++}`;
@@ -151,9 +155,11 @@ export class RadioGroup {
151
155
  }
152
156
  render() {
153
157
  const { label, labelId, el, name, value } = this;
154
- const mode = getIonMode(this);
158
+ const theme = getIonTheme(this);
155
159
  renderHiddenInput(true, el, name, value, false);
156
- return h(Host, { key: '3d43aa6696c5293b49fc44cf91e3e41c4f4d12df', role: "radiogroup", "aria-labelledby": label ? labelId : null, onClick: this.onClick, class: mode });
160
+ return (h(Host, { key: 'c98d1cf9d7d603282ead7f0011f9a839d3db40a3', class: {
161
+ [theme]: true,
162
+ }, role: "radiogroup", "aria-labelledby": label ? labelId : null, onClick: this.onClick }));
157
163
  }
158
164
  static get is() { return "ion-radio-group"; }
159
165
  static get properties() {
@@ -3,15 +3,16 @@
3
3
  */
4
4
  import { Host, h } from "@stencil/core";
5
5
  import { findClosestIonContent, disableContentScrollY, resetContentScrollY } from "../../utils/content/index";
6
- import { inheritAriaAttributes, clamp, debounceEvent, getAriaLabel, renderHiddenInput } from "../../utils/helpers";
6
+ import { inheritAriaAttributes, clamp, debounceEvent, renderHiddenInput } from "../../utils/helpers";
7
7
  import { printIonWarning } from "../../utils/logging/index";
8
8
  import { isRTL } from "../../utils/rtl/index";
9
9
  import { createColorClasses, hostContext } from "../../utils/theme";
10
- import { getIonMode } from "../../global/ionic-global";
10
+ import { getIonTheme } from "../../global/ionic-global";
11
11
  import { roundToMaxDecimalPlaces } from "../../utils/floating-point";
12
12
  // TODO(FW-2832): types
13
13
  /**
14
- * @virtualProp {"ios" | "md"} mode - The mode determines which platform styles to use.
14
+ * @virtualProp {"ios" | "md"} mode - The mode determines the platform behaviors of the component.
15
+ * @virtualProp {"ios" | "md" | "ionic"} theme - The theme determines the visual appearance of the component.
15
16
  *
16
17
  * @slot label - The label text to associate with the range. Use the "labelPlacement" property to control where the label is placed relative to the range.
17
18
  * @slot start - Content is placed to the left of the range slider in LTR, and to the right in RTL.
@@ -55,8 +56,14 @@ export class Range {
55
56
  el: rangeSlider,
56
57
  gestureName: 'range',
57
58
  gesturePriority: 100,
58
- threshold: 0,
59
- onStart: (ev) => this.onStart(ev),
59
+ /**
60
+ * Provide a threshold since the drag movement
61
+ * might be a user scrolling the view.
62
+ * If this is true, then the range
63
+ * should not move.
64
+ */
65
+ threshold: 10,
66
+ onStart: () => this.onStart(),
60
67
  onMove: (ev) => this.onMove(ev),
61
68
  onEnd: (ev) => this.onEnd(ev),
62
69
  });
@@ -222,33 +229,93 @@ export class Range {
222
229
  this.value = this.ensureValueInBounds(this.value);
223
230
  this.ionChange.emit({ value: this.value });
224
231
  }
225
- onStart(detail) {
226
- const { contentEl } = this;
227
- if (contentEl) {
232
+ /**
233
+ * The value should be updated on touch end or
234
+ * when the component is being dragged.
235
+ * This follows the native behavior of mobile devices.
236
+ *
237
+ * For example: When the user lifts their finger from the
238
+ * screen after tapping the bar or dragging the bar or knob.
239
+ */
240
+ onStart() {
241
+ this.ionKnobMoveStart.emit({ value: this.ensureValueInBounds(this.value) });
242
+ }
243
+ /**
244
+ * The value should be updated while dragging the
245
+ * bar or knob.
246
+ *
247
+ * While the user is dragging, the view
248
+ * should not scroll. This is to prevent the user from
249
+ * feeling disoriented while dragging.
250
+ *
251
+ * The user can scroll on the view if the knob or
252
+ * bar is not being dragged.
253
+ *
254
+ * @param detail The details of the gesture event.
255
+ */
256
+ onMove(detail) {
257
+ const { contentEl, pressedKnob } = this;
258
+ const currentX = detail.currentX;
259
+ /**
260
+ * Since the user is dragging on the bar or knob, the view should not scroll.
261
+ *
262
+ * This only needs to be done once.
263
+ */
264
+ if (contentEl && this.initialContentScrollY === undefined) {
228
265
  this.initialContentScrollY = disableContentScrollY(contentEl);
229
266
  }
230
- const rect = (this.rect = this.rangeSlider.getBoundingClientRect());
231
- const currentX = detail.currentX;
232
- // figure out which knob they started closer to
233
- let ratio = clamp(0, (currentX - rect.left) / rect.width, 1);
234
- if (isRTL(this.el)) {
235
- ratio = 1 - ratio;
267
+ /**
268
+ * The `pressedKnob` can be undefined if the user just
269
+ * started dragging the knob.
270
+ *
271
+ * This is necessary to determine which knob the user is dragging,
272
+ * especially when it's a dual knob.
273
+ * Plus, it determines when to apply certain styles.
274
+ *
275
+ * This only needs to be done once since the knob won't change
276
+ * while the user is dragging.
277
+ */
278
+ if (pressedKnob === undefined) {
279
+ this.setPressedKnob(currentX);
236
280
  }
237
- this.pressedKnob = !this.dualKnobs || Math.abs(this.ratioA - ratio) < Math.abs(this.ratioB - ratio) ? 'A' : 'B';
238
- this.setFocus(this.pressedKnob);
239
- // update the active knob's position
240
281
  this.update(currentX);
241
- this.ionKnobMoveStart.emit({ value: this.ensureValueInBounds(this.value) });
242
- }
243
- onMove(detail) {
244
- this.update(detail.currentX);
245
282
  }
283
+ /**
284
+ * The value should be updated on touch end:
285
+ * - When the user lifts their finger from the screen after
286
+ * tapping the bar.
287
+ *
288
+ * @param detail The details of the gesture or mouse event.
289
+ */
246
290
  onEnd(detail) {
247
291
  const { contentEl, initialContentScrollY } = this;
248
- if (contentEl) {
292
+ const currentX = detail.currentX || detail.clientX;
293
+ /**
294
+ * The `pressedKnob` can be undefined if the user never
295
+ * dragged the knob. They just tapped on the bar.
296
+ *
297
+ * This is necessary to determine which knob the user is changing,
298
+ * especially when it's a dual knob.
299
+ * Plus, it determines when to apply certain styles.
300
+ */
301
+ if (this.pressedKnob === undefined) {
302
+ this.setPressedKnob(currentX);
303
+ }
304
+ /**
305
+ * The user is no longer dragging the bar or
306
+ * knob (if they were dragging it).
307
+ *
308
+ * The user can now scroll on the view in the next gesture event.
309
+ */
310
+ if (contentEl && initialContentScrollY !== undefined) {
249
311
  resetContentScrollY(contentEl, initialContentScrollY);
250
312
  }
251
- this.update(detail.currentX);
313
+ // update the active knob's position
314
+ this.update(currentX);
315
+ /**
316
+ * Reset the pressed knob to undefined since the user
317
+ * may start dragging a different knob in the next gesture event.
318
+ */
252
319
  this.pressedKnob = undefined;
253
320
  this.emitValueChange();
254
321
  this.ionKnobMoveEnd.emit({ value: this.ensureValueInBounds(this.value) });
@@ -275,6 +342,16 @@ export class Range {
275
342
  // Update input value
276
343
  this.updateValue();
277
344
  }
345
+ setPressedKnob(currentX) {
346
+ const rect = (this.rect = this.rangeSlider.getBoundingClientRect());
347
+ // figure out which knob they started closer to
348
+ let ratio = clamp(0, (currentX - rect.left) / rect.width, 1);
349
+ if (isRTL(this.el)) {
350
+ ratio = 1 - ratio;
351
+ }
352
+ this.pressedKnob = !this.dualKnobs || Math.abs(this.ratioA - ratio) < Math.abs(this.ratioB - ratio) ? 'A' : 'B';
353
+ this.setFocus(this.pressedKnob);
354
+ }
278
355
  get valA() {
279
356
  return ratioToValue(this.ratioA, this.min, this.max, this.step);
280
357
  }
@@ -345,16 +422,7 @@ export class Range {
345
422
  }
346
423
  renderRangeSlider() {
347
424
  var _a;
348
- const { min, max, step, el, handleKeyboard, pressedKnob, disabled, pin, ratioLower, ratioUpper, inheritedAttributes, rangeId, pinFormatter, } = this;
349
- /**
350
- * Look for external label, ion-label, or aria-labelledby.
351
- * If none, see if user placed an aria-label on the host
352
- * and use that instead.
353
- */
354
- let { labelText } = getAriaLabel(el, rangeId);
355
- if (labelText === undefined || labelText === null) {
356
- labelText = inheritedAttributes['aria-label'];
357
- }
425
+ const { min, max, step, handleKeyboard, pressedKnob, disabled, pin, ratioLower, ratioUpper, pinFormatter, inheritedAttributes, } = this;
358
426
  let barStart = `${ratioLower * 100}%`;
359
427
  let barEnd = `${100 - ratioUpper * 100}%`;
360
428
  const rtl = isRTL(this.el);
@@ -414,11 +482,36 @@ export class Range {
414
482
  ticks.push(tick);
415
483
  }
416
484
  }
417
- let labelledBy;
418
- if (this.hasLabel) {
419
- labelledBy = 'range-label';
420
- }
421
- return (h("div", { class: "range-slider", ref: (rangeEl) => (this.rangeSlider = rangeEl) }, ticks.map((tick) => (h("div", { style: tickStyle(tick), role: "presentation", class: {
485
+ return (h("div", { class: "range-slider", ref: (rangeEl) => (this.rangeSlider = rangeEl),
486
+ /**
487
+ * Since the gesture has a threshold, the value
488
+ * won't change until the user has dragged past
489
+ * the threshold. This is to prevent the range
490
+ * from moving when the user is scrolling.
491
+ *
492
+ * This results in the value not being updated
493
+ * and the event emitters not being triggered
494
+ * if the user taps on the range. This is why
495
+ * we need to listen for the "pointerUp" event.
496
+ */
497
+ onPointerUp: (ev) => {
498
+ /**
499
+ * If the user drags the knob on the web
500
+ * version (does not occur on mobile),
501
+ * the "pointerUp" event will be triggered
502
+ * along with the gesture's events.
503
+ * This leads to duplicate events.
504
+ *
505
+ * By checking if the pressedKnob is undefined,
506
+ * we can determine if the "pointerUp" event was
507
+ * triggered by a tap or a drag. If it was
508
+ * dragged, the pressedKnob will be defined.
509
+ */
510
+ if (this.pressedKnob === undefined) {
511
+ this.onStart();
512
+ this.onEnd(ev);
513
+ }
514
+ } }, ticks.map((tick) => (h("div", { style: tickStyle(tick), role: "presentation", class: {
422
515
  'range-tick': true,
423
516
  'range-tick-active': tick.active,
424
517
  }, part: tick.active ? 'tick-active' : 'tick' }))), h("div", { class: "range-bar-container" }, h("div", { class: "range-bar", role: "presentation", part: "bar" }), h("div", { class: {
@@ -436,8 +529,7 @@ export class Range {
436
529
  handleKeyboard,
437
530
  min,
438
531
  max,
439
- labelText,
440
- labelledBy,
532
+ inheritedAttributes,
441
533
  }), this.dualKnobs &&
442
534
  renderKnob(rtl, {
443
535
  knob: 'B',
@@ -450,8 +542,7 @@ export class Range {
450
542
  handleKeyboard,
451
543
  min,
452
544
  max,
453
- labelText,
454
- labelledBy,
545
+ inheritedAttributes,
455
546
  })));
456
547
  }
457
548
  render() {
@@ -469,10 +560,10 @@ export class Range {
469
560
  */
470
561
  const hasEndContent = (hasLabel && labelPlacement === 'end') || this.hasEndSlotContent;
471
562
  const needsEndAdjustment = inItem && !hasEndContent;
472
- const mode = getIonMode(this);
563
+ const theme = getIonTheme(this);
473
564
  renderHiddenInput(true, el, this.name, JSON.stringify(this.getValue()), disabled);
474
- return (h(Host, { key: 'ff8dbbb4e0c8b9802408a40fa0d93528ec730a9f', onFocusin: this.onFocus, onFocusout: this.onBlur, id: rangeId, class: createColorClasses(this.color, {
475
- [mode]: true,
565
+ return (h(Host, { key: 'bd88c11374e23af08980f6857ac559a6650f157a', onFocusin: this.onFocus, onFocusout: this.onBlur, id: rangeId, class: createColorClasses(this.color, {
566
+ [theme]: true,
476
567
  'in-item': inItem,
477
568
  'range-disabled': disabled,
478
569
  'range-pressed': pressedKnob !== undefined,
@@ -480,23 +571,25 @@ export class Range {
480
571
  [`range-label-placement-${labelPlacement}`]: true,
481
572
  'range-item-start-adjustment': needsStartAdjustment,
482
573
  'range-item-end-adjustment': needsEndAdjustment,
483
- }) }, h("label", { key: '2164b0ec67215d7791d795a1f6274b595ad74d80', class: "range-wrapper", id: "range-label" }, h("div", { key: '717346e2bcfb29a3a5ef39b5fec226d484aa1f46', class: {
574
+ }) }, h("label", { key: '4edae72dbabdae42752f62a0b59ca91c399a465d', class: "range-wrapper", id: "range-label" }, h("div", { key: 'a56572f64fbc9f58e91e5e7afd4bcdcda4960bb5', class: {
484
575
  'label-text-wrapper': true,
485
576
  'label-text-wrapper-hidden': !hasLabel,
486
- }, part: "label" }, label !== undefined ? h("div", { class: "label-text" }, label) : h("slot", { name: "label" })), h("div", { key: 'a6ffff056ab81a45f1a0b38fa42031c51ceabb52', class: "native-wrapper" }, h("slot", { key: 'df3f155a9886cc62d3f0d23467c406c52cd3e082', name: "start" }), this.renderRangeSlider(), h("slot", { key: '3fab316ecdff317c07010a204d89e85af12d347e', name: "end" })))));
577
+ }, part: "label" }, label !== undefined ? h("div", { class: "label-text" }, label) : h("slot", { name: "label" })), h("div", { key: '72312c03563083dff4c8d4dcd6b86094461662d8', class: "native-wrapper" }, h("slot", { key: '471947329ba067b0ece4d1c88ed7137f314d086d', name: "start" }), this.renderRangeSlider(), h("slot", { key: '6d686e374d125a7953e7b24cf7b7c008f0a6ffed', name: "end" })))));
487
578
  }
488
579
  static get is() { return "ion-range"; }
489
580
  static get encapsulation() { return "shadow"; }
490
581
  static get originalStyleUrls() {
491
582
  return {
492
583
  "ios": ["range.ios.scss"],
493
- "md": ["range.md.scss"]
584
+ "md": ["range.md.scss"],
585
+ "ionic": ["range.md.scss"]
494
586
  };
495
587
  }
496
588
  static get styleUrls() {
497
589
  return {
498
590
  "ios": ["range.ios.css"],
499
- "md": ["range.md.css"]
591
+ "md": ["range.md.css"],
592
+ "ionic": ["range.md.css"]
500
593
  };
501
594
  }
502
595
  static get properties() {
@@ -950,13 +1043,15 @@ export class Range {
950
1043
  }];
951
1044
  }
952
1045
  }
953
- const renderKnob = (rtl, { knob, value, ratio, min, max, disabled, pressed, pin, handleKeyboard, labelText, labelledBy, pinFormatter, }) => {
1046
+ const renderKnob = (rtl, { knob, value, ratio, min, max, disabled, pressed, pin, handleKeyboard, pinFormatter, inheritedAttributes }) => {
954
1047
  const start = rtl ? 'right' : 'left';
955
1048
  const knobStyle = () => {
956
1049
  const style = {};
957
1050
  style[start] = `${ratio * 100}%`;
958
1051
  return style;
959
1052
  };
1053
+ // The aria label should be preferred over visible text if both are specified
1054
+ const ariaLabel = inheritedAttributes['aria-label'];
960
1055
  return (h("div", { onKeyDown: (ev) => {
961
1056
  const key = ev.key;
962
1057
  if (key === 'ArrowLeft' || key === 'ArrowDown') {
@@ -978,7 +1073,7 @@ const renderKnob = (rtl, { knob, value, ratio, min, max, disabled, pressed, pin,
978
1073
  'range-knob-max': value === max,
979
1074
  'ion-activatable': true,
980
1075
  'ion-focusable': true,
981
- }, style: knobStyle(), role: "slider", tabindex: disabled ? -1 : 0, "aria-label": labelledBy === undefined ? labelText : null, "aria-labelledby": labelledBy !== undefined ? labelledBy : null, "aria-valuemin": min, "aria-valuemax": max, "aria-disabled": disabled ? 'true' : null, "aria-valuenow": value }, pin && (h("div", { class: "range-pin", role: "presentation", part: "pin" }, pinFormatter(value))), h("div", { class: "range-knob", role: "presentation", part: "knob" })));
1076
+ }, style: knobStyle(), role: "slider", tabindex: disabled ? -1 : 0, "aria-label": ariaLabel !== undefined ? ariaLabel : null, "aria-labelledby": ariaLabel === undefined ? 'range-label' : null, "aria-valuemin": min, "aria-valuemax": max, "aria-disabled": disabled ? 'true' : null, "aria-valuenow": value }, pin && (h("div", { class: "range-pin", role: "presentation", part: "pin" }, pinFormatter(value))), h("div", { class: "range-knob", role: "presentation", part: "knob" })));
982
1077
  };
983
1078
  const ratioToValue = (ratio, min, max, step) => {
984
1079
  let value = (max - min) * ratio;
@@ -4,7 +4,7 @@
4
4
  import AxeBuilder from "@axe-core/playwright";
5
5
  import { expect } from "@playwright/test";
6
6
  import { configs, test } from "../../../../utils/test/playwright/index";
7
- configs({ directions: ['ltr'], themes: ['light', 'dark'] }).forEach(({ title, config }) => {
7
+ configs({ directions: ['ltr'], palettes: ['light', 'dark'] }).forEach(({ title, config }) => {
8
8
  test.describe(title('range: a11y'), () => {
9
9
  test('should not have accessibility violations', async ({ page }) => {
10
10
  await page.setContent(`
@@ -20,4 +20,28 @@ describe('range: label', () => {
20
20
  expect(propEl).not.toBeNull();
21
21
  expect(slotEl).toBeNull();
22
22
  });
23
+ it('should prefer aria label if both attribute and visible text provided', async () => {
24
+ const page = await newSpecPage({
25
+ components: [Range],
26
+ html: `
27
+ <ion-range aria-label="Aria Label Text" label="Label Prop Text"></ion-range>
28
+ `,
29
+ });
30
+ const range = page.body.querySelector('ion-range');
31
+ const nativeSlider = range.shadowRoot.querySelector('.range-knob-handle');
32
+ expect(nativeSlider.getAttribute('aria-label')).toBe('Aria Label Text');
33
+ expect(nativeSlider.getAttribute('aria-labelledby')).toBe(null);
34
+ });
35
+ it('should prefer visible label if only visible text provided', async () => {
36
+ const page = await newSpecPage({
37
+ components: [Range],
38
+ html: `
39
+ <ion-range label="Label Prop Text"></ion-range>
40
+ `,
41
+ });
42
+ const range = page.body.querySelector('ion-range');
43
+ const nativeSlider = range.shadowRoot.querySelector('.range-knob-handle');
44
+ expect(nativeSlider.getAttribute('aria-label')).toBe(null);
45
+ expect(nativeSlider.getAttribute('aria-labelledby')).toBe('range-label');
46
+ });
23
47
  });