@ionic/core 7.3.2-dev.11693402720.1adb3bcf → 7.3.2-dev.11693507138.1f9ed625

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 (122) hide show
  1. package/components/checkbox.js +6 -3
  2. package/components/data.js +31 -7
  3. package/components/ion-datetime-button.js +3 -0
  4. package/components/ion-datetime.js +106 -81
  5. package/components/ion-range.js +2 -2
  6. package/components/ion-router-outlet.js +2 -2
  7. package/components/ion-textarea.js +3 -3
  8. package/components/ion-toggle.js +6 -3
  9. package/components/radio.js +6 -3
  10. package/dist/cjs/{data-967b9c15.js → data-db832785.js} +31 -7
  11. package/dist/cjs/ion-app_8.cjs.entry.js +2 -2
  12. package/dist/cjs/ion-checkbox.cjs.entry.js +5 -3
  13. package/dist/cjs/ion-datetime-button.cjs.entry.js +4 -1
  14. package/dist/cjs/ion-datetime_3.cjs.entry.js +106 -82
  15. package/dist/cjs/ion-radio_2.cjs.entry.js +5 -3
  16. package/dist/cjs/ion-range.cjs.entry.js +2 -2
  17. package/dist/cjs/ion-textarea.cjs.entry.js +2 -2
  18. package/dist/cjs/ion-toggle.cjs.entry.js +5 -3
  19. package/dist/cjs/ionic.cjs.js +1 -1
  20. package/dist/cjs/loader.cjs.js +1 -1
  21. package/dist/collection/collection-manifest.json +1 -1
  22. package/dist/collection/components/checkbox/checkbox.ios.css +35 -0
  23. package/dist/collection/components/checkbox/checkbox.js +24 -4
  24. package/dist/collection/components/checkbox/checkbox.md.css +35 -0
  25. package/dist/collection/components/checkbox/test/item/checkbox.e2e.js +13 -0
  26. package/dist/collection/components/checkbox/test/label/checkbox.e2e.js +16 -0
  27. package/dist/collection/components/datetime/datetime.js +107 -84
  28. package/dist/collection/components/datetime/test/prefer-wheel/datetime.e2e.js +15 -0
  29. package/dist/collection/components/datetime/test/set-value/datetime.e2e.js +9 -12
  30. package/dist/collection/components/datetime/utils/data.js +14 -6
  31. package/dist/collection/components/datetime/utils/parse.js +18 -1
  32. package/dist/collection/components/datetime-button/datetime-button.js +3 -0
  33. package/dist/collection/components/radio/radio.ios.css +35 -0
  34. package/dist/collection/components/radio/radio.js +24 -4
  35. package/dist/collection/components/radio/radio.md.css +35 -0
  36. package/dist/collection/components/radio/test/item/radio.e2e.js +15 -0
  37. package/dist/collection/components/radio/test/label-placement/radio.e2e.js +20 -0
  38. package/dist/collection/components/range/range.ios.css +41 -1
  39. package/dist/collection/components/range/range.js +3 -3
  40. package/dist/collection/components/range/range.md.css +41 -1
  41. package/dist/collection/components/range/test/label/range.e2e.js +48 -0
  42. package/dist/collection/components/router-outlet/{router-outlet.js → route-outlet.js} +2 -2
  43. package/dist/collection/components/textarea/textarea.ios.css +0 -16
  44. package/dist/collection/components/textarea/textarea.js +1 -1
  45. package/dist/collection/components/textarea/textarea.md.css +0 -16
  46. package/dist/collection/components/toggle/test/item/toggle.e2e.js +15 -0
  47. package/dist/collection/components/toggle/test/label/toggle.e2e.js +16 -0
  48. package/dist/collection/components/toggle/toggle.ios.css +35 -1
  49. package/dist/collection/components/toggle/toggle.js +24 -4
  50. package/dist/collection/components/toggle/toggle.md.css +35 -1
  51. package/dist/docs.json +117 -20
  52. package/dist/esm/{data-4b448e3a.js → data-009dbf15.js} +31 -7
  53. package/dist/esm/ion-app_8.entry.js +2 -2
  54. package/dist/esm/ion-checkbox.entry.js +5 -3
  55. package/dist/esm/ion-datetime-button.entry.js +4 -1
  56. package/dist/esm/ion-datetime_3.entry.js +106 -82
  57. package/dist/esm/ion-radio_2.entry.js +5 -3
  58. package/dist/esm/ion-range.entry.js +2 -2
  59. package/dist/esm/ion-textarea.entry.js +2 -2
  60. package/dist/esm/ion-toggle.entry.js +5 -3
  61. package/dist/esm/ionic.js +1 -1
  62. package/dist/esm/loader.js +1 -1
  63. package/dist/esm-es5/data-009dbf15.js +4 -0
  64. package/dist/esm-es5/ion-app_8.entry.js +1 -1
  65. package/dist/esm-es5/ion-checkbox.entry.js +1 -1
  66. package/dist/esm-es5/ion-datetime-button.entry.js +1 -1
  67. package/dist/esm-es5/ion-datetime_3.entry.js +1 -1
  68. package/dist/esm-es5/ion-radio_2.entry.js +1 -1
  69. package/dist/esm-es5/ion-range.entry.js +1 -1
  70. package/dist/esm-es5/ion-textarea.entry.js +1 -1
  71. package/dist/esm-es5/ion-toggle.entry.js +1 -1
  72. package/dist/esm-es5/ionic.js +1 -1
  73. package/dist/esm-es5/loader.js +1 -1
  74. package/dist/html.html-data.json +53 -5
  75. package/dist/ionic/ionic.esm.js +1 -1
  76. package/dist/ionic/p-1f4adf06.system.entry.js +4 -0
  77. package/dist/ionic/p-2f8bea16.entry.js +4 -0
  78. package/dist/ionic/p-40138199.entry.js +4 -0
  79. package/dist/ionic/p-44ef7224.system.js +4 -0
  80. package/dist/ionic/p-4ca1ce6b.system.entry.js +4 -0
  81. package/dist/ionic/{p-d3b8aebf.entry.js → p-67b891af.entry.js} +1 -1
  82. package/dist/ionic/p-6da27ab8.system.entry.js +4 -0
  83. package/dist/ionic/p-721933ff.system.js +1 -1
  84. package/dist/ionic/p-7cfd253c.js +4 -0
  85. package/dist/ionic/p-7d93084b.entry.js +4 -0
  86. package/dist/ionic/p-86c5c320.entry.js +4 -0
  87. package/dist/ionic/p-90ec5785.system.entry.js +4 -0
  88. package/dist/ionic/p-af986299.system.entry.js +4 -0
  89. package/dist/ionic/p-b321c999.entry.js +4 -0
  90. package/dist/ionic/p-c328936a.system.entry.js +4 -0
  91. package/dist/ionic/p-d8a0267b.system.entry.js +4 -0
  92. package/dist/ionic/p-f5c19164.entry.js +4 -0
  93. package/dist/types/components/checkbox/checkbox.d.ts +8 -1
  94. package/dist/types/components/datetime/datetime.d.ts +17 -10
  95. package/dist/types/components/datetime/utils/data.d.ts +1 -1
  96. package/dist/types/components/datetime/utils/parse.d.ts +3 -3
  97. package/dist/types/components/radio/radio.d.ts +8 -1
  98. package/dist/types/components/range/range.d.ts +2 -1
  99. package/dist/types/components/toast/toast-interface.d.ts +3 -0
  100. package/dist/types/components/toggle/toggle.d.ts +8 -1
  101. package/dist/types/components.d.ts +40 -16
  102. package/hydrate/index.js +166 -105
  103. package/package.json +1 -1
  104. package/dist/collection/components/textarea/test/cols/textarea.e2e.js +0 -37
  105. package/dist/esm-es5/data-4b448e3a.js +0 -4
  106. package/dist/ionic/p-0053fe81.system.entry.js +0 -4
  107. package/dist/ionic/p-2cdcd6f2.entry.js +0 -4
  108. package/dist/ionic/p-48144921.entry.js +0 -4
  109. package/dist/ionic/p-564aaba3.entry.js +0 -4
  110. package/dist/ionic/p-5b88f780.entry.js +0 -4
  111. package/dist/ionic/p-601fd53c.js +0 -4
  112. package/dist/ionic/p-98b618ce.system.entry.js +0 -4
  113. package/dist/ionic/p-b1e8f045.entry.js +0 -4
  114. package/dist/ionic/p-b3cfc6e1.system.entry.js +0 -4
  115. package/dist/ionic/p-bbae0ac3.system.entry.js +0 -4
  116. package/dist/ionic/p-cc8910e7.system.js +0 -4
  117. package/dist/ionic/p-dd0b6889.system.entry.js +0 -4
  118. package/dist/ionic/p-e53b8af4.system.entry.js +0 -4
  119. package/dist/ionic/p-f78e60a5.entry.js +0 -4
  120. package/dist/ionic/p-fd42994b.system.entry.js +0 -4
  121. /package/dist/collection/components/router-outlet/{router-outlet.css → route-outlet.css} +0 -0
  122. /package/dist/types/components/router-outlet/{router-outlet.d.ts → route-outlet.d.ts} +0 -0
package/dist/docs.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "timestamp": "2023-08-30T13:40:50",
2
+ "timestamp": "2023-08-31T18:41:09",
3
3
  "compiler": {
4
4
  "name": "@stencil/core",
5
5
  "version": "4.1.0",
@@ -4959,6 +4959,33 @@
4959
4959
  ],
4960
4960
  "usage": {},
4961
4961
  "props": [
4962
+ {
4963
+ "name": "alignment",
4964
+ "type": "\"center\" | \"start\"",
4965
+ "complexType": {
4966
+ "original": "'start' | 'center'",
4967
+ "resolved": "\"center\" | \"start\"",
4968
+ "references": {}
4969
+ },
4970
+ "mutable": false,
4971
+ "attr": "alignment",
4972
+ "reflectToAttr": false,
4973
+ "docs": "How to control the alignment of the checkbox and label on the cross axis.\n`\"start\"`: The label and control will appear on the left of the cross axis in LTR, and on the right side in RTL.\n`\"center\"`: The label and control will appear at the center of the cross axis in both LTR and RTL.",
4974
+ "docsTags": [],
4975
+ "default": "'center'",
4976
+ "values": [
4977
+ {
4978
+ "value": "center",
4979
+ "type": "string"
4980
+ },
4981
+ {
4982
+ "value": "start",
4983
+ "type": "string"
4984
+ }
4985
+ ],
4986
+ "optional": false,
4987
+ "required": false
4988
+ },
4962
4989
  {
4963
4990
  "name": "checked",
4964
4991
  "type": "boolean",
@@ -5124,16 +5151,16 @@
5124
5151
  },
5125
5152
  {
5126
5153
  "name": "labelPlacement",
5127
- "type": "\"end\" | \"fixed\" | \"start\"",
5154
+ "type": "\"end\" | \"fixed\" | \"stacked\" | \"start\"",
5128
5155
  "complexType": {
5129
- "original": "'start' | 'end' | 'fixed'",
5130
- "resolved": "\"end\" | \"fixed\" | \"start\"",
5156
+ "original": "'start' | 'end' | 'fixed' | 'stacked'",
5157
+ "resolved": "\"end\" | \"fixed\" | \"stacked\" | \"start\"",
5131
5158
  "references": {}
5132
5159
  },
5133
5160
  "mutable": false,
5134
5161
  "attr": "label-placement",
5135
5162
  "reflectToAttr": false,
5136
- "docs": "Where to place the label relative to the checkbox.\n`\"start\"`: The label will appear to the left of the checkbox in LTR and to the right in RTL.\n`\"end\"`: The label will appear to the right of the checkbox in LTR and to the left in RTL.\n`\"fixed\"`: The label has the same behavior as `\"start\"` except it also has a fixed width. Long text will be truncated with ellipses (\"...\").",
5163
+ "docs": "Where to place the label relative to the checkbox.\n`\"start\"`: The label will appear to the left of the checkbox in LTR and to the right in RTL.\n`\"end\"`: The label will appear to the right of the checkbox in LTR and to the left in RTL.\n`\"fixed\"`: The label has the same behavior as `\"start\"` except it also has a fixed width. Long text will be truncated with ellipses (\"...\").\n`\"stacked\"`: The label will appear above the checkbox regardless of the direction. The alignment of the label can be controlled with the `alignment` property.",
5137
5164
  "docsTags": [],
5138
5165
  "default": "'start'",
5139
5166
  "values": [
@@ -5145,6 +5172,10 @@
5145
5172
  "value": "fixed",
5146
5173
  "type": "string"
5147
5174
  },
5175
+ {
5176
+ "value": "stacked",
5177
+ "type": "string"
5178
+ },
5148
5179
  {
5149
5180
  "value": "start",
5150
5181
  "type": "string"
@@ -19254,6 +19285,33 @@
19254
19285
  ],
19255
19286
  "usage": {},
19256
19287
  "props": [
19288
+ {
19289
+ "name": "alignment",
19290
+ "type": "\"center\" | \"start\"",
19291
+ "complexType": {
19292
+ "original": "'start' | 'center'",
19293
+ "resolved": "\"center\" | \"start\"",
19294
+ "references": {}
19295
+ },
19296
+ "mutable": false,
19297
+ "attr": "alignment",
19298
+ "reflectToAttr": false,
19299
+ "docs": "How to control the alignment of the radio and label on the cross axis.\n`\"start\"`: The label and control will appear on the left of the cross axis in LTR, and on the right side in RTL.\n`\"center\"`: The label and control will appear at the center of the cross axis in both LTR and RTL.",
19300
+ "docsTags": [],
19301
+ "default": "'center'",
19302
+ "values": [
19303
+ {
19304
+ "value": "center",
19305
+ "type": "string"
19306
+ },
19307
+ {
19308
+ "value": "start",
19309
+ "type": "string"
19310
+ }
19311
+ ],
19312
+ "optional": false,
19313
+ "required": false
19314
+ },
19257
19315
  {
19258
19316
  "name": "color",
19259
19317
  "type": "\"danger\" | \"dark\" | \"light\" | \"medium\" | \"primary\" | \"secondary\" | \"success\" | \"tertiary\" | \"warning\" | string & Record<never, never> | undefined",
@@ -19375,16 +19433,16 @@
19375
19433
  },
19376
19434
  {
19377
19435
  "name": "labelPlacement",
19378
- "type": "\"end\" | \"fixed\" | \"start\"",
19436
+ "type": "\"end\" | \"fixed\" | \"stacked\" | \"start\"",
19379
19437
  "complexType": {
19380
- "original": "'start' | 'end' | 'fixed'",
19381
- "resolved": "\"end\" | \"fixed\" | \"start\"",
19438
+ "original": "'start' | 'end' | 'fixed' | 'stacked'",
19439
+ "resolved": "\"end\" | \"fixed\" | \"stacked\" | \"start\"",
19382
19440
  "references": {}
19383
19441
  },
19384
19442
  "mutable": false,
19385
19443
  "attr": "label-placement",
19386
19444
  "reflectToAttr": false,
19387
- "docs": "Where to place the label relative to the radio.\n`\"start\"`: The label will appear to the left of the radio in LTR and to the right in RTL.\n`\"end\"`: The label will appear to the right of the radio in LTR and to the left in RTL.\n`\"fixed\"`: The label has the same behavior as `\"start\"` except it also has a fixed width. Long text will be truncated with ellipses (\"...\").",
19445
+ "docs": "Where to place the label relative to the radio.\n`\"start\"`: The label will appear to the left of the radio in LTR and to the right in RTL.\n`\"end\"`: The label will appear to the right of the radio in LTR and to the left in RTL.\n`\"fixed\"`: The label has the same behavior as `\"start\"` except it also has a fixed width. Long text will be truncated with ellipses (\"...\").\n`\"stacked\"`: The label will appear above the radio regardless of the direction. The alignment of the label can be controlled with the `alignment` property.",
19388
19446
  "docsTags": [],
19389
19447
  "default": "'start'",
19390
19448
  "values": [
@@ -19396,6 +19454,10 @@
19396
19454
  "value": "fixed",
19397
19455
  "type": "string"
19398
19456
  },
19457
+ {
19458
+ "value": "stacked",
19459
+ "type": "string"
19460
+ },
19399
19461
  {
19400
19462
  "value": "start",
19401
19463
  "type": "string"
@@ -19924,16 +19986,16 @@
19924
19986
  },
19925
19987
  {
19926
19988
  "name": "labelPlacement",
19927
- "type": "\"end\" | \"fixed\" | \"start\"",
19989
+ "type": "\"end\" | \"fixed\" | \"stacked\" | \"start\"",
19928
19990
  "complexType": {
19929
- "original": "'start' | 'end' | 'fixed'",
19930
- "resolved": "\"end\" | \"fixed\" | \"start\"",
19991
+ "original": "'start' | 'end' | 'fixed' | 'stacked'",
19992
+ "resolved": "\"end\" | \"fixed\" | \"stacked\" | \"start\"",
19931
19993
  "references": {}
19932
19994
  },
19933
19995
  "mutable": false,
19934
19996
  "attr": "label-placement",
19935
19997
  "reflectToAttr": false,
19936
- "docs": "Where to place the label relative to the range.\n`\"start\"`: The label will appear to the left of the range in LTR and to the right in RTL.\n`\"end\"`: The label will appear to the right of the range in LTR and to the left in RTL.\n`\"fixed\"`: The label has the same behavior as `\"start\"` except it also has a fixed width. Long text will be truncated with ellipses (\"...\").",
19998
+ "docs": "Where to place the label relative to the range.\n`\"start\"`: The label will appear to the left of the range in LTR and to the right in RTL.\n`\"end\"`: The label will appear to the right of the range in LTR and to the left in RTL.\n`\"fixed\"`: The label has the same behavior as `\"start\"` except it also has a fixed width. Long text will be truncated with ellipses (\"...\").\n`\"stacked\"`: The label will appear above the range regardless of the direction.",
19937
19999
  "docsTags": [],
19938
20000
  "default": "'start'",
19939
20001
  "values": [
@@ -19945,6 +20007,10 @@
19945
20007
  "value": "fixed",
19946
20008
  "type": "string"
19947
20009
  },
20010
+ {
20011
+ "value": "stacked",
20012
+ "type": "string"
20013
+ },
19948
20014
  {
19949
20015
  "value": "start",
19950
20016
  "type": "string"
@@ -21866,7 +21932,7 @@
21866
21932
  "dependencyGraph": {}
21867
21933
  },
21868
21934
  {
21869
- "filePath": "src/components/router-outlet/router-outlet.tsx",
21935
+ "filePath": "src/components/router-outlet/route-outlet.tsx",
21870
21936
  "encapsulation": "shadow",
21871
21937
  "tag": "ion-router-outlet",
21872
21938
  "docs": "",
@@ -26092,7 +26158,7 @@
26092
26158
  },
26093
26159
  "mutable": false,
26094
26160
  "attr": "cols",
26095
- "reflectToAttr": true,
26161
+ "reflectToAttr": false,
26096
26162
  "docs": "The visible width of the text control, in average character widths. If it is specified, it must be a positive integer.",
26097
26163
  "docsTags": [],
26098
26164
  "values": [
@@ -28117,6 +28183,33 @@
28117
28183
  ],
28118
28184
  "usage": {},
28119
28185
  "props": [
28186
+ {
28187
+ "name": "alignment",
28188
+ "type": "\"center\" | \"start\"",
28189
+ "complexType": {
28190
+ "original": "'start' | 'center'",
28191
+ "resolved": "\"center\" | \"start\"",
28192
+ "references": {}
28193
+ },
28194
+ "mutable": false,
28195
+ "attr": "alignment",
28196
+ "reflectToAttr": false,
28197
+ "docs": "How to control the alignment of the toggle and label on the cross axis.\n``\"start\"`: The label and control will appear on the left of the cross axis in LTR, and on the right side in RTL.\n`\"center\"`: The label and control will appear at the center of the cross axis in both LTR and RTL.",
28198
+ "docsTags": [],
28199
+ "default": "'center'",
28200
+ "values": [
28201
+ {
28202
+ "value": "center",
28203
+ "type": "string"
28204
+ },
28205
+ {
28206
+ "value": "start",
28207
+ "type": "string"
28208
+ }
28209
+ ],
28210
+ "optional": false,
28211
+ "required": false
28212
+ },
28120
28213
  {
28121
28214
  "name": "checked",
28122
28215
  "type": "boolean",
@@ -28285,16 +28378,16 @@
28285
28378
  },
28286
28379
  {
28287
28380
  "name": "labelPlacement",
28288
- "type": "\"end\" | \"fixed\" | \"start\"",
28381
+ "type": "\"end\" | \"fixed\" | \"stacked\" | \"start\"",
28289
28382
  "complexType": {
28290
- "original": "'start' | 'end' | 'fixed'",
28291
- "resolved": "\"end\" | \"fixed\" | \"start\"",
28383
+ "original": "'start' | 'end' | 'fixed' | 'stacked'",
28384
+ "resolved": "\"end\" | \"fixed\" | \"stacked\" | \"start\"",
28292
28385
  "references": {}
28293
28386
  },
28294
28387
  "mutable": false,
28295
28388
  "attr": "label-placement",
28296
28389
  "reflectToAttr": false,
28297
- "docs": "Where to place the label relative to the input.\n`\"start\"`: The label will appear to the left of the toggle in LTR and to the right in RTL.\n`\"end\"`: The label will appear to the right of the toggle in LTR and to the left in RTL.\n`\"fixed\"`: The label has the same behavior as `\"start\"` except it also has a fixed width. Long text will be truncated with ellipses (\"...\").",
28390
+ "docs": "Where to place the label relative to the input.\n`\"start\"`: The label will appear to the left of the toggle in LTR and to the right in RTL.\n`\"end\"`: The label will appear to the right of the toggle in LTR and to the left in RTL.\n`\"fixed\"`: The label has the same behavior as `\"start\"` except it also has a fixed width. Long text will be truncated with ellipses (\"...\").\n`\"stacked\"`: The label will appear above the toggle regardless of the direction. The alignment of the label can be controlled with the `alignment` property.",
28298
28391
  "docsTags": [],
28299
28392
  "default": "'start'",
28300
28393
  "values": [
@@ -28306,6 +28399,10 @@
28306
28399
  "value": "fixed",
28307
28400
  "type": "string"
28308
28401
  },
28402
+ {
28403
+ "value": "stacked",
28404
+ "type": "string"
28405
+ },
28309
28406
  {
28310
28407
  "value": "start",
28311
28408
  "type": "string"
@@ -29152,7 +29249,7 @@
29152
29249
  "path": "src/components/toast/toast-interface.ts"
29153
29250
  },
29154
29251
  "src/components/toast/toast-interface.ts::ToastButton": {
29155
- "declaration": "export interface ToastButton {\n text?: string;\n icon?: string;\n side?: 'start' | 'end';\n role?: 'cancel' | string;\n cssClass?: string | string[];\n htmlAttributes?: { [key: string]: any };\n handler?: () => boolean | void | Promise<boolean | void>;\n}",
29252
+ "declaration": "export interface ToastButton {\n text?: string;\n icon?: string;\n side?: 'start' | 'end';\n role?: 'cancel' | string;\n\n /**\n * @deprecated Use the toast button's CSS Shadow Parts instead.\n */\n cssClass?: string | string[];\n htmlAttributes?: { [key: string]: any };\n handler?: () => boolean | void | Promise<boolean | void>;\n}",
29156
29253
  "docstring": "",
29157
29254
  "path": "src/components/toast/toast-interface.ts"
29158
29255
  },
@@ -185,7 +185,22 @@ const getPartsFromCalendarDay = (el) => {
185
185
  };
186
186
  function parseDate(val) {
187
187
  if (Array.isArray(val)) {
188
- return val.map((valStr) => parseDate(valStr));
188
+ const parsedArray = [];
189
+ for (const valStr of val) {
190
+ const parsedVal = parseDate(valStr);
191
+ /**
192
+ * If any of the values weren't parsed correctly, consider
193
+ * the entire batch incorrect. This simplifies the type
194
+ * signatures by having "undefined" be a general error case
195
+ * instead of returning (Datetime | undefined)[], which is
196
+ * harder for TS to perform type narrowing on.
197
+ */
198
+ if (!parsedVal) {
199
+ return undefined;
200
+ }
201
+ parsedArray.push(parsedVal);
202
+ }
203
+ return parsedArray;
189
204
  }
190
205
  // manually parse IS0 cuz Date.parse cannot be trusted
191
206
  // ISO 8601 format: 1994-12-15T13:47:20Z
@@ -205,6 +220,7 @@ function parseDate(val) {
205
220
  }
206
221
  if (parse === null) {
207
222
  // wasn't able to parse the ISO datetime
223
+ printIonWarning(`Unable to parse date string: ${val}. Please provide a valid ISO 8601 datetime string.`);
208
224
  return undefined;
209
225
  }
210
226
  // ensure all the parse values exist with at least 0
@@ -1225,12 +1241,20 @@ const generateTime = (refParts, hourCycle = 'h12', minParts, maxParts, hourValue
1225
1241
  * Given DatetimeParts, generate the previous,
1226
1242
  * current, and and next months.
1227
1243
  */
1228
- const generateMonths = (refParts) => {
1229
- return [
1230
- getPreviousMonth(refParts),
1231
- { month: refParts.month, year: refParts.year, day: refParts.day },
1232
- getNextMonth(refParts),
1233
- ];
1244
+ const generateMonths = (refParts, forcedDate) => {
1245
+ const current = { month: refParts.month, year: refParts.year, day: refParts.day };
1246
+ /**
1247
+ * If we're forcing a month to appear, and it's different from the current month,
1248
+ * ensure it appears by replacing the next or previous month as appropriate.
1249
+ */
1250
+ if (forcedDate !== undefined && (refParts.month !== forcedDate.month || refParts.year !== forcedDate.year)) {
1251
+ const forced = { month: forcedDate.month, year: forcedDate.year, day: forcedDate.day };
1252
+ const forcedMonthIsBefore = isBefore(forced, current);
1253
+ return forcedMonthIsBefore
1254
+ ? [forced, current, getNextMonth(refParts)]
1255
+ : [getPreviousMonth(refParts), current, forced];
1256
+ }
1257
+ return [getPreviousMonth(refParts), current, getNextMonth(refParts)];
1234
1258
  };
1235
1259
  const getMonthColumnData = (locale, refParts, minParts, maxParts, monthValues, formatOptions = {
1236
1260
  month: 'long',
@@ -935,7 +935,7 @@ Header.style = {
935
935
  md: headerMdCss
936
936
  };
937
937
 
938
- const routerOutletCss = ":host{left:0;right:0;top:0;bottom:0;position:absolute;contain:layout size style;overflow:hidden;z-index:0}";
938
+ const routeOutletCss = ":host{left:0;right:0;top:0;bottom:0;position:absolute;contain:layout size style;overflow:hidden;z-index:0}";
939
939
 
940
940
  const RouterOutlet = class {
941
941
  constructor(hostRef) {
@@ -1124,7 +1124,7 @@ const RouterOutlet = class {
1124
1124
  "swipeHandler": ["swipeHandlerChanged"]
1125
1125
  }; }
1126
1126
  };
1127
- RouterOutlet.style = routerOutletCss;
1127
+ RouterOutlet.style = routeOutletCss;
1128
1128
 
1129
1129
  const titleIosCss = ":host{--color:initial;display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;-ms-flex-align:center;align-items:center;-webkit-transform:translateZ(0);transform:translateZ(0);color:var(--color)}:host(.ion-color){color:var(--ion-color-base)}.toolbar-title{display:block;width:100%;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;pointer-events:auto}:host(.title-small) .toolbar-title{white-space:normal}:host{top:0;-webkit-padding-start:90px;padding-inline-start:90px;-webkit-padding-end:90px;padding-inline-end:90px;padding-top:var(--padding-top);padding-bottom:var(--padding-bottom);position:absolute;width:100%;height:100%;-webkit-transform:translateZ(0);transform:translateZ(0);font-size:17px;font-weight:600;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;pointer-events:none}@supports (inset-inline-start: 0){:host{inset-inline-start:0}}@supports not (inset-inline-start: 0){:host{left:0}:host-context([dir=rtl]){left:unset;right:unset;right:0}@supports selector(:dir(rtl)){:host:dir(rtl){left:unset;right:unset;right:0}}}:host(.title-small){-webkit-padding-start:9px;padding-inline-start:9px;-webkit-padding-end:9px;padding-inline-end:9px;padding-top:6px;padding-bottom:16px;position:relative;font-size:13px;font-weight:normal}:host(.title-large){-webkit-padding-start:16px;padding-inline-start:16px;-webkit-padding-end:16px;padding-inline-end:16px;padding-top:0;padding-bottom:0;-webkit-transform-origin:left center;transform-origin:left center;bottom:0;-ms-flex-align:end;align-items:flex-end;min-width:100%;font-size:34px;font-weight:700;text-align:start}:host(.title-large.title-rtl){-webkit-transform-origin:right center;transform-origin:right center}:host(.title-large.ion-cloned-element){--color:var(--ion-text-color, #000)}:host(.title-large) .toolbar-title{-webkit-transform-origin:inherit;transform-origin:inherit}:host-context([dir=rtl]):host(.title-large) .toolbar-title,:host-context([dir=rtl]).title-large .toolbar-title{-webkit-transform-origin:calc(100% - inherit);transform-origin:calc(100% - inherit)}@supports selector(:dir(rtl)){:host(.title-large) .toolbar-title:dir(rtl){-webkit-transform-origin:calc(100% - inherit);transform-origin:calc(100% - inherit)}}";
1130
1130
 
@@ -8,9 +8,9 @@ import { p as printIonWarning } from './index-595d62c9.js';
8
8
  import { c as createColorClasses, h as hostContext } from './theme-17531cdf.js';
9
9
  import { b as getIonMode } from './ionic-global-1ef19007.js';
10
10
 
11
- const checkboxIosCss = ":host{--checkbox-background-checked:var(--ion-color-primary, #3880ff);--border-color-checked:var(--ion-color-primary, #3880ff);--checkmark-color:var(--ion-color-primary-contrast, #fff);--checkmark-width:1;--transition:none;display:inline-block;position:relative;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:2}:host(.in-item){width:100%;height:100%}:host([slot=start]:not(.legacy-checkbox)),:host([slot=end]:not(.legacy-checkbox)){width:auto}:host(.legacy-checkbox){width:var(--size);height:var(--size)}:host(.ion-color){--checkbox-background-checked:var(--ion-color-base);--border-color-checked:var(--ion-color-base);--checkmark-color:var(--ion-color-contrast)}:host(.legacy-checkbox) label{top:0;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;position:absolute;width:100%;height:100%;border:0;background:transparent;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;outline:none;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;opacity:0}@supports (inset-inline-start: 0){:host(.legacy-checkbox) label{inset-inline-start:0}}@supports not (inset-inline-start: 0){:host(.legacy-checkbox) label{left:0}:host-context([dir=rtl]):host(.legacy-checkbox) label,:host-context([dir=rtl]).legacy-checkbox label{left:unset;right:unset;right:0}@supports selector(:dir(rtl)){:host(.legacy-checkbox) label:dir(rtl){left:unset;right:unset;right:0}}}:host(.legacy-checkbox) label::-moz-focus-inner{border:0}.checkbox-wrapper{display:-ms-flexbox;display:flex;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center;height:inherit;cursor:inherit}.label-text-wrapper{pointer-events:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}:host(.in-item:not(.legacy-checkbox)) .label-text-wrapper{margin-top:10px;margin-bottom:10px}.label-text-wrapper-hidden{display:none}input{position:absolute;top:0;left:0;right:0;bottom:0;width:100%;height:100%;margin:0;padding:0;border:0;outline:0;clip:rect(0 0 0 0);opacity:0;overflow:hidden;-webkit-appearance:none;-moz-appearance:none}.native-wrapper{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.checkbox-icon{border-radius:var(--border-radius);position:relative;-webkit-transition:var(--transition);transition:var(--transition);border-width:var(--border-width);border-style:var(--border-style);border-color:var(--border-color);background:var(--checkbox-background);-webkit-box-sizing:border-box;box-sizing:border-box}:host(.legacy-checkbox) .checkbox-icon{display:block;width:100%;height:100%}:host(:not(.legacy-checkbox)) .checkbox-icon{width:var(--size);height:var(--size)}.checkbox-icon path{fill:none;stroke:var(--checkmark-color);stroke-width:var(--checkmark-width);opacity:0}:host(.checkbox-justify-space-between) .checkbox-wrapper{-ms-flex-pack:justify;justify-content:space-between}:host(.checkbox-justify-start) .checkbox-wrapper{-ms-flex-pack:start;justify-content:start}:host(.checkbox-justify-end) .checkbox-wrapper{-ms-flex-pack:end;justify-content:end}:host(.checkbox-label-placement-start) .checkbox-wrapper{-ms-flex-direction:row;flex-direction:row}:host(.checkbox-label-placement-start) .label-text-wrapper{-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:16px;margin-inline-end:16px}:host(.checkbox-label-placement-end) .checkbox-wrapper{-ms-flex-direction:row-reverse;flex-direction:row-reverse}:host(.checkbox-label-placement-end) .label-text-wrapper{-webkit-margin-start:16px;margin-inline-start:16px;-webkit-margin-end:0;margin-inline-end:0}:host(.checkbox-label-placement-fixed) .label-text-wrapper{-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:16px;margin-inline-end:16px}:host(.checkbox-label-placement-fixed) .label-text-wrapper{-ms-flex:0 0 100px;flex:0 0 100px;width:100px;min-width:100px;max-width:200px}:host(.checkbox-checked) .checkbox-icon,:host(.checkbox-indeterminate) .checkbox-icon{border-color:var(--border-color-checked);background:var(--checkbox-background-checked)}:host(.checkbox-checked) .checkbox-icon path,:host(.checkbox-indeterminate) .checkbox-icon path{opacity:1}:host(.checkbox-disabled){pointer-events:none}:host{--border-radius:50%;--border-width:1px;--border-style:solid;--border-color:rgba(var(--ion-text-color-rgb, 0, 0, 0), 0.23);--checkbox-background:var(--ion-item-background, var(--ion-background-color, #fff));--size:26px}:host(.checkbox-disabled){opacity:0.3}:host(.in-item.legacy-checkbox){-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:8px;margin-inline-end:8px;margin-top:10px;margin-bottom:9px;display:block;position:static}:host(.in-item.legacy-checkbox[slot=start]){-webkit-margin-start:2px;margin-inline-start:2px;-webkit-margin-end:16px;margin-inline-end:16px;margin-top:8px;margin-bottom:8px}";
11
+ const checkboxIosCss = ":host{--checkbox-background-checked:var(--ion-color-primary, #3880ff);--border-color-checked:var(--ion-color-primary, #3880ff);--checkmark-color:var(--ion-color-primary-contrast, #fff);--checkmark-width:1;--transition:none;display:inline-block;position:relative;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:2}:host(.in-item){width:100%;height:100%}:host([slot=start]:not(.legacy-checkbox)),:host([slot=end]:not(.legacy-checkbox)){width:auto}:host(.legacy-checkbox){width:var(--size);height:var(--size)}:host(.ion-color){--checkbox-background-checked:var(--ion-color-base);--border-color-checked:var(--ion-color-base);--checkmark-color:var(--ion-color-contrast)}:host(.legacy-checkbox) label{top:0;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;position:absolute;width:100%;height:100%;border:0;background:transparent;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;outline:none;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;opacity:0}@supports (inset-inline-start: 0){:host(.legacy-checkbox) label{inset-inline-start:0}}@supports not (inset-inline-start: 0){:host(.legacy-checkbox) label{left:0}:host-context([dir=rtl]):host(.legacy-checkbox) label,:host-context([dir=rtl]).legacy-checkbox label{left:unset;right:unset;right:0}@supports selector(:dir(rtl)){:host(.legacy-checkbox) label:dir(rtl){left:unset;right:unset;right:0}}}:host(.legacy-checkbox) label::-moz-focus-inner{border:0}.checkbox-wrapper{display:-ms-flexbox;display:flex;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center;height:inherit;cursor:inherit}.label-text-wrapper{pointer-events:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}:host(.in-item:not(.legacy-checkbox)) .label-text-wrapper{margin-top:10px;margin-bottom:10px}:host(.in-item.checkbox-label-placement-stacked) .label-text-wrapper{margin-top:10px;margin-bottom:16px}:host(.in-item.checkbox-label-placement-stacked) .native-wrapper{margin-bottom:10px}.label-text-wrapper-hidden{display:none}input{position:absolute;top:0;left:0;right:0;bottom:0;width:100%;height:100%;margin:0;padding:0;border:0;outline:0;clip:rect(0 0 0 0);opacity:0;overflow:hidden;-webkit-appearance:none;-moz-appearance:none}.native-wrapper{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.checkbox-icon{border-radius:var(--border-radius);position:relative;-webkit-transition:var(--transition);transition:var(--transition);border-width:var(--border-width);border-style:var(--border-style);border-color:var(--border-color);background:var(--checkbox-background);-webkit-box-sizing:border-box;box-sizing:border-box}:host(.legacy-checkbox) .checkbox-icon{display:block;width:100%;height:100%}:host(:not(.legacy-checkbox)) .checkbox-icon{width:var(--size);height:var(--size)}.checkbox-icon path{fill:none;stroke:var(--checkmark-color);stroke-width:var(--checkmark-width);opacity:0}:host(.checkbox-justify-space-between) .checkbox-wrapper{-ms-flex-pack:justify;justify-content:space-between}:host(.checkbox-justify-start) .checkbox-wrapper{-ms-flex-pack:start;justify-content:start}:host(.checkbox-justify-end) .checkbox-wrapper{-ms-flex-pack:end;justify-content:end}:host(.checkbox-alignment-start) .checkbox-wrapper{-ms-flex-align:start;align-items:start}:host(.checkbox-alignment-center) .checkbox-wrapper{-ms-flex-align:center;align-items:center}:host(.checkbox-label-placement-start) .checkbox-wrapper{-ms-flex-direction:row;flex-direction:row}:host(.checkbox-label-placement-start) .label-text-wrapper{-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:16px;margin-inline-end:16px}:host(.checkbox-label-placement-end) .checkbox-wrapper{-ms-flex-direction:row-reverse;flex-direction:row-reverse}:host(.checkbox-label-placement-end) .label-text-wrapper{-webkit-margin-start:16px;margin-inline-start:16px;-webkit-margin-end:0;margin-inline-end:0}:host(.checkbox-label-placement-fixed) .label-text-wrapper{-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:16px;margin-inline-end:16px}:host(.checkbox-label-placement-fixed) .label-text-wrapper{-ms-flex:0 0 100px;flex:0 0 100px;width:100px;min-width:100px;max-width:200px}:host(.checkbox-label-placement-stacked) .checkbox-wrapper{-ms-flex-direction:column;flex-direction:column}:host(.checkbox-label-placement-stacked) .label-text-wrapper{margin-left:0;margin-right:0;margin-bottom:16px}:host(.checkbox-checked) .checkbox-icon,:host(.checkbox-indeterminate) .checkbox-icon{border-color:var(--border-color-checked);background:var(--checkbox-background-checked)}:host(.checkbox-checked) .checkbox-icon path,:host(.checkbox-indeterminate) .checkbox-icon path{opacity:1}:host(.checkbox-disabled){pointer-events:none}:host{--border-radius:50%;--border-width:1px;--border-style:solid;--border-color:rgba(var(--ion-text-color-rgb, 0, 0, 0), 0.23);--checkbox-background:var(--ion-item-background, var(--ion-background-color, #fff));--size:26px}:host(.checkbox-disabled){opacity:0.3}:host(.in-item.legacy-checkbox){-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:8px;margin-inline-end:8px;margin-top:10px;margin-bottom:9px;display:block;position:static}:host(.in-item.legacy-checkbox[slot=start]){-webkit-margin-start:2px;margin-inline-start:2px;-webkit-margin-end:16px;margin-inline-end:16px;margin-top:8px;margin-bottom:8px}";
12
12
 
13
- const checkboxMdCss = ":host{--checkbox-background-checked:var(--ion-color-primary, #3880ff);--border-color-checked:var(--ion-color-primary, #3880ff);--checkmark-color:var(--ion-color-primary-contrast, #fff);--checkmark-width:1;--transition:none;display:inline-block;position:relative;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:2}:host(.in-item){width:100%;height:100%}:host([slot=start]:not(.legacy-checkbox)),:host([slot=end]:not(.legacy-checkbox)){width:auto}:host(.legacy-checkbox){width:var(--size);height:var(--size)}:host(.ion-color){--checkbox-background-checked:var(--ion-color-base);--border-color-checked:var(--ion-color-base);--checkmark-color:var(--ion-color-contrast)}:host(.legacy-checkbox) label{top:0;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;position:absolute;width:100%;height:100%;border:0;background:transparent;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;outline:none;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;opacity:0}@supports (inset-inline-start: 0){:host(.legacy-checkbox) label{inset-inline-start:0}}@supports not (inset-inline-start: 0){:host(.legacy-checkbox) label{left:0}:host-context([dir=rtl]):host(.legacy-checkbox) label,:host-context([dir=rtl]).legacy-checkbox label{left:unset;right:unset;right:0}@supports selector(:dir(rtl)){:host(.legacy-checkbox) label:dir(rtl){left:unset;right:unset;right:0}}}:host(.legacy-checkbox) label::-moz-focus-inner{border:0}.checkbox-wrapper{display:-ms-flexbox;display:flex;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center;height:inherit;cursor:inherit}.label-text-wrapper{pointer-events:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}:host(.in-item:not(.legacy-checkbox)) .label-text-wrapper{margin-top:10px;margin-bottom:10px}.label-text-wrapper-hidden{display:none}input{position:absolute;top:0;left:0;right:0;bottom:0;width:100%;height:100%;margin:0;padding:0;border:0;outline:0;clip:rect(0 0 0 0);opacity:0;overflow:hidden;-webkit-appearance:none;-moz-appearance:none}.native-wrapper{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.checkbox-icon{border-radius:var(--border-radius);position:relative;-webkit-transition:var(--transition);transition:var(--transition);border-width:var(--border-width);border-style:var(--border-style);border-color:var(--border-color);background:var(--checkbox-background);-webkit-box-sizing:border-box;box-sizing:border-box}:host(.legacy-checkbox) .checkbox-icon{display:block;width:100%;height:100%}:host(:not(.legacy-checkbox)) .checkbox-icon{width:var(--size);height:var(--size)}.checkbox-icon path{fill:none;stroke:var(--checkmark-color);stroke-width:var(--checkmark-width);opacity:0}:host(.checkbox-justify-space-between) .checkbox-wrapper{-ms-flex-pack:justify;justify-content:space-between}:host(.checkbox-justify-start) .checkbox-wrapper{-ms-flex-pack:start;justify-content:start}:host(.checkbox-justify-end) .checkbox-wrapper{-ms-flex-pack:end;justify-content:end}:host(.checkbox-label-placement-start) .checkbox-wrapper{-ms-flex-direction:row;flex-direction:row}:host(.checkbox-label-placement-start) .label-text-wrapper{-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:16px;margin-inline-end:16px}:host(.checkbox-label-placement-end) .checkbox-wrapper{-ms-flex-direction:row-reverse;flex-direction:row-reverse}:host(.checkbox-label-placement-end) .label-text-wrapper{-webkit-margin-start:16px;margin-inline-start:16px;-webkit-margin-end:0;margin-inline-end:0}:host(.checkbox-label-placement-fixed) .label-text-wrapper{-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:16px;margin-inline-end:16px}:host(.checkbox-label-placement-fixed) .label-text-wrapper{-ms-flex:0 0 100px;flex:0 0 100px;width:100px;min-width:100px;max-width:200px}:host(.checkbox-checked) .checkbox-icon,:host(.checkbox-indeterminate) .checkbox-icon{border-color:var(--border-color-checked);background:var(--checkbox-background-checked)}:host(.checkbox-checked) .checkbox-icon path,:host(.checkbox-indeterminate) .checkbox-icon path{opacity:1}:host(.checkbox-disabled){pointer-events:none}:host{--border-radius:calc(var(--size) * .125);--border-width:2px;--border-style:solid;--border-color:rgb(var(--ion-text-color-rgb, 0, 0, 0), 0.6);--checkmark-width:3;--checkbox-background:var(--ion-item-background, var(--ion-background-color, #fff));--transition:background 180ms cubic-bezier(0.4, 0, 0.2, 1);--size:18px}.checkbox-icon path{stroke-dasharray:30;stroke-dashoffset:30}:host(.checkbox-checked) .checkbox-icon path,:host(.checkbox-indeterminate) .checkbox-icon path{stroke-dashoffset:0;-webkit-transition:stroke-dashoffset 90ms linear 90ms;transition:stroke-dashoffset 90ms linear 90ms}:host(.legacy-checkbox.checkbox-disabled),:host(.checkbox-disabled) .label-text-wrapper{opacity:0.38}:host(.checkbox-disabled) .native-wrapper{opacity:0.63}:host(.in-item.legacy-checkbox){margin-left:0;margin-right:0;margin-top:18px;margin-bottom:18px;display:block;position:static}:host(.in-item.legacy-checkbox[slot=start]){-webkit-margin-start:4px;margin-inline-start:4px;-webkit-margin-end:36px;margin-inline-end:36px;margin-top:18px;margin-bottom:18px}";
13
+ const checkboxMdCss = ":host{--checkbox-background-checked:var(--ion-color-primary, #3880ff);--border-color-checked:var(--ion-color-primary, #3880ff);--checkmark-color:var(--ion-color-primary-contrast, #fff);--checkmark-width:1;--transition:none;display:inline-block;position:relative;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:2}:host(.in-item){width:100%;height:100%}:host([slot=start]:not(.legacy-checkbox)),:host([slot=end]:not(.legacy-checkbox)){width:auto}:host(.legacy-checkbox){width:var(--size);height:var(--size)}:host(.ion-color){--checkbox-background-checked:var(--ion-color-base);--border-color-checked:var(--ion-color-base);--checkmark-color:var(--ion-color-contrast)}:host(.legacy-checkbox) label{top:0;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;position:absolute;width:100%;height:100%;border:0;background:transparent;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;outline:none;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;opacity:0}@supports (inset-inline-start: 0){:host(.legacy-checkbox) label{inset-inline-start:0}}@supports not (inset-inline-start: 0){:host(.legacy-checkbox) label{left:0}:host-context([dir=rtl]):host(.legacy-checkbox) label,:host-context([dir=rtl]).legacy-checkbox label{left:unset;right:unset;right:0}@supports selector(:dir(rtl)){:host(.legacy-checkbox) label:dir(rtl){left:unset;right:unset;right:0}}}:host(.legacy-checkbox) label::-moz-focus-inner{border:0}.checkbox-wrapper{display:-ms-flexbox;display:flex;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center;height:inherit;cursor:inherit}.label-text-wrapper{pointer-events:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}:host(.in-item:not(.legacy-checkbox)) .label-text-wrapper{margin-top:10px;margin-bottom:10px}:host(.in-item.checkbox-label-placement-stacked) .label-text-wrapper{margin-top:10px;margin-bottom:16px}:host(.in-item.checkbox-label-placement-stacked) .native-wrapper{margin-bottom:10px}.label-text-wrapper-hidden{display:none}input{position:absolute;top:0;left:0;right:0;bottom:0;width:100%;height:100%;margin:0;padding:0;border:0;outline:0;clip:rect(0 0 0 0);opacity:0;overflow:hidden;-webkit-appearance:none;-moz-appearance:none}.native-wrapper{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.checkbox-icon{border-radius:var(--border-radius);position:relative;-webkit-transition:var(--transition);transition:var(--transition);border-width:var(--border-width);border-style:var(--border-style);border-color:var(--border-color);background:var(--checkbox-background);-webkit-box-sizing:border-box;box-sizing:border-box}:host(.legacy-checkbox) .checkbox-icon{display:block;width:100%;height:100%}:host(:not(.legacy-checkbox)) .checkbox-icon{width:var(--size);height:var(--size)}.checkbox-icon path{fill:none;stroke:var(--checkmark-color);stroke-width:var(--checkmark-width);opacity:0}:host(.checkbox-justify-space-between) .checkbox-wrapper{-ms-flex-pack:justify;justify-content:space-between}:host(.checkbox-justify-start) .checkbox-wrapper{-ms-flex-pack:start;justify-content:start}:host(.checkbox-justify-end) .checkbox-wrapper{-ms-flex-pack:end;justify-content:end}:host(.checkbox-alignment-start) .checkbox-wrapper{-ms-flex-align:start;align-items:start}:host(.checkbox-alignment-center) .checkbox-wrapper{-ms-flex-align:center;align-items:center}:host(.checkbox-label-placement-start) .checkbox-wrapper{-ms-flex-direction:row;flex-direction:row}:host(.checkbox-label-placement-start) .label-text-wrapper{-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:16px;margin-inline-end:16px}:host(.checkbox-label-placement-end) .checkbox-wrapper{-ms-flex-direction:row-reverse;flex-direction:row-reverse}:host(.checkbox-label-placement-end) .label-text-wrapper{-webkit-margin-start:16px;margin-inline-start:16px;-webkit-margin-end:0;margin-inline-end:0}:host(.checkbox-label-placement-fixed) .label-text-wrapper{-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:16px;margin-inline-end:16px}:host(.checkbox-label-placement-fixed) .label-text-wrapper{-ms-flex:0 0 100px;flex:0 0 100px;width:100px;min-width:100px;max-width:200px}:host(.checkbox-label-placement-stacked) .checkbox-wrapper{-ms-flex-direction:column;flex-direction:column}:host(.checkbox-label-placement-stacked) .label-text-wrapper{margin-left:0;margin-right:0;margin-bottom:16px}:host(.checkbox-checked) .checkbox-icon,:host(.checkbox-indeterminate) .checkbox-icon{border-color:var(--border-color-checked);background:var(--checkbox-background-checked)}:host(.checkbox-checked) .checkbox-icon path,:host(.checkbox-indeterminate) .checkbox-icon path{opacity:1}:host(.checkbox-disabled){pointer-events:none}:host{--border-radius:calc(var(--size) * .125);--border-width:2px;--border-style:solid;--border-color:rgb(var(--ion-text-color-rgb, 0, 0, 0), 0.6);--checkmark-width:3;--checkbox-background:var(--ion-item-background, var(--ion-background-color, #fff));--transition:background 180ms cubic-bezier(0.4, 0, 0.2, 1);--size:18px}.checkbox-icon path{stroke-dasharray:30;stroke-dashoffset:30}:host(.checkbox-checked) .checkbox-icon path,:host(.checkbox-indeterminate) .checkbox-icon path{stroke-dashoffset:0;-webkit-transition:stroke-dashoffset 90ms linear 90ms;transition:stroke-dashoffset 90ms linear 90ms}:host(.legacy-checkbox.checkbox-disabled),:host(.checkbox-disabled) .label-text-wrapper{opacity:0.38}:host(.checkbox-disabled) .native-wrapper{opacity:0.63}:host(.in-item.legacy-checkbox){margin-left:0;margin-right:0;margin-top:18px;margin-bottom:18px;display:block;position:static}:host(.in-item.legacy-checkbox[slot=start]){-webkit-margin-start:4px;margin-inline-start:4px;-webkit-margin-end:36px;margin-inline-end:36px;margin-top:18px;margin-bottom:18px}";
14
14
 
15
15
  const Checkbox = class {
16
16
  constructor(hostRef) {
@@ -57,6 +57,7 @@ const Checkbox = class {
57
57
  this.value = 'on';
58
58
  this.labelPlacement = 'start';
59
59
  this.justify = 'space-between';
60
+ this.alignment = 'center';
60
61
  this.legacy = undefined;
61
62
  }
62
63
  // TODO(FW-3100): remove this
@@ -94,7 +95,7 @@ const Checkbox = class {
94
95
  return legacyFormController.hasLegacyControl() ? this.renderLegacyCheckbox() : this.renderCheckbox();
95
96
  }
96
97
  renderCheckbox() {
97
- const { color, checked, disabled, el, getSVGPath, indeterminate, inheritedAttributes, inputId, justify, labelPlacement, name, value, } = this;
98
+ const { color, checked, disabled, el, getSVGPath, indeterminate, inheritedAttributes, inputId, justify, labelPlacement, name, value, alignment, } = this;
98
99
  const mode = getIonMode(this);
99
100
  const path = getSVGPath(mode, indeterminate);
100
101
  renderHiddenInput(true, el, name, checked ? value : '', disabled);
@@ -106,6 +107,7 @@ const Checkbox = class {
106
107
  'checkbox-indeterminate': indeterminate,
107
108
  interactive: true,
108
109
  [`checkbox-justify-${justify}`]: true,
110
+ [`checkbox-alignment-${alignment}`]: true,
109
111
  [`checkbox-label-placement-${labelPlacement}`]: true,
110
112
  }) }, h("label", { class: "checkbox-wrapper" }, h("input", Object.assign({ type: "checkbox", checked: checked ? true : undefined, disabled: disabled, id: inputId, onChange: this.toggleChecked, onFocus: () => this.onFocus(), onBlur: () => this.onBlur(), ref: (focusEl) => (this.focusEl = focusEl) }, inheritedAttributes)), h("div", { class: {
111
113
  'label-text-wrapper': true,
@@ -6,7 +6,7 @@ import { a as addEventListener, c as componentOnReady } from './helpers-3379ba19
6
6
  import { a as printIonError } from './index-595d62c9.js';
7
7
  import { c as createColorClasses } from './theme-17531cdf.js';
8
8
  import { b as getIonMode } from './ionic-global-1ef19007.js';
9
- import { q as parseDate, t as getToday, J as is24Hour, S as getLocalizedDateTime, G as getMonthAndYear, K as getLocalizedTime, T as getMonthDayAndYear } from './data-4b448e3a.js';
9
+ import { q as parseDate, t as getToday, J as is24Hour, S as getLocalizedDateTime, G as getMonthAndYear, K as getLocalizedTime, T as getMonthDayAndYear } from './data-009dbf15.js';
10
10
 
11
11
  const iosDatetimeButtonCss = ":host{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}:host button{border-radius:8px;-webkit-padding-start:12px;padding-inline-start:12px;-webkit-padding-end:12px;padding-inline-end:12px;padding-top:6px;padding-bottom:6px;-webkit-margin-start:2px;margin-inline-start:2px;-webkit-margin-end:2px;margin-inline-end:2px;margin-top:0px;margin-bottom:0px;position:relative;-webkit-transition:150ms color ease-in-out;transition:150ms color ease-in-out;border:none;background:var(--ion-color-step-300, #edeef0);color:var(--ion-text-color, #000);font-family:inherit;font-size:inherit;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;overflow:hidden}:host(.time-active) #time-button,:host(.date-active) #date-button{color:var(--ion-color-base)}:host(.datetime-button-disabled){pointer-events:none}:host(.datetime-button-disabled) button{opacity:0.4}";
12
12
 
@@ -49,6 +49,9 @@ const DatetimeButton = class {
49
49
  * to today's date and time if no value is set.
50
50
  */
51
51
  const parsedDatetimes = parseDate(parsedValues.length > 0 ? parsedValues : [getToday()]);
52
+ if (!parsedDatetimes) {
53
+ return;
54
+ }
52
55
  /**
53
56
  * If developers incorrectly use multiple="true"
54
57
  * with non "date" datetimes, then just select