@ionic/core 8.7.13-dev.11765560568.1a8772e8 → 8.7.13-dev.11765829391.14bc580c

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 (279) hide show
  1. package/components/header.js +2 -2
  2. package/components/ion-datetime-button.js +2 -2
  3. package/components/ion-datetime.js +85 -86
  4. package/components/ion-fab-button.js +2 -2
  5. package/components/ion-fab-list.js +2 -2
  6. package/components/ion-fab.js +2 -2
  7. package/components/ion-footer.js +2 -2
  8. package/components/ion-grid.js +2 -2
  9. package/components/ion-img.js +1 -1
  10. package/components/ion-infinite-scroll-content.js +2 -2
  11. package/components/ion-infinite-scroll.js +1 -1
  12. package/components/ion-input-otp.js +3 -3
  13. package/components/ion-input-password-toggle.js +3 -3
  14. package/components/ion-input.js +3 -3
  15. package/components/ion-item-divider.js +2 -2
  16. package/components/ion-item-group.js +1 -1
  17. package/components/ion-item-option.js +2 -2
  18. package/components/ion-item-options.js +1 -1
  19. package/components/ion-item-sliding.js +1 -1
  20. package/components/ion-loading.js +2 -2
  21. package/components/ion-menu-button.js +2 -2
  22. package/components/ion-menu-toggle.js +2 -2
  23. package/components/ion-menu.js +2 -2
  24. package/components/ion-nav-link.js +1 -1
  25. package/components/ion-nav.js +1 -1
  26. package/components/ion-note.js +2 -2
  27. package/components/ion-picker-legacy.js +2 -2
  28. package/components/ion-progress-bar.js +1 -1
  29. package/components/ion-range.js +3 -3
  30. package/components/ion-refresher-content.js +1 -1
  31. package/components/ion-refresher.js +1 -1
  32. package/components/ion-reorder-group.js +1 -1
  33. package/components/ion-reorder.js +1 -1
  34. package/components/ion-router-link.js +2 -2
  35. package/components/ion-router-outlet.js +1 -1
  36. package/components/ion-row.js +1 -1
  37. package/components/ion-searchbar.js +4 -4
  38. package/components/ion-segment-button.js +2 -2
  39. package/components/ion-segment-content.js +1 -1
  40. package/components/ion-segment-view.js +2 -2
  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-toast.js +2 -2
  54. package/components/ion-toggle.js +3 -3
  55. package/components/label.js +2 -2
  56. package/components/list-header.js +2 -2
  57. package/components/list.js +1 -1
  58. package/components/modal.js +4 -4
  59. package/components/picker-column-option.js +2 -2
  60. package/components/picker-column.js +3 -3
  61. package/components/picker-column2.js +2 -2
  62. package/components/picker.js +2 -2
  63. package/components/popover.js +2 -2
  64. package/components/radio-group.js +1 -1
  65. package/components/radio.js +3 -3
  66. package/components/ripple-effect.js +1 -1
  67. package/components/select-modal.js +1 -1
  68. package/components/select-popover.js +1 -1
  69. package/components/spinner.js +1 -1
  70. package/components/title.js +2 -2
  71. package/components/toolbar.js +2 -2
  72. package/dist/cjs/ion-app_8.cjs.entry.js +9 -9
  73. package/dist/cjs/ion-avatar_3.cjs.entry.js +1 -1
  74. package/dist/cjs/ion-col_3.cjs.entry.js +3 -3
  75. package/dist/cjs/ion-datetime-button.cjs.entry.js +2 -2
  76. package/dist/cjs/ion-datetime_3.cjs.entry.js +89 -90
  77. package/dist/cjs/ion-fab_3.cjs.entry.js +6 -6
  78. package/dist/cjs/ion-img.cjs.entry.js +1 -1
  79. package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +3 -3
  80. package/dist/cjs/ion-input-otp.cjs.entry.js +3 -3
  81. package/dist/cjs/ion-input-password-toggle.cjs.entry.js +3 -3
  82. package/dist/cjs/ion-input.cjs.entry.js +3 -3
  83. package/dist/cjs/ion-item-option_3.cjs.entry.js +4 -4
  84. package/dist/cjs/ion-item_8.cjs.entry.js +12 -12
  85. package/dist/cjs/ion-loading.cjs.entry.js +2 -2
  86. package/dist/cjs/ion-menu_3.cjs.entry.js +6 -6
  87. package/dist/cjs/ion-modal.cjs.entry.js +4 -4
  88. package/dist/cjs/ion-nav_2.cjs.entry.js +2 -2
  89. package/dist/cjs/ion-picker-column-option.cjs.entry.js +2 -2
  90. package/dist/cjs/ion-picker-column.cjs.entry.js +3 -3
  91. package/dist/cjs/ion-picker.cjs.entry.js +2 -2
  92. package/dist/cjs/ion-popover.cjs.entry.js +2 -2
  93. package/dist/cjs/ion-progress-bar.cjs.entry.js +1 -1
  94. package/dist/cjs/ion-radio_2.cjs.entry.js +4 -4
  95. package/dist/cjs/ion-range.cjs.entry.js +3 -3
  96. package/dist/cjs/ion-refresher_2.cjs.entry.js +2 -2
  97. package/dist/cjs/ion-reorder_2.cjs.entry.js +2 -2
  98. package/dist/cjs/ion-ripple-effect.cjs.entry.js +1 -1
  99. package/dist/cjs/ion-route_4.cjs.entry.js +2 -2
  100. package/dist/cjs/ion-searchbar.cjs.entry.js +4 -4
  101. package/dist/cjs/ion-segment-content.cjs.entry.js +1 -1
  102. package/dist/cjs/ion-segment-view.cjs.entry.js +2 -2
  103. package/dist/cjs/ion-segment_2.cjs.entry.js +4 -4
  104. package/dist/cjs/ion-select-modal.cjs.entry.js +1 -1
  105. package/dist/cjs/ion-select_3.cjs.entry.js +4 -4
  106. package/dist/cjs/ion-spinner.cjs.entry.js +1 -1
  107. package/dist/cjs/ion-split-pane.cjs.entry.js +2 -2
  108. package/dist/cjs/ion-tab-bar_2.cjs.entry.js +4 -4
  109. package/dist/cjs/ion-tab_2.cjs.entry.js +3 -3
  110. package/dist/cjs/ion-text.cjs.entry.js +2 -2
  111. package/dist/cjs/ion-textarea.cjs.entry.js +2 -2
  112. package/dist/cjs/ion-toast.cjs.entry.js +2 -2
  113. package/dist/cjs/ion-toggle.cjs.entry.js +3 -3
  114. package/dist/collection/components/datetime/datetime.js +85 -86
  115. package/dist/collection/components/datetime-button/datetime-button.js +2 -2
  116. package/dist/collection/components/fab/fab.js +2 -2
  117. package/dist/collection/components/fab-button/fab-button.js +2 -2
  118. package/dist/collection/components/fab-list/fab-list.js +2 -2
  119. package/dist/collection/components/footer/footer.js +2 -2
  120. package/dist/collection/components/grid/grid.js +2 -2
  121. package/dist/collection/components/header/header.js +2 -2
  122. package/dist/collection/components/img/img.js +1 -1
  123. package/dist/collection/components/infinite-scroll/infinite-scroll.js +1 -1
  124. package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.js +2 -2
  125. package/dist/collection/components/input/input.js +3 -3
  126. package/dist/collection/components/input-otp/input-otp.js +3 -3
  127. package/dist/collection/components/input-password-toggle/input-password-toggle.js +3 -3
  128. package/dist/collection/components/item-divider/item-divider.js +2 -2
  129. package/dist/collection/components/item-group/item-group.js +1 -1
  130. package/dist/collection/components/item-option/item-option.js +2 -2
  131. package/dist/collection/components/item-options/item-options.js +1 -1
  132. package/dist/collection/components/item-sliding/item-sliding.js +1 -1
  133. package/dist/collection/components/label/label.js +2 -2
  134. package/dist/collection/components/list/list.js +1 -1
  135. package/dist/collection/components/list-header/list-header.js +2 -2
  136. package/dist/collection/components/loading/loading.js +2 -2
  137. package/dist/collection/components/menu/menu.js +2 -2
  138. package/dist/collection/components/menu-button/menu-button.js +2 -2
  139. package/dist/collection/components/menu-toggle/menu-toggle.js +2 -2
  140. package/dist/collection/components/modal/modal.js +4 -4
  141. package/dist/collection/components/nav/nav.js +1 -1
  142. package/dist/collection/components/nav-link/nav-link.js +1 -1
  143. package/dist/collection/components/note/note.js +2 -2
  144. package/dist/collection/components/picker/picker.js +2 -2
  145. package/dist/collection/components/picker-column/picker-column.js +3 -3
  146. package/dist/collection/components/picker-column-option/picker-column-option.js +2 -2
  147. package/dist/collection/components/picker-legacy/picker.js +2 -2
  148. package/dist/collection/components/picker-legacy-column/picker-column.js +2 -2
  149. package/dist/collection/components/popover/popover.js +2 -2
  150. package/dist/collection/components/progress-bar/progress-bar.js +1 -1
  151. package/dist/collection/components/radio/radio.js +3 -3
  152. package/dist/collection/components/radio-group/radio-group.js +1 -1
  153. package/dist/collection/components/range/range.js +3 -3
  154. package/dist/collection/components/refresher/refresher.js +1 -1
  155. package/dist/collection/components/refresher-content/refresher-content.js +1 -1
  156. package/dist/collection/components/reorder/reorder.js +1 -1
  157. package/dist/collection/components/reorder-group/reorder-group.js +1 -1
  158. package/dist/collection/components/ripple-effect/ripple-effect.js +1 -1
  159. package/dist/collection/components/router-link/router-link.js +2 -2
  160. package/dist/collection/components/router-outlet/router-outlet.js +1 -1
  161. package/dist/collection/components/row/row.js +1 -1
  162. package/dist/collection/components/searchbar/searchbar.js +4 -4
  163. package/dist/collection/components/segment/segment.js +2 -2
  164. package/dist/collection/components/segment-button/segment-button.js +2 -2
  165. package/dist/collection/components/segment-content/segment-content.js +1 -1
  166. package/dist/collection/components/segment-view/segment-view.js +2 -2
  167. package/dist/collection/components/select/select.js +2 -2
  168. package/dist/collection/components/select-modal/select-modal.js +1 -1
  169. package/dist/collection/components/select-option/select-option.js +1 -1
  170. package/dist/collection/components/select-popover/select-popover.js +1 -1
  171. package/dist/collection/components/skeleton-text/skeleton-text.js +2 -2
  172. package/dist/collection/components/spinner/spinner.js +1 -1
  173. package/dist/collection/components/split-pane/split-pane.js +2 -2
  174. package/dist/collection/components/tab/tab.js +2 -2
  175. package/dist/collection/components/tab-bar/tab-bar.js +2 -2
  176. package/dist/collection/components/tab-button/tab-button.js +2 -2
  177. package/dist/collection/components/tabs/tabs.js +1 -1
  178. package/dist/collection/components/text/text.js +2 -2
  179. package/dist/collection/components/textarea/textarea.js +2 -2
  180. package/dist/collection/components/thumbnail/thumbnail.js +1 -1
  181. package/dist/collection/components/title/title.js +2 -2
  182. package/dist/collection/components/toast/toast.js +2 -2
  183. package/dist/collection/components/toggle/toggle.js +3 -3
  184. package/dist/collection/components/toolbar/toolbar.js +2 -2
  185. package/dist/docs.json +1 -1
  186. package/dist/esm/ion-app_8.entry.js +9 -9
  187. package/dist/esm/ion-avatar_3.entry.js +1 -1
  188. package/dist/esm/ion-col_3.entry.js +3 -3
  189. package/dist/esm/ion-datetime-button.entry.js +2 -2
  190. package/dist/esm/ion-datetime_3.entry.js +89 -90
  191. package/dist/esm/ion-fab_3.entry.js +6 -6
  192. package/dist/esm/ion-img.entry.js +1 -1
  193. package/dist/esm/ion-infinite-scroll_2.entry.js +3 -3
  194. package/dist/esm/ion-input-otp.entry.js +3 -3
  195. package/dist/esm/ion-input-password-toggle.entry.js +3 -3
  196. package/dist/esm/ion-input.entry.js +3 -3
  197. package/dist/esm/ion-item-option_3.entry.js +4 -4
  198. package/dist/esm/ion-item_8.entry.js +12 -12
  199. package/dist/esm/ion-loading.entry.js +2 -2
  200. package/dist/esm/ion-menu_3.entry.js +6 -6
  201. package/dist/esm/ion-modal.entry.js +4 -4
  202. package/dist/esm/ion-nav_2.entry.js +2 -2
  203. package/dist/esm/ion-picker-column-option.entry.js +2 -2
  204. package/dist/esm/ion-picker-column.entry.js +3 -3
  205. package/dist/esm/ion-picker.entry.js +2 -2
  206. package/dist/esm/ion-popover.entry.js +2 -2
  207. package/dist/esm/ion-progress-bar.entry.js +1 -1
  208. package/dist/esm/ion-radio_2.entry.js +4 -4
  209. package/dist/esm/ion-range.entry.js +3 -3
  210. package/dist/esm/ion-refresher_2.entry.js +2 -2
  211. package/dist/esm/ion-reorder_2.entry.js +2 -2
  212. package/dist/esm/ion-ripple-effect.entry.js +1 -1
  213. package/dist/esm/ion-route_4.entry.js +2 -2
  214. package/dist/esm/ion-searchbar.entry.js +4 -4
  215. package/dist/esm/ion-segment-content.entry.js +1 -1
  216. package/dist/esm/ion-segment-view.entry.js +2 -2
  217. package/dist/esm/ion-segment_2.entry.js +4 -4
  218. package/dist/esm/ion-select-modal.entry.js +1 -1
  219. package/dist/esm/ion-select_3.entry.js +4 -4
  220. package/dist/esm/ion-spinner.entry.js +1 -1
  221. package/dist/esm/ion-split-pane.entry.js +2 -2
  222. package/dist/esm/ion-tab-bar_2.entry.js +4 -4
  223. package/dist/esm/ion-tab_2.entry.js +3 -3
  224. package/dist/esm/ion-text.entry.js +2 -2
  225. package/dist/esm/ion-textarea.entry.js +2 -2
  226. package/dist/esm/ion-toast.entry.js +2 -2
  227. package/dist/esm/ion-toggle.entry.js +3 -3
  228. package/dist/ionic/ionic.esm.js +1 -1
  229. package/dist/ionic/{p-cc2a9936.entry.js → p-020af078.entry.js} +1 -1
  230. package/dist/ionic/{p-01e27965.entry.js → p-074839fc.entry.js} +1 -1
  231. package/dist/ionic/{p-67f46577.entry.js → p-0abeb0fc.entry.js} +1 -1
  232. package/dist/ionic/{p-59a5cdf5.entry.js → p-0bf76d0f.entry.js} +1 -1
  233. package/dist/ionic/{p-530fcd71.entry.js → p-0dfa5a37.entry.js} +1 -1
  234. package/dist/ionic/{p-85ee4a92.entry.js → p-11518b31.entry.js} +1 -1
  235. package/dist/ionic/{p-363d1209.entry.js → p-1647c46c.entry.js} +1 -1
  236. package/dist/ionic/{p-6f37536a.entry.js → p-2a939845.entry.js} +1 -1
  237. package/dist/ionic/{p-221a3d8c.entry.js → p-316c0420.entry.js} +1 -1
  238. package/dist/ionic/{p-a4a9f5ae.entry.js → p-31f7095f.entry.js} +1 -1
  239. package/dist/ionic/{p-fbb00634.entry.js → p-370e4237.entry.js} +1 -1
  240. package/dist/ionic/{p-2668188b.entry.js → p-3a6caca9.entry.js} +1 -1
  241. package/dist/ionic/{p-64841854.entry.js → p-40c261a3.entry.js} +1 -1
  242. package/dist/ionic/{p-ee8ecd40.entry.js → p-46d74291.entry.js} +1 -1
  243. package/dist/ionic/p-4b658a7c.entry.js +4 -0
  244. package/dist/ionic/p-4e41ea20.entry.js +4 -0
  245. package/dist/ionic/p-51a60e0f.entry.js +4 -0
  246. package/dist/ionic/p-576e0965.entry.js +4 -0
  247. package/dist/ionic/{p-e036eb2f.entry.js → p-6241ce47.entry.js} +1 -1
  248. package/dist/ionic/{p-c175d792.entry.js → p-639dd543.entry.js} +1 -1
  249. package/dist/ionic/{p-d655735d.entry.js → p-6444c606.entry.js} +1 -1
  250. package/dist/ionic/{p-65db57d7.entry.js → p-675b1a31.entry.js} +1 -1
  251. package/dist/ionic/{p-82d5bb3d.entry.js → p-6d070558.entry.js} +1 -1
  252. package/dist/ionic/{p-e64b550c.entry.js → p-7268efa5.entry.js} +1 -1
  253. package/dist/ionic/{p-20f135b4.entry.js → p-72c38b88.entry.js} +1 -1
  254. package/dist/ionic/{p-b8551510.entry.js → p-86f53961.entry.js} +1 -1
  255. package/dist/ionic/p-94de5cfa.entry.js +4 -0
  256. package/dist/ionic/{p-e48f026f.entry.js → p-9575b654.entry.js} +1 -1
  257. package/dist/ionic/{p-30333874.entry.js → p-a127bee2.entry.js} +1 -1
  258. package/dist/ionic/{p-3b0b7a05.entry.js → p-a8ed848b.entry.js} +1 -1
  259. package/dist/ionic/{p-bccc9207.entry.js → p-ac4eb91d.entry.js} +1 -1
  260. package/dist/ionic/{p-dbc82f0e.entry.js → p-b57c6d3e.entry.js} +1 -1
  261. package/dist/ionic/{p-b30c3430.entry.js → p-c19f63d0.entry.js} +1 -1
  262. package/dist/ionic/{p-f097a9e5.entry.js → p-c85a2127.entry.js} +1 -1
  263. package/dist/ionic/{p-69c6fe52.entry.js → p-cc45bcbc.entry.js} +1 -1
  264. package/dist/ionic/{p-75ebaa15.entry.js → p-cebb0328.entry.js} +1 -1
  265. package/dist/ionic/{p-bce86e56.entry.js → p-d126e8d3.entry.js} +1 -1
  266. package/dist/ionic/{p-2bd1ea35.entry.js → p-d3014190.entry.js} +1 -1
  267. package/dist/ionic/{p-652318c3.entry.js → p-dbbe606a.entry.js} +1 -1
  268. package/dist/ionic/{p-0852af24.entry.js → p-ea509e3c.entry.js} +1 -1
  269. package/dist/ionic/{p-fc14f34a.entry.js → p-ec654c42.entry.js} +1 -1
  270. package/dist/ionic/{p-fb0271ae.entry.js → p-f8f22cc0.entry.js} +1 -1
  271. package/dist/types/components/datetime/datetime.d.ts +8 -9
  272. package/hydrate/index.js +213 -214
  273. package/hydrate/index.mjs +213 -214
  274. package/package.json +5 -5
  275. package/dist/ionic/p-0ca0fe9c.entry.js +0 -4
  276. package/dist/ionic/p-43c5249f.entry.js +0 -4
  277. package/dist/ionic/p-7f98e710.entry.js +0 -4
  278. package/dist/ionic/p-ce8dad03.entry.js +0 -4
  279. package/dist/ionic/p-ebcfc1d2.entry.js +0 -4
@@ -385,14 +385,14 @@ const Header = /*@__PURE__*/ proxyCustomElement(class Header extends HTMLElement
385
385
  const isCondensed = collapse === 'condense';
386
386
  // banner role must be at top level, so remove role if inside a menu
387
387
  const roleType = getRoleType(hostContext('ion-menu', this.el), isCondensed, mode);
388
- return (h(Host, Object.assign({ key: '42fb0d8aa663bef7b1a21e026ea45e932b965794', role: roleType, class: {
388
+ return (h(Host, Object.assign({ key: '863c4568cd7b8c0ec55109f193bbbaed68a1346e', role: roleType, class: {
389
389
  [mode]: true,
390
390
  // Used internally for styling
391
391
  [`header-${mode}`]: true,
392
392
  [`header-translucent`]: this.translucent,
393
393
  [`header-collapse-${collapse}`]: true,
394
394
  [`header-translucent-${mode}`]: this.translucent,
395
- } }, inheritedAttributes), mode === 'ios' && translucent && h("div", { key: '31fac480feb43bf4adcc97529d88f1fa8034ce98', class: "header-background" }), h("slot", { key: '8fb8d10312836c3de63ba3fccf9ec1a08ca5b9d1' })));
395
+ } }, inheritedAttributes), mode === 'ios' && translucent && h("div", { key: '25c3bdce328b0b35607d154c8b8374679313d881', class: "header-background" }), h("slot", { key: 'b44fab0a9be7920b9650da26117c783e751e1702' })));
396
396
  }
397
397
  get el() { return this; }
398
398
  static get style() { return {
@@ -341,11 +341,11 @@ const DatetimeButton = /*@__PURE__*/ proxyCustomElement(class DatetimeButton ext
341
341
  render() {
342
342
  const { color, dateText, timeText, selectedButton, datetimeActive, disabled } = this;
343
343
  const mode = getIonMode(this);
344
- return (h(Host, { key: '0cad13e702cd8f76b10364d44993495d1aac40fb', class: createColorClasses(color, {
344
+ return (h(Host, { key: '11d037e6ab061e5116842970760b04850b42f2c7', class: createColorClasses(color, {
345
345
  [mode]: true,
346
346
  [`${selectedButton}-active`]: datetimeActive,
347
347
  ['datetime-button-disabled']: disabled,
348
- }) }, dateText && (h("button", { key: '03ceb62c8dd7b4a97eca211d8ad73a4cfa8c2a1a', class: "ion-activatable", id: "date-button", "aria-expanded": datetimeActive ? 'true' : 'false', onClick: this.handleDateClick, disabled: disabled, part: "native", ref: (el) => (this.dateTargetEl = el) }, h("slot", { key: '251c03d7dc30180caf5f2728818ab445b7b99b52', name: "date-target" }, dateText), mode === 'md' && h("ion-ripple-effect", { key: 'ce5fa19ed565fd788c6096aa55d8102ac36a1307' }))), timeText && (h("button", { key: '4833eb0e7b23f7c4faf03c998a58cc80cc714887', class: "ion-activatable", id: "time-button", "aria-expanded": datetimeActive ? 'true' : 'false', onClick: this.handleTimeClick, disabled: disabled, part: "native", ref: (el) => (this.timeTargetEl = el) }, h("slot", { key: '60966f907d725aea78af66dbb57f1d6f212a1ef5', name: "time-target" }, timeText), mode === 'md' && h("ion-ripple-effect", { key: 'c26bd731e8991e2b2b7984a2bd859f36337a038b' })))));
348
+ }) }, dateText && (h("button", { key: '08ecb62da0fcbf7466a1f2403276712a3ff17fbc', class: "ion-activatable", id: "date-button", "aria-expanded": datetimeActive ? 'true' : 'false', onClick: this.handleDateClick, disabled: disabled, part: "native", ref: (el) => (this.dateTargetEl = el) }, h("slot", { key: '1c04853d4d23c0f1a594602bde44511c98355644', name: "date-target" }, dateText), mode === 'md' && h("ion-ripple-effect", { key: '5fc566cd4bc885bcf983ce99e3dc65d7f485bf9b' }))), timeText && (h("button", { key: 'c9c5c34ac338badf8659da22bea5829d62c51169', class: "ion-activatable", id: "time-button", "aria-expanded": datetimeActive ? 'true' : 'false', onClick: this.handleTimeClick, disabled: disabled, part: "native", ref: (el) => (this.timeTargetEl = el) }, h("slot", { key: '147a9d2069dbf737f6fc64787823d6d5af5aa653', name: "time-target" }, timeText), mode === 'md' && h("ion-ripple-effect", { key: '70a5e25b75ed90ac6bba003468435f67aa9d8f0a' })))));
349
349
  }
350
350
  get el() { return this; }
351
351
  static get style() { return {
@@ -790,6 +790,28 @@ const Datetime = /*@__PURE__*/ proxyCustomElement(class Datetime extends HTMLEle
790
790
  destroyKeyboardMO();
791
791
  }
792
792
  };
793
+ /**
794
+ * TODO(FW-6931): Remove this fallback upon solving the root cause
795
+ * Fallback to ensure the datetime becomes ready even if
796
+ * IntersectionObserver never reports it as intersecting.
797
+ *
798
+ * This is primarily used in environments where the observer
799
+ * might not fire as expected, such as when running under
800
+ * synthetic tests that stub IntersectionObserver.
801
+ */
802
+ this.ensureReadyIfVisible = () => {
803
+ if (this.el.classList.contains('datetime-ready')) {
804
+ return;
805
+ }
806
+ const rect = this.el.getBoundingClientRect();
807
+ if (rect.width === 0 || rect.height === 0) {
808
+ return;
809
+ }
810
+ this.initializeListeners();
811
+ writeTask(() => {
812
+ this.el.classList.add('datetime-ready');
813
+ });
814
+ };
793
815
  this.processValue = (value) => {
794
816
  const hasValue = value !== null && value !== undefined && value !== '' && (!Array.isArray(value) || value.length > 0);
795
817
  const valueToProcess = hasValue ? parseDate(value) : this.defaultParts;
@@ -1067,107 +1089,84 @@ const Datetime = /*@__PURE__*/ proxyCustomElement(class Datetime extends HTMLEle
1067
1089
  this.clearFocusVisible();
1068
1090
  this.clearFocusVisible = undefined;
1069
1091
  }
1070
- if (this.resizeObserver) {
1071
- this.resizeObserver.disconnect();
1072
- this.resizeObserver = undefined;
1073
- }
1074
- if (this.destroyOverlayListeners) {
1075
- this.destroyOverlayListeners();
1076
- this.destroyOverlayListeners = undefined;
1077
- }
1078
1092
  }
1079
1093
  initializeListeners() {
1080
1094
  this.initializeCalendarListener();
1081
1095
  this.initializeKeyboardListeners();
1082
1096
  }
1083
- /**
1084
- * Sets up visibility detection for the datetime component.
1085
- *
1086
- * Uses multiple strategies to reliably detect when the datetime becomes
1087
- * visible, which is necessary for proper initialization of scrollable areas:
1088
- * 1. ResizeObserver - detects dimension changes
1089
- * 2. Overlay event listeners - for datetime inside modals/popovers
1090
- * 3. Polling fallback - for browsers where observers are unreliable (WebKit)
1091
- */
1092
- initializeVisibilityObserver() {
1093
- const { el } = this;
1094
- const markReady = () => {
1095
- if (el.classList.contains('datetime-ready')) {
1097
+ componentDidLoad() {
1098
+ const { el, intersectionTrackerRef } = this;
1099
+ /**
1100
+ * If a scrollable element is hidden using `display: none`,
1101
+ * it will not have a scroll height meaning we cannot scroll elements
1102
+ * into view. As a result, we will need to wait for the datetime to become
1103
+ * visible if used inside of a modal or a popover otherwise the scrollable
1104
+ * areas will not have the correct values snapped into place.
1105
+ */
1106
+ const visibleCallback = (entries) => {
1107
+ const ev = entries[0];
1108
+ if (!ev.isIntersecting) {
1096
1109
  return;
1097
1110
  }
1098
1111
  this.initializeListeners();
1112
+ /**
1113
+ * TODO FW-2793: Datetime needs a frame to ensure that it
1114
+ * can properly scroll contents into view. As a result
1115
+ * we hide the scrollable content until after that frame
1116
+ * so users do not see the content quickly shifting. The downside
1117
+ * is that the content will pop into view a frame after. Maybe there
1118
+ * is a better way to handle this?
1119
+ */
1099
1120
  writeTask(() => {
1100
- el.classList.add('datetime-ready');
1101
- });
1102
- };
1103
- const markHidden = () => {
1104
- this.destroyInteractionListeners();
1105
- this.showMonthAndYear = false;
1106
- writeTask(() => {
1107
- el.classList.remove('datetime-ready');
1121
+ this.el.classList.add('datetime-ready');
1108
1122
  });
1109
- startVisibilityPolling();
1110
1123
  };
1124
+ const visibleIO = new IntersectionObserver(visibleCallback, { threshold: 0.01, root: el });
1111
1125
  /**
1112
- * FW-6931: Poll for visibility as a fallback for browsers where
1113
- * ResizeObserver doesn't fire reliably (e.g., WebKit).
1126
+ * Use raf to avoid a race condition between the component loading and
1127
+ * its display animation starting (such as when shown in a modal). This
1128
+ * could cause the datetime to start at a visibility of 0, erroneously
1129
+ * triggering the `hiddenIO` observer below.
1114
1130
  */
1115
- const startVisibilityPolling = () => {
1116
- let pollCount = 0;
1117
- const poll = () => {
1118
- if (el.classList.contains('datetime-ready') || pollCount++ >= 60) {
1119
- return;
1120
- }
1121
- const { width, height } = el.getBoundingClientRect();
1122
- if (width > 0 && height > 0) {
1123
- markReady();
1124
- }
1125
- else {
1126
- raf(poll);
1127
- }
1128
- };
1129
- raf(poll);
1130
- };
1131
+ raf(() => visibleIO === null || visibleIO === void 0 ? void 0 : visibleIO.observe(intersectionTrackerRef));
1131
1132
  /**
1132
- * FW-6931: Listen for overlay present/dismiss events when datetime
1133
- * is inside a modal or popover.
1133
+ * TODO(FW-6931): Remove this fallback upon solving the root cause
1134
+ * Fallback: If IntersectionObserver never reports that the
1135
+ * datetime is visible but the host clearly has layout, ensure
1136
+ * we still initialize listeners and mark the component as ready.
1137
+ *
1138
+ * We schedule this after everything has had a chance to run.
1134
1139
  */
1135
- const parentOverlay = el.closest('ion-modal, ion-popover');
1136
- if (parentOverlay) {
1137
- const handlePresent = () => markReady();
1138
- const handleDismiss = () => markHidden();
1139
- parentOverlay.addEventListener('didPresent', handlePresent);
1140
- parentOverlay.addEventListener('didDismiss', handleDismiss);
1141
- this.destroyOverlayListeners = () => {
1142
- parentOverlay.removeEventListener('didPresent', handlePresent);
1143
- parentOverlay.removeEventListener('didDismiss', handleDismiss);
1144
- };
1145
- }
1146
- if (typeof ResizeObserver !== 'undefined') {
1147
- this.resizeObserver = new ResizeObserver((entries) => {
1148
- const { width, height } = entries[0].contentRect;
1149
- const isVisible = width > 0 && height > 0;
1150
- const isReady = el.classList.contains('datetime-ready');
1151
- if (isVisible && !isReady) {
1152
- markReady();
1153
- }
1154
- else if (!isVisible && isReady) {
1155
- markHidden();
1156
- }
1157
- });
1158
- // Use raf to avoid race condition with modal/popover animations
1159
- raf(() => { var _a; return (_a = this.resizeObserver) === null || _a === void 0 ? void 0 : _a.observe(el); });
1160
- startVisibilityPolling();
1161
- }
1162
- else {
1163
- // Test environment fallback - mark ready immediately
1140
+ setTimeout(() => {
1141
+ this.ensureReadyIfVisible();
1142
+ }, 100);
1143
+ /**
1144
+ * We need to clean up listeners when the datetime is hidden
1145
+ * in a popover/modal so that we can properly scroll containers
1146
+ * back into view if they are re-presented. When the datetime is hidden
1147
+ * the scroll areas have scroll widths/heights of 0px, so any snapping
1148
+ * we did originally has been lost.
1149
+ */
1150
+ const hiddenCallback = (entries) => {
1151
+ const ev = entries[0];
1152
+ if (ev.isIntersecting) {
1153
+ return;
1154
+ }
1155
+ this.destroyInteractionListeners();
1156
+ /**
1157
+ * When datetime is hidden, we need to make sure that
1158
+ * the month/year picker is closed. Otherwise,
1159
+ * it will be open when the datetime re-appears
1160
+ * and the scroll area of the calendar grid will be 0.
1161
+ * As a result, the wrong month will be shown.
1162
+ */
1163
+ this.showMonthAndYear = false;
1164
1164
  writeTask(() => {
1165
- el.classList.add('datetime-ready');
1165
+ this.el.classList.remove('datetime-ready');
1166
1166
  });
1167
- }
1168
- }
1169
- componentDidLoad() {
1170
- this.initializeVisibilityObserver();
1167
+ };
1168
+ const hiddenIO = new IntersectionObserver(hiddenCallback, { threshold: 0, root: el });
1169
+ raf(() => hiddenIO === null || hiddenIO === void 0 ? void 0 : hiddenIO.observe(intersectionTrackerRef));
1171
1170
  /**
1172
1171
  * Datetime uses Ionic components that emit
1173
1172
  * ionFocus and ionBlur. These events are
@@ -1896,7 +1895,7 @@ const Datetime = /*@__PURE__*/ proxyCustomElement(class Datetime extends HTMLEle
1896
1895
  const hasDatePresentation = presentation === 'date' || presentation === 'date-time' || presentation === 'time-date';
1897
1896
  const hasWheelVariant = hasDatePresentation && preferWheel;
1898
1897
  renderHiddenInput(true, el, name, formatValue(value), disabled);
1899
- return (h(Host, { key: '2fb2938db507a134622a3feac44804f11071c589', "aria-disabled": disabled ? 'true' : null, onFocus: this.onFocus, onBlur: this.onBlur, class: Object.assign({}, createColorClasses(color, {
1898
+ return (h(Host, { key: 'efdbc0922670a841bc667ceac392cdc1dedffd01', "aria-disabled": disabled ? 'true' : null, onFocus: this.onFocus, onBlur: this.onBlur, class: Object.assign({}, createColorClasses(color, {
1900
1899
  [mode]: true,
1901
1900
  ['datetime-readonly']: readonly,
1902
1901
  ['datetime-disabled']: disabled,
@@ -1906,7 +1905,7 @@ const Datetime = /*@__PURE__*/ proxyCustomElement(class Datetime extends HTMLEle
1906
1905
  [`datetime-size-${size}`]: true,
1907
1906
  [`datetime-prefer-wheel`]: hasWheelVariant,
1908
1907
  [`datetime-grid`]: isGridStyle,
1909
- })) }, this.renderDatetime(mode)));
1908
+ })) }, h("div", { key: '3f8bb75fcb0baff55182ef3aa1b535eacc58d81f', class: "intersection-tracker", ref: (el) => (this.intersectionTrackerRef = el) }), this.renderDatetime(mode)));
1910
1909
  }
1911
1910
  get el() { return this; }
1912
1911
  static get watchers() { return {
@@ -90,7 +90,7 @@ const FabButton = /*@__PURE__*/ proxyCustomElement(class FabButton extends HTMLE
90
90
  rel: this.rel,
91
91
  target: this.target,
92
92
  };
93
- return (h(Host, { key: 'eb347f7d6749c40637540d84778eb8d1b667a947', onClick: this.onClick, "aria-disabled": disabled ? 'true' : null, class: createColorClasses(color, {
93
+ return (h(Host, { key: '4eee204d20b0e2ffed49a88f6cb3e04b6697965c', onClick: this.onClick, "aria-disabled": disabled ? 'true' : null, class: createColorClasses(color, {
94
94
  [mode]: true,
95
95
  'fab-button-in-list': inList,
96
96
  'fab-button-translucent-in-list': inList && translucent,
@@ -101,7 +101,7 @@ const FabButton = /*@__PURE__*/ proxyCustomElement(class FabButton extends HTMLE
101
101
  'ion-activatable': true,
102
102
  'ion-focusable': true,
103
103
  [`fab-button-${size}`]: size !== undefined,
104
- }) }, h(TagType, Object.assign({ key: '83e853c8815f41543c848eb2e05ec2bb1716110a' }, attrs, { class: "button-native", part: "native", disabled: disabled, onFocus: this.onFocus, onBlur: this.onBlur, onClick: (ev) => openURL(href, ev, this.routerDirection, this.routerAnimation) }, inheritedAttributes), h("ion-icon", { key: '798deede94de658e4345acf7c2aafe2ab2567b0b', "aria-hidden": "true", icon: this.closeIcon, part: "close-icon", class: "close-icon", lazy: false }), h("span", { key: '99252fde6de1aca73fc240a6da7e29acac9acb18', class: "button-inner" }, h("slot", { key: 'dc73e9b41bf1f0e385e5784f975dfb81e37c8dfb' })), mode === 'md' && h("ion-ripple-effect", { key: '8413e162f44a0350f54dff06cff7aad101de3549' }))));
104
+ }) }, h(TagType, Object.assign({ key: '914561622c0c6bd41453e828a7d8a39f924875ac' }, attrs, { class: "button-native", part: "native", disabled: disabled, onFocus: this.onFocus, onBlur: this.onBlur, onClick: (ev) => openURL(href, ev, this.routerDirection, this.routerAnimation) }, inheritedAttributes), h("ion-icon", { key: '2c8090742a64c62a79243667027a195cca9d5912', "aria-hidden": "true", icon: this.closeIcon, part: "close-icon", class: "close-icon", lazy: false }), h("span", { key: 'c3e55291e4c4d306d34a4b95dd2e727e87bdf39c', class: "button-inner" }, h("slot", { key: 'f8e57f71d8f8878d9746cfece82f57f19ef9e988' })), mode === 'md' && h("ion-ripple-effect", { key: 'a5e94fa0bb9836072300617245ed0c1b4887bac6' }))));
105
105
  }
106
106
  get el() { return this; }
107
107
  static get style() { return {
@@ -32,11 +32,11 @@ const FabList = /*@__PURE__*/ proxyCustomElement(class FabList extends HTMLEleme
32
32
  }
33
33
  render() {
34
34
  const mode = getIonMode(this);
35
- return (h(Host, { key: 'fa1d195b9950654ba0e984bf61d981c977d05275', class: {
35
+ return (h(Host, { key: '64b33366447f66c7f979cfac56307fbb1a6fac1c', class: {
36
36
  [mode]: true,
37
37
  'fab-list-active': this.activated,
38
38
  [`fab-list-side-${this.side}`]: true,
39
- } }, h("slot", { key: '2ec738c66c05112e1e2521155d6adfc36d2fd1db' })));
39
+ } }, h("slot", { key: 'd9f474f7f20fd7e813db358fddc720534ca05bb6' })));
40
40
  }
41
41
  get el() { return this; }
42
42
  static get watchers() { return {
@@ -62,12 +62,12 @@ const Fab = /*@__PURE__*/ proxyCustomElement(class Fab extends HTMLElement {
62
62
  render() {
63
63
  const { horizontal, vertical, edge } = this;
64
64
  const mode = getIonMode(this);
65
- return (h(Host, { key: 'cb44cf6486b0a6439b99da87c065b0b52e2514f4', class: {
65
+ return (h(Host, { key: '8a310806d0e748d7ebb0ed3d9a2652038e0f2960', class: {
66
66
  [mode]: true,
67
67
  [`fab-horizontal-${horizontal}`]: horizontal !== undefined,
68
68
  [`fab-vertical-${vertical}`]: vertical !== undefined,
69
69
  'fab-edge': edge,
70
- } }, h("slot", { key: '1ed484c7ecb10cd81fbca9a4f5c4049bf82f9f8a' })));
70
+ } }, h("slot", { key: '9394ef6d6e5b0410fa6ba212171f687fb178ce2d' })));
71
71
  }
72
72
  get el() { return this; }
73
73
  static get watchers() { return {
@@ -122,7 +122,7 @@ const Footer = /*@__PURE__*/ proxyCustomElement(class Footer extends HTMLElement
122
122
  const mode = getIonMode(this);
123
123
  const tabs = this.el.closest('ion-tabs');
124
124
  const tabBar = tabs === null || tabs === void 0 ? void 0 : tabs.querySelector(':scope > ion-tab-bar');
125
- return (h(Host, { key: '5da19dc38ba73e1ddfd1bef3ebd485105d77c751', role: "contentinfo", class: {
125
+ return (h(Host, { key: 'ddc228f1a1e7fa4f707dccf74db2490ca3241137', role: "contentinfo", class: {
126
126
  [mode]: true,
127
127
  // Used internally for styling
128
128
  [`footer-${mode}`]: true,
@@ -130,7 +130,7 @@ const Footer = /*@__PURE__*/ proxyCustomElement(class Footer extends HTMLElement
130
130
  [`footer-translucent-${mode}`]: translucent,
131
131
  ['footer-toolbar-padding']: !this.keyboardVisible && (!tabBar || tabBar.slot !== 'bottom'),
132
132
  [`footer-collapse-${collapse}`]: collapse !== undefined,
133
- } }, mode === 'ios' && translucent && h("div", { key: 'fafad08090a33d8c4e8a5b63d61929dcb89aab47', class: "footer-background" }), h("slot", { key: 'e0a443d346afa55e4317c0bc1263fdbe3c619559' })));
133
+ } }, mode === 'ios' && translucent && h("div", { key: 'e16ed4963ff94e06de77eb8038201820af73937c', class: "footer-background" }), h("slot", { key: 'f186934febf85d37133d9351a96c1a64b0a4b203' })));
134
134
  }
135
135
  get el() { return this; }
136
136
  static get style() { return {
@@ -20,10 +20,10 @@ const Grid = /*@__PURE__*/ proxyCustomElement(class Grid extends HTMLElement {
20
20
  }
21
21
  render() {
22
22
  const mode = getIonMode(this);
23
- return (h(Host, { key: '930ce78b02f8360fbca08a35d364d2c09128c6c8', class: {
23
+ return (h(Host, { key: '617127ecfabf9bf615bef1dda1be3fed5a065949', class: {
24
24
  [mode]: true,
25
25
  'grid-fixed': this.fixed,
26
- } }, h("slot", { key: 'c47bf7ef2197f5ebc42d3e2c55044276fb0db393' })));
26
+ } }, h("slot", { key: 'c781fff853b093d8f44bdb7943bbc4f17c903803' })));
27
27
  }
28
28
  static get style() { return gridCss; }
29
29
  }, [257, "ion-grid", {
@@ -75,7 +75,7 @@ const Img = /*@__PURE__*/ proxyCustomElement(class Img extends HTMLElement {
75
75
  render() {
76
76
  const { loadSrc, alt, onLoad, loadError, inheritedAttributes } = this;
77
77
  const { draggable } = inheritedAttributes;
78
- return (h(Host, { key: '14d24d65ec8e5522192ca58035264971b1ab883b', class: getIonMode(this) }, h("img", { key: '345ba155a5fdce5e66c397a599b7333d37d9cb1d', decoding: "async", src: loadSrc, alt: alt, onLoad: onLoad, onError: loadError, part: "image", draggable: isDraggable(draggable) })));
78
+ return (h(Host, { key: 'da600442894427dee1974a28e545613afac69fca', class: getIonMode(this) }, h("img", { key: '16df0c7069af86c0fa7ce5af598bc0f63b4eb71a', decoding: "async", src: loadSrc, alt: alt, onLoad: onLoad, onError: loadError, part: "image", draggable: isDraggable(draggable) })));
79
79
  }
80
80
  get el() { return this; }
81
81
  static get watchers() { return {
@@ -34,11 +34,11 @@ const InfiniteScrollContent = /*@__PURE__*/ proxyCustomElement(class InfiniteScr
34
34
  }
35
35
  render() {
36
36
  const mode = getIonMode(this);
37
- return (h(Host, { key: '060278bf9cb0321e182352f9613be4ebbb028259', class: {
37
+ return (h(Host, { key: '7c16060dcfe2a0b0fb3e2f8f4c449589a76f1baa', class: {
38
38
  [mode]: true,
39
39
  // Used internally for styling
40
40
  [`infinite-scroll-content-${mode}`]: true,
41
- } }, h("div", { key: '07d3cada920145f979ad315bd187fb878e0c3da3', class: "infinite-loading" }, this.loadingSpinner && (h("div", { key: '6254f175d7543d09f3dd47cd0589a2809182cd8c', class: "infinite-loading-spinner" }, h("ion-spinner", { key: 'a6a816d1c65b60b786333b209b63492aa716a283', name: this.loadingSpinner }))), this.loadingText !== undefined && this.renderLoadingText())));
41
+ } }, h("div", { key: 'a94f4d8746e053dc718f97520bd7e48cb316443a', class: "infinite-loading" }, this.loadingSpinner && (h("div", { key: '10143d5d2a50a2a2bc5de1cee8e7ab51263bcf23', class: "infinite-loading-spinner" }, h("ion-spinner", { key: '8846e88191690d9c61a0b462889ed56fbfed8b0d', name: this.loadingSpinner }))), this.loadingText !== undefined && this.renderLoadingText())));
42
42
  }
43
43
  static get style() { return {
44
44
  ios: infiniteScrollContentIosCss,
@@ -197,7 +197,7 @@ const InfiniteScroll = /*@__PURE__*/ proxyCustomElement(class InfiniteScroll ext
197
197
  render() {
198
198
  const mode = getIonMode(this);
199
199
  const disabled = this.disabled;
200
- return (h(Host, { key: '1444429a86950c449953cbf578436cc8cabf40ec', class: {
200
+ return (h(Host, { key: 'e844956795f69be33396ce4480aa7a54ad01b28c', class: {
201
201
  [mode]: true,
202
202
  'infinite-scroll-loading': this.isLoading,
203
203
  'infinite-scroll-enabled': !disabled,
@@ -619,7 +619,7 @@ const InputOTP = /*@__PURE__*/ proxyCustomElement(class InputOTP extends HTMLEle
619
619
  const tabbableIndex = this.getTabbableIndex();
620
620
  const pattern = this.getPattern();
621
621
  const hasDescription = ((_b = (_a = el.querySelector('.input-otp-description')) === null || _a === void 0 ? void 0 : _a.textContent) === null || _b === void 0 ? void 0 : _b.trim()) !== '';
622
- return (h(Host, { key: '76126aeef5a333d3ce86149d1ce21da6c7834898', class: createColorClasses(color, {
622
+ return (h(Host, { key: 'f15a29fb17b681ef55885ca36d3d5f899cbaca83', class: createColorClasses(color, {
623
623
  [mode]: true,
624
624
  'has-focus': hasFocus,
625
625
  [`input-otp-size-${size}`]: true,
@@ -627,10 +627,10 @@ const InputOTP = /*@__PURE__*/ proxyCustomElement(class InputOTP extends HTMLEle
627
627
  [`input-otp-fill-${fill}`]: true,
628
628
  'input-otp-disabled': disabled,
629
629
  'input-otp-readonly': readonly,
630
- }) }, h("div", Object.assign({ key: 'e9aa792de40a0e49075e8881c6a11245807e1051', role: "group", "aria-label": "One-time password input", class: "input-otp-group" }, inheritedAttributes), Array.from({ length }).map((_, index) => (h(Fragment, null, h("div", { class: "native-wrapper" }, h("input", { class: "native-input", id: `${inputId}-${index}`, "aria-label": `Input ${index + 1} of ${length}`, type: "text", autoCapitalize: autocapitalize, inputmode: inputmode, pattern: pattern, disabled: disabled, readOnly: readonly, tabIndex: index === tabbableIndex ? 0 : -1, value: inputValues[index] || '', autocomplete: "one-time-code", ref: (el) => (inputRefs[index] = el), onInput: this.onInput(index), onBlur: this.onBlur, onFocus: this.onFocus(index), onKeyDown: this.onKeyDown(index), onPaste: this.onPaste })), this.showSeparator(index) && h("div", { class: "input-otp-separator" }))))), h("div", { key: '262ead41c9401a2144e9d7b7bd85311e366d09b2', class: {
630
+ }) }, h("div", Object.assign({ key: 'd7e1d4edd8aafcf2ed4313301287282e90fc7e82', role: "group", "aria-label": "One-time password input", class: "input-otp-group" }, inheritedAttributes), Array.from({ length }).map((_, index) => (h(Fragment, null, h("div", { class: "native-wrapper" }, h("input", { class: "native-input", id: `${inputId}-${index}`, "aria-label": `Input ${index + 1} of ${length}`, type: "text", autoCapitalize: autocapitalize, inputmode: inputmode, pattern: pattern, disabled: disabled, readOnly: readonly, tabIndex: index === tabbableIndex ? 0 : -1, value: inputValues[index] || '', autocomplete: "one-time-code", ref: (el) => (inputRefs[index] = el), onInput: this.onInput(index), onBlur: this.onBlur, onFocus: this.onFocus(index), onKeyDown: this.onKeyDown(index), onPaste: this.onPaste })), this.showSeparator(index) && h("div", { class: "input-otp-separator" }))))), h("div", { key: '3724a3159d02860971879a906092f9965f5a7c47', class: {
631
631
  'input-otp-description': true,
632
632
  'input-otp-description-hidden': !hasDescription,
633
- } }, h("slot", { key: '63a4b07ef5e3174cc75cdaed59305cdaebcfd1ad' }))));
633
+ } }, h("slot", { key: '11baa2624926a08274508afe0833d9237a8dc35c' }))));
634
634
  }
635
635
  get el() { return this; }
636
636
  static get watchers() { return {
@@ -70,16 +70,16 @@ const InputPasswordToggle = /*@__PURE__*/ proxyCustomElement(class InputPassword
70
70
  const showPasswordIcon = (_a = this.showIcon) !== null && _a !== void 0 ? _a : eye;
71
71
  const hidePasswordIcon = (_b = this.hideIcon) !== null && _b !== void 0 ? _b : eyeOff;
72
72
  const isPasswordVisible = type === 'text';
73
- return (h(Host, { key: '07e26969f77ad361e358efe33a3b3728d9669017', class: createColorClasses(color, {
73
+ return (h(Host, { key: '91bc55664d496fe457518bd112865dd7811d0c17', class: createColorClasses(color, {
74
74
  [mode]: true,
75
- }) }, h("ion-button", { key: '9f21eaea5756844d37930d52d8d3013c9d476b9f', mode: mode, color: color, fill: "clear", shape: "round", "aria-checked": isPasswordVisible ? 'true' : 'false', "aria-label": isPasswordVisible ? 'Hide password' : 'Show password', role: "switch", type: "button", onPointerDown: (ev) => {
75
+ }) }, h("ion-button", { key: 'f3e436422110c9cb4d5c0b83500255b24ab4cdef', mode: mode, color: color, fill: "clear", shape: "round", "aria-checked": isPasswordVisible ? 'true' : 'false', "aria-label": isPasswordVisible ? 'Hide password' : 'Show password', role: "switch", type: "button", onPointerDown: (ev) => {
76
76
  /**
77
77
  * This prevents mobile browsers from
78
78
  * blurring the input when the password toggle
79
79
  * button is activated.
80
80
  */
81
81
  ev.preventDefault();
82
- }, onClick: this.togglePasswordVisibility }, h("ion-icon", { key: 'd7b1f55b77b71bf2c147f3bde83de1e9083f70ba', slot: "icon-only", "aria-hidden": "true", icon: isPasswordVisible ? hidePasswordIcon : showPasswordIcon }))));
82
+ }, onClick: this.togglePasswordVisibility }, h("ion-icon", { key: '5c8b121153f148f92aa7cba0447673a4f6f3ad1e', slot: "icon-only", "aria-hidden": "true", icon: isPasswordVisible ? hidePasswordIcon : showPasswordIcon }))));
83
83
  }
84
84
  get el() { return this; }
85
85
  static get watchers() { return {
@@ -518,7 +518,7 @@ const Input = /*@__PURE__*/ proxyCustomElement(class Input extends HTMLElement {
518
518
  * TODO(FW-5592): Remove hasStartEndSlots condition
519
519
  */
520
520
  const labelShouldFloat = labelPlacement === 'stacked' || (labelPlacement === 'floating' && (hasValue || hasFocus || hasStartEndSlots));
521
- return (h(Host, { key: '81b44a68138ec7a9f1d4a27549d0c32283dea50d', class: createColorClasses(this.color, {
521
+ return (h(Host, { key: '97b5308021064d9e7434ef2d3d96f27045c1b0c4', class: createColorClasses(this.color, {
522
522
  [mode]: true,
523
523
  'has-value': hasValue,
524
524
  'has-focus': hasFocus,
@@ -529,14 +529,14 @@ const Input = /*@__PURE__*/ proxyCustomElement(class Input extends HTMLElement {
529
529
  'in-item': inItem,
530
530
  'in-item-color': hostContext('ion-item.ion-color', this.el),
531
531
  'input-disabled': disabled,
532
- }) }, h("label", { key: '049adad1bdcb64ee416e420b523e222cb9c0d3df', class: "input-wrapper", htmlFor: inputId, onClick: this.onLabelClick }, this.renderLabelContainer(), h("div", { key: '00414cbb2adcc565d52dd5ba3af0280df3ba2c9c', class: "native-wrapper", onClick: this.onLabelClick }, h("slot", { key: 'a09366b057322372e48daeb5a70619e5603b6972', name: "start" }), h("input", Object.assign({ key: '8bd259fca7c30885df0bef6fa37a3c6516b7533e', 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.isInvalid ? 'true' : undefined }, this.inheritedAttributes)), this.clearInput && !readonly && !disabled && (h("button", { key: '9655b387bf51a371877ab40879c9cdc953a8019f', "aria-label": "reset", type: "button", class: "input-clear-icon", onPointerDown: (ev) => {
532
+ }) }, h("label", { key: '353f68726ce180299bd9adc81e5ff7d26a48f54f', class: "input-wrapper", htmlFor: inputId, onClick: this.onLabelClick }, this.renderLabelContainer(), h("div", { key: '2034b4bad04fc157f3298a1805819216b6f439d0', class: "native-wrapper", onClick: this.onLabelClick }, h("slot", { key: '96bb5e30176b2bd76dfb75bfbf6c1c3d4403f4bb', name: "start" }), h("input", Object.assign({ key: '1a1d75b0e414a95c89d5a760757c33548d234aca', 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.isInvalid ? 'true' : undefined }, this.inheritedAttributes)), this.clearInput && !readonly && !disabled && (h("button", { key: '95f3df17b7691d9a2e7dcd4a51f16a94aa3ca36f', "aria-label": "reset", type: "button", class: "input-clear-icon", onPointerDown: (ev) => {
533
533
  /**
534
534
  * This prevents mobile browsers from
535
535
  * blurring the input when the clear
536
536
  * button is activated.
537
537
  */
538
538
  ev.preventDefault();
539
- }, onClick: this.clearTextInput }, h("ion-icon", { key: '834670e725e0140069eead8ff6c7a63d87f0aac0', "aria-hidden": "true", icon: clearIconData }))), h("slot", { key: 'e41136ffef6bd8f8fb4c8480bf6dfaa3b61dc286', name: "end" })), shouldRenderHighlight && h("div", { key: '517a556a9748600af6c258c9f668e7b10a798427', class: "input-highlight" })), this.renderBottomContent()));
539
+ }, onClick: this.clearTextInput }, h("ion-icon", { key: '16b0af75eed50c8115fb5597f73b5fbf71c2530e', "aria-hidden": "true", icon: clearIconData }))), h("slot", { key: 'c48da0f8ddb3764ac43efa705bb4a6bb2d9cc2fd', name: "end" })), shouldRenderHighlight && h("div", { key: 'f15238481fc20de56ca7ecb6e350b3c024cc755e', class: "input-highlight" })), this.renderBottomContent()));
540
540
  }
541
541
  get el() { return this; }
542
542
  static get watchers() { return {
@@ -27,11 +27,11 @@ const ItemDivider = /*@__PURE__*/ proxyCustomElement(class ItemDivider extends H
27
27
  }
28
28
  render() {
29
29
  const mode = getIonMode(this);
30
- return (h(Host, { key: 'ee8b2c8d5e415c0d8badf84fa7670932da4e809e', class: createColorClasses(this.color, {
30
+ return (h(Host, { key: '1523095ce4af3f2611512ff0948ead659959ee4a', class: createColorClasses(this.color, {
31
31
  [mode]: true,
32
32
  'item-divider-sticky': this.sticky,
33
33
  item: true,
34
- }) }, h("slot", { key: 'a1b7bbb1a008b0a56887f130d166931033801746', name: "start" }), h("div", { key: '9d572da46ab616bdf881098e96aa6796a249507f', class: "item-divider-inner" }, h("div", { key: 'a57a2c17093b74b9e4f8fd2778230a440b293aa1', class: "item-divider-wrapper" }, h("slot", { key: 'ef15ebf58f3acd4b4d1b7c51144e26c3759dba49' })), h("slot", { key: '1787c2400534301fe72b8ec213d0ce1e8f75b65a', name: "end" }))));
34
+ }) }, h("slot", { key: '39105d888e115416c3a3fe588da44b4c61f4e5fe', name: "start" }), h("div", { key: '67e16f1056bd39187f3629c1bb383b7abbda829b', class: "item-divider-inner" }, h("div", { key: 'b3a218fdcc7b9aeab6e0155340152d39fa0b6329', class: "item-divider-wrapper" }, h("slot", { key: '69d8587533b387869d34b075d02f61396858fc90' })), h("slot", { key: 'b91c654699b3b26d0012ea0c719c4a07d1fcfbaa', name: "end" }))));
35
35
  }
36
36
  get el() { return this; }
37
37
  static get style() { return {
@@ -17,7 +17,7 @@ const ItemGroup = /*@__PURE__*/ proxyCustomElement(class ItemGroup extends HTMLE
17
17
  }
18
18
  render() {
19
19
  const mode = getIonMode(this);
20
- return (h(Host, { key: 'f1743af1d075682f63fae3802c5c5bf050507563', role: "group", class: {
20
+ return (h(Host, { key: 'e49dc8f99247d2431d7c6db01b6e021a0f5b1c37', role: "group", class: {
21
21
  [mode]: true,
22
22
  // Used internally for styling
23
23
  [`item-group-${mode}`]: true,
@@ -47,12 +47,12 @@ const ItemOption = /*@__PURE__*/ proxyCustomElement(class ItemOption extends HTM
47
47
  href: this.href,
48
48
  target: this.target,
49
49
  };
50
- return (h(Host, { key: '058310ac361612c16f2ef70c74279ba7c24128c5', onClick: this.onClick, class: createColorClasses(this.color, {
50
+ return (h(Host, { key: '189a0040b97163b2336bf216baa71d584c5923a8', onClick: this.onClick, class: 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
- }) }, h(TagType, Object.assign({ key: '045052656ab652bec065d421950fe9ea00dc1141' }, attrs, { class: "button-native", part: "native", disabled: disabled }), h("span", { key: '988b9166c0dda3c822a99ceace4c105339b2465b', class: "button-inner" }, h("slot", { key: '8050b870ada6b09283f8acbcbb6d2bd1c76508b3', name: "top" }), h("div", { key: 'a206e7b09e660c878ce3c5b61d018e8cdd89dc55', class: "horizontal-wrapper" }, h("slot", { key: '394e5e4ce14cd19b5d5eafca29bb9f971f5f0741', name: "start" }), h("slot", { key: 'dd4c3a1bee7622df40a3d8f2a298045b772f1600', name: "icon-only" }), h("slot", { key: '318f3ec97b722c5e7df1a78b1e0439f919d0aacc' }), h("slot", { key: 'fff6a9a602cf7bd698528982f91742a2d36ea245', name: "end" })), h("slot", { key: '26b4bb155701d8080b486dbad7bb9a6d2e35182c', name: "bottom" })), mode === 'md' && h("ion-ripple-effect", { key: '152b74643bf0f5725c39bfdbb940f0f32ec83d58' }))));
55
+ }) }, h(TagType, Object.assign({ key: '5a7140eb99da5ec82fe2ea3ea134513130763399' }, attrs, { class: "button-native", part: "native", disabled: disabled }), h("span", { key: '9b8577e612706b43e575c9a20f2f9d35c0d1bcb1', class: "button-inner" }, h("slot", { key: '9acb82f04e4822bfaa363cc2c4d29d5c0fec0ad6', name: "top" }), h("div", { key: '66f5fb4fdd0c39f205574c602c793dcf109c7a17', class: "horizontal-wrapper" }, h("slot", { key: '3761a32bca7c6c41b7eb394045497cfde181a62a', name: "start" }), h("slot", { key: 'a96a568955cf6962883dc6771726d3d07462da00', name: "icon-only" }), h("slot", { key: 'af5dfe5eb41456b9359bafe3615b576617ed7b57' }), h("slot", { key: '00426958066ab7b949ff966fabad5cf8a0b54079', name: "end" })), h("slot", { key: 'ae66c8bd536a9f27865f49240980d7b4b831b229', name: "bottom" })), mode === 'md' && h("ion-ripple-effect", { key: '30df6c935ef8a3f28a6bc1f3bb162ca4f80aaf26' }))));
56
56
  }
57
57
  get el() { return this; }
58
58
  static get style() { return {
@@ -31,7 +31,7 @@ const ItemOptions = /*@__PURE__*/ proxyCustomElement(class ItemOptions extends H
31
31
  render() {
32
32
  const mode = getIonMode(this);
33
33
  const isEnd = isEndSide(this.side);
34
- return (h(Host, { key: '7b4b93984182222c64c7a2a22a18e52ac19e3049', class: {
34
+ return (h(Host, { key: '05a22a505e043c2715e3805e5e26ab4668940af0', class: {
35
35
  [mode]: true,
36
36
  // Used internally for styling
37
37
  [`item-options-${mode}`]: true,
@@ -399,7 +399,7 @@ const ItemSliding = /*@__PURE__*/ proxyCustomElement(class ItemSliding extends H
399
399
  }
400
400
  render() {
401
401
  const mode = getIonMode(this);
402
- return (h(Host, { key: '8fd81d74701402294a48b79c56d6eceadafd4881', class: {
402
+ return (h(Host, { key: 'd812322c9fb5da4ee16e99dc38bfb24cb4590d03', class: {
403
403
  [mode]: true,
404
404
  'item-sliding-active-slide': this.state !== 2 /* SlidingState.Disabled */,
405
405
  'item-sliding-active-options-end': (this.state & 8 /* SlidingState.End */) !== 0,
@@ -278,9 +278,9 @@ const Loading = /*@__PURE__*/ proxyCustomElement(class Loading extends HTMLEleme
278
278
  * Otherwise, don't set aria-labelledby.
279
279
  */
280
280
  const ariaLabelledBy = message !== undefined ? msgId : null;
281
- return (h(Host, Object.assign({ key: 'f86ddbc600cb5c396b7de38fb5f49625388c3c3f', role: "dialog", "aria-modal": "true", "aria-labelledby": ariaLabelledBy, tabindex: "-1" }, htmlAttributes, { style: {
281
+ return (h(Host, Object.assign({ key: '4497183ce220242abe19ae15f328f9a92ccafbbc', 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({}, getClassMap(this.cssClass)), { [mode]: true, 'overlay-hidden': true, 'loading-translucent': this.translucent }) }), h("ion-backdrop", { key: 'b53727aaddc37ef3c685fcc150c6d5193290a847', visible: this.showBackdrop, tappable: this.backdropDismiss }), h("div", { key: '4c61bede8e0a4e47daa6f1f9d0f364ef6aec0bc3', tabindex: "0", "aria-hidden": "true" }), h("div", { key: '84e51ceb07118f1eaeb757df28801c255496931b', class: "loading-wrapper ion-overlay-wrapper" }, spinner && (h("div", { key: 'fc97f1912e0fc558b7c309a5bc084415f5f620b2', class: "loading-spinner" }, h("ion-spinner", { key: '6e186d856cd3f10f22c3e317ef00f31b4216459c', name: spinner, "aria-hidden": "true" }))), message !== undefined && this.renderLoadingMessage(msgId)), h("div", { key: 'dcbe9d9a619daa1c08174e73827bdabeb59dde92', tabindex: "0", "aria-hidden": "true" })));
283
+ }, onIonBackdropTap: this.onBackdropTap, class: Object.assign(Object.assign({}, getClassMap(this.cssClass)), { [mode]: true, 'overlay-hidden': true, 'loading-translucent': this.translucent }) }), h("ion-backdrop", { key: '231dec84e424a2dc358ce95b84d6035cf43e4dea', visible: this.showBackdrop, tappable: this.backdropDismiss }), h("div", { key: 'c9af29b6e6bb49a217396a5c874bbfb8835a926c', tabindex: "0", "aria-hidden": "true" }), h("div", { key: 'a8659863743cdeccbe1ba810eaabfd3ebfcb86f3', class: "loading-wrapper ion-overlay-wrapper" }, spinner && (h("div", { key: '3b346f39bc71691bd8686556a1e142198a7b12fa', class: "loading-spinner" }, h("ion-spinner", { key: '8dc2bf1556e5138e262827f1516c59ecd09f3520', name: spinner, "aria-hidden": "true" }))), message !== undefined && this.renderLoadingMessage(msgId)), h("div", { key: '054164c0dbae9a0e0973dd3c8e28f5b771820310', tabindex: "0", "aria-hidden": "true" })));
284
284
  }
285
285
  get el() { return this; }
286
286
  static get watchers() { return {
@@ -59,7 +59,7 @@ const MenuButton = /*@__PURE__*/ proxyCustomElement(class MenuButton extends HTM
59
59
  type: this.type,
60
60
  };
61
61
  const ariaLabel = inheritedAttributes['aria-label'] || 'menu';
62
- return (h(Host, { key: 'dcade732e366f0687d92cb9ce4065b78b0b41d24', onClick: this.onClick, "aria-disabled": disabled ? 'true' : null, "aria-hidden": hidden ? 'true' : null, class: createColorClasses(color, {
62
+ return (h(Host, { key: '9f0f0e50d39a6872508220c58e64bb2092a0d7ef', onClick: this.onClick, "aria-disabled": disabled ? 'true' : null, "aria-hidden": hidden ? 'true' : null, class: createColorClasses(color, {
63
63
  [mode]: true,
64
64
  button: true, // ion-buttons target .button
65
65
  'menu-button-hidden': hidden,
@@ -68,7 +68,7 @@ const MenuButton = /*@__PURE__*/ proxyCustomElement(class MenuButton extends HTM
68
68
  'in-toolbar-color': hostContext('ion-toolbar[color]', this.el),
69
69
  'ion-activatable': true,
70
70
  'ion-focusable': true,
71
- }) }, h("button", Object.assign({ key: '7c4a449e239679376f38471d95fd602f9caec5f6' }, attrs, { disabled: disabled, class: "button-native", part: "native", "aria-label": ariaLabel }), h("span", { key: '8bb5bf453280a66109198c970b678ad800c7a8cf', class: "button-inner" }, h("slot", { key: '7f78b1e7a0695f2bd600d13ca81f50dd8b965726' }, h("ion-icon", { key: '9f67f5bb06b1f03a6e5df9ecbe23ebf69fb40756', part: "icon", icon: menuIcon, mode: mode, lazy: false, "aria-hidden": "true" }))), mode === 'md' && h("ion-ripple-effect", { key: '10be7145c614144e94c3cc0b92dc5ee4e1587fe6', type: "unbounded" }))));
71
+ }) }, h("button", Object.assign({ key: 'ffebf7083d23501839970059ef8e411b571de197' }, attrs, { disabled: disabled, class: "button-native", part: "native", "aria-label": ariaLabel }), h("span", { key: 'cab0c1c763b3ce33ef11dba1d230f66126e59424', class: "button-inner" }, h("slot", { key: 'ccfd2be8479b75b5c63e97e1ca7dfe203e9b36ee' }, h("ion-icon", { key: 'ac254fe7f327b08f1ae3fcea89d5cf0e83c9a96c', part: "icon", icon: menuIcon, mode: mode, lazy: false, "aria-hidden": "true" }))), mode === 'md' && h("ion-ripple-effect", { key: 'f0f17c4ca96e3eed3c1727ee00578d40af8f0115', type: "unbounded" }))));
72
72
  }
73
73
  get el() { return this; }
74
74
  static get style() { return {
@@ -36,10 +36,10 @@ const MenuToggle = /*@__PURE__*/ proxyCustomElement(class MenuToggle extends HTM
36
36
  render() {
37
37
  const mode = getIonMode(this);
38
38
  const hidden = this.autoHide && !this.visible;
39
- return (h(Host, { key: '55135952f3a42cb5d21916dfb7b169d894b381e3', onClick: this.onClick, "aria-hidden": hidden ? 'true' : null, class: {
39
+ return (h(Host, { key: 'cd567114769a30bd3871ed5d15bf42aed39956e1', onClick: this.onClick, "aria-hidden": hidden ? 'true' : null, class: {
40
40
  [mode]: true,
41
41
  'menu-toggle-hidden': hidden,
42
- } }, h("slot", { key: 'e8ecb59a6ec075b07e2a1b8fcdf7df3dd9975a03' })));
42
+ } }, h("slot", { key: '773d4cff95ca75f23578b1e1dca53c9933f28a33' })));
43
43
  }
44
44
  static get style() { return menuToggleCss; }
45
45
  }, [257, "ion-menu-toggle", {
@@ -667,14 +667,14 @@ const Menu = /*@__PURE__*/ proxyCustomElement(class Menu extends HTMLElement {
667
667
  * the ionBackButton listener in the menu controller
668
668
  * will handle closing the menu when Escape is pressed.
669
669
  */
670
- return (h(Host, { key: '29ef73894e2795e4ce23e59888ffb87faf4dd543', onKeyDown: shouldUseCloseWatcher() ? null : this.onKeydown, role: "navigation", "aria-label": inheritedAttributes['aria-label'] || 'menu', class: {
670
+ return (h(Host, { key: '70a427f3414a476414c3386efe6c8723fd37eccf', onKeyDown: shouldUseCloseWatcher() ? null : this.onKeydown, role: "navigation", "aria-label": inheritedAttributes['aria-label'] || 'menu', class: {
671
671
  [mode]: true,
672
672
  [`menu-type-${type}`]: true,
673
673
  'menu-enabled': !disabled,
674
674
  [`menu-side-${side}`]: true,
675
675
  'menu-pane-visible': isPaneVisible,
676
676
  'split-pane-side': hostContext('ion-split-pane', el),
677
- } }, h("div", { key: '22e44f7bd602ee0c96550f0dfc22ac81c0033ad6', class: "menu-inner", part: "container", ref: (el) => (this.menuInnerEl = el) }, h("slot", { key: '7bbef92fe03bb3ce4d3981eb8535aab449aab2fc' })), h("ion-backdrop", { key: '9ab8d5b61563e16b212c71c03869d4fc23a0400b', ref: (el) => (this.backdropEl = el), class: "menu-backdrop", tappable: false, stopPropagation: false, part: "backdrop" })));
677
+ } }, h("div", { key: '83af04e5a47d5a92caafaf06088a7114ae61984b', class: "menu-inner", part: "container", ref: (el) => (this.menuInnerEl = el) }, h("slot", { key: '7b35048642864bd0f30de9f6b61c949c1b601692' })), h("ion-backdrop", { key: '347af516c7970d80dd11c6d1ed61e9a040ceb5fb', ref: (el) => (this.backdropEl = el), class: "menu-backdrop", tappable: false, stopPropagation: false, part: "backdrop" })));
678
678
  }
679
679
  get el() { return this; }
680
680
  static get watchers() { return {