@ionic/core 8.0.0-dev.11712850753.10c4a960 → 8.0.0-dev.11713809015.1aabd368

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