@ionic/core 8.5.4-dev.11744209290.123af9eb → 8.5.4-dev.11744646756.1244bf71

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (236) hide show
  1. package/components/data.js +29 -4
  2. package/components/ion-datetime.js +70 -28
  3. package/components/ion-toggle.js +11 -4
  4. package/dist/cjs/{app-globals-Di9ZJzjm.js → app-globals-CSpnImi2.js} +1 -1
  5. package/dist/cjs/{button-active-BlMN9Iyq.js → button-active-BzpKQ5zN.js} +1 -1
  6. package/dist/cjs/{data-DlPf8ZXm.js → data-BQSLLJwc.js} +30 -5
  7. package/dist/cjs/{hardware-back-button-lTgcqUpk.js → hardware-back-button-B0yu2YGK.js} +2 -2
  8. package/dist/cjs/{index-BE9YH63j.js → index-04WNNW0S.js} +5 -5
  9. package/dist/cjs/{index-CquwaYOd.js → index-3N0K8CTt.js} +1 -1
  10. package/dist/cjs/{index-CXThGkw7.js → index-BjVGGb_k.js} +3 -3
  11. package/dist/cjs/{index-rYFHa7ZR.js → index-D7kGM2E_.js} +1 -1
  12. package/dist/cjs/{index-BVfbh2cJ.js → index-qOuhvt-6.js} +18 -1
  13. package/dist/cjs/index.cjs.js +9 -9
  14. package/dist/cjs/{input-shims-DA_nJulF.js → input-shims-B23RZ_yw.js} +4 -4
  15. package/dist/cjs/{input.utils-UHOCoNWM.js → input.utils-BvrpMdKU.js} +1 -1
  16. package/dist/cjs/ion-accordion_2.cjs.entry.js +3 -3
  17. package/dist/cjs/ion-action-sheet.cjs.entry.js +6 -6
  18. package/dist/cjs/ion-alert.cjs.entry.js +6 -6
  19. package/dist/cjs/ion-app_8.cjs.entry.js +9 -9
  20. package/dist/cjs/ion-avatar_3.cjs.entry.js +2 -2
  21. package/dist/cjs/ion-back-button.cjs.entry.js +2 -2
  22. package/dist/cjs/ion-backdrop.cjs.entry.js +2 -2
  23. package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +2 -2
  24. package/dist/cjs/ion-button_2.cjs.entry.js +3 -3
  25. package/dist/cjs/ion-card_5.cjs.entry.js +2 -2
  26. package/dist/cjs/ion-checkbox.cjs.entry.js +2 -2
  27. package/dist/cjs/ion-chip.cjs.entry.js +2 -2
  28. package/dist/cjs/ion-col_3.cjs.entry.js +2 -2
  29. package/dist/cjs/ion-datetime-button.cjs.entry.js +4 -4
  30. package/dist/cjs/ion-datetime_3.cjs.entry.js +75 -34
  31. package/dist/cjs/ion-fab_3.cjs.entry.js +2 -2
  32. package/dist/cjs/ion-img.cjs.entry.js +2 -2
  33. package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +4 -4
  34. package/dist/cjs/ion-input-password-toggle.cjs.entry.js +3 -3
  35. package/dist/cjs/ion-input.cjs.entry.js +4 -4
  36. package/dist/cjs/ion-item-option_3.cjs.entry.js +4 -4
  37. package/dist/cjs/ion-item_8.cjs.entry.js +2 -2
  38. package/dist/cjs/ion-loading.cjs.entry.js +5 -5
  39. package/dist/cjs/ion-menu_3.cjs.entry.js +6 -6
  40. package/dist/cjs/ion-modal.cjs.entry.js +7 -7
  41. package/dist/cjs/ion-nav_2.cjs.entry.js +4 -4
  42. package/dist/cjs/ion-picker-column-option.cjs.entry.js +2 -2
  43. package/dist/cjs/ion-picker-column.cjs.entry.js +2 -2
  44. package/dist/cjs/ion-picker.cjs.entry.js +1 -1
  45. package/dist/cjs/ion-popover.cjs.entry.js +6 -6
  46. package/dist/cjs/ion-progress-bar.cjs.entry.js +2 -2
  47. package/dist/cjs/ion-radio_2.cjs.entry.js +2 -2
  48. package/dist/cjs/ion-range.cjs.entry.js +4 -4
  49. package/dist/cjs/ion-refresher_2.cjs.entry.js +4 -4
  50. package/dist/cjs/ion-reorder_2.cjs.entry.js +4 -4
  51. package/dist/cjs/ion-ripple-effect.cjs.entry.js +2 -2
  52. package/dist/cjs/ion-route_4.cjs.entry.js +2 -2
  53. package/dist/cjs/ion-searchbar.cjs.entry.js +2 -2
  54. package/dist/cjs/ion-segment-content.cjs.entry.js +1 -1
  55. package/dist/cjs/ion-segment-view.cjs.entry.js +1 -1
  56. package/dist/cjs/ion-segment_2.cjs.entry.js +2 -2
  57. package/dist/cjs/ion-select-modal.cjs.entry.js +5 -5
  58. package/dist/cjs/ion-select_3.cjs.entry.js +5 -5
  59. package/dist/cjs/ion-spinner.cjs.entry.js +2 -2
  60. package/dist/cjs/ion-split-pane.cjs.entry.js +2 -2
  61. package/dist/cjs/ion-tab-bar_2.cjs.entry.js +2 -2
  62. package/dist/cjs/ion-tab_2.cjs.entry.js +1 -1
  63. package/dist/cjs/ion-text.cjs.entry.js +2 -2
  64. package/dist/cjs/ion-textarea.cjs.entry.js +4 -4
  65. package/dist/cjs/ion-toast.cjs.entry.js +5 -5
  66. package/dist/cjs/ion-toggle.cjs.entry.js +12 -5
  67. package/dist/cjs/{ionic-global-AdqEvgj6.js → ionic-global-D0fKFhpt.js} +1 -1
  68. package/dist/cjs/ionic.cjs.js +5 -5
  69. package/dist/cjs/{ios.transition-B8HcmmPx.js → ios.transition-Cyrk-CkT.js} +4 -4
  70. package/dist/cjs/loader.cjs.js +4 -4
  71. package/dist/cjs/{md.transition-54O0AjJC.js → md.transition-Bh2J94f4.js} +4 -4
  72. package/dist/cjs/{overlays-CSyZW4m0.js → overlays-hvRku41m.js} +3 -3
  73. package/dist/cjs/{status-tap-B1Kcv7yf.js → status-tap-EJ9Sb5hb.js} +4 -4
  74. package/dist/collection/collection-manifest.json +1 -1
  75. package/dist/collection/components/datetime/datetime.ios.css +7 -2
  76. package/dist/collection/components/datetime/datetime.js +87 -26
  77. package/dist/collection/components/datetime/datetime.md.css +9 -3
  78. package/dist/collection/components/datetime/utils/data.js +29 -4
  79. package/dist/collection/components/toggle/toggle.js +11 -3
  80. package/dist/docs.json +26 -2
  81. package/dist/esm/{app-globals-CispSZgz.js → app-globals-C0a0o4Av.js} +1 -1
  82. package/dist/esm/{button-active-D92yWoWC.js → button-active-BQqkZ_sm.js} +1 -1
  83. package/dist/esm/{data-Dq3-TN9Z.js → data-omKWOMer.js} +30 -5
  84. package/dist/esm/{hardware-back-button-CRemSDoj.js → hardware-back-button-RMajLSrZ.js} +2 -2
  85. package/dist/esm/{index-DYJvRcE0.js → index-BKfOgUuW.js} +5 -5
  86. package/dist/esm/{index-DZLiflRE.js → index-C7r3mIlB.js} +3 -3
  87. package/dist/esm/{index-DWiwgv23.js → index-CDohRbVJ.js} +1 -1
  88. package/dist/esm/{index-PfJyigSK.js → index-DR2njD_q.js} +1 -1
  89. package/dist/esm/{index-C5UXyyFe.js → index-EP3pwcdb.js} +18 -1
  90. package/dist/esm/index.js +9 -9
  91. package/dist/esm/{input-shims-BL_oixbH.js → input-shims-Clcc9pEO.js} +4 -4
  92. package/dist/esm/{input.utils-Bd73EHpQ.js → input.utils-BeGXuyDm.js} +1 -1
  93. package/dist/esm/ion-accordion_2.entry.js +3 -3
  94. package/dist/esm/ion-action-sheet.entry.js +6 -6
  95. package/dist/esm/ion-alert.entry.js +6 -6
  96. package/dist/esm/ion-app_8.entry.js +9 -9
  97. package/dist/esm/ion-avatar_3.entry.js +2 -2
  98. package/dist/esm/ion-back-button.entry.js +2 -2
  99. package/dist/esm/ion-backdrop.entry.js +2 -2
  100. package/dist/esm/ion-breadcrumb_2.entry.js +2 -2
  101. package/dist/esm/ion-button_2.entry.js +3 -3
  102. package/dist/esm/ion-card_5.entry.js +2 -2
  103. package/dist/esm/ion-checkbox.entry.js +2 -2
  104. package/dist/esm/ion-chip.entry.js +2 -2
  105. package/dist/esm/ion-col_3.entry.js +2 -2
  106. package/dist/esm/ion-datetime-button.entry.js +4 -4
  107. package/dist/esm/ion-datetime_3.entry.js +75 -34
  108. package/dist/esm/ion-fab_3.entry.js +2 -2
  109. package/dist/esm/ion-img.entry.js +2 -2
  110. package/dist/esm/ion-infinite-scroll_2.entry.js +4 -4
  111. package/dist/esm/ion-input-password-toggle.entry.js +3 -3
  112. package/dist/esm/ion-input.entry.js +4 -4
  113. package/dist/esm/ion-item-option_3.entry.js +4 -4
  114. package/dist/esm/ion-item_8.entry.js +2 -2
  115. package/dist/esm/ion-loading.entry.js +5 -5
  116. package/dist/esm/ion-menu_3.entry.js +6 -6
  117. package/dist/esm/ion-modal.entry.js +7 -7
  118. package/dist/esm/ion-nav_2.entry.js +4 -4
  119. package/dist/esm/ion-picker-column-option.entry.js +2 -2
  120. package/dist/esm/ion-picker-column.entry.js +2 -2
  121. package/dist/esm/ion-picker.entry.js +1 -1
  122. package/dist/esm/ion-popover.entry.js +6 -6
  123. package/dist/esm/ion-progress-bar.entry.js +2 -2
  124. package/dist/esm/ion-radio_2.entry.js +2 -2
  125. package/dist/esm/ion-range.entry.js +4 -4
  126. package/dist/esm/ion-refresher_2.entry.js +4 -4
  127. package/dist/esm/ion-reorder_2.entry.js +4 -4
  128. package/dist/esm/ion-ripple-effect.entry.js +2 -2
  129. package/dist/esm/ion-route_4.entry.js +2 -2
  130. package/dist/esm/ion-searchbar.entry.js +2 -2
  131. package/dist/esm/ion-segment-content.entry.js +1 -1
  132. package/dist/esm/ion-segment-view.entry.js +1 -1
  133. package/dist/esm/ion-segment_2.entry.js +2 -2
  134. package/dist/esm/ion-select-modal.entry.js +5 -5
  135. package/dist/esm/ion-select_3.entry.js +5 -5
  136. package/dist/esm/ion-spinner.entry.js +2 -2
  137. package/dist/esm/ion-split-pane.entry.js +2 -2
  138. package/dist/esm/ion-tab-bar_2.entry.js +2 -2
  139. package/dist/esm/ion-tab_2.entry.js +1 -1
  140. package/dist/esm/ion-text.entry.js +2 -2
  141. package/dist/esm/ion-textarea.entry.js +4 -4
  142. package/dist/esm/ion-toast.entry.js +5 -5
  143. package/dist/esm/ion-toggle.entry.js +12 -5
  144. package/dist/esm/{ionic-global-GkM1xiqt.js → ionic-global-CrB2BPUW.js} +1 -1
  145. package/dist/esm/ionic.js +6 -6
  146. package/dist/esm/{ios.transition-BcTzvx5_.js → ios.transition-BObaMu_w.js} +4 -4
  147. package/dist/esm/loader.js +5 -5
  148. package/dist/esm/{md.transition-DYGWIgPE.js → md.transition-BYk9oj5T.js} +4 -4
  149. package/dist/esm/{overlays-BuSzwtlC.js → overlays-DUDTB6a2.js} +3 -3
  150. package/dist/esm/{status-tap-BPk7Ddsi.js → status-tap-Az5SFsVV.js} +4 -4
  151. package/dist/html.html-data.json +4 -0
  152. package/dist/ionic/index.esm.js +1 -1
  153. package/dist/ionic/ionic.esm.js +1 -1
  154. package/dist/ionic/{p-49b72347.entry.js → p-006975c7.entry.js} +1 -1
  155. package/dist/ionic/{p-e01503b2.entry.js → p-00acbe36.entry.js} +1 -1
  156. package/dist/ionic/p-03abd858.entry.js +4 -0
  157. package/dist/ionic/{p-6a8928b1.entry.js → p-141822bc.entry.js} +1 -1
  158. package/dist/ionic/p-17e8ff6b.entry.js +4 -0
  159. package/dist/ionic/{p-879a7b00.entry.js → p-189c7fe9.entry.js} +1 -1
  160. package/dist/ionic/{p-72d7dd7c.entry.js → p-18b4709f.entry.js} +1 -1
  161. package/dist/ionic/{p-171d5d3e.entry.js → p-1bea6291.entry.js} +1 -1
  162. package/dist/ionic/{p-9ca05f27.entry.js → p-1f3d9d38.entry.js} +1 -1
  163. package/dist/ionic/{p-9d8be89a.entry.js → p-20b45b04.entry.js} +1 -1
  164. package/dist/ionic/{p-7deacfed.entry.js → p-2959ef70.entry.js} +1 -1
  165. package/dist/ionic/{p-ccbc5737.entry.js → p-2b9a91c2.entry.js} +1 -1
  166. package/dist/ionic/{p-a8506291.entry.js → p-2c58164d.entry.js} +1 -1
  167. package/dist/ionic/{p-6d4f1c6e.entry.js → p-2d142503.entry.js} +1 -1
  168. package/dist/ionic/{p-930ec949.entry.js → p-3129a2c6.entry.js} +1 -1
  169. package/dist/ionic/{p-3628b1f7.entry.js → p-3a5bc7b1.entry.js} +1 -1
  170. package/dist/ionic/{p-b3485dee.entry.js → p-40e55257.entry.js} +1 -1
  171. package/dist/ionic/{p-841761ee.entry.js → p-45f3c7d9.entry.js} +1 -1
  172. package/dist/ionic/{p-6f5d9223.entry.js → p-46f82b82.entry.js} +1 -1
  173. package/dist/ionic/p-47ccb59d.entry.js +4 -0
  174. package/dist/ionic/{p-9d7d6758.entry.js → p-4bd5bd61.entry.js} +1 -1
  175. package/dist/ionic/{p-414f60f0.entry.js → p-52043361.entry.js} +1 -1
  176. package/dist/ionic/{p-8ca2b22c.entry.js → p-527660e0.entry.js} +1 -1
  177. package/dist/ionic/{p-2a2ab89d.entry.js → p-601f0d27.entry.js} +1 -1
  178. package/dist/ionic/{p-ddc1c497.entry.js → p-644759cb.entry.js} +1 -1
  179. package/dist/ionic/{p-c0634ff3.entry.js → p-657e9085.entry.js} +1 -1
  180. package/dist/ionic/{p-10f11601.entry.js → p-67178c9b.entry.js} +1 -1
  181. package/dist/ionic/{p-a1581941.entry.js → p-67b4c53d.entry.js} +1 -1
  182. package/dist/ionic/p-6cab60b7.entry.js +4 -0
  183. package/dist/ionic/{p-92aed080.entry.js → p-6ceef433.entry.js} +1 -1
  184. package/dist/ionic/{p-85d22d84.entry.js → p-6d8983d1.entry.js} +1 -1
  185. package/dist/ionic/{p-10e11b67.entry.js → p-79851759.entry.js} +1 -1
  186. package/dist/ionic/{p-d3ee5846.entry.js → p-7cdee842.entry.js} +1 -1
  187. package/dist/ionic/{p-52eca165.entry.js → p-7d026411.entry.js} +1 -1
  188. package/dist/ionic/{p-a3ec5708.entry.js → p-7d4b2506.entry.js} +1 -1
  189. package/dist/ionic/{p-fc3eb210.entry.js → p-8b6eb546.entry.js} +1 -1
  190. package/dist/ionic/{p-d7a76cd0.entry.js → p-8fc1959d.entry.js} +1 -1
  191. package/dist/ionic/{p-261e3a47.entry.js → p-9092b7fb.entry.js} +1 -1
  192. package/dist/ionic/{p-b8a159eb.entry.js → p-9cac4dc7.entry.js} +1 -1
  193. package/dist/ionic/{p-06d06c2f.entry.js → p-9fe56809.entry.js} +1 -1
  194. package/dist/ionic/{p-CeCT60rb.js → p-C-oNjncL.js} +1 -1
  195. package/dist/ionic/{p-B1sP_kPm.js → p-C-xl6pej.js} +1 -1
  196. package/dist/ionic/p-C5Aon1Kb.js +4 -0
  197. package/dist/ionic/{p-CdKu7oC9.js → p-Cg19OPuo.js} +1 -1
  198. package/dist/ionic/{p-CdWpy93z.js → p-CwbsDRzJ.js} +1 -1
  199. package/dist/ionic/p-D0SqsSaH.js +4 -0
  200. package/dist/ionic/p-DCi8BSH3.js +4 -0
  201. package/dist/ionic/{p-BTEIaRld.js → p-DGw3g412.js} +1 -1
  202. package/dist/ionic/{p-lw61HGQ-.js → p-DSMkBmnY.js} +1 -1
  203. package/dist/ionic/{p-B3UoCFcu.js → p-D_2UPtUV.js} +1 -1
  204. package/dist/ionic/{p-CiN6q3Lh.js → p-DonNC93r.js} +1 -1
  205. package/dist/ionic/p-EP3pwcdb.js +5 -0
  206. package/dist/ionic/{p-XWSYNdC9.js → p-HRylM0tf.js} +1 -1
  207. package/dist/ionic/{p-C3eOXAUO.js → p-RyPJq84W.js} +1 -1
  208. package/dist/ionic/{p-B8iLKNde.js → p-Uz6zKimy.js} +1 -1
  209. package/dist/ionic/{p-210385cd.entry.js → p-a5570370.entry.js} +1 -1
  210. package/dist/ionic/{p-2469206a.entry.js → p-a5ee3eb8.entry.js} +1 -1
  211. package/dist/ionic/{p-a951373a.entry.js → p-a92657fc.entry.js} +1 -1
  212. package/dist/ionic/{p-d6a3361a.entry.js → p-a9997b1b.entry.js} +1 -1
  213. package/dist/ionic/{p-d85dfc51.entry.js → p-b1f3c158.entry.js} +1 -1
  214. package/dist/ionic/{p-a1767652.entry.js → p-be19e061.entry.js} +1 -1
  215. package/dist/ionic/{p-49419ffd.entry.js → p-c5157026.entry.js} +1 -1
  216. package/dist/ionic/{p-bb3cf0f1.entry.js → p-c6e0f544.entry.js} +1 -1
  217. package/dist/ionic/{p-2f416d26.entry.js → p-e116bb40.entry.js} +1 -1
  218. package/dist/ionic/{p-75959e43.entry.js → p-e8526b09.entry.js} +1 -1
  219. package/dist/ionic/{p-dcf2e017.entry.js → p-f1f6326a.entry.js} +1 -1
  220. package/dist/ionic/{p-B61pJgh5.js → p-uzIBoXdl.js} +1 -1
  221. package/dist/types/components/datetime/datetime-interface.d.ts +1 -0
  222. package/dist/types/components/datetime/datetime.d.ts +6 -0
  223. package/dist/types/components/datetime/utils/data.d.ts +3 -1
  224. package/dist/types/components/datetime/utils/manipulation.d.ts +1 -0
  225. package/dist/types/components.d.ts +8 -0
  226. package/hydrate/index.js +143 -39
  227. package/hydrate/index.mjs +143 -39
  228. package/package.json +2 -2
  229. package/dist/ionic/p-3bd766ca.entry.js +0 -4
  230. package/dist/ionic/p-76878c5f.entry.js +0 -4
  231. package/dist/ionic/p-8e57bbf1.entry.js +0 -4
  232. package/dist/ionic/p-BwAZiDRk.js +0 -4
  233. package/dist/ionic/p-C5UXyyFe.js +0 -5
  234. package/dist/ionic/p-DYo1kLGy.js +0 -4
  235. package/dist/ionic/p-f9c55d46.entry.js +0 -4
  236. package/dist/ionic/p-zEz12j4K.js +0 -4
@@ -54,6 +54,7 @@ export class Datetime {
54
54
  hour: 13,
55
55
  minute: 52,
56
56
  ampm: 'pm',
57
+ isAdjacentDay: false,
57
58
  };
58
59
  this.isTimePopoverOpen = false;
59
60
  /**
@@ -74,6 +75,12 @@ export class Datetime {
74
75
  * If `true`, the datetime appears normal but the selected date cannot be changed.
75
76
  */
76
77
  this.readonly = false;
78
+ /**
79
+ * If `true`, the datetime calendar displays a six-week (42-day) layout,
80
+ * including days from the previous and next months to fill the grid.
81
+ * These adjacent days are selectable unless disabled.
82
+ */
83
+ this.showAdjacentDays = false;
77
84
  /**
78
85
  * Which values you want to select. `"date"` will show
79
86
  * a calendar picker to select the month, day, and year. `"time"`
@@ -356,12 +363,15 @@ export class Datetime {
356
363
  };
357
364
  this.focusWorkingDay = (currentMonth) => {
358
365
  /**
359
- * Get the number of padding days so
366
+ * Get the number of offset days so
360
367
  * we know how much to offset our next selector by
361
368
  * to grab the correct calendar-day element.
362
369
  */
363
- const padding = currentMonth.querySelectorAll('.calendar-day-padding');
364
- const { day } = this.workingParts;
370
+ const { day, month, year } = this.workingParts;
371
+ const firstOfMonth = new Date(`${month}/1/${year}`).getDay();
372
+ const offset = firstOfMonth >= this.firstDayOfWeek
373
+ ? firstOfMonth - this.firstDayOfWeek
374
+ : 7 - (this.firstDayOfWeek - firstOfMonth);
365
375
  if (day === null) {
366
376
  return;
367
377
  }
@@ -369,7 +379,7 @@ export class Datetime {
369
379
  * Get the calendar day element
370
380
  * and focus it.
371
381
  */
372
- const dayEl = currentMonth.querySelector(`.calendar-day-wrapper:nth-of-type(${padding.length + day}) .calendar-day`);
382
+ const dayEl = currentMonth.querySelector(`.calendar-day-wrapper:nth-of-type(${offset + day}) .calendar-day`);
373
383
  if (dayEl) {
374
384
  dayEl.focus();
375
385
  }
@@ -1383,10 +1393,36 @@ export class Datetime {
1383
1393
  'calendar-month': true,
1384
1394
  // Prevents scroll snap swipe gestures for months outside of the min/max bounds
1385
1395
  'calendar-month-disabled': !isWorkingMonth && swipeDisabled,
1386
- } }, h("div", { class: "calendar-month-grid" }, getDaysOfMonth(month, year, this.firstDayOfWeek % 7).map((dateObject, index) => {
1387
- const { day, dayOfWeek } = dateObject;
1388
- const { el, highlightedDates, isDateEnabled, multiple } = this;
1389
- const referenceParts = { month, day, year };
1396
+ } }, h("div", { class: "calendar-month-grid" }, getDaysOfMonth(month, year, this.firstDayOfWeek % 7, this.showAdjacentDays).map((dateObject, index) => {
1397
+ const { day, dayOfWeek, isAdjacentDay } = dateObject;
1398
+ const { el, highlightedDates, isDateEnabled, multiple, showAdjacentDays } = this;
1399
+ let _month = month;
1400
+ let _year = year;
1401
+ if (showAdjacentDays && isAdjacentDay && day !== null) {
1402
+ if (day > 20) {
1403
+ // Leading with the adjacent day from the previous month
1404
+ // if its a adjacent day and is higher than '20' (last week even in feb)
1405
+ if (month === 1) {
1406
+ _year = year - 1;
1407
+ _month = 12;
1408
+ }
1409
+ else {
1410
+ _month = month - 1;
1411
+ }
1412
+ }
1413
+ else if (day < 15) {
1414
+ // Leading with the adjacent day from the next month
1415
+ // if its a adjacent day and is lower than '15' (first two weeks)
1416
+ if (month === 12) {
1417
+ _year = year + 1;
1418
+ _month = 1;
1419
+ }
1420
+ else {
1421
+ _month = month + 1;
1422
+ }
1423
+ }
1424
+ }
1425
+ const referenceParts = { month: _month, day, year: _year, isAdjacentDay };
1390
1426
  const isCalendarPadding = day === null;
1391
1427
  const { isActive, isToday, ariaLabel, ariaSelected, disabled: isDayDisabled, text, } = getCalendarDayState(this.locale, referenceParts, this.activeParts, this.todayParts, this.minParts, this.maxParts, this.parsedDayValues);
1392
1428
  const dateIsoString = convertDataToISO(referenceParts);
@@ -1416,15 +1452,18 @@ export class Datetime {
1416
1452
  * Custom highlight styles should not override the style for selected dates,
1417
1453
  * nor apply to "filler days" at the start of the grid.
1418
1454
  */
1419
- if (highlightedDates !== undefined && !isActive && day !== null) {
1455
+ if (highlightedDates !== undefined && !isActive && day !== null && !isAdjacentDay) {
1420
1456
  dateStyle = getHighlightStyles(highlightedDates, dateIsoString, el);
1421
1457
  }
1422
1458
  let dateParts = undefined;
1423
1459
  // "Filler days" at the beginning of the grid should not get the calendar day
1424
1460
  // CSS parts added to them
1425
- if (!isCalendarPadding) {
1461
+ if (!isCalendarPadding && !isAdjacentDay) {
1426
1462
  dateParts = `calendar-day${isActive ? ' active' : ''}${isToday ? ' today' : ''}${isCalDayDisabled ? ' disabled' : ''}`;
1427
1463
  }
1464
+ else if (isAdjacentDay) {
1465
+ dateParts = `calendar-day${isCalDayDisabled ? ' disabled' : ''}`;
1466
+ }
1428
1467
  return (h("div", { class: "calendar-day-wrapper" }, h("button", {
1429
1468
  // We need to use !important for the inline styles here because
1430
1469
  // otherwise the CSS shadow parts will override these styles.
@@ -1437,31 +1476,33 @@ export class Datetime {
1437
1476
  el.style.setProperty('color', `${dateStyle ? dateStyle.textColor : ''}`, 'important');
1438
1477
  el.style.setProperty('background-color', `${dateStyle ? dateStyle.backgroundColor : ''}`, 'important');
1439
1478
  }
1440
- }, tabindex: "-1", "data-day": day, "data-month": month, "data-year": year, "data-index": index, "data-day-of-week": dayOfWeek, disabled: isButtonDisabled, class: {
1479
+ }, tabindex: "-1", "data-day": day, "data-month": _month, "data-year": _year, "data-index": index, "data-day-of-week": dayOfWeek, disabled: isButtonDisabled, class: {
1441
1480
  'calendar-day-padding': isCalendarPadding,
1442
1481
  'calendar-day': true,
1443
1482
  'calendar-day-active': isActive,
1444
1483
  'calendar-day-constrained': isCalDayConstrained,
1445
1484
  'calendar-day-today': isToday,
1485
+ 'calendar-day-adjacent-day': isAdjacentDay,
1446
1486
  }, part: dateParts, "aria-hidden": isCalendarPadding ? 'true' : null, "aria-selected": ariaSelected, "aria-label": ariaLabel, onClick: () => {
1447
1487
  if (isCalendarPadding) {
1448
1488
  return;
1449
1489
  }
1450
- this.setWorkingParts(Object.assign(Object.assign({}, this.workingParts), { month,
1451
- day,
1452
- year }));
1453
- // multiple only needs date info, so we can wipe out other fields like time
1454
- if (multiple) {
1455
- this.setActiveParts({
1456
- month,
1457
- day,
1458
- year,
1459
- }, isActive);
1490
+ if (isAdjacentDay) {
1491
+ // The user selected a day outside the current month. Ignore this button, as the month will be re-rendered.
1492
+ this.el.blur();
1493
+ this.activeParts = Object.assign(Object.assign({}, activePart), referenceParts);
1494
+ this.animateToDate(referenceParts);
1495
+ this.confirm();
1460
1496
  }
1461
1497
  else {
1462
- this.setActiveParts(Object.assign(Object.assign({}, activePart), { month,
1463
- day,
1464
- year }));
1498
+ this.setWorkingParts(Object.assign(Object.assign({}, this.workingParts), referenceParts));
1499
+ // Multiple only needs date info so we can wipe out other fields like time.
1500
+ if (multiple) {
1501
+ this.setActiveParts(referenceParts, isActive);
1502
+ }
1503
+ else {
1504
+ this.setActiveParts(Object.assign(Object.assign({}, activePart), referenceParts));
1505
+ }
1465
1506
  }
1466
1507
  }
1467
1508
  }, text)));
@@ -1632,7 +1673,7 @@ export class Datetime {
1632
1673
  const hasDatePresentation = presentation === 'date' || presentation === 'date-time' || presentation === 'time-date';
1633
1674
  const hasWheelVariant = hasDatePresentation && preferWheel;
1634
1675
  renderHiddenInput(true, el, name, formatValue(value), disabled);
1635
- return (h(Host, { key: '08d429533a09c600b936ad1e022658051c765595', "aria-disabled": disabled ? 'true' : null, onFocus: this.onFocus, onBlur: this.onBlur, class: Object.assign({}, createColorClasses(color, {
1676
+ return (h(Host, { key: 'aa9d515bd5fda60f924bbed4f4f1c6fa7244a4a2', "aria-disabled": disabled ? 'true' : null, onFocus: this.onFocus, onBlur: this.onBlur, class: Object.assign({}, createColorClasses(color, {
1636
1677
  [mode]: true,
1637
1678
  ['datetime-readonly']: readonly,
1638
1679
  ['datetime-disabled']: disabled,
@@ -1642,7 +1683,7 @@ export class Datetime {
1642
1683
  [`datetime-size-${size}`]: true,
1643
1684
  [`datetime-prefer-wheel`]: hasWheelVariant,
1644
1685
  [`datetime-grid`]: isGridStyle,
1645
- })) }, h("div", { key: 'f4ff0fcd1e059767a7ef14fcc76ebfd55d23a97b', class: "intersection-tracker", ref: (el) => (this.intersectionTrackerRef = el) }), this.renderDatetime(mode)));
1686
+ })) }, h("div", { key: 'c85a22ea1b64ec5bf28e4d4c1567d72b6b8ce630', class: "intersection-tracker", ref: (el) => (this.intersectionTrackerRef = el) }), this.renderDatetime(mode)));
1646
1687
  }
1647
1688
  static get is() { return "ion-datetime"; }
1648
1689
  static get encapsulation() { return "shadow"; }
@@ -1788,6 +1829,26 @@ export class Datetime {
1788
1829
  "getter": false,
1789
1830
  "setter": false
1790
1831
  },
1832
+ "showAdjacentDays": {
1833
+ "type": "boolean",
1834
+ "attribute": "show-adjacent-days",
1835
+ "mutable": false,
1836
+ "complexType": {
1837
+ "original": "boolean",
1838
+ "resolved": "boolean",
1839
+ "references": {}
1840
+ },
1841
+ "required": false,
1842
+ "optional": false,
1843
+ "docs": {
1844
+ "tags": [],
1845
+ "text": "If `true`, the datetime calendar displays a six-week (42-day) layout,\nincluding days from the previous and next months to fill the grid.\nThese adjacent days are selectable unless disabled."
1846
+ },
1847
+ "getter": false,
1848
+ "setter": false,
1849
+ "reflect": false,
1850
+ "defaultValue": "false"
1851
+ },
1791
1852
  "min": {
1792
1853
  "type": "string",
1793
1854
  "attribute": "min",
@@ -371,7 +371,7 @@
371
371
  opacity: 0.4;
372
372
  }
373
373
 
374
- .calendar-day:focus {
374
+ .calendar-day:not(.calendar-day-adjacent-day):focus {
375
375
  background: rgba(var(--ion-color-base-rgb), 0.2);
376
376
  box-shadow: 0px 0px 0px 4px rgba(var(--ion-color-base-rgb), 0.2);
377
377
  }
@@ -652,15 +652,21 @@ ion-picker {
652
652
  * is selected should have ion-color for
653
653
  * text color and be bolder.
654
654
  */
655
- :host .calendar-day.calendar-day-active {
655
+ :host .calendar-day.calendar-day-active,
656
+ :host .calendar-day.calendar-day-adjacent-day.calendar-day-active {
656
657
  color: var(--ion-color-contrast);
657
658
  }
658
659
 
659
- .calendar-day.calendar-day-active {
660
+ .calendar-day.calendar-day-active,
661
+ .calendar-day.calendar-day-active:focus {
660
662
  border: 1px solid var(--ion-color-base);
661
663
  background: var(--ion-color-base);
662
664
  }
663
665
 
666
+ :host .calendar-day.calendar-day-adjacent-day {
667
+ color: var(--ion-color-step-500, var(--ion-text-color-step-500, gray));
668
+ }
669
+
664
670
  :host .datetime-time {
665
671
  -webkit-padding-start: 16px;
666
672
  padding-inline-start: 16px;
@@ -78,8 +78,17 @@ export const getDaysOfWeek = (locale, mode, firstDayOfWeek = 0) => {
78
78
  * the firstDayOfWeek value (Sunday by default)
79
79
  * using null values.
80
80
  */
81
- export const getDaysOfMonth = (month, year, firstDayOfWeek) => {
81
+ export const getDaysOfMonth = (month, year, firstDayOfWeek, showAdjacentDays = false) => {
82
82
  const numDays = getNumDaysInMonth(month, year);
83
+ let previousNumDays; //previous month number of days
84
+ if (month === 1) {
85
+ // If the current month is January, the previous month should be December of the previous year.
86
+ previousNumDays = getNumDaysInMonth(12, year - 1);
87
+ }
88
+ else {
89
+ // Otherwise, the previous month should be the current month - 1 of the same year.
90
+ previousNumDays = getNumDaysInMonth(month - 1, year);
91
+ }
83
92
  const firstOfMonth = new Date(`${month}/1/${year}`).getDay();
84
93
  /**
85
94
  * To get the first day of the month aligned on the correct
@@ -103,10 +112,26 @@ export const getDaysOfMonth = (month, year, firstDayOfWeek) => {
103
112
  const offset = firstOfMonth >= firstDayOfWeek ? firstOfMonth - (firstDayOfWeek + 1) : 6 - (firstDayOfWeek - firstOfMonth);
104
113
  let days = [];
105
114
  for (let i = 1; i <= numDays; i++) {
106
- days.push({ day: i, dayOfWeek: (offset + i) % 7 });
115
+ days.push({ day: i, dayOfWeek: (offset + i) % 7, isAdjacentDay: false });
116
+ }
117
+ if (showAdjacentDays) {
118
+ for (let i = 0; i <= offset; i++) {
119
+ // Using offset create previous month adjacent day, starting from last day
120
+ days = [{ day: previousNumDays - i, dayOfWeek: (previousNumDays - i) % 7, isAdjacentDay: true }, ...days];
121
+ }
122
+ // Calculate positiveOffset
123
+ // The calendar will display 42 days (6 rows of 7 columns)
124
+ // Knowing this the offset is 41 (we start at index 0)
125
+ // minus (the previous offset + the current month days)
126
+ const positiveOffset = 41 - (numDays + offset);
127
+ for (let i = 0; i < positiveOffset; i++) {
128
+ days.push({ day: i + 1, dayOfWeek: (numDays + offset + i) % 7, isAdjacentDay: true });
129
+ }
107
130
  }
108
- for (let i = 0; i <= offset; i++) {
109
- days = [{ day: null, dayOfWeek: null }, ...days];
131
+ else {
132
+ for (let i = 0; i <= offset; i++) {
133
+ days = [{ day: null, dayOfWeek: null, isAdjacentDay: false }, ...days];
134
+ }
110
135
  }
111
136
  return days;
112
137
  };
@@ -4,6 +4,7 @@
4
4
  import { Host, h } from "@stencil/core";
5
5
  import { renderHiddenInput, inheritAriaAttributes } from "../../utils/helpers";
6
6
  import { hapticSelection } from "../../utils/native/haptic";
7
+ import { isPlatform } from "../../utils/platform";
7
8
  import { isRTL } from "../../utils/rtl/index";
8
9
  import { createColorClasses, hostContext } from "../../utils/theme";
9
10
  import { checkmarkOutline, removeOutline, ellipseOutline } from "ionicons/icons";
@@ -85,12 +86,19 @@ export class Toggle {
85
86
  }
86
87
  };
87
88
  this.onClick = (ev) => {
89
+ /**
90
+ * The haptics for the toggle on tap is
91
+ * an iOS-only feature. As such, it should
92
+ * only trigger on iOS.
93
+ */
94
+ const enableHaptics = isPlatform('ios');
88
95
  if (this.disabled) {
89
96
  return;
90
97
  }
91
98
  ev.preventDefault();
92
99
  if (this.lastDrag + 300 < Date.now()) {
93
100
  this.toggleChecked();
101
+ enableHaptics && hapticSelection();
94
102
  }
95
103
  };
96
104
  this.onFocus = () => {
@@ -218,7 +226,7 @@ export class Toggle {
218
226
  const value = this.getValue();
219
227
  const rtl = isRTL(el) ? 'rtl' : 'ltr';
220
228
  renderHiddenInput(true, el, name, checked ? value : '', disabled);
221
- return (h(Host, { key: 'c6db7f5bc0b358944c0d79e24aeb4d319793422f', "aria-describedby": this.getHintTextID(), "aria-invalid": this.getHintTextID() === this.errorTextId, onClick: this.onClick, class: createColorClasses(color, {
229
+ return (h(Host, { key: '4aaa06d203551c3044e9917ea0c4e5d293bf97bc', "aria-describedby": this.getHintTextID(), "aria-invalid": this.getHintTextID() === this.errorTextId, onClick: this.onClick, class: createColorClasses(color, {
222
230
  [mode]: true,
223
231
  'in-item': hostContext('ion-item', el),
224
232
  'toggle-activated': activated,
@@ -228,10 +236,10 @@ export class Toggle {
228
236
  [`toggle-alignment-${alignment}`]: alignment !== undefined,
229
237
  [`toggle-label-placement-${labelPlacement}`]: true,
230
238
  [`toggle-${rtl}`]: true,
231
- }) }, h("label", { key: 'f49531391f4513d084061c27ebc4c4eb1dcd02ab', class: "toggle-wrapper" }, h("input", Object.assign({ key: 'f4ab2dc29eae053f54613d1304f755e151037f47', type: "checkbox", role: "switch", "aria-checked": `${checked}`, checked: checked, disabled: disabled, id: inputId, onFocus: () => this.onFocus(), onBlur: () => this.onBlur(), ref: (focusEl) => (this.focusEl = focusEl), required: required }, this.inheritedAttributes)), h("div", { key: '85674bfab5ec1e422c787d025c4f9f5b3aadd4f2', class: {
239
+ }) }, h("label", { key: 'c8474c9c44ec6130e6380791b74c2b6ce1c0f9e4', class: "toggle-wrapper" }, h("input", Object.assign({ key: '6f9ba22ffeb1660e4238a98bdbb8dc4bcce3f229', type: "checkbox", role: "switch", "aria-checked": `${checked}`, checked: checked, disabled: disabled, id: inputId, onFocus: () => this.onFocus(), onBlur: () => this.onBlur(), ref: (focusEl) => (this.focusEl = focusEl), required: required }, this.inheritedAttributes)), h("div", { key: '6e980fae20ae17e3c879c555155a16a974726527', class: {
232
240
  'label-text-wrapper': true,
233
241
  'label-text-wrapper-hidden': !this.hasLabel,
234
- }, part: "label" }, h("slot", { key: '9bdf7e85c95dc7373f18894ebfe6ad022f098107' }), this.renderHintText()), h("div", { key: '33883642b38421a82001e37db3dd5e5c643785b0', class: "native-wrapper" }, this.renderToggleControl()))));
242
+ }, part: "label" }, h("slot", { key: '2a5bc3c46ca0983c86bd1b7497f153c389e6d01f' }), this.renderHintText()), h("div", { key: '3e99e2ba44cb2bade251f723e78165e21261598c', class: "native-wrapper" }, this.renderToggleControl()))));
235
243
  }
236
244
  static get is() { return "ion-toggle"; }
237
245
  static get encapsulation() { return "shadow"; }
package/dist/docs.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
- "timestamp": "2025-04-09T14:36:38",
2
+ "timestamp": "2025-04-14T16:07:36",
3
3
  "compiler": {
4
4
  "name": "@stencil/core",
5
- "version": "4.29.2",
5
+ "version": "4.29.3",
6
6
  "typescriptVersion": "5.5.4"
7
7
  },
8
8
  "components": [
@@ -8877,6 +8877,30 @@
8877
8877
  "getter": false,
8878
8878
  "setter": false
8879
8879
  },
8880
+ {
8881
+ "name": "showAdjacentDays",
8882
+ "type": "boolean",
8883
+ "complexType": {
8884
+ "original": "boolean",
8885
+ "resolved": "boolean",
8886
+ "references": {}
8887
+ },
8888
+ "mutable": false,
8889
+ "attr": "show-adjacent-days",
8890
+ "reflectToAttr": false,
8891
+ "docs": "If `true`, the datetime calendar displays a six-week (42-day) layout,\nincluding days from the previous and next months to fill the grid.\nThese adjacent days are selectable unless disabled.",
8892
+ "docsTags": [],
8893
+ "default": "false",
8894
+ "values": [
8895
+ {
8896
+ "type": "boolean"
8897
+ }
8898
+ ],
8899
+ "optional": false,
8900
+ "required": false,
8901
+ "getter": false,
8902
+ "setter": false
8903
+ },
8880
8904
  {
8881
8905
  "name": "showClearButton",
8882
8906
  "type": "boolean",
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
- import { i as initialize } from './ionic-global-GkM1xiqt.js';
4
+ import { i as initialize } from './ionic-global-CrB2BPUW.js';
5
5
 
6
6
  const globalScripts = initialize;
7
7
 
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
- import { w as writeTask } from './index-C5UXyyFe.js';
4
+ import { w as writeTask } from './index-EP3pwcdb.js';
5
5
  import { h as hapticSelectionEnd, a as hapticSelectionChanged, b as hapticSelectionStart } from './haptic-DzAMWJuk.js';
6
6
  import { createGesture } from './index-CfgBF1SE.js';
7
7
 
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
- import { a as printIonWarning } from './index-PfJyigSK.js';
4
+ import { a as printIonWarning } from './index-DR2njD_q.js';
5
5
 
6
6
  /**
7
7
  * Returns true if the selected day is equal to the reference day
@@ -1182,8 +1182,17 @@ const getDaysOfWeek = (locale, mode, firstDayOfWeek = 0) => {
1182
1182
  * the firstDayOfWeek value (Sunday by default)
1183
1183
  * using null values.
1184
1184
  */
1185
- const getDaysOfMonth = (month, year, firstDayOfWeek) => {
1185
+ const getDaysOfMonth = (month, year, firstDayOfWeek, showAdjacentDays = false) => {
1186
1186
  const numDays = getNumDaysInMonth(month, year);
1187
+ let previousNumDays; //previous month number of days
1188
+ if (month === 1) {
1189
+ // If the current month is January, the previous month should be December of the previous year.
1190
+ previousNumDays = getNumDaysInMonth(12, year - 1);
1191
+ }
1192
+ else {
1193
+ // Otherwise, the previous month should be the current month - 1 of the same year.
1194
+ previousNumDays = getNumDaysInMonth(month - 1, year);
1195
+ }
1187
1196
  const firstOfMonth = new Date(`${month}/1/${year}`).getDay();
1188
1197
  /**
1189
1198
  * To get the first day of the month aligned on the correct
@@ -1207,10 +1216,26 @@ const getDaysOfMonth = (month, year, firstDayOfWeek) => {
1207
1216
  const offset = firstOfMonth >= firstDayOfWeek ? firstOfMonth - (firstDayOfWeek + 1) : 6 - (firstDayOfWeek - firstOfMonth);
1208
1217
  let days = [];
1209
1218
  for (let i = 1; i <= numDays; i++) {
1210
- days.push({ day: i, dayOfWeek: (offset + i) % 7 });
1219
+ days.push({ day: i, dayOfWeek: (offset + i) % 7, isAdjacentDay: false });
1220
+ }
1221
+ if (showAdjacentDays) {
1222
+ for (let i = 0; i <= offset; i++) {
1223
+ // Using offset create previous month adjacent day, starting from last day
1224
+ days = [{ day: previousNumDays - i, dayOfWeek: (previousNumDays - i) % 7, isAdjacentDay: true }, ...days];
1225
+ }
1226
+ // Calculate positiveOffset
1227
+ // The calendar will display 42 days (6 rows of 7 columns)
1228
+ // Knowing this the offset is 41 (we start at index 0)
1229
+ // minus (the previous offset + the current month days)
1230
+ const positiveOffset = 41 - (numDays + offset);
1231
+ for (let i = 0; i < positiveOffset; i++) {
1232
+ days.push({ day: i + 1, dayOfWeek: (numDays + offset + i) % 7, isAdjacentDay: true });
1233
+ }
1211
1234
  }
1212
- for (let i = 0; i <= offset; i++) {
1213
- days = [{ day: null, dayOfWeek: null }, ...days];
1235
+ else {
1236
+ for (let i = 0; i <= offset; i++) {
1237
+ days = [{ day: null, dayOfWeek: null, isAdjacentDay: false }, ...days];
1238
+ }
1214
1239
  }
1215
1240
  return days;
1216
1241
  };
@@ -2,8 +2,8 @@
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
4
  import { w as win } from './index-ZjP4CjeZ.js';
5
- import { c as config } from './ionic-global-GkM1xiqt.js';
6
- import './index-C5UXyyFe.js';
5
+ import { c as config } from './ionic-global-CrB2BPUW.js';
6
+ import './index-EP3pwcdb.js';
7
7
 
8
8
  /**
9
9
  * CloseWatcher is a newer API that lets
@@ -1,9 +1,9 @@
1
1
  /*!
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
- import { c as config } from './ionic-global-GkM1xiqt.js';
5
- import { w as writeTask, B as Build } from './index-C5UXyyFe.js';
6
- import { a as printIonWarning } from './index-PfJyigSK.js';
4
+ import { c as config } from './ionic-global-CrB2BPUW.js';
5
+ import { w as writeTask, B as Build } from './index-EP3pwcdb.js';
6
+ import { a as printIonWarning } from './index-DR2njD_q.js';
7
7
  import { r as raf } from './helpers-Di6ciXLG.js';
8
8
 
9
9
  const LIFECYCLE_WILL_ENTER = 'ionViewWillEnter';
@@ -120,8 +120,8 @@ const createFocusController = () => {
120
120
  };
121
121
  const LAST_FOCUS = 'ion-last-focus';
122
122
 
123
- const iosTransitionAnimation = () => import('./ios.transition-BcTzvx5_.js');
124
- const mdTransitionAnimation = () => import('./md.transition-DYGWIgPE.js');
123
+ const iosTransitionAnimation = () => import('./ios.transition-BObaMu_w.js');
124
+ const mdTransitionAnimation = () => import('./md.transition-BYk9oj5T.js');
125
125
  const focusController = createFocusController();
126
126
  // TODO(FW-2832): types
127
127
  const transition = (opts) => {
@@ -2,10 +2,10 @@
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
4
  import { d as doc } from './index-ZjP4CjeZ.js';
5
- import { MENU_BACK_BUTTON_PRIORITY } from './hardware-back-button-CRemSDoj.js';
6
- import { a as printIonWarning } from './index-PfJyigSK.js';
5
+ import { MENU_BACK_BUTTON_PRIORITY } from './hardware-back-button-RMajLSrZ.js';
6
+ import { a as printIonWarning } from './index-DR2njD_q.js';
7
7
  import { c as componentOnReady } from './helpers-Di6ciXLG.js';
8
- import { b as getIonMode } from './ionic-global-GkM1xiqt.js';
8
+ import { b as getIonMode } from './ionic-global-CrB2BPUW.js';
9
9
  import { c as createAnimation } from './animation-CCtpQcsN.js';
10
10
 
11
11
  /**
@@ -2,7 +2,7 @@
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
4
  import { c as componentOnReady } from './helpers-Di6ciXLG.js';
5
- import { b as printRequiredElementError } from './index-PfJyigSK.js';
5
+ import { b as printRequiredElementError } from './index-DR2njD_q.js';
6
6
 
7
7
  const ION_CONTENT_TAG_NAME = 'ION-CONTENT';
8
8
  const ION_CONTENT_ELEMENT_SELECTOR = 'ion-content';
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
- import { c as config } from './ionic-global-GkM1xiqt.js';
4
+ import { c as config } from './ionic-global-CrB2BPUW.js';
5
5
 
6
6
  /**
7
7
  * Logs a warning to the console with an Ionic prefix
@@ -5,7 +5,7 @@ const NAMESPACE = 'ionic';
5
5
  const BUILD = /* ionic */ { experimentalSlotFixes: true, hydratedSelectorName: "hydrated", lazyLoad: true, shadowDom: true, slotRelocation: true, updatable: true};
6
6
 
7
7
  /*
8
- Stencil Client Platform v4.29.2 | MIT Licensed | https://stenciljs.com
8
+ Stencil Client Platform v4.29.3 | MIT Licensed | https://stenciljs.com
9
9
  */
10
10
  var __defProp = Object.defineProperty;
11
11
  var __export = (target, all) => {
@@ -219,6 +219,11 @@ function queryNonceMetaTagContent(doc) {
219
219
  return (_c = (_b = (_a = doc.head) == null ? void 0 : _a.querySelector('meta[name="csp-nonce"]')) == null ? void 0 : _b.getAttribute("content")) != null ? _c : void 0;
220
220
  }
221
221
 
222
+ // src/utils/regular-expression.ts
223
+ var escapeRegExpSpecialCharacters = (text) => {
224
+ return text.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
225
+ };
226
+
222
227
  // src/utils/remote-value.ts
223
228
  var RemoteValue = class _RemoteValue {
224
229
  /**
@@ -1417,6 +1422,18 @@ var findCorrespondingNode = (node, type) => {
1417
1422
  } while (sibling && (sibling.nodeType !== type || !sibling.nodeValue));
1418
1423
  return sibling;
1419
1424
  };
1425
+ var createSupportsRuleRe = (selector) => {
1426
+ const safeSelector2 = escapeRegExpSpecialCharacters(selector);
1427
+ return new RegExp(
1428
+ // First capture group: match any context before the selector that's not inside @supports selector()
1429
+ // Using negative lookahead to avoid matching inside @supports selector(...) condition
1430
+ `(^|[^@]|@(?!supports\\s+selector\\s*\\([^{]*?${safeSelector2}))(${safeSelector2}\\b)`,
1431
+ "g"
1432
+ );
1433
+ };
1434
+ createSupportsRuleRe("::slotted");
1435
+ createSupportsRuleRe(":host");
1436
+ createSupportsRuleRe(":host-context");
1420
1437
 
1421
1438
  // src/runtime/mode.ts
1422
1439
  var computeMode = (elm) => modeResolutionChain.map((h2) => h2(elm)).find((m) => !!m);
package/dist/esm/index.js CHANGED
@@ -2,22 +2,22 @@
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
4
  export { c as createAnimation } from './animation-CCtpQcsN.js';
5
- export { a as LIFECYCLE_DID_ENTER, c as LIFECYCLE_DID_LEAVE, L as LIFECYCLE_WILL_ENTER, b as LIFECYCLE_WILL_LEAVE, d as LIFECYCLE_WILL_UNLOAD, g as getIonPageElement } from './index-DYJvRcE0.js';
6
- export { iosTransitionAnimation } from './ios.transition-BcTzvx5_.js';
7
- export { mdTransitionAnimation } from './md.transition-DYGWIgPE.js';
5
+ export { a as LIFECYCLE_DID_ENTER, c as LIFECYCLE_DID_LEAVE, L as LIFECYCLE_WILL_ENTER, b as LIFECYCLE_WILL_LEAVE, d as LIFECYCLE_WILL_UNLOAD, g as getIonPageElement } from './index-BKfOgUuW.js';
6
+ export { iosTransitionAnimation } from './ios.transition-BObaMu_w.js';
7
+ export { mdTransitionAnimation } from './md.transition-BYk9oj5T.js';
8
8
  export { g as getTimeGivenProgression } from './cubic-bezier-hHmYLOfE.js';
9
9
  export { createGesture } from './index-CfgBF1SE.js';
10
- export { g as getPlatforms, i as initialize, a as isPlatform } from './ionic-global-GkM1xiqt.js';
10
+ export { g as getPlatforms, i as initialize, a as isPlatform } from './ionic-global-CrB2BPUW.js';
11
11
  export { c as componentOnReady } from './helpers-Di6ciXLG.js';
12
12
  export { I as IonicSafeString, g as getMode, s as setupConfig } from './config-O8NobGs3.js';
13
13
  export { o as openURL } from './theme-DiVJyqlX.js';
14
- export { m as menuController } from './index-DZLiflRE.js';
15
- export { b as actionSheetController, a as alertController, l as loadingController, m as modalController, p as pickerController, c as popoverController, t as toastController } from './overlays-BuSzwtlC.js';
14
+ export { m as menuController } from './index-C7r3mIlB.js';
15
+ export { b as actionSheetController, a as alertController, l as loadingController, m as modalController, p as pickerController, c as popoverController, t as toastController } from './overlays-DUDTB6a2.js';
16
16
  import './index-ZjP4CjeZ.js';
17
- import './index-C5UXyyFe.js';
18
- import './index-PfJyigSK.js';
17
+ import './index-EP3pwcdb.js';
18
+ import './index-DR2njD_q.js';
19
19
  import './gesture-controller-BTEOs1at.js';
20
- import './hardware-back-button-CRemSDoj.js';
20
+ import './hardware-back-button-RMajLSrZ.js';
21
21
  import './framework-delegate-D3CI7y6x.js';
22
22
 
23
23
  const IonicSlides = (opts) => {
@@ -2,12 +2,12 @@
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
4
  import { w as win, d as doc } from './index-ZjP4CjeZ.js';
5
- import { g as getScrollElement, c as scrollByPoint, f as findClosestIonContent } from './index-DWiwgv23.js';
5
+ import { g as getScrollElement, c as scrollByPoint, f as findClosestIonContent } from './index-CDohRbVJ.js';
6
6
  import { f as addEventListener, m as removeEventListener, r as raf, c as componentOnReady } from './helpers-Di6ciXLG.js';
7
7
  import { a as KeyboardResize, K as Keyboard } from './keyboard-CUw4ekVy.js';
8
- import './index-PfJyigSK.js';
9
- import './ionic-global-GkM1xiqt.js';
10
- import './index-C5UXyyFe.js';
8
+ import './index-DR2njD_q.js';
9
+ import './ionic-global-CrB2BPUW.js';
10
+ import './index-EP3pwcdb.js';
11
11
  import './capacitor-CFERIeaU.js';
12
12
 
13
13
  const cloneMap = new WeakMap();
@@ -3,7 +3,7 @@
3
3
  */
4
4
  import { w as win } from './index-ZjP4CjeZ.js';
5
5
  import { r as raf } from './helpers-Di6ciXLG.js';
6
- import { p as printIonError } from './index-PfJyigSK.js';
6
+ import { p as printIonError } from './index-DR2njD_q.js';
7
7
 
8
8
  /**
9
9
  * Used to update a scoped component that uses emulated slots. This fires when