@ionic/core 8.7.3-dev.11755195979.1ec83531 → 8.7.3-dev.11755551681.10d084fd

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 (236) hide show
  1. package/components/checkbox.js +1 -1
  2. package/components/ion-input.js +7 -38
  3. package/components/ion-item-divider.js +2 -2
  4. package/components/ion-item-group.js +1 -1
  5. package/components/ion-item-option.js +2 -2
  6. package/components/ion-item-options.js +1 -1
  7. package/components/ion-item-sliding.js +1 -1
  8. package/components/ion-loading.js +2 -2
  9. package/components/ion-menu-button.js +2 -2
  10. package/components/ion-menu-toggle.js +2 -2
  11. package/components/ion-menu.js +2 -2
  12. package/components/ion-nav-link.js +1 -1
  13. package/components/ion-nav.js +1 -1
  14. package/components/ion-note.js +2 -2
  15. package/components/ion-picker-legacy.js +2 -2
  16. package/components/ion-progress-bar.js +1 -1
  17. package/components/ion-range.js +3 -3
  18. package/components/ion-refresher-content.js +1 -1
  19. package/components/ion-refresher.js +18 -1
  20. package/components/ion-reorder-group.js +1 -1
  21. package/components/ion-reorder.js +1 -1
  22. package/components/ion-router-link.js +2 -2
  23. package/components/ion-router-outlet.js +1 -1
  24. package/components/ion-row.js +1 -1
  25. package/components/ion-searchbar.js +4 -4
  26. package/components/ion-segment-button.js +2 -2
  27. package/components/ion-segment-content.js +1 -1
  28. package/components/ion-segment-view.js +2 -2
  29. package/components/ion-segment.js +2 -2
  30. package/components/ion-select-option.js +1 -1
  31. package/components/ion-select.js +2 -2
  32. package/components/ion-skeleton-text.js +2 -2
  33. package/components/ion-split-pane.js +2 -2
  34. package/components/ion-tab-bar.js +2 -2
  35. package/components/ion-tab-button.js +2 -2
  36. package/components/ion-tab.js +2 -2
  37. package/components/ion-tabs.js +1 -1
  38. package/components/ion-text.js +2 -2
  39. package/components/ion-textarea.js +6 -37
  40. package/components/ion-thumbnail.js +1 -1
  41. package/components/ion-toast.js +2 -2
  42. package/components/ion-toggle.js +3 -3
  43. package/components/label.js +2 -2
  44. package/components/list-header.js +2 -2
  45. package/components/modal.js +4 -4
  46. package/components/picker-column-option.js +2 -2
  47. package/components/picker-column2.js +2 -2
  48. package/components/popover.js +2 -2
  49. package/components/radio-group.js +1 -1
  50. package/components/radio.js +3 -3
  51. package/components/ripple-effect.js +1 -1
  52. package/components/select-modal.js +1 -1
  53. package/components/select-popover.js +1 -1
  54. package/components/spinner.js +1 -1
  55. package/components/title.js +2 -2
  56. package/components/toolbar.js +2 -2
  57. package/dist/cjs/ion-app_8.cjs.entry.js +5 -5
  58. package/dist/cjs/ion-avatar_3.cjs.entry.js +1 -1
  59. package/dist/cjs/ion-checkbox.cjs.entry.js +1 -1
  60. package/dist/cjs/ion-col_3.cjs.entry.js +1 -1
  61. package/dist/cjs/ion-datetime_3.cjs.entry.js +4 -4
  62. package/dist/cjs/ion-input.cjs.entry.js +7 -37
  63. package/dist/cjs/ion-item-option_3.cjs.entry.js +4 -4
  64. package/dist/cjs/ion-item_8.cjs.entry.js +11 -11
  65. package/dist/cjs/ion-loading.cjs.entry.js +2 -2
  66. package/dist/cjs/ion-menu_3.cjs.entry.js +6 -6
  67. package/dist/cjs/ion-modal.cjs.entry.js +4 -4
  68. package/dist/cjs/ion-nav_2.cjs.entry.js +2 -2
  69. package/dist/cjs/ion-picker-column-option.cjs.entry.js +2 -2
  70. package/dist/cjs/ion-popover.cjs.entry.js +2 -2
  71. package/dist/cjs/ion-progress-bar.cjs.entry.js +1 -1
  72. package/dist/cjs/ion-radio_2.cjs.entry.js +4 -4
  73. package/dist/cjs/ion-range.cjs.entry.js +3 -3
  74. package/dist/cjs/ion-refresher_2.cjs.entry.js +19 -2
  75. package/dist/cjs/ion-reorder_2.cjs.entry.js +2 -2
  76. package/dist/cjs/ion-ripple-effect.cjs.entry.js +1 -1
  77. package/dist/cjs/ion-route_4.cjs.entry.js +2 -2
  78. package/dist/cjs/ion-searchbar.cjs.entry.js +4 -4
  79. package/dist/cjs/ion-segment-content.cjs.entry.js +1 -1
  80. package/dist/cjs/ion-segment-view.cjs.entry.js +2 -2
  81. package/dist/cjs/ion-segment_2.cjs.entry.js +4 -4
  82. package/dist/cjs/ion-select-modal.cjs.entry.js +1 -1
  83. package/dist/cjs/ion-select_3.cjs.entry.js +4 -4
  84. package/dist/cjs/ion-spinner.cjs.entry.js +1 -1
  85. package/dist/cjs/ion-split-pane.cjs.entry.js +2 -2
  86. package/dist/cjs/ion-tab-bar_2.cjs.entry.js +4 -4
  87. package/dist/cjs/ion-tab_2.cjs.entry.js +3 -3
  88. package/dist/cjs/ion-text.cjs.entry.js +2 -2
  89. package/dist/cjs/ion-textarea.cjs.entry.js +6 -36
  90. package/dist/cjs/ion-toast.cjs.entry.js +2 -2
  91. package/dist/cjs/ion-toggle.cjs.entry.js +3 -3
  92. package/dist/cjs/ionic.cjs.js +1 -1
  93. package/dist/cjs/loader.cjs.js +1 -1
  94. package/dist/collection/components/checkbox/checkbox.js +1 -1
  95. package/dist/collection/components/input/input.js +8 -39
  96. package/dist/collection/components/item-divider/item-divider.js +2 -2
  97. package/dist/collection/components/item-group/item-group.js +1 -1
  98. package/dist/collection/components/item-option/item-option.js +2 -2
  99. package/dist/collection/components/item-options/item-options.js +1 -1
  100. package/dist/collection/components/item-sliding/item-sliding.js +1 -1
  101. package/dist/collection/components/label/label.js +2 -2
  102. package/dist/collection/components/list-header/list-header.js +2 -2
  103. package/dist/collection/components/loading/loading.js +2 -2
  104. package/dist/collection/components/menu/menu.js +2 -2
  105. package/dist/collection/components/menu-button/menu-button.js +2 -2
  106. package/dist/collection/components/menu-toggle/menu-toggle.js +2 -2
  107. package/dist/collection/components/modal/modal.js +4 -4
  108. package/dist/collection/components/nav/nav.js +1 -1
  109. package/dist/collection/components/nav-link/nav-link.js +1 -1
  110. package/dist/collection/components/note/note.js +2 -2
  111. package/dist/collection/components/picker-column-option/picker-column-option.js +2 -2
  112. package/dist/collection/components/picker-legacy/picker.js +2 -2
  113. package/dist/collection/components/picker-legacy-column/picker-column.js +2 -2
  114. package/dist/collection/components/popover/popover.js +2 -2
  115. package/dist/collection/components/progress-bar/progress-bar.js +1 -1
  116. package/dist/collection/components/radio/radio.js +3 -3
  117. package/dist/collection/components/radio-group/radio-group.js +1 -1
  118. package/dist/collection/components/range/range.js +3 -3
  119. package/dist/collection/components/refresher/refresher.js +18 -1
  120. package/dist/collection/components/refresher-content/refresher-content.js +1 -1
  121. package/dist/collection/components/reorder/reorder.js +1 -1
  122. package/dist/collection/components/reorder-group/reorder-group.js +1 -1
  123. package/dist/collection/components/ripple-effect/ripple-effect.js +1 -1
  124. package/dist/collection/components/router-link/router-link.js +2 -2
  125. package/dist/collection/components/router-outlet/router-outlet.js +1 -1
  126. package/dist/collection/components/row/row.js +1 -1
  127. package/dist/collection/components/searchbar/searchbar.js +4 -4
  128. package/dist/collection/components/segment/segment.js +2 -2
  129. package/dist/collection/components/segment-button/segment-button.js +2 -2
  130. package/dist/collection/components/segment-content/segment-content.js +1 -1
  131. package/dist/collection/components/segment-view/segment-view.js +2 -2
  132. package/dist/collection/components/select/select.js +2 -2
  133. package/dist/collection/components/select-modal/select-modal.js +1 -1
  134. package/dist/collection/components/select-option/select-option.js +1 -1
  135. package/dist/collection/components/select-popover/select-popover.js +1 -1
  136. package/dist/collection/components/skeleton-text/skeleton-text.js +2 -2
  137. package/dist/collection/components/spinner/spinner.js +1 -1
  138. package/dist/collection/components/split-pane/split-pane.js +2 -2
  139. package/dist/collection/components/tab/tab.js +2 -2
  140. package/dist/collection/components/tab-bar/tab-bar.js +2 -2
  141. package/dist/collection/components/tab-button/tab-button.js +2 -2
  142. package/dist/collection/components/tabs/tabs.js +1 -1
  143. package/dist/collection/components/text/text.js +2 -2
  144. package/dist/collection/components/textarea/textarea.js +7 -38
  145. package/dist/collection/components/thumbnail/thumbnail.js +1 -1
  146. package/dist/collection/components/title/title.js +2 -2
  147. package/dist/collection/components/toast/toast.js +2 -2
  148. package/dist/collection/components/toggle/toggle.js +3 -3
  149. package/dist/collection/components/toolbar/toolbar.js +2 -2
  150. package/dist/docs.json +1 -1
  151. package/dist/esm/ion-app_8.entry.js +5 -5
  152. package/dist/esm/ion-avatar_3.entry.js +1 -1
  153. package/dist/esm/ion-checkbox.entry.js +1 -1
  154. package/dist/esm/ion-col_3.entry.js +1 -1
  155. package/dist/esm/ion-datetime_3.entry.js +4 -4
  156. package/dist/esm/ion-input.entry.js +7 -37
  157. package/dist/esm/ion-item-option_3.entry.js +4 -4
  158. package/dist/esm/ion-item_8.entry.js +11 -11
  159. package/dist/esm/ion-loading.entry.js +2 -2
  160. package/dist/esm/ion-menu_3.entry.js +6 -6
  161. package/dist/esm/ion-modal.entry.js +4 -4
  162. package/dist/esm/ion-nav_2.entry.js +2 -2
  163. package/dist/esm/ion-picker-column-option.entry.js +2 -2
  164. package/dist/esm/ion-popover.entry.js +2 -2
  165. package/dist/esm/ion-progress-bar.entry.js +1 -1
  166. package/dist/esm/ion-radio_2.entry.js +4 -4
  167. package/dist/esm/ion-range.entry.js +3 -3
  168. package/dist/esm/ion-refresher_2.entry.js +19 -2
  169. package/dist/esm/ion-reorder_2.entry.js +2 -2
  170. package/dist/esm/ion-ripple-effect.entry.js +1 -1
  171. package/dist/esm/ion-route_4.entry.js +2 -2
  172. package/dist/esm/ion-searchbar.entry.js +4 -4
  173. package/dist/esm/ion-segment-content.entry.js +1 -1
  174. package/dist/esm/ion-segment-view.entry.js +2 -2
  175. package/dist/esm/ion-segment_2.entry.js +4 -4
  176. package/dist/esm/ion-select-modal.entry.js +1 -1
  177. package/dist/esm/ion-select_3.entry.js +4 -4
  178. package/dist/esm/ion-spinner.entry.js +1 -1
  179. package/dist/esm/ion-split-pane.entry.js +2 -2
  180. package/dist/esm/ion-tab-bar_2.entry.js +4 -4
  181. package/dist/esm/ion-tab_2.entry.js +3 -3
  182. package/dist/esm/ion-text.entry.js +2 -2
  183. package/dist/esm/ion-textarea.entry.js +6 -36
  184. package/dist/esm/ion-toast.entry.js +2 -2
  185. package/dist/esm/ion-toggle.entry.js +3 -3
  186. package/dist/esm/ionic.js +1 -1
  187. package/dist/esm/loader.js +1 -1
  188. package/dist/ionic/ionic.esm.js +1 -1
  189. package/dist/ionic/{p-92e8f208.entry.js → p-039c8f8e.entry.js} +1 -1
  190. package/dist/ionic/{p-f9eb54ee.entry.js → p-0c580145.entry.js} +1 -1
  191. package/dist/ionic/{p-40d56a51.entry.js → p-0e45320b.entry.js} +1 -1
  192. package/dist/ionic/{p-1bbd0a23.entry.js → p-12b99129.entry.js} +1 -1
  193. package/dist/ionic/p-1488b7cc.entry.js +4 -0
  194. package/dist/ionic/{p-6383afc2.entry.js → p-165d1309.entry.js} +1 -1
  195. package/dist/ionic/{p-7b12d853.entry.js → p-165d8e84.entry.js} +1 -1
  196. package/dist/ionic/p-1a91f317.entry.js +4 -0
  197. package/dist/ionic/{p-c575e7ce.entry.js → p-1cfb0bc4.entry.js} +1 -1
  198. package/dist/ionic/{p-4f2c5845.entry.js → p-1e8b1767.entry.js} +1 -1
  199. package/dist/ionic/{p-e6c465ff.entry.js → p-22351d1b.entry.js} +1 -1
  200. package/dist/ionic/{p-3624b640.entry.js → p-2e967897.entry.js} +1 -1
  201. package/dist/ionic/p-332e4eac.entry.js +4 -0
  202. package/dist/ionic/p-3364562a.entry.js +4 -0
  203. package/dist/ionic/{p-d04d66fc.entry.js → p-4c79bd85.entry.js} +1 -1
  204. package/dist/ionic/{p-cde6d39b.entry.js → p-5420fd3e.entry.js} +1 -1
  205. package/dist/ionic/{p-54dec9b1.entry.js → p-70e05fd1.entry.js} +1 -1
  206. package/dist/ionic/{p-16116947.entry.js → p-78aff731.entry.js} +1 -1
  207. package/dist/ionic/p-7922ca30.entry.js +4 -0
  208. package/dist/ionic/{p-ab33ef20.entry.js → p-82ce0043.entry.js} +1 -1
  209. package/dist/ionic/{p-29032e49.entry.js → p-8ca65589.entry.js} +1 -1
  210. package/dist/ionic/p-8de104c4.entry.js +4 -0
  211. package/dist/ionic/{p-7bac2c5f.entry.js → p-9cf01220.entry.js} +1 -1
  212. package/dist/ionic/{p-1191a2d9.entry.js → p-c32b6c20.entry.js} +1 -1
  213. package/dist/ionic/{p-982fe1c4.entry.js → p-c7d2c21b.entry.js} +1 -1
  214. package/dist/ionic/p-c91aa324.entry.js +4 -0
  215. package/dist/ionic/p-dff5b0b6.entry.js +4 -0
  216. package/dist/ionic/{p-ec76fec4.entry.js → p-e1310192.entry.js} +1 -1
  217. package/dist/ionic/{p-dbba38cf.entry.js → p-e8429777.entry.js} +1 -1
  218. package/dist/ionic/{p-528af4e6.entry.js → p-ee881603.entry.js} +1 -1
  219. package/dist/ionic/{p-ac434970.entry.js → p-f267c7dc.entry.js} +1 -1
  220. package/dist/ionic/{p-7a53f04c.entry.js → p-f4e6e570.entry.js} +1 -1
  221. package/dist/ionic/{p-c0d58c8e.entry.js → p-f550f186.entry.js} +1 -1
  222. package/dist/ionic/{p-f456d176.entry.js → p-f5da8541.entry.js} +1 -1
  223. package/dist/ionic/{p-f7db572a.entry.js → p-f868d51c.entry.js} +1 -1
  224. package/dist/types/components/input/input.d.ts +0 -9
  225. package/dist/types/components/textarea/textarea.d.ts +0 -9
  226. package/hydrate/index.js +123 -138
  227. package/hydrate/index.mjs +123 -138
  228. package/package.json +1 -1
  229. package/dist/ionic/p-0f396661.entry.js +0 -4
  230. package/dist/ionic/p-44415a3b.entry.js +0 -4
  231. package/dist/ionic/p-8d96a0cd.entry.js +0 -4
  232. package/dist/ionic/p-ac2be9d6.entry.js +0 -4
  233. package/dist/ionic/p-c836e1a2.entry.js +0 -4
  234. package/dist/ionic/p-d3df6032.entry.js +0 -4
  235. package/dist/ionic/p-e6c3214c.entry.js +0 -4
  236. package/dist/ionic/p-f80f7416.entry.js +0 -4
@@ -147,7 +147,7 @@ const Row = class {
147
147
  index.registerInstance(this, hostRef);
148
148
  }
149
149
  render() {
150
- return (index.h(index.Host, { key: '65592a79621bd8f75f9566db3e8c05a4b8fc6048', class: ionicGlobal.getIonMode(this) }, index.h("slot", { key: '56f09784db7a0299c9ce76dfcede185b295251ff' })));
150
+ return (index.h(index.Host, { key: '8ba906a8cbea060a79ed658c9bf34906f0c11d38', class: ionicGlobal.getIonMode(this) }, index.h("slot", { key: 'd1009176f45b588fa52c7d9eb336f3c6d3214bb8' })));
151
151
  }
152
152
  };
153
153
  Row.style = rowCss;
@@ -2145,11 +2145,11 @@ const Picker = class {
2145
2145
  render() {
2146
2146
  const { htmlAttributes } = this;
2147
2147
  const mode = ionicGlobal.getIonMode(this);
2148
- return (index.h(index.Host, Object.assign({ key: 'b95440747eb80cba23ae676d399d5e5816722c58', "aria-modal": "true", tabindex: "-1" }, htmlAttributes, { style: {
2148
+ return (index.h(index.Host, Object.assign({ key: '80f66d33780d8a1352d24be9cb63a0cc03d01ab5', "aria-modal": "true", tabindex: "-1" }, htmlAttributes, { style: {
2149
2149
  zIndex: `${20000 + this.overlayIndex}`,
2150
2150
  }, class: Object.assign({ [mode]: true,
2151
2151
  // Used internally for styling
2152
- [`picker-${mode}`]: true, 'overlay-hidden': true }, theme.getClassMap(this.cssClass)), onIonBackdropTap: this.onBackdropTap, onIonPickerWillDismiss: this.dispatchCancelHandler }), index.h("ion-backdrop", { key: '169d1c83ef40e7fcb134219a585298b403a70b0f', visible: this.showBackdrop, tappable: this.backdropDismiss }), index.h("div", { key: '98518e5f5cea2dfb8dfa63d9545e9ae3a5765023', tabindex: "0", "aria-hidden": "true" }), index.h("div", { key: '151755ab8eb23f9adafbfe201349398f5a69dee7', class: "picker-wrapper ion-overlay-wrapper", role: "dialog" }, index.h("div", { key: '5dcf93b2f4fe8f4fce7c7aec8f85ef45a03ef470', class: "picker-toolbar" }, this.buttons.map((b) => (index.h("div", { class: buttonWrapperClass(b) }, index.h("button", { type: "button", onClick: () => this.buttonClick(b), class: buttonClass(b) }, b.text))))), index.h("div", { key: 'fd5d66708edd38adc5a4d2fad7298969398a05e3', class: "picker-columns" }, index.h("div", { key: '1b5830fd6cef1016af7736792c514965d6cb38a8', class: "picker-above-highlight" }), this.presented && this.columns.map((c) => index.h("ion-picker-legacy-column", { col: c })), index.h("div", { key: 'c6edeca7afd69e13c9c66ba36f261974fd0f8f78', class: "picker-below-highlight" }))), index.h("div", { key: 'e2a4b24710e30579b14b82dbfd3761b2187797b5', tabindex: "0", "aria-hidden": "true" })));
2152
+ [`picker-${mode}`]: true, 'overlay-hidden': true }, theme.getClassMap(this.cssClass)), onIonBackdropTap: this.onBackdropTap, onIonPickerWillDismiss: this.dispatchCancelHandler }), index.h("ion-backdrop", { key: '97fb8e10ba08b197610cb8c0cdea61103883d55f', visible: this.showBackdrop, tappable: this.backdropDismiss }), index.h("div", { key: 'b3969cb6fbf7153623d14e3ca1493d3370efb211', tabindex: "0", "aria-hidden": "true" }), index.h("div", { key: '299268483c3727e698d9135bfdf40349a7050ac1', class: "picker-wrapper ion-overlay-wrapper", role: "dialog" }, index.h("div", { key: '95394de3ef691899b7dbf416f56fd3e86bbdce3f', class: "picker-toolbar" }, this.buttons.map((b) => (index.h("div", { class: buttonWrapperClass(b) }, index.h("button", { type: "button", onClick: () => this.buttonClick(b), class: buttonClass(b) }, b.text))))), index.h("div", { key: '05f18bb8d00dc0e22f691b7e41f90f729a6c66d7', class: "picker-columns" }, index.h("div", { key: '4a8fdf224effc0af67fd413e2e6aca8a78d1cf43', class: "picker-above-highlight" }), this.presented && this.columns.map((c) => index.h("ion-picker-legacy-column", { col: c })), index.h("div", { key: 'e50a31db45e3f39e9d0fed36a21be9257eec09bf', class: "picker-below-highlight" }))), index.h("div", { key: '5a78cb2176ac807ea0c195c6b76cd0e8eef9d4c0', tabindex: "0", "aria-hidden": "true" })));
2153
2153
  }
2154
2154
  get el() { return index.getElement(this); }
2155
2155
  static get watchers() { return {
@@ -2503,9 +2503,9 @@ const PickerColumnCmp = class {
2503
2503
  render() {
2504
2504
  const col = this.col;
2505
2505
  const mode = ionicGlobal.getIonMode(this);
2506
- return (index.h(index.Host, { key: 'ed32d108dd94f0302fb453c31a3497ebae65ec37', class: Object.assign({ [mode]: true, 'picker-col': true, 'picker-opts-left': this.col.align === 'left', 'picker-opts-right': this.col.align === 'right' }, theme.getClassMap(col.cssClass)), style: {
2506
+ return (index.h(index.Host, { key: '86125e95f18837dfd021db01777d72a1562d8ee3', class: Object.assign({ [mode]: true, 'picker-col': true, 'picker-opts-left': this.col.align === 'left', 'picker-opts-right': this.col.align === 'right' }, theme.getClassMap(col.cssClass)), style: {
2507
2507
  'max-width': this.col.columnWidth,
2508
- } }, col.prefix && (index.h("div", { key: '9f0634890e66fd4ae74f826d1eea3431de121393', class: "picker-prefix", style: { width: col.prefixWidth } }, col.prefix)), index.h("div", { key: '337e996e5be91af16446085fe22436f213b771eb', class: "picker-opts", style: { maxWidth: col.optionsWidth }, ref: (el) => (this.optsEl = el) }, col.options.map((o, index$1) => (index.h("button", { "aria-label": o.ariaLabel, class: { 'picker-opt': true, 'picker-opt-disabled': !!o.disabled }, "opt-index": index$1 }, o.text)))), col.suffix && (index.h("div", { key: 'd69a132599d78d9e5107f12228978cfce4e43098', class: "picker-suffix", style: { width: col.suffixWidth } }, col.suffix))));
2508
+ } }, col.prefix && (index.h("div", { key: 'b0f3d39e0bd128781066ffefb7a1e40d12a9e76d', class: "picker-prefix", style: { width: col.prefixWidth } }, col.prefix)), index.h("div", { key: '0b106ac4d56916eaaa7f09d1b68348b3754b7bba', class: "picker-opts", style: { maxWidth: col.optionsWidth }, ref: (el) => (this.optsEl = el) }, col.options.map((o, index$1) => (index.h("button", { "aria-label": o.ariaLabel, class: { 'picker-opt': true, 'picker-opt-disabled': !!o.disabled }, "opt-index": index$1 }, o.text)))), col.suffix && (index.h("div", { key: '00ff2f9dbb4561787e5a5223327c6a2a33f8362e', class: "picker-suffix", style: { width: col.suffixWidth } }, col.suffix))));
2509
2509
  }
2510
2510
  get el() { return index.getElement(this); }
2511
2511
  static get watchers() { return {
@@ -44,10 +44,6 @@ const Input = class {
44
44
  * is applied in both cases.
45
45
  */
46
46
  this.hasFocus = false;
47
- /**
48
- * Track validation state for proper aria-live announcements
49
- */
50
- this.isInvalid = false;
51
47
  /**
52
48
  * Indicates whether and how the text value should be automatically capitalized as it is entered/edited by the user.
53
49
  * Available options: `"off"`, `"none"`, `"on"`, `"sentences"`, `"words"`, `"characters"`.
@@ -232,31 +228,10 @@ const Input = class {
232
228
  componentWillLoad() {
233
229
  this.inheritedAttributes = Object.assign(Object.assign({}, helpers.inheritAriaAttributes(this.el)), helpers.inheritAttributes(this.el, ['tabindex', 'title', 'data-form-type', 'dir']));
234
230
  }
235
- /**
236
- * Checks if the input is in an invalid state based on validation classes
237
- */
238
- checkValidationState() {
239
- return this.el.classList.contains('ion-touched') && this.el.classList.contains('ion-invalid');
240
- }
241
231
  connectedCallback() {
242
232
  const { el } = this;
243
233
  this.slotMutationController = input_utils.createSlotMutationController(el, ['label', 'start', 'end'], () => index.forceUpdate(this));
244
234
  this.notchController = notchController.createNotchController(el, () => this.notchSpacerEl, () => this.labelSlot);
245
- // Watch for class changes to update validation state
246
- {
247
- this.validationObserver = new MutationObserver(() => {
248
- const newIsInvalid = this.checkValidationState();
249
- if (this.isInvalid !== newIsInvalid) {
250
- this.isInvalid = newIsInvalid;
251
- }
252
- });
253
- this.validationObserver.observe(el, {
254
- attributes: true,
255
- attributeFilter: ['class'],
256
- });
257
- // Set initial state
258
- this.isInvalid = this.checkValidationState();
259
- }
260
235
  this.debounceChanged();
261
236
  {
262
237
  document.dispatchEvent(new CustomEvent('ionInputDidLoad', {
@@ -293,11 +268,6 @@ const Input = class {
293
268
  this.notchController.destroy();
294
269
  this.notchController = undefined;
295
270
  }
296
- // Clean up validation observer to prevent memory leaks
297
- if (this.validationObserver) {
298
- this.validationObserver.disconnect();
299
- this.validationObserver = undefined;
300
- }
301
271
  }
302
272
  /**
303
273
  * Sets focus on the native `input` in `ion-input`. Use this method instead of the global
@@ -399,15 +369,15 @@ const Input = class {
399
369
  * Renders the helper text or error text values
400
370
  */
401
371
  renderHintText() {
402
- const { helperText, errorText, helperTextId, errorTextId, isInvalid } = this;
372
+ const { helperText, errorText, helperTextId, errorTextId } = this;
403
373
  return [
404
374
  index.h("div", { id: helperTextId, class: "helper-text" }, helperText),
405
- index.h("div", { id: errorTextId, class: "error-text", role: isInvalid && errorText ? 'alert' : undefined, "aria-live": isInvalid && errorText ? 'polite' : 'off', "aria-atomic": "true" }, isInvalid && errorText ? errorText : ''),
375
+ index.h("div", { id: errorTextId, class: "error-text" }, errorText),
406
376
  ];
407
377
  }
408
378
  getHintTextID() {
409
- const { isInvalid, helperText, errorText, helperTextId, errorTextId } = this;
410
- if (isInvalid && errorText) {
379
+ const { el, helperText, errorText, helperTextId, errorTextId } = this;
380
+ if (el.classList.contains('ion-touched') && el.classList.contains('ion-invalid') && errorText) {
411
381
  return errorTextId;
412
382
  }
413
383
  if (helperText) {
@@ -520,7 +490,7 @@ const Input = class {
520
490
  * TODO(FW-5592): Remove hasStartEndSlots condition
521
491
  */
522
492
  const labelShouldFloat = labelPlacement === 'stacked' || (labelPlacement === 'floating' && (hasValue || hasFocus || hasStartEndSlots));
523
- return (index.h(index.Host, { key: 'fcb5d96c872ce63cb6252b6d7d302ab30e6ea83b', class: theme.createColorClasses(this.color, {
493
+ return (index.h(index.Host, { key: '41b2526627e7d2773a80f011b123284203a71ca0', class: theme.createColorClasses(this.color, {
524
494
  [mode]: true,
525
495
  'has-value': hasValue,
526
496
  'has-focus': hasFocus,
@@ -531,14 +501,14 @@ const Input = class {
531
501
  'in-item': inItem,
532
502
  'in-item-color': theme.hostContext('ion-item.ion-color', this.el),
533
503
  'input-disabled': disabled,
534
- }) }, index.h("label", { key: '73bcaaf2527cbf295283b4581046fb9b361ce2dd', class: "input-wrapper", htmlFor: inputId, onClick: this.onLabelClick }, this.renderLabelContainer(), index.h("div", { key: '22dd6c6623a284e6a51910fa47b0a2ebdbd5971d', class: "native-wrapper", onClick: this.onLabelClick }, index.h("slot", { key: 'c02dac4336eb8e7570ed07cfa18fadca4bc6dd9d', name: "start" }), index.h("input", Object.assign({ key: '42fc6409e9ee51feed480a672bf074cfa6f74c8f', class: "native-input", ref: (input) => (this.nativeInput = input), id: inputId, disabled: disabled, autoCapitalize: this.autocapitalize, autoComplete: this.autocomplete, autoCorrect: this.autocorrect, autoFocus: this.autofocus, enterKeyHint: this.enterkeyhint, inputMode: this.inputmode, min: this.min, max: this.max, minLength: this.minlength, maxLength: this.maxlength, multiple: this.multiple, name: this.name, pattern: this.pattern, placeholder: this.placeholder || '', readOnly: readonly, required: this.required, spellcheck: this.spellcheck, step: this.step, type: this.type, value: value, onInput: this.onInput, onChange: this.onChange, onBlur: this.onBlur, onFocus: this.onFocus, onKeyDown: this.onKeydown, onCompositionstart: this.onCompositionStart, onCompositionend: this.onCompositionEnd, "aria-describedby": this.getHintTextID(), "aria-invalid": this.getHintTextID() === this.errorTextId }, this.inheritedAttributes)), this.clearInput && !readonly && !disabled && (index.h("button", { key: 'b124a2b970542daa6fcb45ac5546a9fde22b45be', "aria-label": "reset", type: "button", class: "input-clear-icon", onPointerDown: (ev) => {
504
+ }) }, index.h("label", { key: '9ab078363e32528102b441ad1791d83f86fdcbdc', class: "input-wrapper", htmlFor: inputId, onClick: this.onLabelClick }, this.renderLabelContainer(), index.h("div", { key: 'e34b594980ec62e4c618e827fadf7669a39ad0d8', class: "native-wrapper", onClick: this.onLabelClick }, index.h("slot", { key: '12dc04ead5502e9e5736240e918bf9331bf7b5d9', name: "start" }), index.h("input", Object.assign({ key: 'df356eb4ced23109b2c0242f36dc043aba8782d6', class: "native-input", ref: (input) => (this.nativeInput = input), id: inputId, disabled: disabled, autoCapitalize: this.autocapitalize, autoComplete: this.autocomplete, autoCorrect: this.autocorrect, autoFocus: this.autofocus, enterKeyHint: this.enterkeyhint, inputMode: this.inputmode, min: this.min, max: this.max, minLength: this.minlength, maxLength: this.maxlength, multiple: this.multiple, name: this.name, pattern: this.pattern, placeholder: this.placeholder || '', readOnly: readonly, required: this.required, spellcheck: this.spellcheck, step: this.step, type: this.type, value: value, onInput: this.onInput, onChange: this.onChange, onBlur: this.onBlur, onFocus: this.onFocus, onKeyDown: this.onKeydown, onCompositionstart: this.onCompositionStart, onCompositionend: this.onCompositionEnd, "aria-describedby": this.getHintTextID(), "aria-invalid": this.getHintTextID() === this.errorTextId }, this.inheritedAttributes)), this.clearInput && !readonly && !disabled && (index.h("button", { key: 'f79f68cabcd4ea99419331174a377827db0c0741', "aria-label": "reset", type: "button", class: "input-clear-icon", onPointerDown: (ev) => {
535
505
  /**
536
506
  * This prevents mobile browsers from
537
507
  * blurring the input when the clear
538
508
  * button is activated.
539
509
  */
540
510
  ev.preventDefault();
541
- }, onClick: this.clearTextInput }, index.h("ion-icon", { key: '243037c08825c2bf26c53bb9507f7cd73e56a4de', "aria-hidden": "true", icon: clearIconData }))), index.h("slot", { key: '9faff25f968c089b7716a8afb405ba5afb86a1ac', name: "end" })), shouldRenderHighlight && index.h("div", { key: '54bf3da059a2bf30e4990ba34abb23fd3bf137b0', class: "input-highlight" })), this.renderBottomContent()));
511
+ }, onClick: this.clearTextInput }, index.h("ion-icon", { key: '237ec07ec2e10f08818a332bb596578c2c49f770', "aria-hidden": "true", icon: clearIconData }))), index.h("slot", { key: '1f0a3624aa3e8dc3c307a6762230ab698768a5e5', name: "end" })), shouldRenderHighlight && index.h("div", { key: '8a8cbb82695a722a0010b53dd0b1f1f97534a20b', class: "input-highlight" })), this.renderBottomContent()));
542
512
  }
543
513
  get el() { return index.getElement(this); }
544
514
  static get watchers() { return {
@@ -47,12 +47,12 @@ const ItemOption = class {
47
47
  href: this.href,
48
48
  target: this.target,
49
49
  };
50
- return (index.h(index.Host, { key: '189a0040b97163b2336bf216baa71d584c5923a8', onClick: this.onClick, class: theme.createColorClasses(this.color, {
50
+ return (index.h(index.Host, { key: '058310ac361612c16f2ef70c74279ba7c24128c5', onClick: this.onClick, class: theme.createColorClasses(this.color, {
51
51
  [mode]: true,
52
52
  'item-option-disabled': disabled,
53
53
  'item-option-expandable': expandable,
54
54
  'ion-activatable': true,
55
- }) }, index.h(TagType, Object.assign({ key: '5a7140eb99da5ec82fe2ea3ea134513130763399' }, attrs, { class: "button-native", part: "native", disabled: disabled }), index.h("span", { key: '9b8577e612706b43e575c9a20f2f9d35c0d1bcb1', class: "button-inner" }, index.h("slot", { key: '9acb82f04e4822bfaa363cc2c4d29d5c0fec0ad6', name: "top" }), index.h("div", { key: '66f5fb4fdd0c39f205574c602c793dcf109c7a17', class: "horizontal-wrapper" }, index.h("slot", { key: '3761a32bca7c6c41b7eb394045497cfde181a62a', name: "start" }), index.h("slot", { key: 'a96a568955cf6962883dc6771726d3d07462da00', name: "icon-only" }), index.h("slot", { key: 'af5dfe5eb41456b9359bafe3615b576617ed7b57' }), index.h("slot", { key: '00426958066ab7b949ff966fabad5cf8a0b54079', name: "end" })), index.h("slot", { key: 'ae66c8bd536a9f27865f49240980d7b4b831b229', name: "bottom" })), mode === 'md' && index.h("ion-ripple-effect", { key: '30df6c935ef8a3f28a6bc1f3bb162ca4f80aaf26' }))));
55
+ }) }, index.h(TagType, Object.assign({ key: '045052656ab652bec065d421950fe9ea00dc1141' }, attrs, { class: "button-native", part: "native", disabled: disabled }), index.h("span", { key: '988b9166c0dda3c822a99ceace4c105339b2465b', class: "button-inner" }, index.h("slot", { key: '8050b870ada6b09283f8acbcbb6d2bd1c76508b3', name: "top" }), index.h("div", { key: 'a206e7b09e660c878ce3c5b61d018e8cdd89dc55', class: "horizontal-wrapper" }, index.h("slot", { key: '394e5e4ce14cd19b5d5eafca29bb9f971f5f0741', name: "start" }), index.h("slot", { key: 'dd4c3a1bee7622df40a3d8f2a298045b772f1600', name: "icon-only" }), index.h("slot", { key: '318f3ec97b722c5e7df1a78b1e0439f919d0aacc' }), index.h("slot", { key: 'fff6a9a602cf7bd698528982f91742a2d36ea245', name: "end" })), index.h("slot", { key: '26b4bb155701d8080b486dbad7bb9a6d2e35182c', name: "bottom" })), mode === 'md' && index.h("ion-ripple-effect", { key: '152b74643bf0f5725c39bfdbb940f0f32ec83d58' }))));
56
56
  }
57
57
  get el() { return index.getElement(this); }
58
58
  };
@@ -84,7 +84,7 @@ const ItemOptions = class {
84
84
  render() {
85
85
  const mode = ionicGlobal.getIonMode(this);
86
86
  const isEnd = helpers.isEndSide(this.side);
87
- return (index.h(index.Host, { key: '05a22a505e043c2715e3805e5e26ab4668940af0', class: {
87
+ return (index.h(index.Host, { key: '7b4b93984182222c64c7a2a22a18e52ac19e3049', class: {
88
88
  [mode]: true,
89
89
  // Used internally for styling
90
90
  [`item-options-${mode}`]: true,
@@ -495,7 +495,7 @@ const ItemSliding = class {
495
495
  }
496
496
  render() {
497
497
  const mode = ionicGlobal.getIonMode(this);
498
- return (index.h(index.Host, { key: 'd812322c9fb5da4ee16e99dc38bfb24cb4590d03', class: {
498
+ return (index.h(index.Host, { key: '8fd81d74701402294a48b79c56d6eceadafd4881', class: {
499
499
  [mode]: true,
500
500
  'item-sliding-active-slide': this.state !== 2 /* SlidingState.Disabled */,
501
501
  'item-sliding-active-options-end': (this.state & 8 /* SlidingState.End */) !== 0,
@@ -274,11 +274,11 @@ const ItemDivider = class {
274
274
  }
275
275
  render() {
276
276
  const mode = ionicGlobal.getIonMode(this);
277
- return (index.h(index.Host, { key: '1523095ce4af3f2611512ff0948ead659959ee4a', class: theme.createColorClasses(this.color, {
277
+ return (index.h(index.Host, { key: 'ee8b2c8d5e415c0d8badf84fa7670932da4e809e', class: theme.createColorClasses(this.color, {
278
278
  [mode]: true,
279
279
  'item-divider-sticky': this.sticky,
280
280
  item: true,
281
- }) }, index.h("slot", { key: '39105d888e115416c3a3fe588da44b4c61f4e5fe', name: "start" }), index.h("div", { key: '67e16f1056bd39187f3629c1bb383b7abbda829b', class: "item-divider-inner" }, index.h("div", { key: 'b3a218fdcc7b9aeab6e0155340152d39fa0b6329', class: "item-divider-wrapper" }, index.h("slot", { key: '69d8587533b387869d34b075d02f61396858fc90' })), index.h("slot", { key: 'b91c654699b3b26d0012ea0c719c4a07d1fcfbaa', name: "end" }))));
281
+ }) }, index.h("slot", { key: 'a1b7bbb1a008b0a56887f130d166931033801746', name: "start" }), index.h("div", { key: '9d572da46ab616bdf881098e96aa6796a249507f', class: "item-divider-inner" }, index.h("div", { key: 'a57a2c17093b74b9e4f8fd2778230a440b293aa1', class: "item-divider-wrapper" }, index.h("slot", { key: 'ef15ebf58f3acd4b4d1b7c51144e26c3759dba49' })), index.h("slot", { key: '1787c2400534301fe72b8ec213d0ce1e8f75b65a', name: "end" }))));
282
282
  }
283
283
  get el() { return index.getElement(this); }
284
284
  };
@@ -297,7 +297,7 @@ const ItemGroup = class {
297
297
  }
298
298
  render() {
299
299
  const mode = ionicGlobal.getIonMode(this);
300
- return (index.h(index.Host, { key: 'e49dc8f99247d2431d7c6db01b6e021a0f5b1c37', role: "group", class: {
300
+ return (index.h(index.Host, { key: 'f1743af1d075682f63fae3802c5c5bf050507563', role: "group", class: {
301
301
  [mode]: true,
302
302
  // Used internally for styling
303
303
  [`item-group-${mode}`]: true,
@@ -363,13 +363,13 @@ const Label = class {
363
363
  render() {
364
364
  const position = this.position;
365
365
  const mode = ionicGlobal.getIonMode(this);
366
- return (index.h(index.Host, { key: 'd6fba1a97189acc8ddfd64a2f009954a3e46e188', class: theme.createColorClasses(this.color, {
366
+ return (index.h(index.Host, { key: '684ddfa719e34d743489ff05a0df067829257c73', class: theme.createColorClasses(this.color, {
367
367
  [mode]: true,
368
368
  'in-item-color': theme.hostContext('ion-item.ion-color', this.el),
369
369
  [`label-${position}`]: position !== undefined,
370
370
  [`label-no-animate`]: this.noAnimate,
371
371
  'label-rtl': document.dir === 'rtl',
372
- }) }, index.h("slot", { key: 'ce0ab50b5700398fdf50f36d02b7ad287eb71481' })));
372
+ }) }, index.h("slot", { key: '4aace3e2b36250e832c44f63bea21116d77220fb' })));
373
373
  }
374
374
  get el() { return index.getElement(this); }
375
375
  static get watchers() { return {
@@ -437,10 +437,10 @@ const ListHeader = class {
437
437
  render() {
438
438
  const { lines } = this;
439
439
  const mode = ionicGlobal.getIonMode(this);
440
- return (index.h(index.Host, { key: 'd9bc827ad8cc77231efddc2435831a7fc080f77d', class: theme.createColorClasses(this.color, {
440
+ return (index.h(index.Host, { key: '2e529021279761b2b2889885437f619b0e8f71c4', class: theme.createColorClasses(this.color, {
441
441
  [mode]: true,
442
442
  [`list-header-lines-${lines}`]: lines !== undefined,
443
- }) }, index.h("div", { key: '02dd9698304a7b2997ea1487e2f308bebea2b44c', class: "list-header-inner" }, index.h("slot", { key: '01d63a572c003286ae467a1ab23631e37e695042' }))));
443
+ }) }, index.h("div", { key: '9a6a11b0db015df79374f6489a40b959bc80b3e4', class: "list-header-inner" }, index.h("slot", { key: 'ef347fc6afb47850797e2e4d1aeefcd6a318f789' }))));
444
444
  }
445
445
  };
446
446
  ListHeader.style = {
@@ -458,9 +458,9 @@ const Note = class {
458
458
  }
459
459
  render() {
460
460
  const mode = ionicGlobal.getIonMode(this);
461
- return (index.h(index.Host, { key: '0ec2ef7367d867fd7588611953f696eecdf3221e', class: theme.createColorClasses(this.color, {
461
+ return (index.h(index.Host, { key: 'b86a6acc9274df6528d224d4c11ab826a0f84dbc', class: theme.createColorClasses(this.color, {
462
462
  [mode]: true,
463
- }) }, index.h("slot", { key: 'a200b94ddffb29cf6dabe6e984220930ea7efdef' })));
463
+ }) }, index.h("slot", { key: '5de76567ed7713827cd277a42db102faf34190c8' })));
464
464
  }
465
465
  };
466
466
  Note.style = {
@@ -495,11 +495,11 @@ const SkeletonText = class {
495
495
  const animated = this.animated && index.config.getBoolean('animated', true);
496
496
  const inMedia = theme.hostContext('ion-avatar', this.el) || theme.hostContext('ion-thumbnail', this.el);
497
497
  const mode = ionicGlobal.getIonMode(this);
498
- return (index.h(index.Host, { key: 'd86ef7392507cdbf48dfd3a71f02d7a83eda4aae', class: {
498
+ return (index.h(index.Host, { key: 'cb8da9aba121811b9a4ffdae60ed88105897cb3c', class: {
499
499
  [mode]: true,
500
500
  'skeleton-text-animated': animated,
501
501
  'in-media': inMedia,
502
- } }, index.h("span", { key: '8e8b5a232a6396d2bba691b05f9de4da44b2965c' }, "\u00A0")));
502
+ } }, index.h("span", { key: '5379deee3c76d46d615be0cba14b4f60129ffa25' }, "\u00A0")));
503
503
  }
504
504
  get el() { return index.getElement(this); }
505
505
  };
@@ -278,9 +278,9 @@ const Loading = class {
278
278
  * Otherwise, don't set aria-labelledby.
279
279
  */
280
280
  const ariaLabelledBy = message !== undefined ? msgId : null;
281
- return (index.h(index.Host, Object.assign({ key: '4497183ce220242abe19ae15f328f9a92ccafbbc', role: "dialog", "aria-modal": "true", "aria-labelledby": ariaLabelledBy, tabindex: "-1" }, htmlAttributes, { style: {
281
+ return (index.h(index.Host, Object.assign({ key: 'f86ddbc600cb5c396b7de38fb5f49625388c3c3f', role: "dialog", "aria-modal": "true", "aria-labelledby": ariaLabelledBy, tabindex: "-1" }, htmlAttributes, { style: {
282
282
  zIndex: `${40000 + this.overlayIndex}`,
283
- }, onIonBackdropTap: this.onBackdropTap, class: Object.assign(Object.assign({}, theme.getClassMap(this.cssClass)), { [mode]: true, 'overlay-hidden': true, 'loading-translucent': this.translucent }) }), index.h("ion-backdrop", { key: '231dec84e424a2dc358ce95b84d6035cf43e4dea', visible: this.showBackdrop, tappable: this.backdropDismiss }), index.h("div", { key: 'c9af29b6e6bb49a217396a5c874bbfb8835a926c', tabindex: "0", "aria-hidden": "true" }), index.h("div", { key: 'a8659863743cdeccbe1ba810eaabfd3ebfcb86f3', class: "loading-wrapper ion-overlay-wrapper" }, spinner && (index.h("div", { key: '3b346f39bc71691bd8686556a1e142198a7b12fa', class: "loading-spinner" }, index.h("ion-spinner", { key: '8dc2bf1556e5138e262827f1516c59ecd09f3520', name: spinner, "aria-hidden": "true" }))), message !== undefined && this.renderLoadingMessage(msgId)), index.h("div", { key: '054164c0dbae9a0e0973dd3c8e28f5b771820310', tabindex: "0", "aria-hidden": "true" })));
283
+ }, onIonBackdropTap: this.onBackdropTap, class: Object.assign(Object.assign({}, theme.getClassMap(this.cssClass)), { [mode]: true, 'overlay-hidden': true, 'loading-translucent': this.translucent }) }), index.h("ion-backdrop", { key: 'b53727aaddc37ef3c685fcc150c6d5193290a847', visible: this.showBackdrop, tappable: this.backdropDismiss }), index.h("div", { key: '4c61bede8e0a4e47daa6f1f9d0f364ef6aec0bc3', tabindex: "0", "aria-hidden": "true" }), index.h("div", { key: '84e51ceb07118f1eaeb757df28801c255496931b', class: "loading-wrapper ion-overlay-wrapper" }, spinner && (index.h("div", { key: 'fc97f1912e0fc558b7c309a5bc084415f5f620b2', class: "loading-spinner" }, index.h("ion-spinner", { key: '6e186d856cd3f10f22c3e317ef00f31b4216459c', name: spinner, "aria-hidden": "true" }))), message !== undefined && this.renderLoadingMessage(msgId)), index.h("div", { key: 'dcbe9d9a619daa1c08174e73827bdabeb59dde92', tabindex: "0", "aria-hidden": "true" })));
284
284
  }
285
285
  get el() { return index.getElement(this); }
286
286
  static get watchers() { return {
@@ -661,14 +661,14 @@ const Menu = class {
661
661
  * the ionBackButton listener in the menu controller
662
662
  * will handle closing the menu when Escape is pressed.
663
663
  */
664
- return (index.h(index.Host, { key: 'a5c75aa40a34530b56ee3b98d706a5ac5ae300de', onKeyDown: hardwareBackButton.shouldUseCloseWatcher() ? null : this.onKeydown, role: "navigation", "aria-label": inheritedAttributes['aria-label'] || 'menu', class: {
664
+ return (index.h(index.Host, { key: 'fe83e1633252b66757d30f603bb82ab65fc520f0', onKeyDown: hardwareBackButton.shouldUseCloseWatcher() ? null : this.onKeydown, role: "navigation", "aria-label": inheritedAttributes['aria-label'] || 'menu', class: {
665
665
  [mode]: true,
666
666
  [`menu-type-${type}`]: true,
667
667
  'menu-enabled': !disabled,
668
668
  [`menu-side-${side}`]: true,
669
669
  'menu-pane-visible': isPaneVisible,
670
670
  'split-pane-side': theme.hostContext('ion-split-pane', el),
671
- } }, index.h("div", { key: '3f5f70acd4d3ed6bb445122f4f01d73db738a75f', class: "menu-inner", part: "container", ref: (el) => (this.menuInnerEl = el) }, index.h("slot", { key: '3161326c9330e7f7441299c428b87a91b31a83e9' })), index.h("ion-backdrop", { key: '917b50f38489bdf03d0c642af8b4e4e172c7dc4c', ref: (el) => (this.backdropEl = el), class: "menu-backdrop", tappable: false, stopPropagation: false, part: "backdrop" })));
671
+ } }, index.h("div", { key: '1e4cdb9728137618195797c758ff3ea3e8c4af55', class: "menu-inner", part: "container", ref: (el) => (this.menuInnerEl = el) }, index.h("slot", { key: '05b98bee11a9bb0d199e24fa0d450fd4d174d5e6' })), index.h("ion-backdrop", { key: 'd9374f19fa1f2df5ecbe26ffe36e72862b650d56', ref: (el) => (this.backdropEl = el), class: "menu-backdrop", tappable: false, stopPropagation: false, part: "backdrop" })));
672
672
  }
673
673
  get el() { return index.getElement(this); }
674
674
  static get watchers() { return {
@@ -746,7 +746,7 @@ const MenuButton = class {
746
746
  type: this.type,
747
747
  };
748
748
  const ariaLabel = inheritedAttributes['aria-label'] || 'menu';
749
- return (index.h(index.Host, { key: '9f0f0e50d39a6872508220c58e64bb2092a0d7ef', onClick: this.onClick, "aria-disabled": disabled ? 'true' : null, "aria-hidden": hidden ? 'true' : null, class: theme.createColorClasses(color, {
749
+ return (index.h(index.Host, { key: 'dcade732e366f0687d92cb9ce4065b78b0b41d24', onClick: this.onClick, "aria-disabled": disabled ? 'true' : null, "aria-hidden": hidden ? 'true' : null, class: theme.createColorClasses(color, {
750
750
  [mode]: true,
751
751
  button: true, // ion-buttons target .button
752
752
  'menu-button-hidden': hidden,
@@ -755,7 +755,7 @@ const MenuButton = class {
755
755
  'in-toolbar-color': theme.hostContext('ion-toolbar[color]', this.el),
756
756
  'ion-activatable': true,
757
757
  'ion-focusable': true,
758
- }) }, index.h("button", Object.assign({ key: 'ffebf7083d23501839970059ef8e411b571de197' }, attrs, { disabled: disabled, class: "button-native", part: "native", "aria-label": ariaLabel }), index.h("span", { key: 'cab0c1c763b3ce33ef11dba1d230f66126e59424', class: "button-inner" }, index.h("slot", { key: 'ccfd2be8479b75b5c63e97e1ca7dfe203e9b36ee' }, index.h("ion-icon", { key: 'ac254fe7f327b08f1ae3fcea89d5cf0e83c9a96c', part: "icon", icon: menuIcon, mode: mode, lazy: false, "aria-hidden": "true" }))), mode === 'md' && index.h("ion-ripple-effect", { key: 'f0f17c4ca96e3eed3c1727ee00578d40af8f0115', type: "unbounded" }))));
758
+ }) }, index.h("button", Object.assign({ key: '7c4a449e239679376f38471d95fd602f9caec5f6' }, attrs, { disabled: disabled, class: "button-native", part: "native", "aria-label": ariaLabel }), index.h("span", { key: '8bb5bf453280a66109198c970b678ad800c7a8cf', class: "button-inner" }, index.h("slot", { key: '7f78b1e7a0695f2bd600d13ca81f50dd8b965726' }, index.h("ion-icon", { key: '9f67f5bb06b1f03a6e5df9ecbe23ebf69fb40756', part: "icon", icon: menuIcon, mode: mode, lazy: false, "aria-hidden": "true" }))), mode === 'md' && index.h("ion-ripple-effect", { key: '10be7145c614144e94c3cc0b92dc5ee4e1587fe6', type: "unbounded" }))));
759
759
  }
760
760
  get el() { return index.getElement(this); }
761
761
  };
@@ -790,10 +790,10 @@ const MenuToggle = class {
790
790
  render() {
791
791
  const mode = ionicGlobal.getIonMode(this);
792
792
  const hidden = this.autoHide && !this.visible;
793
- return (index.h(index.Host, { key: 'cd567114769a30bd3871ed5d15bf42aed39956e1', onClick: this.onClick, "aria-hidden": hidden ? 'true' : null, class: {
793
+ return (index.h(index.Host, { key: '55135952f3a42cb5d21916dfb7b169d894b381e3', onClick: this.onClick, "aria-hidden": hidden ? 'true' : null, class: {
794
794
  [mode]: true,
795
795
  'menu-toggle-hidden': hidden,
796
- } }, index.h("slot", { key: '773d4cff95ca75f23578b1e1dca53c9933f28a33' })));
796
+ } }, index.h("slot", { key: 'e8ecb59a6ec075b07e2a1b8fcdf7df3dd9975a03' })));
797
797
  }
798
798
  };
799
799
  MenuToggle.style = menuToggleCss;
@@ -2318,20 +2318,20 @@ const Modal = class {
2318
2318
  const isCardModal = presentingElement !== undefined && mode === 'ios';
2319
2319
  const isHandleCycle = handleBehavior === 'cycle';
2320
2320
  const isSheetModalWithHandle = isSheetModal && showHandle;
2321
- return (index$3.h(index$3.Host, Object.assign({ key: '9e9a7bd591eb17a225a00b4fa2e379e94601d17f', "no-router": true,
2321
+ return (index$3.h(index$3.Host, Object.assign({ key: '3fc94b846a80cf23ab9c4d4534d5835f2ada5449', "no-router": true,
2322
2322
  // Allow the modal to be navigable when the handle is focusable
2323
2323
  tabIndex: isHandleCycle && isSheetModalWithHandle ? 0 : -1 }, htmlAttributes, { style: {
2324
2324
  zIndex: `${20000 + this.overlayIndex}`,
2325
- }, class: Object.assign({ [mode]: true, ['modal-default']: !isCardModal && !isSheetModal, [`modal-card`]: isCardModal, [`modal-sheet`]: isSheetModal, [`modal-no-expand-scroll`]: isSheetModal && !expandToScroll, 'overlay-hidden': true, [overlays.FOCUS_TRAP_DISABLE_CLASS]: focusTrap === false }, theme.getClassMap(this.cssClass)), onIonBackdropTap: this.onBackdropTap, onIonModalDidPresent: this.onLifecycle, onIonModalWillPresent: this.onLifecycle, onIonModalWillDismiss: this.onLifecycle, onIonModalDidDismiss: this.onLifecycle, onFocus: this.onModalFocus }), index$3.h("ion-backdrop", { key: 'e5eae2c14f830f75e308fcd7f4c10c86fac5b962', ref: (el) => (this.backdropEl = el), visible: this.showBackdrop, tappable: this.backdropDismiss, part: "backdrop" }), mode === 'ios' && index$3.h("div", { key: 'e268f9cd310c3cf4e051b5b92524ce4fb70d005e', class: "modal-shadow" }), index$3.h("div", Object.assign({ key: '9c380f36c18144c153077b15744d1c3346bce63e',
2325
+ }, class: Object.assign({ [mode]: true, ['modal-default']: !isCardModal && !isSheetModal, [`modal-card`]: isCardModal, [`modal-sheet`]: isSheetModal, [`modal-no-expand-scroll`]: isSheetModal && !expandToScroll, 'overlay-hidden': true, [overlays.FOCUS_TRAP_DISABLE_CLASS]: focusTrap === false }, theme.getClassMap(this.cssClass)), onIonBackdropTap: this.onBackdropTap, onIonModalDidPresent: this.onLifecycle, onIonModalWillPresent: this.onLifecycle, onIonModalWillDismiss: this.onLifecycle, onIonModalDidDismiss: this.onLifecycle, onFocus: this.onModalFocus }), index$3.h("ion-backdrop", { key: 'a99663c15d2374448a2a2243da63cfc5fac769f4', ref: (el) => (this.backdropEl = el), visible: this.showBackdrop, tappable: this.backdropDismiss, part: "backdrop" }), mode === 'ios' && index$3.h("div", { key: '840e71a6e0d334b413766b3b00fa60841b8abdaf', class: "modal-shadow" }), index$3.h("div", Object.assign({ key: 'a77a8a58fbb541fb78319bd8fc790cc7c35133e7',
2326
2326
  /*
2327
2327
  role and aria-modal must be used on the
2328
2328
  same element. They must also be set inside the
2329
2329
  shadow DOM otherwise ion-button will not be highlighted
2330
2330
  when using VoiceOver: https://bugs.webkit.org/show_bug.cgi?id=247134
2331
2331
  */
2332
- role: "dialog" }, inheritedAttributes, { "aria-modal": "true", class: "modal-wrapper ion-overlay-wrapper", part: "content", ref: (el) => (this.wrapperEl = el) }), showHandle && (index$3.h("button", { key: '2d5ee6d5959d97309c306e8ce72eb0f2c19be144', class: "modal-handle",
2332
+ role: "dialog" }, inheritedAttributes, { "aria-modal": "true", class: "modal-wrapper ion-overlay-wrapper", part: "content", ref: (el) => (this.wrapperEl = el) }), showHandle && (index$3.h("button", { key: '4856c8e31055dc33b8dc997c891507c2b556cd7b', class: "modal-handle",
2333
2333
  // Prevents the handle from receiving keyboard focus when it does not cycle
2334
- tabIndex: !isHandleCycle ? -1 : 0, "aria-label": "Activate to adjust the size of the dialog overlaying the screen", onClick: isHandleCycle ? this.onHandleClick : undefined, part: "handle", ref: (el) => (this.dragHandleEl = el) })), index$3.h("slot", { key: '5590434c35ea04c42fc006498bc189038e15a298', onSlotchange: this.onSlotChange }))));
2334
+ tabIndex: !isHandleCycle ? -1 : 0, "aria-label": "Activate to adjust the size of the dialog overlaying the screen", onClick: isHandleCycle ? this.onHandleClick : undefined, part: "handle", ref: (el) => (this.dragHandleEl = el) })), index$3.h("slot", { key: 'ecc33d1c0670d884aeee5a0c9fe4f16030edb511', onSlotchange: this.onSlotChange }))));
2335
2335
  }
2336
2336
  get el() { return index$3.getElement(this); }
2337
2337
  static get watchers() { return {
@@ -897,7 +897,7 @@ const Nav = class {
897
897
  }
898
898
  }
899
899
  render() {
900
- return index.h("slot", { key: '8067c9835d255daec61f33dba200fd3a6ff839a0' });
900
+ return index.h("slot", { key: 'a549286b51b1bb23c9ef51f71148452228d0ab14' });
901
901
  }
902
902
  get el() { return index.getElement(this); }
903
903
  static get watchers() { return {
@@ -939,7 +939,7 @@ const NavLink = class {
939
939
  };
940
940
  }
941
941
  render() {
942
- return index.h(index.Host, { key: '6dbb1ad4f351e9215375aac11ab9b53762e07a08', onClick: this.onClick });
942
+ return index.h(index.Host, { key: 'd4d80feb51c0d92b0bedf6952c892f9df3002046', onClick: this.onClick });
943
943
  }
944
944
  get el() { return index.getElement(this); }
945
945
  };
@@ -99,10 +99,10 @@ const PickerColumnOption = class {
99
99
  render() {
100
100
  const { color, disabled, ariaLabel } = this;
101
101
  const mode = ionicGlobal.getIonMode(this);
102
- return (index.h(index.Host, { key: 'f816729941aabcb31ddfdce3ffe2e2139030d715', class: theme.createColorClasses(color, {
102
+ return (index.h(index.Host, { key: 'c45a1c14a351bf57d7113671164852349be5aa8a', class: theme.createColorClasses(color, {
103
103
  [mode]: true,
104
104
  ['option-disabled']: disabled,
105
- }) }, index.h("button", { key: '48dff7833bb60fc8331cd353a0885e6affa683d1', tabindex: "-1", "aria-label": ariaLabel, disabled: disabled, onClick: () => this.onClick() }, index.h("slot", { key: 'f9224d0e7b7aa6c05b29abfdcfe0f30ad6ee3141' }))));
105
+ }) }, index.h("button", { key: '67334c3bc6fbff93f65aaf9a0979b5ef62db1e5b', tabindex: "-1", "aria-label": ariaLabel, disabled: disabled, onClick: () => this.onClick() }, index.h("slot", { key: 'a4766c43931d1a5cb3124a2a97141d1a4ca2bf24' }))));
106
106
  }
107
107
  get el() { return index.getElement(this); }
108
108
  static get watchers() { return {
@@ -1388,9 +1388,9 @@ const Popover = class {
1388
1388
  const { onLifecycle, parentPopover, dismissOnSelect, side, arrow, htmlAttributes, focusTrap } = this;
1389
1389
  const desktop = ionicGlobal.isPlatform('desktop');
1390
1390
  const enableArrow = arrow && !parentPopover;
1391
- return (index.h(index.Host, Object.assign({ key: '16866c02534968c982cf4730d2936d03a5107c8b', "aria-modal": "true", "no-router": true, tabindex: "-1" }, htmlAttributes, { style: {
1391
+ return (index.h(index.Host, Object.assign({ key: 'f977b26ee1607d83bc78418e319da90d1691b49f', "aria-modal": "true", "no-router": true, tabindex: "-1" }, htmlAttributes, { style: {
1392
1392
  zIndex: `${20000 + this.overlayIndex}`,
1393
- }, class: Object.assign(Object.assign({}, theme.getClassMap(this.cssClass)), { [mode]: true, 'popover-translucent': this.translucent, 'overlay-hidden': true, 'popover-desktop': desktop, [`popover-side-${side}`]: true, [overlays.FOCUS_TRAP_DISABLE_CLASS]: focusTrap === false, 'popover-nested': !!parentPopover }), onIonPopoverDidPresent: onLifecycle, onIonPopoverWillPresent: onLifecycle, onIonPopoverWillDismiss: onLifecycle, onIonPopoverDidDismiss: onLifecycle, onIonBackdropTap: this.onBackdropTap }), !parentPopover && index.h("ion-backdrop", { key: '0df258601a4d30df3c27aa8234a7d5e056c3ecbb', tappable: this.backdropDismiss, visible: this.showBackdrop, part: "backdrop" }), index.h("div", { key: 'f94e80ed996b957b5cd09b826472b4f60e8fcc78', class: "popover-wrapper ion-overlay-wrapper", onClick: dismissOnSelect ? () => this.dismiss() : undefined }, enableArrow && index.h("div", { key: '185ce22f6386e8444a9cc7b8818dbfc16c463c99', class: "popover-arrow", part: "arrow" }), index.h("div", { key: '206202b299404e110de5397b229678cca18568d3', class: "popover-content", part: "content" }, index.h("slot", { key: 'ee543a0b92d6e35a837c0a0e4617c7b0fc4ad0b0' })))));
1393
+ }, class: Object.assign(Object.assign({}, theme.getClassMap(this.cssClass)), { [mode]: true, 'popover-translucent': this.translucent, 'overlay-hidden': true, 'popover-desktop': desktop, [`popover-side-${side}`]: true, [overlays.FOCUS_TRAP_DISABLE_CLASS]: focusTrap === false, 'popover-nested': !!parentPopover }), onIonPopoverDidPresent: onLifecycle, onIonPopoverWillPresent: onLifecycle, onIonPopoverWillDismiss: onLifecycle, onIonPopoverDidDismiss: onLifecycle, onIonBackdropTap: this.onBackdropTap }), !parentPopover && index.h("ion-backdrop", { key: '3cfc18823bca1fd43f9f7da876a69a5d8b1eac4e', tappable: this.backdropDismiss, visible: this.showBackdrop, part: "backdrop" }), index.h("div", { key: '060bc23b567e92bd4740397d3d2c1994cebd2859', class: "popover-wrapper ion-overlay-wrapper", onClick: dismissOnSelect ? () => this.dismiss() : undefined }, enableArrow && index.h("div", { key: 'cbb21b281a69713dd4233ea27256d696173a634b', class: "popover-arrow", part: "arrow" }), index.h("div", { key: 'a28dc0557aac79410d56828746d1b77aaa9d636c', class: "popover-content", part: "content" }, index.h("slot", { key: 'cd29600cb42be78005e635672ee2ec1e251116cc' })))));
1394
1394
  }
1395
1395
  get el() { return index.getElement(this); }
1396
1396
  static get watchers() { return {
@@ -42,7 +42,7 @@ const ProgressBar = class {
42
42
  const mode = ionicGlobal.getIonMode(this);
43
43
  // If the progress is displayed as a solid bar.
44
44
  const progressSolid = buffer === 1;
45
- return (index.h(index.Host, { key: 'dc69693b5d2dcb2b6e4296d7cb85bc27507f3fa6', role: "progressbar", "aria-valuenow": type === 'determinate' ? value : null, "aria-valuemin": "0", "aria-valuemax": "1", class: theme.createColorClasses(color, {
45
+ return (index.h(index.Host, { key: 'c859e48f3d24a458239e36d925e5dc003ed07c6b', role: "progressbar", "aria-valuenow": type === 'determinate' ? value : null, "aria-valuemin": "0", "aria-valuemax": "1", class: theme.createColorClasses(color, {
46
46
  [mode]: true,
47
47
  [`progress-bar-${type}`]: true,
48
48
  'progress-paused': paused,
@@ -137,7 +137,7 @@ const Radio = class {
137
137
  const { checked, disabled, color, el, justify, labelPlacement, hasLabel, buttonTabindex, alignment } = this;
138
138
  const mode = ionicGlobal.getIonMode(this);
139
139
  const inItem = theme.hostContext('ion-item', el);
140
- return (index.h(index.Host, { key: '3353b28172b7f837d4b38964169b5b5f4ba02788', onFocus: this.onFocus, onBlur: this.onBlur, onClick: this.onClick, class: theme.createColorClasses(color, {
140
+ return (index.h(index.Host, { key: 'af5dc59ed528150872e907ed1036e3e2decba939', onFocus: this.onFocus, onBlur: this.onBlur, onClick: this.onClick, class: theme.createColorClasses(color, {
141
141
  [mode]: true,
142
142
  'in-item': inItem,
143
143
  'radio-checked': checked,
@@ -148,10 +148,10 @@ const Radio = class {
148
148
  // Focus and active styling should not apply when the radio is in an item
149
149
  'ion-activatable': !inItem,
150
150
  'ion-focusable': !inItem,
151
- }), role: "radio", "aria-checked": checked ? 'true' : 'false', "aria-disabled": disabled ? 'true' : null, tabindex: buttonTabindex }, index.h("label", { key: '418a0a48366ff900e97da123abf665bbbda87fb7', class: "radio-wrapper" }, index.h("div", { key: '6e5acdd8c8f5d0ad26632a65396afef8094153d1', class: {
151
+ }), role: "radio", "aria-checked": checked ? 'true' : 'false', "aria-disabled": disabled ? 'true' : null, tabindex: buttonTabindex }, index.h("label", { key: '1312aba3259a87fe23a6911cdfa477e309469c8b', class: "radio-wrapper" }, index.h("div", { key: 'b342aa27e240a300836d2a135658d346b95daf09', class: {
152
152
  'label-text-wrapper': true,
153
153
  'label-text-wrapper-hidden': !hasLabel,
154
- }, part: "label" }, index.h("slot", { key: '10b157162cd283d624153c747679609cf0bbf11e' })), index.h("div", { key: '4c45cca95cb105cd6df1025a26e3c045272184a0', class: "native-wrapper" }, this.renderRadioControl()))));
154
+ }, part: "label" }, index.h("slot", { key: '0a4613d29aa783d1882cf889377f7e4fd4fea51d' })), index.h("div", { key: '191faea79dc4cd8befc4b873f5bd9f5af8ca2acc', class: "native-wrapper" }, this.renderRadioControl()))));
155
155
  }
156
156
  get el() { return index.getElement(this); }
157
157
  static get watchers() { return {
@@ -354,7 +354,7 @@ const RadioGroup = class {
354
354
  const { label, labelId, el, name, value } = this;
355
355
  const mode = ionicGlobal.getIonMode(this);
356
356
  helpers.renderHiddenInput(true, el, name, value, false);
357
- return (index.h(index.Host, { key: '81b8ebc96b2f383c36717f290d2959cc921ad6e8', role: "radiogroup", "aria-labelledby": label ? labelId : null, "aria-describedby": this.getHintTextID(), "aria-invalid": this.getHintTextID() === this.errorTextId, onClick: this.onClick, class: mode }, this.renderHintText(), index.h("div", { key: '45b09efc10776b889a8f372cba80d25a3fc849da', class: "radio-group-wrapper" }, index.h("slot", { key: '58714934542c2fdd7396de160364f3f06b32e8f8' }))));
357
+ return (index.h(index.Host, { key: '81b8ebc96b2f383c36717f290d2959cc921ad6e8', role: "radiogroup", "aria-labelledby": label ? labelId : null, "aria-describedby": this.getHintTextID(), "aria-invalid": this.getHintTextID() === this.errorTextId, onClick: this.onClick, class: mode }, this.renderHintText(), index.h("slot", { key: '77f7b5a2040b65222c9c2178c8e87d58b347ef7c' })));
358
358
  }
359
359
  get el() { return index.getElement(this); }
360
360
  static get watchers() { return {
@@ -723,7 +723,7 @@ const Range = class {
723
723
  const needsEndAdjustment = inItem && !hasEndContent;
724
724
  const mode = ionicGlobal.getIonMode(this);
725
725
  helpers.renderHiddenInput(true, el, this.name, JSON.stringify(this.getValue()), disabled);
726
- return (index.h(index.Host, { key: 'ef7b01f80515bcaeb2983934ad7f10a6bd5d13ec', onFocusin: this.onFocus, onFocusout: this.onBlur, id: rangeId, class: theme.createColorClasses(this.color, {
726
+ return (index.h(index.Host, { key: 'affcac4709096a48a5b4c1864b209b6352f6b078', onFocusin: this.onFocus, onFocusout: this.onBlur, id: rangeId, class: theme.createColorClasses(this.color, {
727
727
  [mode]: true,
728
728
  'in-item': inItem,
729
729
  'range-disabled': disabled,
@@ -732,10 +732,10 @@ const Range = class {
732
732
  [`range-label-placement-${labelPlacement}`]: true,
733
733
  'range-item-start-adjustment': needsStartAdjustment,
734
734
  'range-item-end-adjustment': needsEndAdjustment,
735
- }) }, index.h("label", { key: 'fd8aa90a9d52be9da024b907e68858dae424449d', class: "range-wrapper", id: "range-label" }, index.h("div", { key: '2172b4f329c22017dd23475c80aac25ba6e753eb', class: {
735
+ }) }, index.h("label", { key: 'c7cf95fa831d10b17c137995d0a9e0cf84006a76', class: "range-wrapper", id: "range-label" }, index.h("div", { key: '5b8479c7939ae0f94a042c3aafd64316e4577d30', class: {
736
736
  'label-text-wrapper': true,
737
737
  'label-text-wrapper-hidden': !hasLabel,
738
- }, part: "label" }, label !== undefined ? index.h("div", { class: "label-text" }, label) : index.h("slot", { name: "label" })), index.h("div", { key: '3c318bf2ea0576646d4c010bf44573fd0f483186', class: "native-wrapper" }, index.h("slot", { key: '6586fd6fc96271e73f8a86c202d1913ad1a26f96', name: "start" }), this.renderRangeSlider(), index.h("slot", { key: '74ac0bc2d2cb66ef708bb729f88b6ecbc1b2155d', name: "end" })))));
738
+ }, part: "label" }, label !== undefined ? index.h("div", { class: "label-text" }, label) : index.h("slot", { name: "label" })), index.h("div", { key: '3c275d822b29a8008e044722e8b6bdabd3ecfad7', class: "native-wrapper" }, index.h("slot", { key: '03c849d0aa708914984ad57ca292bc5fc66ecad5', name: "start" }), this.renderRangeSlider(), index.h("slot", { key: '10ca7b8152cac00b45d8fa98ad91410f59fd176a', name: "end" })))));
739
739
  }
740
740
  get el() { return index.getElement(this); }
741
741
  static get watchers() { return {
@@ -375,6 +375,14 @@ const Refresher = class {
375
375
  this.beginRefresh();
376
376
  this.didRefresh = true;
377
377
  haptic.hapticImpact({ style: haptic.ImpactStyle.Light });
378
+ /**
379
+ * Clear focus from any active element to prevent scroll jumps
380
+ * when the refresh completes
381
+ */
382
+ const activeElement = document.activeElement;
383
+ if ((activeElement === null || activeElement === void 0 ? void 0 : activeElement.blur) !== undefined) {
384
+ activeElement.blur();
385
+ }
378
386
  /**
379
387
  * Translate the content element otherwise when pointer is removed
380
388
  * from screen the scroll content will bounce back over the refresher
@@ -790,6 +798,15 @@ const Refresher = class {
790
798
  this.state = 8 /* RefresherState.Refreshing */;
791
799
  // place the content in a hangout position while it thinks
792
800
  this.setCss(this.pullMin, this.snapbackDuration, true, '');
801
+ /**
802
+ * Clear focus from any active element to prevent the browser
803
+ * from restoring focus and causing scroll jumps after refresh.
804
+ * This ensures the view stays at the top after refresh completes.
805
+ */
806
+ const activeElement = document.activeElement;
807
+ if ((activeElement === null || activeElement === void 0 ? void 0 : activeElement.blur) !== undefined) {
808
+ activeElement.blur();
809
+ }
793
810
  // emit "refresh" because it was pulled down far enough
794
811
  // and they let go to begin refreshing
795
812
  this.ionRefresh.emit({
@@ -872,7 +889,7 @@ const Refresher = class {
872
889
  }
873
890
  render() {
874
891
  const mode = ionicGlobal.getIonMode(this);
875
- return (index.h(index.Host, { key: '8c7a5cc32da02a9cbeaa954258148683f60a6d1b', slot: "fixed", class: {
892
+ return (index.h(index.Host, { key: '06d61cc53260ce146dd6906cc96597e9baaa17cf', slot: "fixed", class: {
876
893
  [mode]: true,
877
894
  // Used internally for styling
878
895
  [`refresher-${mode}`]: true,
@@ -935,7 +952,7 @@ const RefresherContent = class {
935
952
  const pullingIcon = this.pullingIcon;
936
953
  const hasSpinner = pullingIcon != null && spinnerConfigs.SPINNERS[pullingIcon] !== undefined;
937
954
  const mode = ionicGlobal.getIonMode(this);
938
- return (index.h(index.Host, { key: 'e235f8a9a84070ece2e2066ced234a64663bfa1d', class: mode }, index.h("div", { key: '9121691818ddaa35801a5f442e144ac27686cf19', class: "refresher-pulling" }, this.pullingIcon && hasSpinner && (index.h("div", { key: 'c8d65d740f1575041bd3b752c789077927397fe4', class: "refresher-pulling-icon" }, index.h("div", { key: '309dd904977eaa788b09ea95b7fa4996a73bec5b', class: "spinner-arrow-container" }, index.h("ion-spinner", { key: 'a2a1480f67775d56ca7822e76be1e9f983bca2f9', name: this.pullingIcon, paused: true }), mode === 'md' && this.pullingIcon === 'circular' && (index.h("div", { key: '811d7e06d324bf4b6a18a31427a43e5177f3ae3a', class: "arrow-container" }, index.h("ion-icon", { key: '86cc48e2e8dc054ff6ff1299094da35b524be63d', icon: index$2.caretBackSharp, "aria-hidden": "true" })))))), this.pullingIcon && !hasSpinner && (index.h("div", { key: '464ae097dbc95c18a2dd7dfd03f8489153dab719', class: "refresher-pulling-icon" }, index.h("ion-icon", { key: 'ed6875978b9035add562caa743a68353743d978f', icon: this.pullingIcon, lazy: false, "aria-hidden": "true" }))), this.pullingText !== undefined && this.renderPullingText()), index.h("div", { key: 'aff891924e44354543fec484e5cde1ca92e69904', class: "refresher-refreshing" }, this.refreshingSpinner && (index.h("div", { key: '842d7ac4ff10a1058775493d62f31cbdcd34f7a0', class: "refresher-refreshing-icon" }, index.h("ion-spinner", { key: '8c3e6195501e7e78d5cde1e3ad1fef90fd4a953f', name: this.refreshingSpinner }))), this.refreshingText !== undefined && this.renderRefreshingText())));
955
+ return (index.h(index.Host, { key: '4add42b9fdfded359d1b054d04c2c6ff48e028c8', class: mode }, index.h("div", { key: '45d4e4e0adfed7f96dd1849767aa2cde947de044', class: "refresher-pulling" }, this.pullingIcon && hasSpinner && (index.h("div", { key: '6bd6c8ef5bf6e10699eec3bd8646431bfe1077a0', class: "refresher-pulling-icon" }, index.h("div", { key: '852d20414da53352c8e58bc627e0fda38eff97cb', class: "spinner-arrow-container" }, index.h("ion-spinner", { key: '0dde3578a80cc4b77a07c4d1db1af80c7eb10c27', name: this.pullingIcon, paused: true }), mode === 'md' && this.pullingIcon === 'circular' && (index.h("div", { key: 'c71dbfcf416a19c30fed38f722ebf0358c2181dd', class: "arrow-container" }, index.h("ion-icon", { key: 'fa7c2cf624e7a9c41964e66cabc88c594da6d1fd', icon: index$2.caretBackSharp, "aria-hidden": "true" })))))), this.pullingIcon && !hasSpinner && (index.h("div", { key: '3dd68c9968b421c379d1c4349ba619ee0a189c6d', class: "refresher-pulling-icon" }, index.h("ion-icon", { key: 'f83bceceae4fa8245f91939fb6db589a595e975b', icon: this.pullingIcon, lazy: false, "aria-hidden": "true" }))), this.pullingText !== undefined && this.renderPullingText()), index.h("div", { key: '98e22ceb0f7883e871f815f6199f5cb313e2e086', class: "refresher-refreshing" }, this.refreshingSpinner && (index.h("div", { key: 'faabe8a9b61c02a00994ef978bb82b9ba4537214', class: "refresher-refreshing-icon" }, index.h("ion-spinner", { key: '029a0c073ee1a07f01211e12ba2abc985cf21ed7', name: this.refreshingSpinner }))), this.refreshingText !== undefined && this.renderRefreshingText())));
939
956
  }
940
957
  get el() { return index.getElement(this); }
941
958
  };
@@ -32,7 +32,7 @@ const Reorder = class {
32
32
  render() {
33
33
  const mode = ionicGlobal.getIonMode(this);
34
34
  const reorderIcon = mode === 'ios' ? index$1.reorderThreeOutline : index$1.reorderTwoSharp;
35
- return (index.h(index.Host, { key: 'e6807bb349725682e99e791ac65e729a360d64e8', class: mode }, index.h("slot", { key: '1c691cdbffa6427ba08dc12184c69559ed5d5506' }, index.h("ion-icon", { key: '8b4150302cdca475379582b2251737b5e74079b1', icon: reorderIcon, lazy: false, class: "reorder-icon", part: "icon", "aria-hidden": "true" }))));
35
+ return (index.h(index.Host, { key: 'b869db61ca6393cf1476f2111a66b387b567c6d1', class: mode }, index.h("slot", { key: 'a78edd1776835282b8b5c841377018f36c83296c' }, index.h("ion-icon", { key: '7fb067c47bbb9a7258e5063f028282cc097d0f94', icon: reorderIcon, lazy: false, class: "reorder-icon", part: "icon", "aria-hidden": "true" }))));
36
36
  }
37
37
  get el() { return index.getElement(this); }
38
38
  };
@@ -295,7 +295,7 @@ const ReorderGroup = class {
295
295
  }
296
296
  render() {
297
297
  const mode = ionicGlobal.getIonMode(this);
298
- return (index.h(index.Host, { key: 'b9641f3061d67fbfe68317b901ec33267046e073', class: {
298
+ return (index.h(index.Host, { key: '9527bbdedaab63d31f562c874a7332ea60c4b47b', class: {
299
299
  [mode]: true,
300
300
  'reorder-enabled': !this.disabled,
301
301
  'reorder-list-active': this.state !== 0 /* ReorderGroupState.Idle */,
@@ -74,7 +74,7 @@ const RippleEffect = class {
74
74
  }
75
75
  render() {
76
76
  const mode = ionicGlobal.getIonMode(this);
77
- return (index.h(index.Host, { key: 'ae9d3b1ed6773a9b9bb2267129f7e9af23b6c9fc', role: "presentation", class: {
77
+ return (index.h(index.Host, { key: '3b59cbb44741569a7350f9638b4392add673b6f1', role: "presentation", class: {
78
78
  [mode]: true,
79
79
  unbounded: this.unbounded,
80
80
  } }));
@@ -897,10 +897,10 @@ const RouterLink = class {
897
897
  rel: this.rel,
898
898
  target: this.target,
899
899
  };
900
- return (index.h(index.Host, { key: 'd7f2affcde45c5fbb6cb46cd1c30008ee92a68c5', onClick: this.onClick, class: theme.createColorClasses(this.color, {
900
+ return (index.h(index.Host, { key: '8372835161d507c7b821b7536c55f912eb6ce704', onClick: this.onClick, class: theme.createColorClasses(this.color, {
901
901
  [mode]: true,
902
902
  'ion-activatable': true,
903
- }) }, index.h("a", Object.assign({ key: 'babafae85ca5c6429958d383feff0493ff8cf33e' }, attrs), index.h("slot", { key: '50314e9555bbf6dffa0c50c3f763009dee59b10b' }))));
903
+ }) }, index.h("a", Object.assign({ key: '315966e14a17760f3f64197e8315200039787897' }, attrs), index.h("slot", { key: '95fc1697b884225e85e647dddcaa8f4af8b9a979' }))));
904
904
  }
905
905
  };
906
906
  RouterLink.style = routerLinkCss;