@ionic/core 8.8.6-dev.11777559143.1d1ad1ad → 8.8.6-dev.11777569278.1613db2e

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 (304) hide show
  1. package/components/ion-action-sheet.js +1 -1
  2. package/components/ion-alert.js +1 -1
  3. package/components/ion-back-button.js +1 -1
  4. package/components/ion-button.js +1 -1
  5. package/components/ion-card.js +1 -1
  6. package/components/ion-chip.js +1 -1
  7. package/components/ion-col.js +1 -1
  8. package/components/ion-datetime-button.js +1 -1
  9. package/components/ion-datetime.js +1 -1
  10. package/components/ion-fab-button.js +1 -1
  11. package/components/ion-gallery.d.ts +11 -0
  12. package/components/ion-gallery.js +4 -0
  13. package/components/ion-grid.js +1 -1
  14. package/components/ion-header.js +1 -1
  15. package/components/ion-img.js +1 -1
  16. package/components/ion-infinite-scroll-content.js +1 -1
  17. package/components/ion-infinite-scroll.js +1 -1
  18. package/components/ion-input-otp.js +1 -1
  19. package/components/ion-input-password-toggle.js +1 -1
  20. package/components/ion-input.js +1 -1
  21. package/components/ion-item-divider.js +1 -1
  22. package/components/ion-item-group.js +1 -1
  23. package/components/ion-item-option.js +1 -1
  24. package/components/ion-item-options.js +1 -1
  25. package/components/ion-item-sliding.js +1 -1
  26. package/components/ion-item.js +1 -1
  27. package/components/ion-label.js +1 -1
  28. package/components/ion-list-header.js +1 -1
  29. package/components/ion-list.js +1 -1
  30. package/components/ion-loading.js +1 -1
  31. package/components/ion-menu-button.js +1 -1
  32. package/components/ion-menu-toggle.js +1 -1
  33. package/components/ion-menu.js +1 -1
  34. package/components/ion-modal.js +1 -1
  35. package/components/ion-nav-link.js +1 -1
  36. package/components/ion-nav.js +1 -1
  37. package/components/ion-note.js +1 -1
  38. package/components/ion-picker-column-option.js +1 -1
  39. package/components/ion-picker-legacy-column.js +1 -1
  40. package/components/ion-picker-legacy.js +1 -1
  41. package/components/ion-popover.js +1 -1
  42. package/components/ion-progress-bar.js +1 -1
  43. package/components/ion-radio-group.js +1 -1
  44. package/components/ion-radio.js +1 -1
  45. package/components/ion-range.js +1 -1
  46. package/components/ion-refresher-content.js +1 -1
  47. package/components/ion-refresher.js +1 -1
  48. package/components/ion-reorder-group.js +1 -1
  49. package/components/ion-reorder.js +1 -1
  50. package/components/ion-ripple-effect.js +1 -1
  51. package/components/ion-router-link.js +1 -1
  52. package/components/ion-router-outlet.js +1 -1
  53. package/components/ion-row.js +1 -1
  54. package/components/ion-searchbar.js +1 -1
  55. package/components/ion-segment-button.js +1 -1
  56. package/components/ion-segment-content.js +1 -1
  57. package/components/ion-segment-view.js +1 -1
  58. package/components/ion-segment.js +1 -1
  59. package/components/ion-select-modal.js +1 -1
  60. package/components/ion-select-option.js +1 -1
  61. package/components/ion-select-popover.js +1 -1
  62. package/components/ion-select.js +1 -1
  63. package/components/ion-skeleton-text.js +1 -1
  64. package/components/ion-spinner.js +1 -1
  65. package/components/ion-split-pane.js +1 -1
  66. package/components/ion-tab-bar.js +1 -1
  67. package/components/ion-tab-button.js +1 -1
  68. package/components/ion-tab.js +1 -1
  69. package/components/ion-tabs.js +1 -1
  70. package/components/ion-text.js +1 -1
  71. package/components/ion-textarea.js +1 -1
  72. package/components/ion-thumbnail.js +1 -1
  73. package/components/ion-title.js +1 -1
  74. package/components/ion-toast.js +1 -1
  75. package/components/ion-toggle.js +1 -1
  76. package/components/ion-toolbar.js +1 -1
  77. package/components/p-B2rpt1JV.js +4 -0
  78. package/components/p-B6zr9RZN.js +4 -0
  79. package/components/{p-Brxa0j7O.js → p-B71c6yUH.js} +1 -1
  80. package/components/{p-ByuCfbYy.js → p-BCFZKMI6.js} +1 -1
  81. package/components/{p-C2cZvGcF.js → p-BFbsici0.js} +1 -1
  82. package/components/{p-CoarhFWH.js → p-BLCuPAtN.js} +1 -1
  83. package/components/{p-GnGGIfCd.js → p-BRWWcnBq.js} +1 -1
  84. package/components/{p-BfHB6wX_.js → p-BXcCGjEc.js} +1 -1
  85. package/components/{p-BU8N7ZrK.js → p-BqImG3uk.js} +1 -1
  86. package/components/{p-D5lMX0xt.js → p-C8ktKu9j.js} +1 -1
  87. package/components/{p-BhfW3d9j.js → p-CIoAIKEr.js} +1 -1
  88. package/components/p-CN-WzkJE.js +4 -0
  89. package/components/{p-CnwZE7CW.js → p-CoFqDNc5.js} +1 -1
  90. package/components/{p-TpZHKDyk.js → p-DAv9P_LE.js} +1 -1
  91. package/components/{p-CeYwuysM.js → p-DH_9VCbD.js} +1 -1
  92. package/components/{p-CdYTq34D.js → p-DTtRWhIZ.js} +1 -1
  93. package/components/{p-C-_EGKki.js → p-DXUyXgVL.js} +1 -1
  94. package/components/{p-BTYqyHph.js → p-Di5rHO3q.js} +1 -1
  95. package/components/{p-BtAlyZ0b.js → p-IMXp2Inn.js} +1 -1
  96. package/components/{p-DAeMHNER.js → p-TR4ubkPu.js} +1 -1
  97. package/dist/cjs/ion-app_8.cjs.entry.js +7 -7
  98. package/dist/cjs/ion-avatar_3.cjs.entry.js +2 -2
  99. package/dist/cjs/ion-col_3.cjs.entry.js +8 -6
  100. package/dist/cjs/ion-datetime_3.cjs.entry.js +4 -4
  101. package/dist/cjs/ion-gallery.cjs.entry.js +330 -0
  102. package/dist/cjs/ion-img.cjs.entry.js +2 -2
  103. package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +3 -3
  104. package/dist/cjs/ion-input-otp.cjs.entry.js +3 -3
  105. package/dist/cjs/ion-input-password-toggle.cjs.entry.js +3 -3
  106. package/dist/cjs/ion-input.cjs.entry.js +4 -4
  107. package/dist/cjs/ion-item-option_3.cjs.entry.js +4 -4
  108. package/dist/cjs/ion-item_8.cjs.entry.js +12 -12
  109. package/dist/cjs/ion-loading.cjs.entry.js +2 -2
  110. package/dist/cjs/ion-menu_3.cjs.entry.js +6 -6
  111. package/dist/cjs/ion-modal.cjs.entry.js +4 -4
  112. package/dist/cjs/ion-nav_2.cjs.entry.js +2 -2
  113. package/dist/cjs/ion-picker-column-option.cjs.entry.js +2 -2
  114. package/dist/cjs/ion-popover.cjs.entry.js +2 -2
  115. package/dist/cjs/ion-progress-bar.cjs.entry.js +1 -1
  116. package/dist/cjs/ion-radio_2.cjs.entry.js +5 -5
  117. package/dist/cjs/ion-range.cjs.entry.js +3 -3
  118. package/dist/cjs/ion-refresher_2.cjs.entry.js +3 -3
  119. package/dist/cjs/ion-reorder_2.cjs.entry.js +3 -3
  120. package/dist/cjs/ion-ripple-effect.cjs.entry.js +1 -1
  121. package/dist/cjs/ion-route_4.cjs.entry.js +2 -2
  122. package/dist/cjs/ion-searchbar.cjs.entry.js +4 -4
  123. package/dist/cjs/ion-segment-content.cjs.entry.js +1 -1
  124. package/dist/cjs/ion-segment-view.cjs.entry.js +2 -2
  125. package/dist/cjs/ion-segment_2.cjs.entry.js +4 -4
  126. package/dist/cjs/ion-select-modal.cjs.entry.js +1 -1
  127. package/dist/cjs/ion-select_3.cjs.entry.js +6 -6
  128. package/dist/cjs/ion-spinner.cjs.entry.js +1 -1
  129. package/dist/cjs/ion-split-pane.cjs.entry.js +3 -2
  130. package/dist/cjs/ion-tab-bar_2.cjs.entry.js +4 -4
  131. package/dist/cjs/ion-tab_2.cjs.entry.js +3 -3
  132. package/dist/cjs/ion-text.cjs.entry.js +2 -2
  133. package/dist/cjs/ion-textarea.cjs.entry.js +3 -3
  134. package/dist/cjs/ion-toast.cjs.entry.js +2 -2
  135. package/dist/cjs/ion-toggle.cjs.entry.js +3 -3
  136. package/dist/cjs/ionic.cjs.js +1 -1
  137. package/dist/cjs/loader.cjs.js +1 -1
  138. package/dist/collection/collection-manifest.json +6 -0
  139. package/dist/collection/components/col/col.js +3 -2
  140. package/dist/collection/components/gallery/gallery-interface.js +1 -0
  141. package/dist/collection/components/gallery/gallery.css +103 -0
  142. package/dist/collection/components/gallery/gallery.js +421 -0
  143. package/dist/collection/components/gallery/test/utils.js +100 -0
  144. package/dist/collection/components/grid/grid.js +2 -2
  145. package/dist/collection/components/header/header.js +2 -2
  146. package/dist/collection/components/img/img.js +2 -2
  147. package/dist/collection/components/infinite-scroll/infinite-scroll.js +1 -1
  148. package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.js +2 -2
  149. package/dist/collection/components/input/input.js +4 -4
  150. package/dist/collection/components/input-otp/input-otp.js +3 -3
  151. package/dist/collection/components/input-password-toggle/input-password-toggle.js +3 -3
  152. package/dist/collection/components/item-divider/item-divider.js +2 -2
  153. package/dist/collection/components/item-group/item-group.js +1 -1
  154. package/dist/collection/components/item-option/item-option.js +2 -2
  155. package/dist/collection/components/item-options/item-options.js +1 -1
  156. package/dist/collection/components/item-sliding/item-sliding.js +1 -1
  157. package/dist/collection/components/label/label.js +2 -2
  158. package/dist/collection/components/list/list.js +1 -1
  159. package/dist/collection/components/list-header/list-header.js +2 -2
  160. package/dist/collection/components/loading/loading.js +2 -2
  161. package/dist/collection/components/menu/menu.js +2 -2
  162. package/dist/collection/components/menu-button/menu-button.js +2 -2
  163. package/dist/collection/components/menu-toggle/menu-toggle.js +2 -2
  164. package/dist/collection/components/modal/modal.js +4 -4
  165. package/dist/collection/components/nav/nav.js +1 -1
  166. package/dist/collection/components/nav-link/nav-link.js +1 -1
  167. package/dist/collection/components/note/note.js +2 -2
  168. package/dist/collection/components/picker-column-option/picker-column-option.js +2 -2
  169. package/dist/collection/components/picker-legacy/picker.js +2 -2
  170. package/dist/collection/components/picker-legacy-column/picker-column.js +2 -2
  171. package/dist/collection/components/popover/popover.js +2 -2
  172. package/dist/collection/components/progress-bar/progress-bar.js +1 -1
  173. package/dist/collection/components/radio/radio.js +3 -3
  174. package/dist/collection/components/radio-group/radio-group.js +2 -2
  175. package/dist/collection/components/range/range.js +3 -3
  176. package/dist/collection/components/refresher/refresher.js +1 -1
  177. package/dist/collection/components/refresher-content/refresher-content.js +2 -2
  178. package/dist/collection/components/reorder/reorder.js +2 -2
  179. package/dist/collection/components/reorder-group/reorder-group.js +1 -1
  180. package/dist/collection/components/ripple-effect/ripple-effect.js +1 -1
  181. package/dist/collection/components/router-link/router-link.js +2 -2
  182. package/dist/collection/components/router-outlet/router-outlet.js +1 -1
  183. package/dist/collection/components/row/row.js +2 -2
  184. package/dist/collection/components/searchbar/searchbar.js +4 -4
  185. package/dist/collection/components/segment/segment.js +2 -2
  186. package/dist/collection/components/segment-button/segment-button.js +2 -2
  187. package/dist/collection/components/segment-content/segment-content.js +1 -1
  188. package/dist/collection/components/segment-view/segment-view.js +2 -2
  189. package/dist/collection/components/select/select.js +3 -3
  190. package/dist/collection/components/select-modal/select-modal.js +1 -1
  191. package/dist/collection/components/select-option/select-option.js +1 -1
  192. package/dist/collection/components/select-popover/select-popover.js +2 -2
  193. package/dist/collection/components/skeleton-text/skeleton-text.js +2 -2
  194. package/dist/collection/components/spinner/spinner.js +1 -1
  195. package/dist/collection/components/split-pane/split-pane.js +3 -2
  196. package/dist/collection/components/tab/tab.js +2 -2
  197. package/dist/collection/components/tab-bar/tab-bar.js +2 -2
  198. package/dist/collection/components/tab-button/tab-button.js +2 -2
  199. package/dist/collection/components/tabs/tabs.js +1 -1
  200. package/dist/collection/components/text/text.js +2 -2
  201. package/dist/collection/components/textarea/textarea.js +3 -3
  202. package/dist/collection/components/thumbnail/thumbnail.js +2 -2
  203. package/dist/collection/components/title/title.js +2 -2
  204. package/dist/collection/components/toast/toast.js +2 -2
  205. package/dist/collection/components/toggle/toggle.js +3 -3
  206. package/dist/collection/components/toolbar/toolbar.js +2 -2
  207. package/dist/collection/utils/media.js +1 -0
  208. package/dist/docs.json +212 -1
  209. package/dist/esm/ion-app_8.entry.js +7 -7
  210. package/dist/esm/ion-avatar_3.entry.js +2 -2
  211. package/dist/esm/ion-col_3.entry.js +8 -6
  212. package/dist/esm/ion-datetime_3.entry.js +4 -4
  213. package/dist/esm/ion-gallery.entry.js +328 -0
  214. package/dist/esm/ion-img.entry.js +2 -2
  215. package/dist/esm/ion-infinite-scroll_2.entry.js +3 -3
  216. package/dist/esm/ion-input-otp.entry.js +3 -3
  217. package/dist/esm/ion-input-password-toggle.entry.js +3 -3
  218. package/dist/esm/ion-input.entry.js +4 -4
  219. package/dist/esm/ion-item-option_3.entry.js +4 -4
  220. package/dist/esm/ion-item_8.entry.js +12 -12
  221. package/dist/esm/ion-loading.entry.js +2 -2
  222. package/dist/esm/ion-menu_3.entry.js +6 -6
  223. package/dist/esm/ion-modal.entry.js +4 -4
  224. package/dist/esm/ion-nav_2.entry.js +2 -2
  225. package/dist/esm/ion-picker-column-option.entry.js +2 -2
  226. package/dist/esm/ion-popover.entry.js +2 -2
  227. package/dist/esm/ion-progress-bar.entry.js +1 -1
  228. package/dist/esm/ion-radio_2.entry.js +5 -5
  229. package/dist/esm/ion-range.entry.js +3 -3
  230. package/dist/esm/ion-refresher_2.entry.js +3 -3
  231. package/dist/esm/ion-reorder_2.entry.js +3 -3
  232. package/dist/esm/ion-ripple-effect.entry.js +1 -1
  233. package/dist/esm/ion-route_4.entry.js +2 -2
  234. package/dist/esm/ion-searchbar.entry.js +4 -4
  235. package/dist/esm/ion-segment-content.entry.js +1 -1
  236. package/dist/esm/ion-segment-view.entry.js +2 -2
  237. package/dist/esm/ion-segment_2.entry.js +4 -4
  238. package/dist/esm/ion-select-modal.entry.js +1 -1
  239. package/dist/esm/ion-select_3.entry.js +6 -6
  240. package/dist/esm/ion-spinner.entry.js +1 -1
  241. package/dist/esm/ion-split-pane.entry.js +3 -2
  242. package/dist/esm/ion-tab-bar_2.entry.js +4 -4
  243. package/dist/esm/ion-tab_2.entry.js +3 -3
  244. package/dist/esm/ion-text.entry.js +2 -2
  245. package/dist/esm/ion-textarea.entry.js +3 -3
  246. package/dist/esm/ion-toast.entry.js +2 -2
  247. package/dist/esm/ion-toggle.entry.js +3 -3
  248. package/dist/esm/ionic.js +1 -1
  249. package/dist/esm/loader.js +1 -1
  250. package/dist/html.html-data.json +70 -0
  251. package/dist/ionic/ionic.esm.js +1 -1
  252. package/dist/ionic/{p-96549175.entry.js → p-00c0bd38.entry.js} +1 -1
  253. package/dist/ionic/{p-79ae0425.entry.js → p-05a30032.entry.js} +1 -1
  254. package/dist/ionic/{p-192e7509.entry.js → p-15e3e8f5.entry.js} +1 -1
  255. package/dist/ionic/{p-5ac21be2.entry.js → p-1709b0aa.entry.js} +1 -1
  256. package/dist/ionic/{p-2bf931ae.entry.js → p-1c2c1869.entry.js} +1 -1
  257. package/dist/ionic/{p-3bf01c2c.entry.js → p-1c4de46b.entry.js} +1 -1
  258. package/dist/ionic/p-1e1c8d61.entry.js +4 -0
  259. package/dist/ionic/p-24b35f99.entry.js +4 -0
  260. package/dist/ionic/p-2aa7567e.entry.js +4 -0
  261. package/dist/ionic/{p-bc5713f7.entry.js → p-2ad79c23.entry.js} +1 -1
  262. package/dist/ionic/{p-5a3fc28e.entry.js → p-2f0073af.entry.js} +1 -1
  263. package/dist/ionic/{p-59b4f8d0.entry.js → p-3f79f594.entry.js} +1 -1
  264. package/dist/ionic/p-4079cee3.entry.js +4 -0
  265. package/dist/ionic/{p-f061fcb7.entry.js → p-48026d15.entry.js} +1 -1
  266. package/dist/ionic/{p-4091ad21.entry.js → p-50b61fab.entry.js} +1 -1
  267. package/dist/ionic/{p-8516eb69.entry.js → p-50cd2d57.entry.js} +1 -1
  268. package/dist/ionic/{p-50d90690.entry.js → p-5274f999.entry.js} +1 -1
  269. package/dist/ionic/{p-3093958a.entry.js → p-586d4270.entry.js} +1 -1
  270. package/dist/ionic/{p-b8b20b7e.entry.js → p-71b6014c.entry.js} +1 -1
  271. package/dist/ionic/{p-9b9b1450.entry.js → p-72491468.entry.js} +1 -1
  272. package/dist/ionic/{p-f740c359.entry.js → p-7d5057c4.entry.js} +1 -1
  273. package/dist/ionic/{p-091a95ea.entry.js → p-83c693c4.entry.js} +1 -1
  274. package/dist/ionic/{p-2aa44c65.entry.js → p-8537b2fb.entry.js} +1 -1
  275. package/dist/ionic/{p-a53a3ecc.entry.js → p-8f127a9c.entry.js} +1 -1
  276. package/dist/ionic/{p-98c34fd7.entry.js → p-9d789053.entry.js} +1 -1
  277. package/dist/ionic/{p-1faf270d.entry.js → p-a9fb086b.entry.js} +1 -1
  278. package/dist/ionic/{p-e7f216ae.entry.js → p-ae667493.entry.js} +1 -1
  279. package/dist/ionic/{p-edb0b0c8.entry.js → p-b2fe6c1c.entry.js} +1 -1
  280. package/dist/ionic/{p-2effd05d.entry.js → p-b3c9f19c.entry.js} +1 -1
  281. package/dist/ionic/{p-6c8c37c2.entry.js → p-b653f4c2.entry.js} +1 -1
  282. package/dist/ionic/{p-4e46439d.entry.js → p-bd71a4a7.entry.js} +1 -1
  283. package/dist/ionic/p-bf972309.entry.js +4 -0
  284. package/dist/ionic/{p-8180abe5.entry.js → p-c10fa162.entry.js} +1 -1
  285. package/dist/ionic/{p-d954cd19.entry.js → p-d4ed5710.entry.js} +1 -1
  286. package/dist/ionic/{p-228b6a9c.entry.js → p-d6299c37.entry.js} +1 -1
  287. package/dist/ionic/{p-b0c54b4c.entry.js → p-d976e777.entry.js} +1 -1
  288. package/dist/ionic/{p-4610e447.entry.js → p-e18d3fdb.entry.js} +1 -1
  289. package/dist/ionic/{p-1855fcb6.entry.js → p-e3abffbe.entry.js} +1 -1
  290. package/dist/ionic/{p-4c864eb2.entry.js → p-fad05840.entry.js} +1 -1
  291. package/dist/types/components/gallery/gallery-interface.d.ts +9 -0
  292. package/dist/types/components/gallery/gallery.d.ts +125 -0
  293. package/dist/types/components/gallery/test/utils.d.ts +2 -0
  294. package/dist/types/components.d.ts +66 -0
  295. package/hydrate/index.js +469 -126
  296. package/hydrate/index.mjs +469 -126
  297. package/package.json +1 -1
  298. package/components/p-CnOTQxHB.js +0 -4
  299. package/components/p-XFUFdPrc.js +0 -4
  300. package/components/p-tYh73xQe.js +0 -4
  301. package/dist/ionic/p-308beb71.entry.js +0 -4
  302. package/dist/ionic/p-64341e32.entry.js +0 -4
  303. package/dist/ionic/p-76d0e7ef.entry.js +0 -4
  304. package/dist/ionic/p-ae4ea663.entry.js +0 -4
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Convert a pixels given value into rem
3
+ *
4
+ * @param pixels - Value in pixels to be converted (i.e. px)
5
+ * @param context (optional) - Baseline value
6
+ */
7
+ /**
8
+ * Convert a font size to a dynamic font size.
9
+ * Fonts that participate in Dynamic Type should use
10
+ * dynamic font sizes.
11
+ * @param size - The initial font size including the unit (i.e. px or pt)
12
+ * @param unit (optional) - The unit to convert to. Use this if you want to
13
+ * convert to a unit other than $baselineUnit.
14
+ */
15
+ /**
16
+ * Convert a font size to a dynamic font size but impose
17
+ * a maximum font size.
18
+ * @param size - The initial font size including the unit (i.e. px or pt)
19
+ * @param maxScale - The maximum scale of the font (i.e. 2.5 for a maximum 250% scale).
20
+ * @param unit (optional) - The unit to convert the initial font size to. Use this if you want to
21
+ * convert to a unit other than $baselineUnit.
22
+ */
23
+ /**
24
+ * Convert a font size to a dynamic font size but impose
25
+ * a minimum font size.
26
+ * @param size - The initial font size including the unit (i.e. px or pt)
27
+ * @param minScale - The minimum scale of the font (i.e. 0.8 for a minimum 80% scale).
28
+ * @param unit (optional) - The unit to convert the initial font size to. Use this if you want to
29
+ * convert to a unit other than $baselineUnit.
30
+ */
31
+ /**
32
+ * Convert a font size to a dynamic font size but impose
33
+ * maximum and minimum font sizes.
34
+ * @param size - The initial font size including the unit (i.e. px or pt)
35
+ * @param minScale - The minimum scale of the font (i.e. 0.8 for a minimum 80% scale).
36
+ * @param maxScale - The maximum scale of the font (i.e. 2.5 for a maximum 250% scale).
37
+ * @param unit (optional) - The unit to convert the initial font size to. Use this if you want to
38
+ * convert to a unit other than $baselineUnit.
39
+ */
40
+ /**
41
+ * A heuristic that applies CSS to tablet
42
+ * viewports.
43
+ *
44
+ * Usage:
45
+ * @include tablet-viewport() {
46
+ * :host {
47
+ * background-color: green;
48
+ * }
49
+ * }
50
+ */
51
+ /**
52
+ * A heuristic that applies CSS to mobile
53
+ * viewports (i.e. phones, not tablets).
54
+ *
55
+ * Usage:
56
+ * @include mobile-viewport() {
57
+ * :host {
58
+ * background-color: blue;
59
+ * }
60
+ * }
61
+ */
62
+ :host {
63
+ /**
64
+ * @prop --ion-gallery-gap: Space between gallery items
65
+ */
66
+ display: grid;
67
+ grid-template-columns: repeat(var(--internal-gallery-columns, 2), minmax(0, 1fr));
68
+ }
69
+
70
+ :host(.gallery-layout-uniform) {
71
+ gap: var(--ion-gallery-gap, 16px);
72
+ }
73
+
74
+ :host(.gallery-layout-uniform) ::slotted(*) {
75
+ aspect-ratio: 1/1;
76
+ }
77
+
78
+ :host(.gallery-layout-masonry) {
79
+ align-items: start;
80
+ column-gap: var(--ion-gallery-gap, 16px);
81
+ row-gap: 0;
82
+ grid-auto-rows: 2px;
83
+ }
84
+
85
+ :host(.gallery-layout-masonry) ::slotted(*) {
86
+ display: block;
87
+ min-height: unset;
88
+ margin-bottom: var(--ion-gallery-gap, 16px);
89
+ }
90
+
91
+ ::slotted(*) {
92
+ margin-left: 0;
93
+ margin-right: 0;
94
+ margin-top: 0;
95
+ margin-bottom: 0;
96
+ width: 100%;
97
+ }
98
+
99
+ ::slotted(img) {
100
+ display: block;
101
+ object-fit: cover;
102
+ object-position: center;
103
+ }
@@ -0,0 +1,421 @@
1
+ /*!
2
+ * (C) Ionic http://ionicframework.com - MIT License
3
+ */
4
+ import { Host, h } from "@stencil/core";
5
+ import { printIonWarning } from "../../utils/logging/index";
6
+ import { getIonTheme } from "../../global/ionic-global";
7
+ // TODO(FW-7285): Replace with global breakpoints
8
+ const BREAKPOINTS = {
9
+ xs: 0,
10
+ sm: 576,
11
+ md: 768,
12
+ lg: 992,
13
+ xl: 1200,
14
+ xxl: 1400,
15
+ };
16
+ const DEFAULT_COLUMNS = {
17
+ xs: 2,
18
+ sm: 3,
19
+ md: 4,
20
+ lg: 6,
21
+ xl: 8,
22
+ xxl: 10,
23
+ };
24
+ const BREAKPOINT_ORDER = ['xs', 'sm', 'md', 'lg', 'xl', 'xxl'];
25
+ /**
26
+ * @virtualProp {"ios" | "md"} mode - The mode determines the platform behaviors of the component.
27
+ * @virtualProp {"ios" | "md" | "ionic"} theme - The theme determines the visual appearance of the component.
28
+ *
29
+ * @slot - Content is placed in a responsive gallery layout.
30
+ */
31
+ export class Gallery {
32
+ constructor() {
33
+ // Keep track of whether we've warned about invalid columns to avoid
34
+ // duplicate warnings on screen resize.
35
+ this.hasWarnedInvalidColumns = false;
36
+ /**
37
+ * The visual layout of the gallery. When `uniform`, rows take up the height
38
+ * of the tallest item and are spaced evenly across the gallery. Additionally,
39
+ * items will have an aspect ratio of 1/1, forcing them to be square unless a
40
+ * height is explicitly set. When `masonry`, items will be positioned under each
41
+ * other with only the specified gap between them.
42
+ */
43
+ this.layout = 'uniform';
44
+ /**
45
+ * The order in which items are positioned. Only applies when layout is
46
+ * `masonry`. When `sequential`, items are positioned in the order they are
47
+ * placed in the DOM. When `best-fit`, items are positioned under the column
48
+ * with the most available space.
49
+ */
50
+ this.order = 'sequential';
51
+ /**
52
+ * The number of columns to display. Can be set as a number or an object of
53
+ * breakpoint values (e.g. `{ xs: 2, sm: 3, md: 4 }`).
54
+ */
55
+ this.columns = DEFAULT_COLUMNS;
56
+ /**
57
+ * Listen for the slotchange event on the slot.
58
+ * When the layout is `masonry`, this listener is used to schedule a resize
59
+ * of the masonry grid when the slot changes. This is useful for when items
60
+ * are added or removed from the gallery.
61
+ */
62
+ this.onSlotChange = () => {
63
+ this.scheduleMasonryResize();
64
+ };
65
+ /**
66
+ * Measure the host and children, then compute masonry placement.
67
+ */
68
+ this.resizeMasonryGrid = () => {
69
+ this.masonryRaf = undefined;
70
+ if (this.layout !== 'masonry') {
71
+ this.clearMasonryStyles();
72
+ return;
73
+ }
74
+ const styles = getComputedStyle(this.el);
75
+ const rowHeight = parseFloat(styles.getPropertyValue('grid-auto-rows')) || 0;
76
+ const rowGap = parseFloat(styles.getPropertyValue('row-gap')) || parseFloat(styles.getPropertyValue('gap')) || 0;
77
+ const columnsStr = styles.getPropertyValue('--internal-gallery-columns');
78
+ // Fallback to 2 columns for masonry calculations when the resolved
79
+ // --internal-gallery-columns CSS value is missing or unparsable.
80
+ const columns = parseInt(columnsStr, 10) || 2;
81
+ const items = this.getItems();
82
+ this.layoutMasonry(items, rowHeight, rowGap, columns);
83
+ };
84
+ }
85
+ layoutChanged() {
86
+ this.updateResponsiveColumns(true);
87
+ this.scheduleMasonryResize();
88
+ }
89
+ componentDidLoad() {
90
+ this.updateResponsiveColumns(true);
91
+ this.resizeObserver = new ResizeObserver(() => {
92
+ this.updateResponsiveColumns();
93
+ this.scheduleMasonryResize();
94
+ });
95
+ this.resizeObserver.observe(this.el);
96
+ this.scheduleMasonryResize();
97
+ }
98
+ disconnectedCallback() {
99
+ var _a;
100
+ if (this.masonryRaf !== undefined) {
101
+ cancelAnimationFrame(this.masonryRaf);
102
+ this.masonryRaf = undefined;
103
+ }
104
+ (_a = this.resizeObserver) === null || _a === void 0 ? void 0 : _a.disconnect();
105
+ this.resizeObserver = undefined;
106
+ }
107
+ /**
108
+ * Listen for the load event on child elements.
109
+ * When the layout is `masonry`, this listener is used to schedule a resize
110
+ * of the masonry grid when the child elements load. This is useful for when
111
+ * images take time to load.
112
+ */
113
+ onChildLoad(ev) {
114
+ if (this.layout !== 'masonry') {
115
+ return;
116
+ }
117
+ const target = ev.target;
118
+ if (target !== null && this.el.contains(target)) {
119
+ this.scheduleMasonryResize();
120
+ }
121
+ }
122
+ /**
123
+ * Batch masonry measurements to a single animation frame.
124
+ * This avoids repeated sync layouts during rapid resize/load/slot changes.
125
+ */
126
+ scheduleMasonryResize() {
127
+ if (this.layout !== 'masonry') {
128
+ this.clearMasonryStyles();
129
+ return;
130
+ }
131
+ if (this.masonryRaf !== undefined) {
132
+ cancelAnimationFrame(this.masonryRaf);
133
+ }
134
+ this.masonryRaf = requestAnimationFrame(this.resizeMasonryGrid);
135
+ }
136
+ /**
137
+ * Normalize a columns value to a positive integer.
138
+ * Returns undefined when the input cannot be interpreted as a finite number.
139
+ */
140
+ sanitizeColumns(columns) {
141
+ if (columns === undefined) {
142
+ return undefined;
143
+ }
144
+ const numericColumns = typeof columns === 'number' ? columns : Number(columns);
145
+ if (!Number.isFinite(numericColumns) || !Number.isInteger(numericColumns) || numericColumns <= 0) {
146
+ return undefined;
147
+ }
148
+ return numericColumns;
149
+ }
150
+ /**
151
+ * Check if the value is a breakpoint columns object.
152
+ */
153
+ isBreakpointColumns(value) {
154
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
155
+ }
156
+ /**
157
+ * Check if the breakpoint columns object has any invalid values.
158
+ * Returns true if any value is undefined or not a positive integer.
159
+ */
160
+ hasInvalidBreakpointColumns(breakpointColumns) {
161
+ for (const breakpoint of BREAKPOINT_ORDER) {
162
+ const value = breakpointColumns[breakpoint];
163
+ if (value !== undefined && this.sanitizeColumns(value) === undefined) {
164
+ return true;
165
+ }
166
+ }
167
+ return false;
168
+ }
169
+ /**
170
+ * Get the columns from a responsive breakpoint map.
171
+ * Returns the columns for the last matching breakpoint.
172
+ */
173
+ getColumnsFromBreakpointColumns(width, breakpointColumns) {
174
+ let columns;
175
+ for (const bp of BREAKPOINT_ORDER) {
176
+ const customValue = breakpointColumns[bp];
177
+ const parsedCustom = this.sanitizeColumns(customValue);
178
+ const parsedDefault = this.sanitizeColumns(DEFAULT_COLUMNS[bp]);
179
+ // Use valid custom values when present; otherwise fall back to defaults per breakpoint.
180
+ const resolved = customValue === undefined || parsedCustom === undefined ? parsedDefault : parsedCustom;
181
+ if (resolved !== undefined && width >= BREAKPOINTS[bp]) {
182
+ columns = resolved;
183
+ }
184
+ }
185
+ return columns;
186
+ }
187
+ /**
188
+ * Warn about an invalid columns value when it is set to a non-positive
189
+ * integer or a breakpoint map object with invalid values.
190
+ */
191
+ warnInvalidColumns(columns) {
192
+ printIonWarning(`[ion-gallery] - Invalid "columns" value (${JSON.stringify(columns)}). Expected a positive integer or breakpoint map object (e.g. { xs: 2, md: 4 }). Falling back to default responsive columns.`, this.el);
193
+ this.hasWarnedInvalidColumns = true;
194
+ }
195
+ /**
196
+ * Resolve the active columns value for the current width. Falls back to
197
+ * the default responsive columns when the provided prop is invalid.
198
+ */
199
+ getColumnsForWidth(width) {
200
+ const { columns, hasWarnedInvalidColumns } = this;
201
+ const isBreakpointColumns = this.isBreakpointColumns(columns);
202
+ const hasInvalidBreakpointColumns = isBreakpointColumns && this.hasInvalidBreakpointColumns(columns);
203
+ const sanitizedColumns = isBreakpointColumns
204
+ ? this.getColumnsFromBreakpointColumns(width, columns)
205
+ : this.sanitizeColumns(columns);
206
+ if (!hasWarnedInvalidColumns &&
207
+ (hasInvalidBreakpointColumns || (!isBreakpointColumns && sanitizedColumns === undefined))) {
208
+ this.warnInvalidColumns(columns);
209
+ }
210
+ if (sanitizedColumns !== undefined) {
211
+ return sanitizedColumns;
212
+ }
213
+ return this.getColumnsFromBreakpointColumns(width, DEFAULT_COLUMNS);
214
+ }
215
+ /**
216
+ * Update the responsive columns for the gallery.
217
+ * This is used to update the columns when the component width changes.
218
+ */
219
+ updateResponsiveColumns(force = false) {
220
+ const width = this.el.getBoundingClientRect().width;
221
+ // Only update the columns if the component width has changed by more than
222
+ // 1px or if the force flag is true. This prevents unnecessary re-renders
223
+ // when the component width has not changed.
224
+ if (!width || (!force && this.lastWidth !== undefined && Math.abs(this.lastWidth - width) < 1)) {
225
+ return;
226
+ }
227
+ this.lastWidth = width;
228
+ const columns = this.getColumnsForWidth(width);
229
+ this.el.style.setProperty('--internal-gallery-columns', `${columns}`);
230
+ }
231
+ /**
232
+ * Return all directly slotted HTMLElement children of the gallery.
233
+ */
234
+ getItems() {
235
+ return Array.from(this.el.children).filter((child) => child instanceof HTMLElement);
236
+ }
237
+ /**
238
+ * Clear the item styles for the given item element.
239
+ * This is used to switch between uniform and masonry layouts.
240
+ */
241
+ clearItemStyles(itemEl) {
242
+ itemEl.style.gridRowStart = '';
243
+ itemEl.style.gridRowEnd = '';
244
+ itemEl.style.gridColumn = '';
245
+ }
246
+ /**
247
+ * Clear placement styles for all items when leaving masonry mode.
248
+ */
249
+ clearMasonryStyles() {
250
+ this.getItems().forEach((itemEl) => this.clearItemStyles(itemEl));
251
+ }
252
+ /**
253
+ * Convert a rendered item height to the number of grid rows it should span.
254
+ * Returns undefined for images that are not fully loaded yet.
255
+ */
256
+ calculateRowSpan(itemEl, rowHeight, rowGap) {
257
+ if (itemEl instanceof HTMLImageElement && (!itemEl.complete || itemEl.naturalHeight === 0)) {
258
+ return undefined;
259
+ }
260
+ const height = itemEl.getBoundingClientRect().height;
261
+ const itemStyles = getComputedStyle(itemEl);
262
+ const marginBottom = parseFloat(itemStyles.getPropertyValue('margin-bottom')) || 0;
263
+ const denominator = rowHeight + rowGap;
264
+ if (!denominator || !Number.isFinite(denominator)) {
265
+ return 1;
266
+ }
267
+ return Math.ceil((height + marginBottom + rowGap) / denominator) || 1;
268
+ }
269
+ /**
270
+ * Get the index of the column to position the item in.
271
+ * When the order is `best-fit`, the column with the shortest height is
272
+ * returned. Otherwise, items are placed in the column that matches their
273
+ * natural DOM order.
274
+ */
275
+ getColumnIndex(index, columnHeights, columns) {
276
+ const { order } = this;
277
+ if (order === 'best-fit') {
278
+ let columnIndex = 0;
279
+ for (let i = 1; i < columns; i++) {
280
+ if (columnHeights[i] < columnHeights[columnIndex]) {
281
+ columnIndex = i;
282
+ }
283
+ }
284
+ return columnIndex;
285
+ }
286
+ return index % columns;
287
+ }
288
+ /**
289
+ * Apply masonry placement by assigning each item a column and row span.
290
+ */
291
+ layoutMasonry(items, rowHeight, rowGap, columns) {
292
+ const columnHeights = new Array(columns).fill(0);
293
+ items.forEach((itemEl, i) => {
294
+ const span = this.calculateRowSpan(itemEl, rowHeight, rowGap);
295
+ if (span === undefined) {
296
+ this.clearItemStyles(itemEl);
297
+ return;
298
+ }
299
+ const columnIndex = this.getColumnIndex(i, columnHeights, columns);
300
+ const start = columnHeights[columnIndex] + 1;
301
+ itemEl.style.gridColumn = `${columnIndex + 1}`;
302
+ itemEl.style.gridRowStart = `${start}`;
303
+ itemEl.style.gridRowEnd = `span ${span}`;
304
+ columnHeights[columnIndex] = start + span - 1;
305
+ });
306
+ }
307
+ render() {
308
+ const { layout, order } = this;
309
+ const theme = getIonTheme(this);
310
+ return (h(Host, { key: 'c8e3d332f3bf28671cd960571c7752bdacb503eb', class: {
311
+ [theme]: true,
312
+ [`gallery-layout-${layout}`]: true,
313
+ [`gallery-order-${order}`]: layout === 'masonry',
314
+ } }, h("slot", { key: 'ee0509845dfa77e0257bc01852f6b96cb78bee45', onSlotchange: this.onSlotChange })));
315
+ }
316
+ static get is() { return "ion-gallery"; }
317
+ static get encapsulation() { return "shadow"; }
318
+ static get originalStyleUrls() {
319
+ return {
320
+ "$": ["gallery.scss"]
321
+ };
322
+ }
323
+ static get styleUrls() {
324
+ return {
325
+ "$": ["gallery.css"]
326
+ };
327
+ }
328
+ static get properties() {
329
+ return {
330
+ "layout": {
331
+ "type": "string",
332
+ "mutable": false,
333
+ "complexType": {
334
+ "original": "'uniform' | 'masonry'",
335
+ "resolved": "\"masonry\" | \"uniform\"",
336
+ "references": {}
337
+ },
338
+ "required": false,
339
+ "optional": false,
340
+ "docs": {
341
+ "tags": [],
342
+ "text": "The visual layout of the gallery. When `uniform`, rows take up the height\nof the tallest item and are spaced evenly across the gallery. Additionally,\nitems will have an aspect ratio of 1/1, forcing them to be square unless a\nheight is explicitly set. When `masonry`, items will be positioned under each\nother with only the specified gap between them."
343
+ },
344
+ "getter": false,
345
+ "setter": false,
346
+ "reflect": true,
347
+ "attribute": "layout",
348
+ "defaultValue": "'uniform'"
349
+ },
350
+ "order": {
351
+ "type": "string",
352
+ "mutable": false,
353
+ "complexType": {
354
+ "original": "'sequential' | 'best-fit'",
355
+ "resolved": "\"best-fit\" | \"sequential\"",
356
+ "references": {}
357
+ },
358
+ "required": false,
359
+ "optional": false,
360
+ "docs": {
361
+ "tags": [],
362
+ "text": "The order in which items are positioned. Only applies when layout is\n`masonry`. When `sequential`, items are positioned in the order they are\nplaced in the DOM. When `best-fit`, items are positioned under the column\nwith the most available space."
363
+ },
364
+ "getter": false,
365
+ "setter": false,
366
+ "reflect": true,
367
+ "attribute": "order",
368
+ "defaultValue": "'sequential'"
369
+ },
370
+ "columns": {
371
+ "type": "any",
372
+ "mutable": false,
373
+ "complexType": {
374
+ "original": "GalleryColumns",
375
+ "resolved": "GalleryBreakpointColumns | number | string",
376
+ "references": {
377
+ "GalleryColumns": {
378
+ "location": "import",
379
+ "path": "./gallery-interface",
380
+ "id": "src/components/gallery/gallery-interface.ts::GalleryColumns",
381
+ "referenceLocation": "GalleryColumns"
382
+ }
383
+ }
384
+ },
385
+ "required": false,
386
+ "optional": false,
387
+ "docs": {
388
+ "tags": [],
389
+ "text": "The number of columns to display. Can be set as a number or an object of\nbreakpoint values (e.g. `{ xs: 2, sm: 3, md: 4 }`)."
390
+ },
391
+ "getter": false,
392
+ "setter": false,
393
+ "reflect": false,
394
+ "attribute": "columns",
395
+ "defaultValue": "DEFAULT_COLUMNS"
396
+ }
397
+ };
398
+ }
399
+ static get elementRef() { return "el"; }
400
+ static get watchers() {
401
+ return [{
402
+ "propName": "layout",
403
+ "methodName": "layoutChanged"
404
+ }, {
405
+ "propName": "order",
406
+ "methodName": "layoutChanged"
407
+ }, {
408
+ "propName": "columns",
409
+ "methodName": "layoutChanged"
410
+ }];
411
+ }
412
+ static get listeners() {
413
+ return [{
414
+ "name": "load",
415
+ "method": "onChildLoad",
416
+ "target": undefined,
417
+ "capture": true,
418
+ "passive": false
419
+ }];
420
+ }
421
+ }
@@ -0,0 +1,100 @@
1
+ /*!
2
+ * (C) Ionic http://ionicframework.com - MIT License
3
+ */
4
+ export const sharedStyles = `
5
+ ion-gallery {
6
+ width: 343px;
7
+ }
8
+
9
+ div {
10
+ color: #fff;
11
+ height: 150px;
12
+ }
13
+
14
+ div:nth-child(1) {
15
+ background: #ff6b6b;
16
+ }
17
+
18
+ div:nth-child(2) {
19
+ background: #4ecdc4;
20
+ }
21
+
22
+ div:nth-child(3) {
23
+ background: #ffe66d;
24
+ color: #333;
25
+ }
26
+
27
+ div:nth-child(4) {
28
+ background: #5f27cd;
29
+ }
30
+
31
+ div:nth-child(5) {
32
+ background: #7f8c8d;
33
+ }
34
+
35
+ div:nth-child(6) {
36
+ background: #ff9f43;
37
+ }
38
+
39
+ div:nth-child(7) {
40
+ background: #ff3f34;
41
+ }
42
+
43
+ div:nth-child(8) {
44
+ background: #2ecc71;
45
+ }
46
+
47
+ div:nth-child(9) {
48
+ background: #34495e;
49
+ }
50
+
51
+ div:nth-child(10) {
52
+ background: #1abc9c;
53
+ }
54
+
55
+ div:nth-child(11) {
56
+ background: #e67e22;
57
+ }
58
+
59
+ div:nth-child(12) {
60
+ background: #9b59b6;
61
+ }
62
+ `;
63
+ export const numberToWords = (value) => {
64
+ const ones = [
65
+ 'zero',
66
+ 'one',
67
+ 'two',
68
+ 'three',
69
+ 'four',
70
+ 'five',
71
+ 'six',
72
+ 'seven',
73
+ 'eight',
74
+ 'nine',
75
+ 'ten',
76
+ 'eleven',
77
+ 'twelve',
78
+ 'thirteen',
79
+ 'fourteen',
80
+ 'fifteen',
81
+ 'sixteen',
82
+ 'seventeen',
83
+ 'eighteen',
84
+ 'nineteen',
85
+ ];
86
+ const tens = ['', '', 'twenty', 'thirty', 'forty', 'fifty', 'sixty', 'seventy', 'eighty', 'ninety'];
87
+ if (!Number.isInteger(value) || value < 0 || value >= 100) {
88
+ return `${value}`;
89
+ }
90
+ let word = '';
91
+ if (value < 20) {
92
+ word = ones[value];
93
+ }
94
+ else {
95
+ const tensValue = Math.floor(value / 10);
96
+ const onesValue = value % 10;
97
+ word = onesValue === 0 ? tens[tensValue] : `${tens[tensValue]}-${ones[onesValue]}`;
98
+ }
99
+ return word.charAt(0).toUpperCase() + word.slice(1);
100
+ };
@@ -16,10 +16,10 @@ export class Grid {
16
16
  }
17
17
  render() {
18
18
  const theme = getIonTheme(this);
19
- return (h(Host, { key: 'cd55886cabaeab57e3b13193381b196bec2f07f8', class: {
19
+ return (h(Host, { key: '43b4e05ef076160d901c70dc37e177f19b524349', class: {
20
20
  [theme]: true,
21
21
  'grid-fixed': this.fixed,
22
- } }, h("slot", { key: 'c9b95999e6a274a8a0c997451c0be45b1304d77b' })));
22
+ } }, h("slot", { key: 'f3805936034708e6783223ded72c0ecfd40e5fb0' })));
23
23
  }
24
24
  static get is() { return "ion-grid"; }
25
25
  static get encapsulation() { return "shadow"; }
@@ -156,7 +156,7 @@ export class Header {
156
156
  const isCondensed = collapse === 'condense';
157
157
  // banner role must be at top level, so remove role if inside a menu
158
158
  const roleType = getRoleType(hostContext('ion-menu', this.el), isCondensed, theme);
159
- return (h(Host, Object.assign({ key: '658d5746920c349cc9fe85666c7215f2edc3c794', role: roleType, class: {
159
+ return (h(Host, Object.assign({ key: 'b43e5f542bdcec5e94c299556183cf6d9d673438', role: roleType, class: {
160
160
  [theme]: true,
161
161
  // Used internally for styling
162
162
  [`header-${theme}`]: true,
@@ -164,7 +164,7 @@ export class Header {
164
164
  [`header-collapse-${collapse}`]: true,
165
165
  [`header-translucent-${theme}`]: this.translucent,
166
166
  ['header-divider']: divider,
167
- } }, inheritedAttributes), theme !== 'md' && translucent && h("div", { key: '4a1470d86e1aac6f8d545fe01e75b4dce665fb70', class: "header-background" }), h("slot", { key: '3b02661242bda5834c4e13e4eb61bf79b53ba33e' })));
167
+ } }, inheritedAttributes), theme !== 'md' && translucent && h("div", { key: 'fd9938f02edd38e1afc83025373ec0aec5633711', class: "header-background" }), h("slot", { key: '900aaa7da5d6f08e6f94b128fa065348d595159e' })));
168
168
  }
169
169
  static get is() { return "ion-header"; }
170
170
  static get originalStyleUrls() {
@@ -80,9 +80,9 @@ export class Img {
80
80
  const { loadSrc, alt, onLoad, loadError, inheritedAttributes } = this;
81
81
  const { draggable } = inheritedAttributes;
82
82
  const theme = getIonTheme(this);
83
- return (h(Host, { key: '840d5b29d81222b061ac72168ef6551b5a061e3a', class: {
83
+ return (h(Host, { key: '91de170493b31d6260e975b440beceb6906b6d5a', class: {
84
84
  [theme]: true,
85
- } }, h("img", { key: 'e22e66ee4bb3a648b21c6080674e68eebf4a3feb', decoding: "async", src: loadSrc, alt: alt, onLoad: onLoad, onError: loadError, part: "image", draggable: isDraggable(draggable) })));
85
+ } }, h("img", { key: 'ac1f41afbece34a3e38e656733f3e55cce385b4c', decoding: "async", src: loadSrc, alt: alt, onLoad: onLoad, onError: loadError, part: "image", draggable: isDraggable(draggable) })));
86
86
  }
87
87
  static get is() { return "ion-img"; }
88
88
  static get encapsulation() { return "shadow"; }
@@ -264,7 +264,7 @@ export class InfiniteScroll {
264
264
  render() {
265
265
  const theme = getIonTheme(this);
266
266
  const disabled = this.disabled;
267
- return (h(Host, { key: '22d99824cb589d9024666a3c1ed205f781858eed', class: {
267
+ return (h(Host, { key: '02beca21d668e4e605532ad5ca5a67a08c71eebb', class: {
268
268
  [theme]: true,
269
269
  'infinite-scroll-loading': this.isLoading,
270
270
  'infinite-scroll-enabled': !disabled,