@ionic/core 7.5.8-dev.11701806358.1ca1b519 → 7.5.8-dev.11701894917.1c1465bd

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 (196) hide show
  1. package/components/data.js +1 -1
  2. package/components/ion-datetime.js +30 -39
  3. package/components/ion-picker-column-internal.d.ts +11 -0
  4. package/components/ion-picker-column-internal.js +9 -0
  5. package/components/ion-picker-column.js +2 -2
  6. package/components/{ion-picker-legacy.d.ts → ion-picker-internal.d.ts} +4 -4
  7. package/components/ion-picker-internal.js +9 -0
  8. package/components/ion-picker.js +309 -1
  9. package/components/overlays.js +3 -6
  10. package/components/picker-column-internal.js +390 -0
  11. package/components/picker-column.js +317 -363
  12. package/components/{picker.js → picker-internal.js} +16 -16
  13. package/dist/cjs/{data-e7526b58.js → data-36b9094e.js} +1 -1
  14. package/dist/cjs/index.cjs.js +1 -1
  15. package/dist/cjs/ion-action-sheet.cjs.entry.js +1 -1
  16. package/dist/cjs/ion-alert.cjs.entry.js +1 -1
  17. package/dist/cjs/ion-datetime-button.cjs.entry.js +1 -1
  18. package/dist/cjs/ion-datetime_3.cjs.entry.js +35 -29
  19. package/dist/cjs/ion-loading.cjs.entry.js +1 -1
  20. package/dist/cjs/ion-menu_3.cjs.entry.js +1 -1
  21. package/dist/cjs/ion-modal.cjs.entry.js +1 -1
  22. package/dist/cjs/{ion-picker-column.cjs.entry.js → ion-picker-column-internal.cjs.entry.js} +72 -105
  23. package/dist/cjs/{ion-picker.cjs.entry.js → ion-picker-internal.cjs.entry.js} +13 -13
  24. package/dist/cjs/ion-popover.cjs.entry.js +1 -1
  25. package/dist/cjs/ion-select_3.cjs.entry.js +1 -1
  26. package/dist/cjs/ion-toast.cjs.entry.js +1 -1
  27. package/dist/cjs/ionic.cjs.js +1 -1
  28. package/dist/cjs/loader.cjs.js +1 -1
  29. package/dist/cjs/{overlays-e8e05b0e.js → overlays-2c6b1072.js} +3 -6
  30. package/dist/collection/collection-manifest.json +6 -7
  31. package/dist/collection/components/datetime/datetime.ios.css +13 -0
  32. package/dist/collection/components/datetime/datetime.js +16 -19
  33. package/dist/collection/components/datetime/datetime.md.css +13 -0
  34. package/dist/collection/components/datetime/test/datetime.e2e.js +2 -2
  35. package/dist/collection/components/datetime/test/disabled/datetime.spec.js +4 -4
  36. package/dist/collection/components/datetime/test/locale/datetime.e2e.js +2 -2
  37. package/dist/collection/components/datetime/test/minmax/datetime.e2e.js +6 -6
  38. package/dist/collection/components/datetime/test/prefer-wheel/datetime.e2e.js +41 -43
  39. package/dist/collection/components/datetime/test/presentation/datetime.e2e.js +1 -1
  40. package/dist/collection/components/datetime/test/readonly/datetime.e2e.js +2 -2
  41. package/dist/collection/components/datetime/test/values/datetime.e2e.js +12 -15
  42. package/dist/collection/components/datetime/utils/data.js +1 -1
  43. package/dist/collection/components/picker/picker.ios.css +205 -100
  44. package/dist/collection/components/picker/picker.js +743 -461
  45. package/dist/collection/components/picker/picker.md.css +194 -98
  46. package/dist/collection/components/picker/test/basic/picker.e2e.js +13 -99
  47. package/dist/collection/components/{picker-legacy → picker}/test/is-open/picker.e2e.js +4 -4
  48. package/dist/collection/components/{picker-legacy → picker}/test/picker-id.spec.js +5 -5
  49. package/dist/collection/components/{picker-legacy → picker}/test/trigger/picker.e2e.js +1 -1
  50. package/dist/collection/components/picker-column/picker-column.ios.css +160 -120
  51. package/dist/collection/components/picker-column/picker-column.js +329 -514
  52. package/dist/collection/components/picker-column/picker-column.md.css +107 -134
  53. package/dist/collection/components/{picker-legacy-column → picker-column}/test/picker-column-aria.spec.js +3 -3
  54. package/dist/collection/components/{picker-legacy-column → picker-column}/test/picker-column-dynamic.spec.js +2 -2
  55. package/dist/collection/components/{picker-legacy-column → picker-column}/test/picker-column.spec.js +2 -2
  56. package/dist/collection/components/{picker-legacy-column → picker-column}/test/standalone/picker-column.e2e.js +3 -3
  57. package/dist/collection/components/{picker-column-option/picker-column-option.md.css → picker-column-internal/picker-column-internal.ios.css} +53 -6
  58. package/dist/collection/components/picker-column-internal/picker-column-internal.js +565 -0
  59. package/dist/collection/components/{picker-legacy-column/picker-column.md.css → picker-column-internal/picker-column-internal.md.css} +63 -113
  60. package/dist/collection/components/{picker-column/test/basic/picker-column.e2e.js → picker-column-internal/test/basic/picker-column-internal.e2e.js} +8 -8
  61. package/dist/collection/components/picker-column-internal/test/disabled/picker-column-internal.e2e.js +162 -0
  62. package/dist/collection/components/{picker-legacy/picker.md.css → picker-internal/picker-internal.ios.css} +100 -192
  63. package/dist/collection/components/picker-internal/picker-internal.js +544 -0
  64. package/dist/collection/components/{picker-legacy-column/picker-column.ios.css → picker-internal/picker-internal.md.css} +101 -98
  65. package/dist/collection/components/{picker/test/a11y/picker.e2e.js → picker-internal/test/a11y/picker-internal.e2e.js} +2 -2
  66. package/dist/collection/components/picker-internal/test/basic/picker-internal.e2e.js +118 -0
  67. package/dist/collection/components/{picker/test/keyboard-entry/picker.e2e.js → picker-internal/test/keyboard-entry/picker-internal.e2e.js} +22 -23
  68. package/dist/collection/utils/overlays.js +3 -6
  69. package/dist/docs.json +23 -487
  70. package/dist/esm/{data-4b9508c9.js → data-f5c75b4e.js} +1 -1
  71. package/dist/esm/index.js +1 -1
  72. package/dist/esm/ion-action-sheet.entry.js +1 -1
  73. package/dist/esm/ion-alert.entry.js +1 -1
  74. package/dist/esm/ion-datetime-button.entry.js +1 -1
  75. package/dist/esm/ion-datetime_3.entry.js +34 -28
  76. package/dist/esm/ion-loading.entry.js +1 -1
  77. package/dist/esm/ion-menu_3.entry.js +1 -1
  78. package/dist/esm/ion-modal.entry.js +1 -1
  79. package/dist/esm/{ion-picker-column.entry.js → ion-picker-column-internal.entry.js} +72 -105
  80. package/dist/esm/{ion-picker.entry.js → ion-picker-internal.entry.js} +13 -13
  81. package/dist/esm/ion-popover.entry.js +1 -1
  82. package/dist/esm/ion-select_3.entry.js +1 -1
  83. package/dist/esm/ion-toast.entry.js +1 -1
  84. package/dist/esm/ionic.js +1 -1
  85. package/dist/esm/loader.js +1 -1
  86. package/dist/esm/{overlays-fbc5cab5.js → overlays-d23ea6e1.js} +3 -6
  87. package/dist/esm-es5/index.js +1 -1
  88. package/dist/esm-es5/ion-action-sheet.entry.js +1 -1
  89. package/dist/esm-es5/ion-alert.entry.js +1 -1
  90. package/dist/esm-es5/ion-datetime-button.entry.js +1 -1
  91. package/dist/esm-es5/ion-datetime_3.entry.js +1 -1
  92. package/dist/esm-es5/ion-loading.entry.js +1 -1
  93. package/dist/esm-es5/ion-menu_3.entry.js +1 -1
  94. package/dist/esm-es5/ion-modal.entry.js +1 -1
  95. package/dist/esm-es5/ion-picker-column-internal.entry.js +4 -0
  96. package/dist/esm-es5/ion-picker-internal.entry.js +4 -0
  97. package/dist/esm-es5/ion-popover.entry.js +1 -1
  98. package/dist/esm-es5/ion-select_3.entry.js +1 -1
  99. package/dist/esm-es5/ion-toast.entry.js +1 -1
  100. package/dist/esm-es5/ionic.js +1 -1
  101. package/dist/esm-es5/loader.js +1 -1
  102. package/dist/esm-es5/overlays-d23ea6e1.js +4 -0
  103. package/dist/html.html-data.json +1 -152
  104. package/dist/ionic/index.esm.js +1 -1
  105. package/dist/ionic/ionic.esm.js +1 -1
  106. package/dist/ionic/{p-846ee227.entry.js → p-1e57bd24.entry.js} +1 -1
  107. package/dist/ionic/{p-26798a7b.system.entry.js → p-1f620cd4.system.entry.js} +1 -1
  108. package/dist/ionic/{p-5d42b6b4.entry.js → p-27ea6f4e.entry.js} +1 -1
  109. package/dist/ionic/{p-6b7c55cd.entry.js → p-2dc43d20.entry.js} +1 -1
  110. package/dist/ionic/{p-4a36430f.system.entry.js → p-2f2293da.system.entry.js} +1 -1
  111. package/dist/ionic/{p-21c3515a.entry.js → p-2f300cca.entry.js} +1 -1
  112. package/dist/ionic/{p-8017aad2.system.entry.js → p-39a335b6.system.entry.js} +1 -1
  113. package/dist/ionic/{p-4a081ea9.entry.js → p-3b568d18.entry.js} +1 -1
  114. package/dist/ionic/{p-c18de88a.system.entry.js → p-3e3d06a6.system.entry.js} +1 -1
  115. package/dist/ionic/{p-96dbbac1.system.entry.js → p-4df97e3c.system.entry.js} +1 -1
  116. package/dist/ionic/p-60502e3f.system.entry.js +4 -0
  117. package/dist/ionic/{p-563c41f0.system.entry.js → p-60b386c9.system.entry.js} +1 -1
  118. package/dist/ionic/p-67da080d.entry.js +4 -0
  119. package/dist/ionic/p-73ea8f82.system.entry.js +4 -0
  120. package/dist/ionic/p-80fa068e.entry.js +4 -0
  121. package/dist/ionic/{p-a8baa23e.entry.js → p-8780cc2a.entry.js} +1 -1
  122. package/dist/ionic/{p-f910cc73.system.entry.js → p-9eec42cc.system.entry.js} +1 -1
  123. package/dist/ionic/p-ab11130c.system.js +4 -0
  124. package/dist/ionic/p-af16fe62.entry.js +4 -0
  125. package/dist/ionic/{p-73aa7604.entry.js → p-af19a573.entry.js} +1 -1
  126. package/dist/ionic/p-c14f8ac8.js +4 -0
  127. package/dist/ionic/p-cce9f61a.system.entry.js +4 -0
  128. package/dist/ionic/{p-b133e9b4.entry.js → p-ddb30596.entry.js} +1 -1
  129. package/dist/ionic/{p-27bcbbc7.system.entry.js → p-e1e5afe1.system.entry.js} +1 -1
  130. package/dist/ionic/p-e3584231.system.js +1 -1
  131. package/dist/ionic/{p-fbf3a689.system.entry.js → p-e3ad9607.system.entry.js} +1 -1
  132. package/dist/ionic/{p-73190c5f.entry.js → p-f78efbd1.entry.js} +1 -1
  133. package/dist/ionic/{p-54dfc9b5.system.js → p-fff7a57e.system.js} +1 -1
  134. package/dist/types/components/datetime/utils/data.d.ts +2 -2
  135. package/dist/types/components/picker/picker.d.ts +131 -74
  136. package/dist/types/components/picker-column/picker-column.d.ts +39 -105
  137. package/dist/types/components/picker-column-internal/picker-column-internal.d.ts +102 -0
  138. package/dist/types/components/picker-internal/picker-internal-interfaces.d.ts +8 -0
  139. package/dist/types/components/picker-internal/picker-internal.d.ts +102 -0
  140. package/dist/types/components.d.ts +122 -163
  141. package/dist/types/interface.d.ts +1 -1
  142. package/dist/types/utils/config.d.ts +2 -2
  143. package/dist/types/utils/overlays.d.ts +2 -5
  144. package/hydrate/index.js +1151 -1287
  145. package/package.json +1 -1
  146. package/components/ion-picker-column-option.d.ts +0 -11
  147. package/components/ion-picker-column-option.js +0 -9
  148. package/components/ion-picker-legacy-column.d.ts +0 -11
  149. package/components/ion-picker-legacy-column.js +0 -9
  150. package/components/ion-picker-legacy.js +0 -309
  151. package/components/picker-column-option.js +0 -122
  152. package/components/picker-column2.js +0 -379
  153. package/dist/cjs/ion-picker-column-option.cjs.entry.js +0 -104
  154. package/dist/collection/components/picker-column/test/disabled/picker-column.e2e.js +0 -113
  155. package/dist/collection/components/picker-column/test/slots/picker-column.e2e.js +0 -39
  156. package/dist/collection/components/picker-column-option/picker-column-option.ios.css +0 -87
  157. package/dist/collection/components/picker-column-option/picker-column-option.js +0 -173
  158. package/dist/collection/components/picker-column-option/test/a11y/picker-column-option.e2e.js +0 -18
  159. package/dist/collection/components/picker-column-option/test/basic/picker-column-option.e2e.js +0 -37
  160. package/dist/collection/components/picker-legacy/picker.ios.css +0 -367
  161. package/dist/collection/components/picker-legacy/picker.js +0 -817
  162. package/dist/collection/components/picker-legacy/test/basic/picker.e2e.js +0 -25
  163. package/dist/collection/components/picker-legacy-column/picker-column.js +0 -419
  164. package/dist/esm/ion-picker-column-option.entry.js +0 -100
  165. package/dist/esm-es5/ion-picker-column-option.entry.js +0 -4
  166. package/dist/esm-es5/ion-picker-column.entry.js +0 -4
  167. package/dist/esm-es5/ion-picker.entry.js +0 -4
  168. package/dist/esm-es5/overlays-fbc5cab5.js +0 -4
  169. package/dist/ionic/p-23672c82.system.entry.js +0 -4
  170. package/dist/ionic/p-8fa6583d.system.js +0 -4
  171. package/dist/ionic/p-9282b16f.entry.js +0 -4
  172. package/dist/ionic/p-9ba90516.system.entry.js +0 -4
  173. package/dist/ionic/p-afcf4620.entry.js +0 -4
  174. package/dist/ionic/p-c2910c78.entry.js +0 -4
  175. package/dist/ionic/p-c8f0a036.entry.js +0 -4
  176. package/dist/ionic/p-ca8938f4.js +0 -4
  177. package/dist/ionic/p-ca9d1792.system.entry.js +0 -4
  178. package/dist/ionic/p-ffd5dba4.system.entry.js +0 -4
  179. package/dist/types/components/picker/picker-interfaces.d.ts +0 -8
  180. package/dist/types/components/picker-column-option/picker-column-option.d.ts +0 -66
  181. package/dist/types/components/picker-legacy/picker.d.ts +0 -158
  182. package/dist/types/components/picker-legacy-column/picker-column.d.ts +0 -46
  183. /package/dist/collection/components/{picker-legacy → picker}/animations/ios.enter.js +0 -0
  184. /package/dist/collection/components/{picker-legacy → picker}/animations/ios.leave.js +0 -0
  185. /package/dist/collection/components/picker/{picker-interfaces.js → picker-interface.js} +0 -0
  186. /package/dist/collection/components/{picker-legacy-column → picker-column}/test/test.utils.js +0 -0
  187. /package/dist/collection/components/{picker-column/picker-column-interfaces.js → picker-column-internal/picker-column-internal-interfaces.js} +0 -0
  188. /package/dist/collection/components/{picker-legacy/picker-interface.js → picker-internal/picker-internal-interfaces.js} +0 -0
  189. /package/dist/esm-es5/{data-4b9508c9.js → data-f5c75b4e.js} +0 -0
  190. /package/dist/ionic/{p-368f5215.js → p-2aea8b1e.js} +0 -0
  191. /package/dist/ionic/{p-f58981c2.system.js → p-82e3d633.system.js} +0 -0
  192. /package/dist/types/components/{picker-legacy → picker}/animations/ios.enter.d.ts +0 -0
  193. /package/dist/types/components/{picker-legacy → picker}/animations/ios.leave.d.ts +0 -0
  194. /package/dist/types/components/{picker-legacy → picker}/picker-interface.d.ts +0 -0
  195. /package/dist/types/components/{picker-legacy-column → picker-column}/test/test.utils.d.ts +0 -0
  196. /package/dist/types/components/{picker-column/picker-column-interfaces.d.ts → picker-column-internal/picker-column-internal-interfaces.d.ts} +0 -0
package/hydrate/index.js CHANGED
@@ -8355,7 +8355,7 @@ const focusLastDescendant = (ref, overlay) => {
8355
8355
  * Should NOT include: Toast
8356
8356
  */
8357
8357
  const trapKeyboardFocus = (ev, doc) => {
8358
- const lastOverlay = getPresentedOverlay(doc, 'ion-alert,ion-action-sheet,ion-loading,ion-modal,ion-picker-legacy,ion-popover');
8358
+ const lastOverlay = getPresentedOverlay(doc, 'ion-alert,ion-action-sheet,ion-loading,ion-modal,ion-picker,ion-popover');
8359
8359
  const target = ev.target;
8360
8360
  /**
8361
8361
  * If no active overlay, ignore this event.
@@ -8540,7 +8540,7 @@ const dismissOverlay = (doc, data, role, overlayTag, id) => {
8540
8540
  */
8541
8541
  const getOverlays = (doc, selector) => {
8542
8542
  if (selector === undefined) {
8543
- selector = 'ion-alert,ion-action-sheet,ion-loading,ion-modal,ion-picker-legacy,ion-popover,ion-toast';
8543
+ selector = 'ion-alert,ion-action-sheet,ion-loading,ion-modal,ion-picker,ion-popover,ion-toast';
8544
8544
  }
8545
8545
  return Array.from(doc.querySelectorAll(selector)).filter((c) => c.overlayIndex > 0);
8546
8546
  };
@@ -14518,7 +14518,7 @@ const getMonthColumnData = (locale, refParts, minParts, maxParts, monthValues, f
14518
14518
  * @param minParts The minimum bound on the date that can be returned
14519
14519
  * @param maxParts The maximum bound on the date that can be returned
14520
14520
  * @param dayValues The allowed date values
14521
- * @returns Date data to be used in ion-picker-column
14521
+ * @returns Date data to be used in ion-picker-column-internal
14522
14522
  */
14523
14523
  const getDayColumnData = (locale, refParts, minParts, maxParts, dayValues, formatOptions = {
14524
14524
  day: 'numeric',
@@ -14865,9 +14865,9 @@ const getHighlightStyles = (highlightedDates, dateIsoString, el) => {
14865
14865
  return undefined;
14866
14866
  };
14867
14867
 
14868
- const datetimeIosCss = "/*!@:host*/.sc-ion-datetime-ios-h{display:-ms-flexbox;display:flex;-ms-flex-flow:column;flex-flow:column;background:var(--background);overflow:hidden}/*!@:host(.datetime-size-fixed)*/.datetime-size-fixed.sc-ion-datetime-ios-h{width:auto;height:auto}/*!@:host(.datetime-size-fixed:not(.datetime-prefer-wheel))*/.datetime-size-fixed.sc-ion-datetime-ios-h:not(.datetime-prefer-wheel){max-width:350px}/*!@:host(.datetime-size-fixed.datetime-prefer-wheel)*/.datetime-size-fixed.datetime-prefer-wheel.sc-ion-datetime-ios-h{min-width:350px;max-width:-webkit-max-content;max-width:-moz-max-content;max-width:max-content}/*!@:host(.datetime-size-cover)*/.datetime-size-cover.sc-ion-datetime-ios-h{width:100%}/*!@:host .calendar-body,\n:host .datetime-year*/.sc-ion-datetime-ios-h .calendar-body.sc-ion-datetime-ios,.sc-ion-datetime-ios-h .datetime-year.sc-ion-datetime-ios{opacity:0}/*!@:host(:not(.datetime-ready)) .datetime-year*/.sc-ion-datetime-ios-h:not(.datetime-ready) .datetime-year.sc-ion-datetime-ios{position:absolute;pointer-events:none}/*!@:host(.datetime-ready) .calendar-body*/.datetime-ready.sc-ion-datetime-ios-h .calendar-body.sc-ion-datetime-ios{opacity:1}/*!@:host(.datetime-ready) .datetime-year*/.datetime-ready.sc-ion-datetime-ios-h .datetime-year.sc-ion-datetime-ios{display:none;opacity:1}/*!@:host .wheel-order-year-first .day-column*/.sc-ion-datetime-ios-h .wheel-order-year-first.sc-ion-datetime-ios .day-column.sc-ion-datetime-ios{-ms-flex-order:3;order:3;text-align:end}/*!@:host .wheel-order-year-first .month-column*/.sc-ion-datetime-ios-h .wheel-order-year-first.sc-ion-datetime-ios .month-column.sc-ion-datetime-ios{-ms-flex-order:2;order:2;text-align:end}/*!@:host .wheel-order-year-first .year-column*/.sc-ion-datetime-ios-h .wheel-order-year-first.sc-ion-datetime-ios .year-column.sc-ion-datetime-ios{-ms-flex-order:1;order:1;text-align:start}/*!@:host .datetime-calendar,\n:host .datetime-year*/.sc-ion-datetime-ios-h .datetime-calendar.sc-ion-datetime-ios,.sc-ion-datetime-ios-h .datetime-year.sc-ion-datetime-ios{display:-ms-flexbox;display:flex;-ms-flex:1 1 auto;flex:1 1 auto;-ms-flex-flow:column;flex-flow:column}/*!@:host(.show-month-and-year) .datetime-year*/.show-month-and-year.sc-ion-datetime-ios-h .datetime-year.sc-ion-datetime-ios{display:-ms-flexbox;display:flex}@supports (background: -webkit-named-image(apple-pay-logo-black)) and (not (aspect-ratio: 1/1)){/*!@:host(.show-month-and-year) .calendar-next-prev,\n :host(.show-month-and-year) .calendar-days-of-week,\n :host(.show-month-and-year) .calendar-body,\n :host(.show-month-and-year) .datetime-time*/.show-month-and-year.sc-ion-datetime-ios-h .calendar-next-prev.sc-ion-datetime-ios,.show-month-and-year.sc-ion-datetime-ios-h .calendar-days-of-week.sc-ion-datetime-ios,.show-month-and-year.sc-ion-datetime-ios-h .calendar-body.sc-ion-datetime-ios,.show-month-and-year.sc-ion-datetime-ios-h .datetime-time.sc-ion-datetime-ios{position:absolute;visibility:hidden;pointer-events:none}/*!@@supports (inset-inline-start: 0)*/@supports .sc-ion-datetime-ios (inset-inline-start.sc-ion-datetime-ios: 0).sc-ion-datetime-ios{.sc-ion-datetime-ios-h.show-month-and-year .calendar-next-prev,.sc-ion-datetime-ios-h.show-month-and-year .calendar-days-of-week,.sc-ion-datetime-ios-h.show-month-and-year .calendar-body,.sc-ion-datetime-ios-h.show-month-and-year .datetime-time{inset-inline-start:-99999px}}/*!@@supports not (inset-inline-start: 0)*/@supports .sc-ion-datetime-ios not.sc-ion-datetime-ios (inset-inline-start.sc-ion-datetime-ios: 0).sc-ion-datetime-ios{.sc-ion-datetime-ios-h.show-month-and-year .calendar-next-prev,.sc-ion-datetime-ios-h.show-month-and-year .calendar-days-of-week,.sc-ion-datetime-ios-h.show-month-and-year .calendar-body,.sc-ion-datetime-ios-h.show-month-and-year .datetime-time{left:-99999px}.sc-ion-datetime-ios-h[dir=rtl].sc-ion-datetime-ios-h.show-month-and-year .calendar-next-prev,[dir=rtl] .sc-ion-datetime-ios-h.sc-ion-datetime-ios-h.show-month-and-year .calendar-next-prev,.sc-ion-datetime-ios-h[dir=rtl].show-month-and-year .calendar-next-prev,[dir=rtl] .sc-ion-datetime-ios-h.show-month-and-year .calendar-next-prev,.sc-ion-datetime-ios-h[dir=rtl].sc-ion-datetime-ios-h.show-month-and-year .calendar-days-of-week,[dir=rtl] .sc-ion-datetime-ios-h.sc-ion-datetime-ios-h.show-month-and-year .calendar-days-of-week,.sc-ion-datetime-ios-h[dir=rtl].show-month-and-year .calendar-days-of-week,[dir=rtl] .sc-ion-datetime-ios-h.show-month-and-year .calendar-days-of-week,.sc-ion-datetime-ios-h[dir=rtl].sc-ion-datetime-ios-h.show-month-and-year .calendar-body,[dir=rtl] .sc-ion-datetime-ios-h.sc-ion-datetime-ios-h.show-month-and-year .calendar-body,.sc-ion-datetime-ios-h[dir=rtl].show-month-and-year .calendar-body,[dir=rtl] .sc-ion-datetime-ios-h.show-month-and-year .calendar-body,.sc-ion-datetime-ios-h[dir=rtl].sc-ion-datetime-ios-h.show-month-and-year .datetime-time,[dir=rtl] .sc-ion-datetime-ios-h.sc-ion-datetime-ios-h.show-month-and-year .datetime-time,.sc-ion-datetime-ios-h[dir=rtl].show-month-and-year .datetime-time,[dir=rtl] .sc-ion-datetime-ios-h.show-month-and-year .datetime-time{left:unset;right:unset;right:-99999px}@supports selector(:dir(rtl)){.sc-ion-datetime-ios-h.show-month-and-year:dir(rtl) .calendar-next-prev,.sc-ion-datetime-ios-h.show-month-and-year:dir(rtl) .calendar-days-of-week,.sc-ion-datetime-ios-h.show-month-and-year:dir(rtl) .calendar-body,.sc-ion-datetime-ios-h.show-month-and-year:dir(rtl) .datetime-time{left:unset;right:unset;right:-99999px}}}}@supports (not (background: -webkit-named-image(apple-pay-logo-black))) or ((background: -webkit-named-image(apple-pay-logo-black)) and (aspect-ratio: 1/1)){/*!@:host(.show-month-and-year) .calendar-next-prev,\n :host(.show-month-and-year) .calendar-days-of-week,\n :host(.show-month-and-year) .calendar-body,\n :host(.show-month-and-year) .datetime-time*/.show-month-and-year.sc-ion-datetime-ios-h .calendar-next-prev.sc-ion-datetime-ios,.show-month-and-year.sc-ion-datetime-ios-h .calendar-days-of-week.sc-ion-datetime-ios,.show-month-and-year.sc-ion-datetime-ios-h .calendar-body.sc-ion-datetime-ios,.show-month-and-year.sc-ion-datetime-ios-h .datetime-time.sc-ion-datetime-ios{display:none}}/*!@:host(.month-year-picker-open) .datetime-footer*/.month-year-picker-open.sc-ion-datetime-ios-h .datetime-footer.sc-ion-datetime-ios{display:none}/*!@:host(.datetime-disabled)*/.datetime-disabled.sc-ion-datetime-ios-h{pointer-events:none}/*!@:host(.datetime-disabled) .calendar-days-of-week,\n:host(.datetime-disabled) .datetime-time*/.datetime-disabled.sc-ion-datetime-ios-h .calendar-days-of-week.sc-ion-datetime-ios,.datetime-disabled.sc-ion-datetime-ios-h .datetime-time.sc-ion-datetime-ios{opacity:0.4}/*!@:host(.datetime-readonly)*/.datetime-readonly.sc-ion-datetime-ios-h{pointer-events:none}/*!@:host(.datetime-readonly) .calendar-action-buttons,\n:host(.datetime-readonly) .calendar-body,\n:host(.datetime-readonly) .datetime-year*/.datetime-readonly.sc-ion-datetime-ios-h .calendar-action-buttons.sc-ion-datetime-ios,.datetime-readonly.sc-ion-datetime-ios-h .calendar-body.sc-ion-datetime-ios,.datetime-readonly.sc-ion-datetime-ios-h .datetime-year.sc-ion-datetime-ios{pointer-events:initial}/*!@:host(.datetime-readonly) .calendar-day[disabled]:not(.calendar-day-constrained),\n:host(.datetime-readonly) .datetime-action-buttons ion-button[disabled]*/.datetime-readonly.sc-ion-datetime-ios-h .calendar-day[disabled].sc-ion-datetime-ios:not(.calendar-day-constrained),.datetime-readonly.sc-ion-datetime-ios-h .datetime-action-buttons.sc-ion-datetime-ios ion-button[disabled].sc-ion-datetime-ios{opacity:1}/*!@:host .datetime-header .datetime-title*/.sc-ion-datetime-ios-h .datetime-header.sc-ion-datetime-ios .datetime-title.sc-ion-datetime-ios{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}/*!@:host .datetime-action-buttons.has-clear-button*/.sc-ion-datetime-ios-h .datetime-action-buttons.has-clear-button.sc-ion-datetime-ios{width:100%}/*!@:host .datetime-action-buttons ion-buttons*/.sc-ion-datetime-ios-h .datetime-action-buttons.sc-ion-datetime-ios ion-buttons.sc-ion-datetime-ios{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}/*!@.datetime-action-buttons .datetime-action-buttons-container*/.datetime-action-buttons.sc-ion-datetime-ios .datetime-action-buttons-container.sc-ion-datetime-ios{display:-ms-flexbox;display:flex}/*!@:host .calendar-action-buttons*/.sc-ion-datetime-ios-h .calendar-action-buttons.sc-ion-datetime-ios{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}/*!@:host .calendar-action-buttons ion-button*/.sc-ion-datetime-ios-h .calendar-action-buttons.sc-ion-datetime-ios ion-button.sc-ion-datetime-ios{--background:transparent}/*!@:host .calendar-days-of-week*/.sc-ion-datetime-ios-h .calendar-days-of-week.sc-ion-datetime-ios{display:grid;grid-template-columns:repeat(7, 1fr);text-align:center}/*!@.calendar-days-of-week .day-of-week*/.calendar-days-of-week.sc-ion-datetime-ios .day-of-week.sc-ion-datetime-ios{-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto;margin-top:0;margin-bottom:0}/*!@:host .calendar-body*/.sc-ion-datetime-ios-h .calendar-body.sc-ion-datetime-ios{display:-ms-flexbox;display:flex;-ms-flex-positive:1;flex-grow:1;-webkit-scroll-snap-type:x mandatory;-ms-scroll-snap-type:x mandatory;scroll-snap-type:x mandatory;overflow-x:scroll;overflow-y:hidden;scrollbar-width:none;outline:none}/*!@:host .calendar-body .calendar-month*/.sc-ion-datetime-ios-h .calendar-body.sc-ion-datetime-ios .calendar-month.sc-ion-datetime-ios{display:-ms-flexbox;display:flex;-ms-flex-flow:column;flex-flow:column;scroll-snap-align:start;scroll-snap-stop:always;-ms-flex-negative:0;flex-shrink:0;width:100%}/*!@:host .calendar-body .calendar-month-disabled*/.sc-ion-datetime-ios-h .calendar-body.sc-ion-datetime-ios .calendar-month-disabled.sc-ion-datetime-ios{scroll-snap-align:none}/*!@:host .calendar-body::-webkit-scrollbar*/.sc-ion-datetime-ios-h .calendar-body.sc-ion-datetime-ios::-webkit-scrollbar{display:none}/*!@:host .calendar-body .calendar-month-grid*/.sc-ion-datetime-ios-h .calendar-body.sc-ion-datetime-ios .calendar-month-grid.sc-ion-datetime-ios{display:grid;grid-template-columns:repeat(7, 1fr)}/*!@:host .calendar-day-wrapper*/.sc-ion-datetime-ios-h .calendar-day-wrapper.sc-ion-datetime-ios{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;min-width:0;min-height:0;overflow:visible}/*!@.calendar-day*/.calendar-day.sc-ion-datetime-ios{border-radius:50%;-webkit-padding-start:0px;padding-inline-start:0px;-webkit-padding-end:0px;padding-inline-end:0px;padding-top:0px;padding-bottom:0px;-webkit-margin-start:0px;margin-inline-start:0px;-webkit-margin-end:0px;margin-inline-end:0px;margin-top:0px;margin-bottom:0px;display:-ms-flexbox;display:flex;position:relative;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;border:none;outline:none;background:none;color:currentColor;font-family:var(--ion-font-family, inherit);cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;z-index:0}/*!@:host .calendar-day[disabled]*/.sc-ion-datetime-ios-h .calendar-day[disabled].sc-ion-datetime-ios{pointer-events:none;opacity:0.4}/*!@.calendar-day:focus*/.calendar-day.sc-ion-datetime-ios:focus{background:rgba(var(--ion-color-base-rgb), 0.2);-webkit-box-shadow:0px 0px 0px 4px rgba(var(--ion-color-base-rgb), 0.2);box-shadow:0px 0px 0px 4px rgba(var(--ion-color-base-rgb), 0.2)}/*!@:host .datetime-time*/.sc-ion-datetime-ios-h .datetime-time.sc-ion-datetime-ios{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}/*!@:host(.datetime-presentation-time) .datetime-time*/.datetime-presentation-time.sc-ion-datetime-ios-h .datetime-time.sc-ion-datetime-ios{padding-left:0;padding-right:0;padding-top:0;padding-bottom:0}/*!@:host ion-popover*/.sc-ion-datetime-ios-h ion-popover.sc-ion-datetime-ios{--height:200px}/*!@:host .time-header*/.sc-ion-datetime-ios-h .time-header.sc-ion-datetime-ios{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}/*!@:host .time-body*/.sc-ion-datetime-ios-h .time-body.sc-ion-datetime-ios{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;display:-ms-flexbox;display:flex;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}/*!@:host .time-body-active*/.sc-ion-datetime-ios-h .time-body-active.sc-ion-datetime-ios{color:var(--ion-color-base)}/*!@:host(.in-item)*/.in-item.sc-ion-datetime-ios-h{position:static}/*!@:host(.show-month-and-year) .calendar-action-buttons .calendar-month-year-toggle*/.show-month-and-year.sc-ion-datetime-ios-h .calendar-action-buttons.sc-ion-datetime-ios .calendar-month-year-toggle.sc-ion-datetime-ios{color:var(--ion-color-base)}/*!@.calendar-month-year*/.calendar-month-year.sc-ion-datetime-ios{min-width:0}/*!@.calendar-month-year-toggle*/.calendar-month-year-toggle.sc-ion-datetime-ios{font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;letter-spacing:inherit;text-decoration:inherit;text-indent:inherit;text-overflow:inherit;text-transform:inherit;text-align:inherit;white-space:inherit;color:inherit;position:relative;border:0;outline:none;background:transparent;cursor:pointer;z-index:1}/*!@.calendar-month-year-toggle::after*/.calendar-month-year-toggle.sc-ion-datetime-ios::after{left:0;right:0;top:0;bottom:0;position:absolute;content:\"\";opacity:0;-webkit-transition:opacity 15ms linear, background-color 15ms linear;transition:opacity 15ms linear, background-color 15ms linear;z-index:-1}/*!@.calendar-month-year-toggle.ion-focused::after*/.calendar-month-year-toggle.ion-focused.sc-ion-datetime-ios::after{background:currentColor}/*!@.calendar-month-year-toggle:disabled*/.calendar-month-year-toggle.sc-ion-datetime-ios:disabled{opacity:0.3;pointer-events:none}/*!@.calendar-month-year-toggle ion-icon*/.calendar-month-year-toggle.sc-ion-datetime-ios ion-icon.sc-ion-datetime-ios{-webkit-padding-start:4px;padding-inline-start:4px;-webkit-padding-end:0;padding-inline-end:0;padding-top:0;padding-bottom:0;-ms-flex-negative:0;flex-shrink:0}/*!@.calendar-month-year-toggle #toggle-wrapper*/.calendar-month-year-toggle.sc-ion-datetime-ios #toggle-wrapper.sc-ion-datetime-ios{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center}/*!@:host*/.sc-ion-datetime-ios-h{--background:var(--ion-color-light, #ffffff);--background-rgb:var(--ion-color-light-rgb);--title-color:var(--ion-color-step-600, #666666)}/*!@:host(.datetime-presentation-date-time:not(.datetime-prefer-wheel)),\n:host(.datetime-presentation-time-date:not(.datetime-prefer-wheel)),\n:host(.datetime-presentation-date:not(.datetime-prefer-wheel))*/.datetime-presentation-date-time.sc-ion-datetime-ios-h:not(.datetime-prefer-wheel),.datetime-presentation-time-date.sc-ion-datetime-ios-h:not(.datetime-prefer-wheel),.datetime-presentation-date.sc-ion-datetime-ios-h:not(.datetime-prefer-wheel){min-height:350px}/*!@:host .datetime-header*/.sc-ion-datetime-ios-h .datetime-header.sc-ion-datetime-ios{-webkit-padding-start:16px;padding-inline-start:16px;-webkit-padding-end:16px;padding-inline-end:16px;padding-top:16px;padding-bottom:16px;border-bottom:0.55px solid var(--ion-color-step-200, #cccccc);font-size:min(0.875rem, 22.4px)}/*!@:host .datetime-header .datetime-title*/.sc-ion-datetime-ios-h .datetime-header.sc-ion-datetime-ios .datetime-title.sc-ion-datetime-ios{color:var(--title-color)}/*!@:host .datetime-header .datetime-selected-date*/.sc-ion-datetime-ios-h .datetime-header.sc-ion-datetime-ios .datetime-selected-date.sc-ion-datetime-ios{margin-top:10px}/*!@.calendar-month-year-toggle*/.calendar-month-year-toggle.sc-ion-datetime-ios{-webkit-padding-start:16px;padding-inline-start:16px;-webkit-padding-end:16px;padding-inline-end:16px;padding-top:0px;padding-bottom:0px;min-height:44px;font-size:min(1rem, 25.6px);font-weight:600}/*!@.calendar-month-year-toggle.ion-focused::after*/.calendar-month-year-toggle.ion-focused.sc-ion-datetime-ios::after{opacity:0.15}/*!@.calendar-month-year-toggle #toggle-wrapper*/.calendar-month-year-toggle.sc-ion-datetime-ios #toggle-wrapper.sc-ion-datetime-ios{-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:8px;margin-inline-end:8px;margin-top:10px;margin-bottom:10px}/*!@:host .calendar-action-buttons .calendar-month-year-toggle ion-icon,\n:host .calendar-action-buttons ion-buttons ion-button*/.sc-ion-datetime-ios-h .calendar-action-buttons.sc-ion-datetime-ios .calendar-month-year-toggle.sc-ion-datetime-ios ion-icon.sc-ion-datetime-ios,.sc-ion-datetime-ios-h .calendar-action-buttons.sc-ion-datetime-ios ion-buttons.sc-ion-datetime-ios ion-button.sc-ion-datetime-ios{color:var(--ion-color-base)}/*!@:host .calendar-action-buttons ion-buttons*/.sc-ion-datetime-ios-h .calendar-action-buttons.sc-ion-datetime-ios ion-buttons.sc-ion-datetime-ios{padding-left:0;padding-right:0;padding-top:8px;padding-bottom:0}/*!@:host .calendar-action-buttons ion-buttons ion-button*/.sc-ion-datetime-ios-h .calendar-action-buttons.sc-ion-datetime-ios ion-buttons.sc-ion-datetime-ios ion-button.sc-ion-datetime-ios{margin-left:0;margin-right:0;margin-top:0;margin-bottom:0}/*!@:host .calendar-days-of-week*/.sc-ion-datetime-ios-h .calendar-days-of-week.sc-ion-datetime-ios{-webkit-padding-start:8px;padding-inline-start:8px;-webkit-padding-end:8px;padding-inline-end:8px;padding-top:0;padding-bottom:0;color:var(--ion-color-step-300, #b3b3b3);font-size:min(0.75rem, 19.2px);font-weight:600;line-height:24px;text-transform:uppercase}@supports (border-radius: mod(1px, 1px)){/*!@.calendar-days-of-week .day-of-week*/.calendar-days-of-week.sc-ion-datetime-ios .day-of-week.sc-ion-datetime-ios{width:clamp(20px, calc(mod(min(1rem, 24px), 24px) * 10), 100%);height:24px;overflow:hidden}/*!@.calendar-day*/.calendar-day.sc-ion-datetime-ios{border-radius:max(8px, mod(min(1rem, 24px), 24px) * 10)}}@supports ((border-radius: mod(1px, 1px)) and (background: -webkit-named-image(apple-pay-logo-black)) and (not (contain-intrinsic-size: none))) or (not (border-radius: mod(1px, 1px))){/*!@.calendar-days-of-week .day-of-week*/.calendar-days-of-week.sc-ion-datetime-ios .day-of-week.sc-ion-datetime-ios{width:auto;height:auto;overflow:initial}/*!@.calendar-day*/.calendar-day.sc-ion-datetime-ios{border-radius:32px}}/*!@:host .calendar-body .calendar-month .calendar-month-grid*/.sc-ion-datetime-ios-h .calendar-body.sc-ion-datetime-ios .calendar-month.sc-ion-datetime-ios .calendar-month-grid.sc-ion-datetime-ios{-webkit-padding-start:8px;padding-inline-start:8px;-webkit-padding-end:8px;padding-inline-end:8px;padding-top:8px;padding-bottom:8px;-ms-flex-align:center;align-items:center;height:calc(100% - 16px)}/*!@:host .calendar-day-wrapper*/.sc-ion-datetime-ios-h .calendar-day-wrapper.sc-ion-datetime-ios{-webkit-padding-start:4px;padding-inline-start:4px;-webkit-padding-end:4px;padding-inline-end:4px;padding-top:4px;padding-bottom:4px;height:0;min-height:1rem}/*!@:host .calendar-day*/.sc-ion-datetime-ios-h .calendar-day.sc-ion-datetime-ios{width:40px;min-width:40px;height:40px;font-size:min(1.25rem, 32px)}/*!@.calendar-day.calendar-day-active*/.calendar-day.calendar-day-active.sc-ion-datetime-ios{background:rgba(var(--ion-color-base-rgb), 0.2)}/*!@:host .calendar-day.calendar-day-today*/.sc-ion-datetime-ios-h .calendar-day.calendar-day-today.sc-ion-datetime-ios{color:var(--ion-color-base)}/*!@:host .calendar-day.calendar-day-active*/.sc-ion-datetime-ios-h .calendar-day.calendar-day-active.sc-ion-datetime-ios{color:var(--ion-color-base);font-weight:600}/*!@:host .calendar-day.calendar-day-today.calendar-day-active*/.sc-ion-datetime-ios-h .calendar-day.calendar-day-today.calendar-day-active.sc-ion-datetime-ios{color:var(--ion-color-contrast)}/*!@:host .datetime-time*/.sc-ion-datetime-ios-h .datetime-time.sc-ion-datetime-ios{-webkit-padding-start:16px;padding-inline-start:16px;-webkit-padding-end:16px;padding-inline-end:16px;padding-top:8px;padding-bottom:16px;font-size:min(1rem, 25.6px)}/*!@:host .datetime-time .time-header*/.sc-ion-datetime-ios-h .datetime-time.sc-ion-datetime-ios .time-header.sc-ion-datetime-ios{font-weight:600}/*!@:host .datetime-buttons*/.sc-ion-datetime-ios-h .datetime-buttons.sc-ion-datetime-ios{-webkit-padding-start:8px;padding-inline-start:8px;-webkit-padding-end:8px;padding-inline-end:8px;padding-top:8px;padding-bottom:8px;border-top:0.55px solid var(--ion-color-step-200, #cccccc)}/*!@:host .datetime-buttons ::slotted(ion-buttons),\n:host .datetime-buttons ion-buttons*/.sc-ion-datetime-ios-h .datetime-buttons .sc-ion-datetime-ios-s>ion-buttons,.sc-ion-datetime-ios-h .datetime-buttons.sc-ion-datetime-ios ion-buttons.sc-ion-datetime-ios{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}/*!@:host .datetime-action-buttons*/.sc-ion-datetime-ios-h .datetime-action-buttons.sc-ion-datetime-ios{width:100%}";
14868
+ const datetimeIosCss = "/*!@:host*/.sc-ion-datetime-ios-h{display:-ms-flexbox;display:flex;-ms-flex-flow:column;flex-flow:column;background:var(--background);overflow:hidden}/*!@ion-picker-column-internal*/ion-picker-column-internal.sc-ion-datetime-ios{min-width:26px}/*!@:host(.datetime-size-fixed)*/.datetime-size-fixed.sc-ion-datetime-ios-h{width:auto;height:auto}/*!@:host(.datetime-size-fixed:not(.datetime-prefer-wheel))*/.datetime-size-fixed.sc-ion-datetime-ios-h:not(.datetime-prefer-wheel){max-width:350px}/*!@:host(.datetime-size-fixed.datetime-prefer-wheel)*/.datetime-size-fixed.datetime-prefer-wheel.sc-ion-datetime-ios-h{min-width:350px;max-width:-webkit-max-content;max-width:-moz-max-content;max-width:max-content}/*!@:host(.datetime-size-cover)*/.datetime-size-cover.sc-ion-datetime-ios-h{width:100%}/*!@:host .calendar-body,\n:host .datetime-year*/.sc-ion-datetime-ios-h .calendar-body.sc-ion-datetime-ios,.sc-ion-datetime-ios-h .datetime-year.sc-ion-datetime-ios{opacity:0}/*!@:host(:not(.datetime-ready)) .datetime-year*/.sc-ion-datetime-ios-h:not(.datetime-ready) .datetime-year.sc-ion-datetime-ios{position:absolute;pointer-events:none}/*!@:host(.datetime-ready) .calendar-body*/.datetime-ready.sc-ion-datetime-ios-h .calendar-body.sc-ion-datetime-ios{opacity:1}/*!@:host(.datetime-ready) .datetime-year*/.datetime-ready.sc-ion-datetime-ios-h .datetime-year.sc-ion-datetime-ios{display:none;opacity:1}/*!@:host .wheel-order-year-first .day-column*/.sc-ion-datetime-ios-h .wheel-order-year-first.sc-ion-datetime-ios .day-column.sc-ion-datetime-ios{-ms-flex-order:3;order:3;text-align:end}/*!@:host .wheel-order-year-first .month-column*/.sc-ion-datetime-ios-h .wheel-order-year-first.sc-ion-datetime-ios .month-column.sc-ion-datetime-ios{-ms-flex-order:2;order:2;text-align:end}/*!@:host .wheel-order-year-first .year-column*/.sc-ion-datetime-ios-h .wheel-order-year-first.sc-ion-datetime-ios .year-column.sc-ion-datetime-ios{-ms-flex-order:1;order:1;text-align:start}/*!@:host .datetime-calendar,\n:host .datetime-year*/.sc-ion-datetime-ios-h .datetime-calendar.sc-ion-datetime-ios,.sc-ion-datetime-ios-h .datetime-year.sc-ion-datetime-ios{display:-ms-flexbox;display:flex;-ms-flex:1 1 auto;flex:1 1 auto;-ms-flex-flow:column;flex-flow:column}/*!@:host(.show-month-and-year) .datetime-year*/.show-month-and-year.sc-ion-datetime-ios-h .datetime-year.sc-ion-datetime-ios{display:-ms-flexbox;display:flex}@supports (background: -webkit-named-image(apple-pay-logo-black)) and (not (aspect-ratio: 1/1)){/*!@:host(.show-month-and-year) .calendar-next-prev,\n :host(.show-month-and-year) .calendar-days-of-week,\n :host(.show-month-and-year) .calendar-body,\n :host(.show-month-and-year) .datetime-time*/.show-month-and-year.sc-ion-datetime-ios-h .calendar-next-prev.sc-ion-datetime-ios,.show-month-and-year.sc-ion-datetime-ios-h .calendar-days-of-week.sc-ion-datetime-ios,.show-month-and-year.sc-ion-datetime-ios-h .calendar-body.sc-ion-datetime-ios,.show-month-and-year.sc-ion-datetime-ios-h .datetime-time.sc-ion-datetime-ios{position:absolute;visibility:hidden;pointer-events:none}/*!@@supports (inset-inline-start: 0)*/@supports .sc-ion-datetime-ios (inset-inline-start.sc-ion-datetime-ios: 0).sc-ion-datetime-ios{.sc-ion-datetime-ios-h.show-month-and-year .calendar-next-prev,.sc-ion-datetime-ios-h.show-month-and-year .calendar-days-of-week,.sc-ion-datetime-ios-h.show-month-and-year .calendar-body,.sc-ion-datetime-ios-h.show-month-and-year .datetime-time{inset-inline-start:-99999px}}/*!@@supports not (inset-inline-start: 0)*/@supports .sc-ion-datetime-ios not.sc-ion-datetime-ios (inset-inline-start.sc-ion-datetime-ios: 0).sc-ion-datetime-ios{.sc-ion-datetime-ios-h.show-month-and-year .calendar-next-prev,.sc-ion-datetime-ios-h.show-month-and-year .calendar-days-of-week,.sc-ion-datetime-ios-h.show-month-and-year .calendar-body,.sc-ion-datetime-ios-h.show-month-and-year .datetime-time{left:-99999px}.sc-ion-datetime-ios-h[dir=rtl].sc-ion-datetime-ios-h.show-month-and-year .calendar-next-prev,[dir=rtl] .sc-ion-datetime-ios-h.sc-ion-datetime-ios-h.show-month-and-year .calendar-next-prev,.sc-ion-datetime-ios-h[dir=rtl].show-month-and-year .calendar-next-prev,[dir=rtl] .sc-ion-datetime-ios-h.show-month-and-year .calendar-next-prev,.sc-ion-datetime-ios-h[dir=rtl].sc-ion-datetime-ios-h.show-month-and-year .calendar-days-of-week,[dir=rtl] .sc-ion-datetime-ios-h.sc-ion-datetime-ios-h.show-month-and-year .calendar-days-of-week,.sc-ion-datetime-ios-h[dir=rtl].show-month-and-year .calendar-days-of-week,[dir=rtl] .sc-ion-datetime-ios-h.show-month-and-year .calendar-days-of-week,.sc-ion-datetime-ios-h[dir=rtl].sc-ion-datetime-ios-h.show-month-and-year .calendar-body,[dir=rtl] .sc-ion-datetime-ios-h.sc-ion-datetime-ios-h.show-month-and-year .calendar-body,.sc-ion-datetime-ios-h[dir=rtl].show-month-and-year .calendar-body,[dir=rtl] .sc-ion-datetime-ios-h.show-month-and-year .calendar-body,.sc-ion-datetime-ios-h[dir=rtl].sc-ion-datetime-ios-h.show-month-and-year .datetime-time,[dir=rtl] .sc-ion-datetime-ios-h.sc-ion-datetime-ios-h.show-month-and-year .datetime-time,.sc-ion-datetime-ios-h[dir=rtl].show-month-and-year .datetime-time,[dir=rtl] .sc-ion-datetime-ios-h.show-month-and-year .datetime-time{left:unset;right:unset;right:-99999px}@supports selector(:dir(rtl)){.sc-ion-datetime-ios-h.show-month-and-year:dir(rtl) .calendar-next-prev,.sc-ion-datetime-ios-h.show-month-and-year:dir(rtl) .calendar-days-of-week,.sc-ion-datetime-ios-h.show-month-and-year:dir(rtl) .calendar-body,.sc-ion-datetime-ios-h.show-month-and-year:dir(rtl) .datetime-time{left:unset;right:unset;right:-99999px}}}}@supports (not (background: -webkit-named-image(apple-pay-logo-black))) or ((background: -webkit-named-image(apple-pay-logo-black)) and (aspect-ratio: 1/1)){/*!@:host(.show-month-and-year) .calendar-next-prev,\n :host(.show-month-and-year) .calendar-days-of-week,\n :host(.show-month-and-year) .calendar-body,\n :host(.show-month-and-year) .datetime-time*/.show-month-and-year.sc-ion-datetime-ios-h .calendar-next-prev.sc-ion-datetime-ios,.show-month-and-year.sc-ion-datetime-ios-h .calendar-days-of-week.sc-ion-datetime-ios,.show-month-and-year.sc-ion-datetime-ios-h .calendar-body.sc-ion-datetime-ios,.show-month-and-year.sc-ion-datetime-ios-h .datetime-time.sc-ion-datetime-ios{display:none}}/*!@:host(.month-year-picker-open) .datetime-footer*/.month-year-picker-open.sc-ion-datetime-ios-h .datetime-footer.sc-ion-datetime-ios{display:none}/*!@:host(.datetime-disabled)*/.datetime-disabled.sc-ion-datetime-ios-h{pointer-events:none}/*!@:host(.datetime-disabled) .calendar-days-of-week,\n:host(.datetime-disabled) .datetime-time*/.datetime-disabled.sc-ion-datetime-ios-h .calendar-days-of-week.sc-ion-datetime-ios,.datetime-disabled.sc-ion-datetime-ios-h .datetime-time.sc-ion-datetime-ios{opacity:0.4}/*!@:host(.datetime-readonly)*/.datetime-readonly.sc-ion-datetime-ios-h{pointer-events:none}/*!@:host(.datetime-readonly) .calendar-action-buttons,\n:host(.datetime-readonly) .calendar-body,\n:host(.datetime-readonly) .datetime-year*/.datetime-readonly.sc-ion-datetime-ios-h .calendar-action-buttons.sc-ion-datetime-ios,.datetime-readonly.sc-ion-datetime-ios-h .calendar-body.sc-ion-datetime-ios,.datetime-readonly.sc-ion-datetime-ios-h .datetime-year.sc-ion-datetime-ios{pointer-events:initial}/*!@:host(.datetime-readonly) .calendar-day[disabled]:not(.calendar-day-constrained),\n:host(.datetime-readonly) .datetime-action-buttons ion-button[disabled]*/.datetime-readonly.sc-ion-datetime-ios-h .calendar-day[disabled].sc-ion-datetime-ios:not(.calendar-day-constrained),.datetime-readonly.sc-ion-datetime-ios-h .datetime-action-buttons.sc-ion-datetime-ios ion-button[disabled].sc-ion-datetime-ios{opacity:1}/*!@:host .datetime-header .datetime-title*/.sc-ion-datetime-ios-h .datetime-header.sc-ion-datetime-ios .datetime-title.sc-ion-datetime-ios{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}/*!@:host .datetime-action-buttons.has-clear-button*/.sc-ion-datetime-ios-h .datetime-action-buttons.has-clear-button.sc-ion-datetime-ios{width:100%}/*!@:host .datetime-action-buttons ion-buttons*/.sc-ion-datetime-ios-h .datetime-action-buttons.sc-ion-datetime-ios ion-buttons.sc-ion-datetime-ios{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}/*!@.datetime-action-buttons .datetime-action-buttons-container*/.datetime-action-buttons.sc-ion-datetime-ios .datetime-action-buttons-container.sc-ion-datetime-ios{display:-ms-flexbox;display:flex}/*!@:host .calendar-action-buttons*/.sc-ion-datetime-ios-h .calendar-action-buttons.sc-ion-datetime-ios{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}/*!@:host .calendar-action-buttons ion-button*/.sc-ion-datetime-ios-h .calendar-action-buttons.sc-ion-datetime-ios ion-button.sc-ion-datetime-ios{--background:transparent}/*!@:host .calendar-days-of-week*/.sc-ion-datetime-ios-h .calendar-days-of-week.sc-ion-datetime-ios{display:grid;grid-template-columns:repeat(7, 1fr);text-align:center}/*!@.calendar-days-of-week .day-of-week*/.calendar-days-of-week.sc-ion-datetime-ios .day-of-week.sc-ion-datetime-ios{-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto;margin-top:0;margin-bottom:0}/*!@:host .calendar-body*/.sc-ion-datetime-ios-h .calendar-body.sc-ion-datetime-ios{display:-ms-flexbox;display:flex;-ms-flex-positive:1;flex-grow:1;-webkit-scroll-snap-type:x mandatory;-ms-scroll-snap-type:x mandatory;scroll-snap-type:x mandatory;overflow-x:scroll;overflow-y:hidden;scrollbar-width:none;outline:none}/*!@:host .calendar-body .calendar-month*/.sc-ion-datetime-ios-h .calendar-body.sc-ion-datetime-ios .calendar-month.sc-ion-datetime-ios{display:-ms-flexbox;display:flex;-ms-flex-flow:column;flex-flow:column;scroll-snap-align:start;scroll-snap-stop:always;-ms-flex-negative:0;flex-shrink:0;width:100%}/*!@:host .calendar-body .calendar-month-disabled*/.sc-ion-datetime-ios-h .calendar-body.sc-ion-datetime-ios .calendar-month-disabled.sc-ion-datetime-ios{scroll-snap-align:none}/*!@:host .calendar-body::-webkit-scrollbar*/.sc-ion-datetime-ios-h .calendar-body.sc-ion-datetime-ios::-webkit-scrollbar{display:none}/*!@:host .calendar-body .calendar-month-grid*/.sc-ion-datetime-ios-h .calendar-body.sc-ion-datetime-ios .calendar-month-grid.sc-ion-datetime-ios{display:grid;grid-template-columns:repeat(7, 1fr)}/*!@:host .calendar-day-wrapper*/.sc-ion-datetime-ios-h .calendar-day-wrapper.sc-ion-datetime-ios{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;min-width:0;min-height:0;overflow:visible}/*!@.calendar-day*/.calendar-day.sc-ion-datetime-ios{border-radius:50%;-webkit-padding-start:0px;padding-inline-start:0px;-webkit-padding-end:0px;padding-inline-end:0px;padding-top:0px;padding-bottom:0px;-webkit-margin-start:0px;margin-inline-start:0px;-webkit-margin-end:0px;margin-inline-end:0px;margin-top:0px;margin-bottom:0px;display:-ms-flexbox;display:flex;position:relative;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;border:none;outline:none;background:none;color:currentColor;font-family:var(--ion-font-family, inherit);cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;z-index:0}/*!@:host .calendar-day[disabled]*/.sc-ion-datetime-ios-h .calendar-day[disabled].sc-ion-datetime-ios{pointer-events:none;opacity:0.4}/*!@.calendar-day:focus*/.calendar-day.sc-ion-datetime-ios:focus{background:rgba(var(--ion-color-base-rgb), 0.2);-webkit-box-shadow:0px 0px 0px 4px rgba(var(--ion-color-base-rgb), 0.2);box-shadow:0px 0px 0px 4px rgba(var(--ion-color-base-rgb), 0.2)}/*!@:host .datetime-time*/.sc-ion-datetime-ios-h .datetime-time.sc-ion-datetime-ios{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}/*!@:host(.datetime-presentation-time) .datetime-time*/.datetime-presentation-time.sc-ion-datetime-ios-h .datetime-time.sc-ion-datetime-ios{padding-left:0;padding-right:0;padding-top:0;padding-bottom:0}/*!@:host ion-popover*/.sc-ion-datetime-ios-h ion-popover.sc-ion-datetime-ios{--height:200px}/*!@:host .time-header*/.sc-ion-datetime-ios-h .time-header.sc-ion-datetime-ios{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}/*!@:host .time-body*/.sc-ion-datetime-ios-h .time-body.sc-ion-datetime-ios{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;display:-ms-flexbox;display:flex;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}/*!@:host .time-body-active*/.sc-ion-datetime-ios-h .time-body-active.sc-ion-datetime-ios{color:var(--ion-color-base)}/*!@:host(.in-item)*/.in-item.sc-ion-datetime-ios-h{position:static}/*!@:host(.show-month-and-year) .calendar-action-buttons .calendar-month-year-toggle*/.show-month-and-year.sc-ion-datetime-ios-h .calendar-action-buttons.sc-ion-datetime-ios .calendar-month-year-toggle.sc-ion-datetime-ios{color:var(--ion-color-base)}/*!@.calendar-month-year*/.calendar-month-year.sc-ion-datetime-ios{min-width:0}/*!@.calendar-month-year-toggle*/.calendar-month-year-toggle.sc-ion-datetime-ios{font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;letter-spacing:inherit;text-decoration:inherit;text-indent:inherit;text-overflow:inherit;text-transform:inherit;text-align:inherit;white-space:inherit;color:inherit;position:relative;border:0;outline:none;background:transparent;cursor:pointer;z-index:1}/*!@.calendar-month-year-toggle::after*/.calendar-month-year-toggle.sc-ion-datetime-ios::after{left:0;right:0;top:0;bottom:0;position:absolute;content:\"\";opacity:0;-webkit-transition:opacity 15ms linear, background-color 15ms linear;transition:opacity 15ms linear, background-color 15ms linear;z-index:-1}/*!@.calendar-month-year-toggle.ion-focused::after*/.calendar-month-year-toggle.ion-focused.sc-ion-datetime-ios::after{background:currentColor}/*!@.calendar-month-year-toggle:disabled*/.calendar-month-year-toggle.sc-ion-datetime-ios:disabled{opacity:0.3;pointer-events:none}/*!@.calendar-month-year-toggle ion-icon*/.calendar-month-year-toggle.sc-ion-datetime-ios ion-icon.sc-ion-datetime-ios{-webkit-padding-start:4px;padding-inline-start:4px;-webkit-padding-end:0;padding-inline-end:0;padding-top:0;padding-bottom:0;-ms-flex-negative:0;flex-shrink:0}/*!@.calendar-month-year-toggle #toggle-wrapper*/.calendar-month-year-toggle.sc-ion-datetime-ios #toggle-wrapper.sc-ion-datetime-ios{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center}/*!@:host*/.sc-ion-datetime-ios-h{--background:var(--ion-color-light, #ffffff);--background-rgb:var(--ion-color-light-rgb);--title-color:var(--ion-color-step-600, #666666)}/*!@:host(.datetime-presentation-date-time:not(.datetime-prefer-wheel)),\n:host(.datetime-presentation-time-date:not(.datetime-prefer-wheel)),\n:host(.datetime-presentation-date:not(.datetime-prefer-wheel))*/.datetime-presentation-date-time.sc-ion-datetime-ios-h:not(.datetime-prefer-wheel),.datetime-presentation-time-date.sc-ion-datetime-ios-h:not(.datetime-prefer-wheel),.datetime-presentation-date.sc-ion-datetime-ios-h:not(.datetime-prefer-wheel){min-height:350px}/*!@:host .datetime-header*/.sc-ion-datetime-ios-h .datetime-header.sc-ion-datetime-ios{-webkit-padding-start:16px;padding-inline-start:16px;-webkit-padding-end:16px;padding-inline-end:16px;padding-top:16px;padding-bottom:16px;border-bottom:0.55px solid var(--ion-color-step-200, #cccccc);font-size:min(0.875rem, 22.4px)}/*!@:host .datetime-header .datetime-title*/.sc-ion-datetime-ios-h .datetime-header.sc-ion-datetime-ios .datetime-title.sc-ion-datetime-ios{color:var(--title-color)}/*!@:host .datetime-header .datetime-selected-date*/.sc-ion-datetime-ios-h .datetime-header.sc-ion-datetime-ios .datetime-selected-date.sc-ion-datetime-ios{margin-top:10px}/*!@.calendar-month-year-toggle*/.calendar-month-year-toggle.sc-ion-datetime-ios{-webkit-padding-start:16px;padding-inline-start:16px;-webkit-padding-end:16px;padding-inline-end:16px;padding-top:0px;padding-bottom:0px;min-height:44px;font-size:min(1rem, 25.6px);font-weight:600}/*!@.calendar-month-year-toggle.ion-focused::after*/.calendar-month-year-toggle.ion-focused.sc-ion-datetime-ios::after{opacity:0.15}/*!@.calendar-month-year-toggle #toggle-wrapper*/.calendar-month-year-toggle.sc-ion-datetime-ios #toggle-wrapper.sc-ion-datetime-ios{-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:8px;margin-inline-end:8px;margin-top:10px;margin-bottom:10px}/*!@:host .calendar-action-buttons .calendar-month-year-toggle ion-icon,\n:host .calendar-action-buttons ion-buttons ion-button*/.sc-ion-datetime-ios-h .calendar-action-buttons.sc-ion-datetime-ios .calendar-month-year-toggle.sc-ion-datetime-ios ion-icon.sc-ion-datetime-ios,.sc-ion-datetime-ios-h .calendar-action-buttons.sc-ion-datetime-ios ion-buttons.sc-ion-datetime-ios ion-button.sc-ion-datetime-ios{color:var(--ion-color-base)}/*!@:host .calendar-action-buttons ion-buttons*/.sc-ion-datetime-ios-h .calendar-action-buttons.sc-ion-datetime-ios ion-buttons.sc-ion-datetime-ios{padding-left:0;padding-right:0;padding-top:8px;padding-bottom:0}/*!@:host .calendar-action-buttons ion-buttons ion-button*/.sc-ion-datetime-ios-h .calendar-action-buttons.sc-ion-datetime-ios ion-buttons.sc-ion-datetime-ios ion-button.sc-ion-datetime-ios{margin-left:0;margin-right:0;margin-top:0;margin-bottom:0}/*!@:host .calendar-days-of-week*/.sc-ion-datetime-ios-h .calendar-days-of-week.sc-ion-datetime-ios{-webkit-padding-start:8px;padding-inline-start:8px;-webkit-padding-end:8px;padding-inline-end:8px;padding-top:0;padding-bottom:0;color:var(--ion-color-step-300, #b3b3b3);font-size:min(0.75rem, 19.2px);font-weight:600;line-height:24px;text-transform:uppercase}@supports (border-radius: mod(1px, 1px)){/*!@.calendar-days-of-week .day-of-week*/.calendar-days-of-week.sc-ion-datetime-ios .day-of-week.sc-ion-datetime-ios{width:clamp(20px, calc(mod(min(1rem, 24px), 24px) * 10), 100%);height:24px;overflow:hidden}/*!@.calendar-day*/.calendar-day.sc-ion-datetime-ios{border-radius:max(8px, mod(min(1rem, 24px), 24px) * 10)}}@supports ((border-radius: mod(1px, 1px)) and (background: -webkit-named-image(apple-pay-logo-black)) and (not (contain-intrinsic-size: none))) or (not (border-radius: mod(1px, 1px))){/*!@.calendar-days-of-week .day-of-week*/.calendar-days-of-week.sc-ion-datetime-ios .day-of-week.sc-ion-datetime-ios{width:auto;height:auto;overflow:initial}/*!@.calendar-day*/.calendar-day.sc-ion-datetime-ios{border-radius:32px}}/*!@:host .calendar-body .calendar-month .calendar-month-grid*/.sc-ion-datetime-ios-h .calendar-body.sc-ion-datetime-ios .calendar-month.sc-ion-datetime-ios .calendar-month-grid.sc-ion-datetime-ios{-webkit-padding-start:8px;padding-inline-start:8px;-webkit-padding-end:8px;padding-inline-end:8px;padding-top:8px;padding-bottom:8px;-ms-flex-align:center;align-items:center;height:calc(100% - 16px)}/*!@:host .calendar-day-wrapper*/.sc-ion-datetime-ios-h .calendar-day-wrapper.sc-ion-datetime-ios{-webkit-padding-start:4px;padding-inline-start:4px;-webkit-padding-end:4px;padding-inline-end:4px;padding-top:4px;padding-bottom:4px;height:0;min-height:1rem}/*!@:host .calendar-day*/.sc-ion-datetime-ios-h .calendar-day.sc-ion-datetime-ios{width:40px;min-width:40px;height:40px;font-size:min(1.25rem, 32px)}/*!@.calendar-day.calendar-day-active*/.calendar-day.calendar-day-active.sc-ion-datetime-ios{background:rgba(var(--ion-color-base-rgb), 0.2)}/*!@:host .calendar-day.calendar-day-today*/.sc-ion-datetime-ios-h .calendar-day.calendar-day-today.sc-ion-datetime-ios{color:var(--ion-color-base)}/*!@:host .calendar-day.calendar-day-active*/.sc-ion-datetime-ios-h .calendar-day.calendar-day-active.sc-ion-datetime-ios{color:var(--ion-color-base);font-weight:600}/*!@:host .calendar-day.calendar-day-today.calendar-day-active*/.sc-ion-datetime-ios-h .calendar-day.calendar-day-today.calendar-day-active.sc-ion-datetime-ios{color:var(--ion-color-contrast)}/*!@:host .datetime-time*/.sc-ion-datetime-ios-h .datetime-time.sc-ion-datetime-ios{-webkit-padding-start:16px;padding-inline-start:16px;-webkit-padding-end:16px;padding-inline-end:16px;padding-top:8px;padding-bottom:16px;font-size:min(1rem, 25.6px)}/*!@:host .datetime-time .time-header*/.sc-ion-datetime-ios-h .datetime-time.sc-ion-datetime-ios .time-header.sc-ion-datetime-ios{font-weight:600}/*!@:host .datetime-buttons*/.sc-ion-datetime-ios-h .datetime-buttons.sc-ion-datetime-ios{-webkit-padding-start:8px;padding-inline-start:8px;-webkit-padding-end:8px;padding-inline-end:8px;padding-top:8px;padding-bottom:8px;border-top:0.55px solid var(--ion-color-step-200, #cccccc)}/*!@:host .datetime-buttons ::slotted(ion-buttons),\n:host .datetime-buttons ion-buttons*/.sc-ion-datetime-ios-h .datetime-buttons .sc-ion-datetime-ios-s>ion-buttons,.sc-ion-datetime-ios-h .datetime-buttons.sc-ion-datetime-ios ion-buttons.sc-ion-datetime-ios{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}/*!@:host .datetime-action-buttons*/.sc-ion-datetime-ios-h .datetime-action-buttons.sc-ion-datetime-ios{width:100%}";
14869
14869
 
14870
- const datetimeMdCss = "/*!@:host*/.sc-ion-datetime-md-h{display:-ms-flexbox;display:flex;-ms-flex-flow:column;flex-flow:column;background:var(--background);overflow:hidden}/*!@:host(.datetime-size-fixed)*/.datetime-size-fixed.sc-ion-datetime-md-h{width:auto;height:auto}/*!@:host(.datetime-size-fixed:not(.datetime-prefer-wheel))*/.datetime-size-fixed.sc-ion-datetime-md-h:not(.datetime-prefer-wheel){max-width:350px}/*!@:host(.datetime-size-fixed.datetime-prefer-wheel)*/.datetime-size-fixed.datetime-prefer-wheel.sc-ion-datetime-md-h{min-width:350px;max-width:-webkit-max-content;max-width:-moz-max-content;max-width:max-content}/*!@:host(.datetime-size-cover)*/.datetime-size-cover.sc-ion-datetime-md-h{width:100%}/*!@:host .calendar-body,\n:host .datetime-year*/.sc-ion-datetime-md-h .calendar-body.sc-ion-datetime-md,.sc-ion-datetime-md-h .datetime-year.sc-ion-datetime-md{opacity:0}/*!@:host(:not(.datetime-ready)) .datetime-year*/.sc-ion-datetime-md-h:not(.datetime-ready) .datetime-year.sc-ion-datetime-md{position:absolute;pointer-events:none}/*!@:host(.datetime-ready) .calendar-body*/.datetime-ready.sc-ion-datetime-md-h .calendar-body.sc-ion-datetime-md{opacity:1}/*!@:host(.datetime-ready) .datetime-year*/.datetime-ready.sc-ion-datetime-md-h .datetime-year.sc-ion-datetime-md{display:none;opacity:1}/*!@:host .wheel-order-year-first .day-column*/.sc-ion-datetime-md-h .wheel-order-year-first.sc-ion-datetime-md .day-column.sc-ion-datetime-md{-ms-flex-order:3;order:3;text-align:end}/*!@:host .wheel-order-year-first .month-column*/.sc-ion-datetime-md-h .wheel-order-year-first.sc-ion-datetime-md .month-column.sc-ion-datetime-md{-ms-flex-order:2;order:2;text-align:end}/*!@:host .wheel-order-year-first .year-column*/.sc-ion-datetime-md-h .wheel-order-year-first.sc-ion-datetime-md .year-column.sc-ion-datetime-md{-ms-flex-order:1;order:1;text-align:start}/*!@:host .datetime-calendar,\n:host .datetime-year*/.sc-ion-datetime-md-h .datetime-calendar.sc-ion-datetime-md,.sc-ion-datetime-md-h .datetime-year.sc-ion-datetime-md{display:-ms-flexbox;display:flex;-ms-flex:1 1 auto;flex:1 1 auto;-ms-flex-flow:column;flex-flow:column}/*!@:host(.show-month-and-year) .datetime-year*/.show-month-and-year.sc-ion-datetime-md-h .datetime-year.sc-ion-datetime-md{display:-ms-flexbox;display:flex}@supports (background: -webkit-named-image(apple-pay-logo-black)) and (not (aspect-ratio: 1/1)){/*!@:host(.show-month-and-year) .calendar-next-prev,\n :host(.show-month-and-year) .calendar-days-of-week,\n :host(.show-month-and-year) .calendar-body,\n :host(.show-month-and-year) .datetime-time*/.show-month-and-year.sc-ion-datetime-md-h .calendar-next-prev.sc-ion-datetime-md,.show-month-and-year.sc-ion-datetime-md-h .calendar-days-of-week.sc-ion-datetime-md,.show-month-and-year.sc-ion-datetime-md-h .calendar-body.sc-ion-datetime-md,.show-month-and-year.sc-ion-datetime-md-h .datetime-time.sc-ion-datetime-md{position:absolute;visibility:hidden;pointer-events:none}/*!@@supports (inset-inline-start: 0)*/@supports .sc-ion-datetime-md (inset-inline-start.sc-ion-datetime-md: 0).sc-ion-datetime-md{.sc-ion-datetime-md-h.show-month-and-year .calendar-next-prev,.sc-ion-datetime-md-h.show-month-and-year .calendar-days-of-week,.sc-ion-datetime-md-h.show-month-and-year .calendar-body,.sc-ion-datetime-md-h.show-month-and-year .datetime-time{inset-inline-start:-99999px}}/*!@@supports not (inset-inline-start: 0)*/@supports .sc-ion-datetime-md not.sc-ion-datetime-md (inset-inline-start.sc-ion-datetime-md: 0).sc-ion-datetime-md{.sc-ion-datetime-md-h.show-month-and-year .calendar-next-prev,.sc-ion-datetime-md-h.show-month-and-year .calendar-days-of-week,.sc-ion-datetime-md-h.show-month-and-year .calendar-body,.sc-ion-datetime-md-h.show-month-and-year .datetime-time{left:-99999px}.sc-ion-datetime-md-h[dir=rtl].sc-ion-datetime-md-h.show-month-and-year .calendar-next-prev,[dir=rtl] .sc-ion-datetime-md-h.sc-ion-datetime-md-h.show-month-and-year .calendar-next-prev,.sc-ion-datetime-md-h[dir=rtl].show-month-and-year .calendar-next-prev,[dir=rtl] .sc-ion-datetime-md-h.show-month-and-year .calendar-next-prev,.sc-ion-datetime-md-h[dir=rtl].sc-ion-datetime-md-h.show-month-and-year .calendar-days-of-week,[dir=rtl] .sc-ion-datetime-md-h.sc-ion-datetime-md-h.show-month-and-year .calendar-days-of-week,.sc-ion-datetime-md-h[dir=rtl].show-month-and-year .calendar-days-of-week,[dir=rtl] .sc-ion-datetime-md-h.show-month-and-year .calendar-days-of-week,.sc-ion-datetime-md-h[dir=rtl].sc-ion-datetime-md-h.show-month-and-year .calendar-body,[dir=rtl] .sc-ion-datetime-md-h.sc-ion-datetime-md-h.show-month-and-year .calendar-body,.sc-ion-datetime-md-h[dir=rtl].show-month-and-year .calendar-body,[dir=rtl] .sc-ion-datetime-md-h.show-month-and-year .calendar-body,.sc-ion-datetime-md-h[dir=rtl].sc-ion-datetime-md-h.show-month-and-year .datetime-time,[dir=rtl] .sc-ion-datetime-md-h.sc-ion-datetime-md-h.show-month-and-year .datetime-time,.sc-ion-datetime-md-h[dir=rtl].show-month-and-year .datetime-time,[dir=rtl] .sc-ion-datetime-md-h.show-month-and-year .datetime-time{left:unset;right:unset;right:-99999px}@supports selector(:dir(rtl)){.sc-ion-datetime-md-h.show-month-and-year:dir(rtl) .calendar-next-prev,.sc-ion-datetime-md-h.show-month-and-year:dir(rtl) .calendar-days-of-week,.sc-ion-datetime-md-h.show-month-and-year:dir(rtl) .calendar-body,.sc-ion-datetime-md-h.show-month-and-year:dir(rtl) .datetime-time{left:unset;right:unset;right:-99999px}}}}@supports (not (background: -webkit-named-image(apple-pay-logo-black))) or ((background: -webkit-named-image(apple-pay-logo-black)) and (aspect-ratio: 1/1)){/*!@:host(.show-month-and-year) .calendar-next-prev,\n :host(.show-month-and-year) .calendar-days-of-week,\n :host(.show-month-and-year) .calendar-body,\n :host(.show-month-and-year) .datetime-time*/.show-month-and-year.sc-ion-datetime-md-h .calendar-next-prev.sc-ion-datetime-md,.show-month-and-year.sc-ion-datetime-md-h .calendar-days-of-week.sc-ion-datetime-md,.show-month-and-year.sc-ion-datetime-md-h .calendar-body.sc-ion-datetime-md,.show-month-and-year.sc-ion-datetime-md-h .datetime-time.sc-ion-datetime-md{display:none}}/*!@:host(.month-year-picker-open) .datetime-footer*/.month-year-picker-open.sc-ion-datetime-md-h .datetime-footer.sc-ion-datetime-md{display:none}/*!@:host(.datetime-disabled)*/.datetime-disabled.sc-ion-datetime-md-h{pointer-events:none}/*!@:host(.datetime-disabled) .calendar-days-of-week,\n:host(.datetime-disabled) .datetime-time*/.datetime-disabled.sc-ion-datetime-md-h .calendar-days-of-week.sc-ion-datetime-md,.datetime-disabled.sc-ion-datetime-md-h .datetime-time.sc-ion-datetime-md{opacity:0.4}/*!@:host(.datetime-readonly)*/.datetime-readonly.sc-ion-datetime-md-h{pointer-events:none}/*!@:host(.datetime-readonly) .calendar-action-buttons,\n:host(.datetime-readonly) .calendar-body,\n:host(.datetime-readonly) .datetime-year*/.datetime-readonly.sc-ion-datetime-md-h .calendar-action-buttons.sc-ion-datetime-md,.datetime-readonly.sc-ion-datetime-md-h .calendar-body.sc-ion-datetime-md,.datetime-readonly.sc-ion-datetime-md-h .datetime-year.sc-ion-datetime-md{pointer-events:initial}/*!@:host(.datetime-readonly) .calendar-day[disabled]:not(.calendar-day-constrained),\n:host(.datetime-readonly) .datetime-action-buttons ion-button[disabled]*/.datetime-readonly.sc-ion-datetime-md-h .calendar-day[disabled].sc-ion-datetime-md:not(.calendar-day-constrained),.datetime-readonly.sc-ion-datetime-md-h .datetime-action-buttons.sc-ion-datetime-md ion-button[disabled].sc-ion-datetime-md{opacity:1}/*!@:host .datetime-header .datetime-title*/.sc-ion-datetime-md-h .datetime-header.sc-ion-datetime-md .datetime-title.sc-ion-datetime-md{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}/*!@:host .datetime-action-buttons.has-clear-button*/.sc-ion-datetime-md-h .datetime-action-buttons.has-clear-button.sc-ion-datetime-md{width:100%}/*!@:host .datetime-action-buttons ion-buttons*/.sc-ion-datetime-md-h .datetime-action-buttons.sc-ion-datetime-md ion-buttons.sc-ion-datetime-md{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}/*!@.datetime-action-buttons .datetime-action-buttons-container*/.datetime-action-buttons.sc-ion-datetime-md .datetime-action-buttons-container.sc-ion-datetime-md{display:-ms-flexbox;display:flex}/*!@:host .calendar-action-buttons*/.sc-ion-datetime-md-h .calendar-action-buttons.sc-ion-datetime-md{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}/*!@:host .calendar-action-buttons ion-button*/.sc-ion-datetime-md-h .calendar-action-buttons.sc-ion-datetime-md ion-button.sc-ion-datetime-md{--background:transparent}/*!@:host .calendar-days-of-week*/.sc-ion-datetime-md-h .calendar-days-of-week.sc-ion-datetime-md{display:grid;grid-template-columns:repeat(7, 1fr);text-align:center}/*!@.calendar-days-of-week .day-of-week*/.calendar-days-of-week.sc-ion-datetime-md .day-of-week.sc-ion-datetime-md{-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto;margin-top:0;margin-bottom:0}/*!@:host .calendar-body*/.sc-ion-datetime-md-h .calendar-body.sc-ion-datetime-md{display:-ms-flexbox;display:flex;-ms-flex-positive:1;flex-grow:1;-webkit-scroll-snap-type:x mandatory;-ms-scroll-snap-type:x mandatory;scroll-snap-type:x mandatory;overflow-x:scroll;overflow-y:hidden;scrollbar-width:none;outline:none}/*!@:host .calendar-body .calendar-month*/.sc-ion-datetime-md-h .calendar-body.sc-ion-datetime-md .calendar-month.sc-ion-datetime-md{display:-ms-flexbox;display:flex;-ms-flex-flow:column;flex-flow:column;scroll-snap-align:start;scroll-snap-stop:always;-ms-flex-negative:0;flex-shrink:0;width:100%}/*!@:host .calendar-body .calendar-month-disabled*/.sc-ion-datetime-md-h .calendar-body.sc-ion-datetime-md .calendar-month-disabled.sc-ion-datetime-md{scroll-snap-align:none}/*!@:host .calendar-body::-webkit-scrollbar*/.sc-ion-datetime-md-h .calendar-body.sc-ion-datetime-md::-webkit-scrollbar{display:none}/*!@:host .calendar-body .calendar-month-grid*/.sc-ion-datetime-md-h .calendar-body.sc-ion-datetime-md .calendar-month-grid.sc-ion-datetime-md{display:grid;grid-template-columns:repeat(7, 1fr)}/*!@:host .calendar-day-wrapper*/.sc-ion-datetime-md-h .calendar-day-wrapper.sc-ion-datetime-md{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;min-width:0;min-height:0;overflow:visible}/*!@.calendar-day*/.calendar-day.sc-ion-datetime-md{border-radius:50%;-webkit-padding-start:0px;padding-inline-start:0px;-webkit-padding-end:0px;padding-inline-end:0px;padding-top:0px;padding-bottom:0px;-webkit-margin-start:0px;margin-inline-start:0px;-webkit-margin-end:0px;margin-inline-end:0px;margin-top:0px;margin-bottom:0px;display:-ms-flexbox;display:flex;position:relative;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;border:none;outline:none;background:none;color:currentColor;font-family:var(--ion-font-family, inherit);cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;z-index:0}/*!@:host .calendar-day[disabled]*/.sc-ion-datetime-md-h .calendar-day[disabled].sc-ion-datetime-md{pointer-events:none;opacity:0.4}/*!@.calendar-day:focus*/.calendar-day.sc-ion-datetime-md:focus{background:rgba(var(--ion-color-base-rgb), 0.2);-webkit-box-shadow:0px 0px 0px 4px rgba(var(--ion-color-base-rgb), 0.2);box-shadow:0px 0px 0px 4px rgba(var(--ion-color-base-rgb), 0.2)}/*!@:host .datetime-time*/.sc-ion-datetime-md-h .datetime-time.sc-ion-datetime-md{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}/*!@:host(.datetime-presentation-time) .datetime-time*/.datetime-presentation-time.sc-ion-datetime-md-h .datetime-time.sc-ion-datetime-md{padding-left:0;padding-right:0;padding-top:0;padding-bottom:0}/*!@:host ion-popover*/.sc-ion-datetime-md-h ion-popover.sc-ion-datetime-md{--height:200px}/*!@:host .time-header*/.sc-ion-datetime-md-h .time-header.sc-ion-datetime-md{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}/*!@:host .time-body*/.sc-ion-datetime-md-h .time-body.sc-ion-datetime-md{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;display:-ms-flexbox;display:flex;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}/*!@:host .time-body-active*/.sc-ion-datetime-md-h .time-body-active.sc-ion-datetime-md{color:var(--ion-color-base)}/*!@:host(.in-item)*/.in-item.sc-ion-datetime-md-h{position:static}/*!@:host(.show-month-and-year) .calendar-action-buttons .calendar-month-year-toggle*/.show-month-and-year.sc-ion-datetime-md-h .calendar-action-buttons.sc-ion-datetime-md .calendar-month-year-toggle.sc-ion-datetime-md{color:var(--ion-color-base)}/*!@.calendar-month-year*/.calendar-month-year.sc-ion-datetime-md{min-width:0}/*!@.calendar-month-year-toggle*/.calendar-month-year-toggle.sc-ion-datetime-md{font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;letter-spacing:inherit;text-decoration:inherit;text-indent:inherit;text-overflow:inherit;text-transform:inherit;text-align:inherit;white-space:inherit;color:inherit;position:relative;border:0;outline:none;background:transparent;cursor:pointer;z-index:1}/*!@.calendar-month-year-toggle::after*/.calendar-month-year-toggle.sc-ion-datetime-md::after{left:0;right:0;top:0;bottom:0;position:absolute;content:\"\";opacity:0;-webkit-transition:opacity 15ms linear, background-color 15ms linear;transition:opacity 15ms linear, background-color 15ms linear;z-index:-1}/*!@.calendar-month-year-toggle.ion-focused::after*/.calendar-month-year-toggle.ion-focused.sc-ion-datetime-md::after{background:currentColor}/*!@.calendar-month-year-toggle:disabled*/.calendar-month-year-toggle.sc-ion-datetime-md:disabled{opacity:0.3;pointer-events:none}/*!@.calendar-month-year-toggle ion-icon*/.calendar-month-year-toggle.sc-ion-datetime-md ion-icon.sc-ion-datetime-md{-webkit-padding-start:4px;padding-inline-start:4px;-webkit-padding-end:0;padding-inline-end:0;padding-top:0;padding-bottom:0;-ms-flex-negative:0;flex-shrink:0}/*!@.calendar-month-year-toggle #toggle-wrapper*/.calendar-month-year-toggle.sc-ion-datetime-md #toggle-wrapper.sc-ion-datetime-md{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center}/*!@:host*/.sc-ion-datetime-md-h{--background:var(--ion-color-step-100, #ffffff);--title-color:var(--ion-color-contrast)}/*!@:host .datetime-header*/.sc-ion-datetime-md-h .datetime-header.sc-ion-datetime-md{-webkit-padding-start:20px;padding-inline-start:20px;-webkit-padding-end:20px;padding-inline-end:20px;padding-top:20px;padding-bottom:20px;background:var(--ion-color-base);color:var(--title-color)}/*!@:host .datetime-header .datetime-title*/.sc-ion-datetime-md-h .datetime-header.sc-ion-datetime-md .datetime-title.sc-ion-datetime-md{font-size:0.75rem;text-transform:uppercase}/*!@:host .datetime-header .datetime-selected-date*/.sc-ion-datetime-md-h .datetime-header.sc-ion-datetime-md .datetime-selected-date.sc-ion-datetime-md{margin-top:30px;font-size:2.125rem}/*!@:host .calendar-action-buttons ion-button*/.sc-ion-datetime-md-h .calendar-action-buttons.sc-ion-datetime-md ion-button.sc-ion-datetime-md{--color:var(--ion-color-step-650, #595959)}/*!@.calendar-month-year-toggle*/.calendar-month-year-toggle.sc-ion-datetime-md{-webkit-padding-start:20px;padding-inline-start:20px;-webkit-padding-end:16px;padding-inline-end:16px;padding-top:12px;padding-bottom:12px;min-height:48px;background:transparent;color:var(--ion-color-step-650, #595959);z-index:1}/*!@.calendar-month-year-toggle.ion-focused::after*/.calendar-month-year-toggle.ion-focused.sc-ion-datetime-md::after{opacity:0.04}/*!@.calendar-month-year-toggle ion-ripple-effect*/.calendar-month-year-toggle.sc-ion-datetime-md ion-ripple-effect.sc-ion-datetime-md{color:currentColor}@media (any-hover: hover){/*!@.calendar-month-year-toggle.ion-activatable:not(.ion-focused):hover::after*/.calendar-month-year-toggle.ion-activatable.sc-ion-datetime-md:not(.ion-focused):hover::after{background:currentColor;opacity:0.04}}/*!@:host .calendar-days-of-week*/.sc-ion-datetime-md-h .calendar-days-of-week.sc-ion-datetime-md{-webkit-padding-start:10px;padding-inline-start:10px;-webkit-padding-end:10px;padding-inline-end:10px;padding-top:0px;padding-bottom:0px;color:var(--ion-color-step-500, gray);font-size:0.875rem;line-height:36px}/*!@:host .calendar-body .calendar-month .calendar-month-grid*/.sc-ion-datetime-md-h .calendar-body.sc-ion-datetime-md .calendar-month.sc-ion-datetime-md .calendar-month-grid.sc-ion-datetime-md{-webkit-padding-start:10px;padding-inline-start:10px;-webkit-padding-end:10px;padding-inline-end:10px;padding-top:4px;padding-bottom:4px;grid-template-rows:repeat(6, 1fr)}/*!@:host .calendar-day*/.sc-ion-datetime-md-h .calendar-day.sc-ion-datetime-md{width:42px;min-width:42px;height:42px;font-size:0.875rem}/*!@:host .calendar-day.calendar-day-today*/.sc-ion-datetime-md-h .calendar-day.calendar-day-today.sc-ion-datetime-md{border:1px solid var(--ion-color-base);color:var(--ion-color-base)}/*!@:host .calendar-day.calendar-day-active*/.sc-ion-datetime-md-h .calendar-day.calendar-day-active.sc-ion-datetime-md{color:var(--ion-color-contrast)}/*!@.calendar-day.calendar-day-active*/.calendar-day.calendar-day-active.sc-ion-datetime-md{border:1px solid var(--ion-color-base);background:var(--ion-color-base)}/*!@:host .datetime-time*/.sc-ion-datetime-md-h .datetime-time.sc-ion-datetime-md{-webkit-padding-start:16px;padding-inline-start:16px;-webkit-padding-end:16px;padding-inline-end:16px;padding-top:8px;padding-bottom:8px}/*!@:host .time-header*/.sc-ion-datetime-md-h .time-header.sc-ion-datetime-md{color:var(--ion-color-step-650, #595959)}/*!@:host(.datetime-presentation-month) .datetime-year,\n:host(.datetime-presentation-year) .datetime-year,\n:host(.datetime-presentation-month-year) .datetime-year*/.datetime-presentation-month.sc-ion-datetime-md-h .datetime-year.sc-ion-datetime-md,.datetime-presentation-year.sc-ion-datetime-md-h .datetime-year.sc-ion-datetime-md,.datetime-presentation-month-year.sc-ion-datetime-md-h .datetime-year.sc-ion-datetime-md{margin-top:20px;margin-bottom:20px}/*!@:host .datetime-buttons*/.sc-ion-datetime-md-h .datetime-buttons.sc-ion-datetime-md{-webkit-padding-start:10px;padding-inline-start:10px;-webkit-padding-end:10px;padding-inline-end:10px;padding-top:10px;padding-bottom:10px;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:end;justify-content:flex-end}";
14870
+ const datetimeMdCss = "/*!@:host*/.sc-ion-datetime-md-h{display:-ms-flexbox;display:flex;-ms-flex-flow:column;flex-flow:column;background:var(--background);overflow:hidden}/*!@ion-picker-column-internal*/ion-picker-column-internal.sc-ion-datetime-md{min-width:26px}/*!@:host(.datetime-size-fixed)*/.datetime-size-fixed.sc-ion-datetime-md-h{width:auto;height:auto}/*!@:host(.datetime-size-fixed:not(.datetime-prefer-wheel))*/.datetime-size-fixed.sc-ion-datetime-md-h:not(.datetime-prefer-wheel){max-width:350px}/*!@:host(.datetime-size-fixed.datetime-prefer-wheel)*/.datetime-size-fixed.datetime-prefer-wheel.sc-ion-datetime-md-h{min-width:350px;max-width:-webkit-max-content;max-width:-moz-max-content;max-width:max-content}/*!@:host(.datetime-size-cover)*/.datetime-size-cover.sc-ion-datetime-md-h{width:100%}/*!@:host .calendar-body,\n:host .datetime-year*/.sc-ion-datetime-md-h .calendar-body.sc-ion-datetime-md,.sc-ion-datetime-md-h .datetime-year.sc-ion-datetime-md{opacity:0}/*!@:host(:not(.datetime-ready)) .datetime-year*/.sc-ion-datetime-md-h:not(.datetime-ready) .datetime-year.sc-ion-datetime-md{position:absolute;pointer-events:none}/*!@:host(.datetime-ready) .calendar-body*/.datetime-ready.sc-ion-datetime-md-h .calendar-body.sc-ion-datetime-md{opacity:1}/*!@:host(.datetime-ready) .datetime-year*/.datetime-ready.sc-ion-datetime-md-h .datetime-year.sc-ion-datetime-md{display:none;opacity:1}/*!@:host .wheel-order-year-first .day-column*/.sc-ion-datetime-md-h .wheel-order-year-first.sc-ion-datetime-md .day-column.sc-ion-datetime-md{-ms-flex-order:3;order:3;text-align:end}/*!@:host .wheel-order-year-first .month-column*/.sc-ion-datetime-md-h .wheel-order-year-first.sc-ion-datetime-md .month-column.sc-ion-datetime-md{-ms-flex-order:2;order:2;text-align:end}/*!@:host .wheel-order-year-first .year-column*/.sc-ion-datetime-md-h .wheel-order-year-first.sc-ion-datetime-md .year-column.sc-ion-datetime-md{-ms-flex-order:1;order:1;text-align:start}/*!@:host .datetime-calendar,\n:host .datetime-year*/.sc-ion-datetime-md-h .datetime-calendar.sc-ion-datetime-md,.sc-ion-datetime-md-h .datetime-year.sc-ion-datetime-md{display:-ms-flexbox;display:flex;-ms-flex:1 1 auto;flex:1 1 auto;-ms-flex-flow:column;flex-flow:column}/*!@:host(.show-month-and-year) .datetime-year*/.show-month-and-year.sc-ion-datetime-md-h .datetime-year.sc-ion-datetime-md{display:-ms-flexbox;display:flex}@supports (background: -webkit-named-image(apple-pay-logo-black)) and (not (aspect-ratio: 1/1)){/*!@:host(.show-month-and-year) .calendar-next-prev,\n :host(.show-month-and-year) .calendar-days-of-week,\n :host(.show-month-and-year) .calendar-body,\n :host(.show-month-and-year) .datetime-time*/.show-month-and-year.sc-ion-datetime-md-h .calendar-next-prev.sc-ion-datetime-md,.show-month-and-year.sc-ion-datetime-md-h .calendar-days-of-week.sc-ion-datetime-md,.show-month-and-year.sc-ion-datetime-md-h .calendar-body.sc-ion-datetime-md,.show-month-and-year.sc-ion-datetime-md-h .datetime-time.sc-ion-datetime-md{position:absolute;visibility:hidden;pointer-events:none}/*!@@supports (inset-inline-start: 0)*/@supports .sc-ion-datetime-md (inset-inline-start.sc-ion-datetime-md: 0).sc-ion-datetime-md{.sc-ion-datetime-md-h.show-month-and-year .calendar-next-prev,.sc-ion-datetime-md-h.show-month-and-year .calendar-days-of-week,.sc-ion-datetime-md-h.show-month-and-year .calendar-body,.sc-ion-datetime-md-h.show-month-and-year .datetime-time{inset-inline-start:-99999px}}/*!@@supports not (inset-inline-start: 0)*/@supports .sc-ion-datetime-md not.sc-ion-datetime-md (inset-inline-start.sc-ion-datetime-md: 0).sc-ion-datetime-md{.sc-ion-datetime-md-h.show-month-and-year .calendar-next-prev,.sc-ion-datetime-md-h.show-month-and-year .calendar-days-of-week,.sc-ion-datetime-md-h.show-month-and-year .calendar-body,.sc-ion-datetime-md-h.show-month-and-year .datetime-time{left:-99999px}.sc-ion-datetime-md-h[dir=rtl].sc-ion-datetime-md-h.show-month-and-year .calendar-next-prev,[dir=rtl] .sc-ion-datetime-md-h.sc-ion-datetime-md-h.show-month-and-year .calendar-next-prev,.sc-ion-datetime-md-h[dir=rtl].show-month-and-year .calendar-next-prev,[dir=rtl] .sc-ion-datetime-md-h.show-month-and-year .calendar-next-prev,.sc-ion-datetime-md-h[dir=rtl].sc-ion-datetime-md-h.show-month-and-year .calendar-days-of-week,[dir=rtl] .sc-ion-datetime-md-h.sc-ion-datetime-md-h.show-month-and-year .calendar-days-of-week,.sc-ion-datetime-md-h[dir=rtl].show-month-and-year .calendar-days-of-week,[dir=rtl] .sc-ion-datetime-md-h.show-month-and-year .calendar-days-of-week,.sc-ion-datetime-md-h[dir=rtl].sc-ion-datetime-md-h.show-month-and-year .calendar-body,[dir=rtl] .sc-ion-datetime-md-h.sc-ion-datetime-md-h.show-month-and-year .calendar-body,.sc-ion-datetime-md-h[dir=rtl].show-month-and-year .calendar-body,[dir=rtl] .sc-ion-datetime-md-h.show-month-and-year .calendar-body,.sc-ion-datetime-md-h[dir=rtl].sc-ion-datetime-md-h.show-month-and-year .datetime-time,[dir=rtl] .sc-ion-datetime-md-h.sc-ion-datetime-md-h.show-month-and-year .datetime-time,.sc-ion-datetime-md-h[dir=rtl].show-month-and-year .datetime-time,[dir=rtl] .sc-ion-datetime-md-h.show-month-and-year .datetime-time{left:unset;right:unset;right:-99999px}@supports selector(:dir(rtl)){.sc-ion-datetime-md-h.show-month-and-year:dir(rtl) .calendar-next-prev,.sc-ion-datetime-md-h.show-month-and-year:dir(rtl) .calendar-days-of-week,.sc-ion-datetime-md-h.show-month-and-year:dir(rtl) .calendar-body,.sc-ion-datetime-md-h.show-month-and-year:dir(rtl) .datetime-time{left:unset;right:unset;right:-99999px}}}}@supports (not (background: -webkit-named-image(apple-pay-logo-black))) or ((background: -webkit-named-image(apple-pay-logo-black)) and (aspect-ratio: 1/1)){/*!@:host(.show-month-and-year) .calendar-next-prev,\n :host(.show-month-and-year) .calendar-days-of-week,\n :host(.show-month-and-year) .calendar-body,\n :host(.show-month-and-year) .datetime-time*/.show-month-and-year.sc-ion-datetime-md-h .calendar-next-prev.sc-ion-datetime-md,.show-month-and-year.sc-ion-datetime-md-h .calendar-days-of-week.sc-ion-datetime-md,.show-month-and-year.sc-ion-datetime-md-h .calendar-body.sc-ion-datetime-md,.show-month-and-year.sc-ion-datetime-md-h .datetime-time.sc-ion-datetime-md{display:none}}/*!@:host(.month-year-picker-open) .datetime-footer*/.month-year-picker-open.sc-ion-datetime-md-h .datetime-footer.sc-ion-datetime-md{display:none}/*!@:host(.datetime-disabled)*/.datetime-disabled.sc-ion-datetime-md-h{pointer-events:none}/*!@:host(.datetime-disabled) .calendar-days-of-week,\n:host(.datetime-disabled) .datetime-time*/.datetime-disabled.sc-ion-datetime-md-h .calendar-days-of-week.sc-ion-datetime-md,.datetime-disabled.sc-ion-datetime-md-h .datetime-time.sc-ion-datetime-md{opacity:0.4}/*!@:host(.datetime-readonly)*/.datetime-readonly.sc-ion-datetime-md-h{pointer-events:none}/*!@:host(.datetime-readonly) .calendar-action-buttons,\n:host(.datetime-readonly) .calendar-body,\n:host(.datetime-readonly) .datetime-year*/.datetime-readonly.sc-ion-datetime-md-h .calendar-action-buttons.sc-ion-datetime-md,.datetime-readonly.sc-ion-datetime-md-h .calendar-body.sc-ion-datetime-md,.datetime-readonly.sc-ion-datetime-md-h .datetime-year.sc-ion-datetime-md{pointer-events:initial}/*!@:host(.datetime-readonly) .calendar-day[disabled]:not(.calendar-day-constrained),\n:host(.datetime-readonly) .datetime-action-buttons ion-button[disabled]*/.datetime-readonly.sc-ion-datetime-md-h .calendar-day[disabled].sc-ion-datetime-md:not(.calendar-day-constrained),.datetime-readonly.sc-ion-datetime-md-h .datetime-action-buttons.sc-ion-datetime-md ion-button[disabled].sc-ion-datetime-md{opacity:1}/*!@:host .datetime-header .datetime-title*/.sc-ion-datetime-md-h .datetime-header.sc-ion-datetime-md .datetime-title.sc-ion-datetime-md{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}/*!@:host .datetime-action-buttons.has-clear-button*/.sc-ion-datetime-md-h .datetime-action-buttons.has-clear-button.sc-ion-datetime-md{width:100%}/*!@:host .datetime-action-buttons ion-buttons*/.sc-ion-datetime-md-h .datetime-action-buttons.sc-ion-datetime-md ion-buttons.sc-ion-datetime-md{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}/*!@.datetime-action-buttons .datetime-action-buttons-container*/.datetime-action-buttons.sc-ion-datetime-md .datetime-action-buttons-container.sc-ion-datetime-md{display:-ms-flexbox;display:flex}/*!@:host .calendar-action-buttons*/.sc-ion-datetime-md-h .calendar-action-buttons.sc-ion-datetime-md{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}/*!@:host .calendar-action-buttons ion-button*/.sc-ion-datetime-md-h .calendar-action-buttons.sc-ion-datetime-md ion-button.sc-ion-datetime-md{--background:transparent}/*!@:host .calendar-days-of-week*/.sc-ion-datetime-md-h .calendar-days-of-week.sc-ion-datetime-md{display:grid;grid-template-columns:repeat(7, 1fr);text-align:center}/*!@.calendar-days-of-week .day-of-week*/.calendar-days-of-week.sc-ion-datetime-md .day-of-week.sc-ion-datetime-md{-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto;margin-top:0;margin-bottom:0}/*!@:host .calendar-body*/.sc-ion-datetime-md-h .calendar-body.sc-ion-datetime-md{display:-ms-flexbox;display:flex;-ms-flex-positive:1;flex-grow:1;-webkit-scroll-snap-type:x mandatory;-ms-scroll-snap-type:x mandatory;scroll-snap-type:x mandatory;overflow-x:scroll;overflow-y:hidden;scrollbar-width:none;outline:none}/*!@:host .calendar-body .calendar-month*/.sc-ion-datetime-md-h .calendar-body.sc-ion-datetime-md .calendar-month.sc-ion-datetime-md{display:-ms-flexbox;display:flex;-ms-flex-flow:column;flex-flow:column;scroll-snap-align:start;scroll-snap-stop:always;-ms-flex-negative:0;flex-shrink:0;width:100%}/*!@:host .calendar-body .calendar-month-disabled*/.sc-ion-datetime-md-h .calendar-body.sc-ion-datetime-md .calendar-month-disabled.sc-ion-datetime-md{scroll-snap-align:none}/*!@:host .calendar-body::-webkit-scrollbar*/.sc-ion-datetime-md-h .calendar-body.sc-ion-datetime-md::-webkit-scrollbar{display:none}/*!@:host .calendar-body .calendar-month-grid*/.sc-ion-datetime-md-h .calendar-body.sc-ion-datetime-md .calendar-month-grid.sc-ion-datetime-md{display:grid;grid-template-columns:repeat(7, 1fr)}/*!@:host .calendar-day-wrapper*/.sc-ion-datetime-md-h .calendar-day-wrapper.sc-ion-datetime-md{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;min-width:0;min-height:0;overflow:visible}/*!@.calendar-day*/.calendar-day.sc-ion-datetime-md{border-radius:50%;-webkit-padding-start:0px;padding-inline-start:0px;-webkit-padding-end:0px;padding-inline-end:0px;padding-top:0px;padding-bottom:0px;-webkit-margin-start:0px;margin-inline-start:0px;-webkit-margin-end:0px;margin-inline-end:0px;margin-top:0px;margin-bottom:0px;display:-ms-flexbox;display:flex;position:relative;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;border:none;outline:none;background:none;color:currentColor;font-family:var(--ion-font-family, inherit);cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;z-index:0}/*!@:host .calendar-day[disabled]*/.sc-ion-datetime-md-h .calendar-day[disabled].sc-ion-datetime-md{pointer-events:none;opacity:0.4}/*!@.calendar-day:focus*/.calendar-day.sc-ion-datetime-md:focus{background:rgba(var(--ion-color-base-rgb), 0.2);-webkit-box-shadow:0px 0px 0px 4px rgba(var(--ion-color-base-rgb), 0.2);box-shadow:0px 0px 0px 4px rgba(var(--ion-color-base-rgb), 0.2)}/*!@:host .datetime-time*/.sc-ion-datetime-md-h .datetime-time.sc-ion-datetime-md{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}/*!@:host(.datetime-presentation-time) .datetime-time*/.datetime-presentation-time.sc-ion-datetime-md-h .datetime-time.sc-ion-datetime-md{padding-left:0;padding-right:0;padding-top:0;padding-bottom:0}/*!@:host ion-popover*/.sc-ion-datetime-md-h ion-popover.sc-ion-datetime-md{--height:200px}/*!@:host .time-header*/.sc-ion-datetime-md-h .time-header.sc-ion-datetime-md{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}/*!@:host .time-body*/.sc-ion-datetime-md-h .time-body.sc-ion-datetime-md{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;display:-ms-flexbox;display:flex;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}/*!@:host .time-body-active*/.sc-ion-datetime-md-h .time-body-active.sc-ion-datetime-md{color:var(--ion-color-base)}/*!@:host(.in-item)*/.in-item.sc-ion-datetime-md-h{position:static}/*!@:host(.show-month-and-year) .calendar-action-buttons .calendar-month-year-toggle*/.show-month-and-year.sc-ion-datetime-md-h .calendar-action-buttons.sc-ion-datetime-md .calendar-month-year-toggle.sc-ion-datetime-md{color:var(--ion-color-base)}/*!@.calendar-month-year*/.calendar-month-year.sc-ion-datetime-md{min-width:0}/*!@.calendar-month-year-toggle*/.calendar-month-year-toggle.sc-ion-datetime-md{font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;letter-spacing:inherit;text-decoration:inherit;text-indent:inherit;text-overflow:inherit;text-transform:inherit;text-align:inherit;white-space:inherit;color:inherit;position:relative;border:0;outline:none;background:transparent;cursor:pointer;z-index:1}/*!@.calendar-month-year-toggle::after*/.calendar-month-year-toggle.sc-ion-datetime-md::after{left:0;right:0;top:0;bottom:0;position:absolute;content:\"\";opacity:0;-webkit-transition:opacity 15ms linear, background-color 15ms linear;transition:opacity 15ms linear, background-color 15ms linear;z-index:-1}/*!@.calendar-month-year-toggle.ion-focused::after*/.calendar-month-year-toggle.ion-focused.sc-ion-datetime-md::after{background:currentColor}/*!@.calendar-month-year-toggle:disabled*/.calendar-month-year-toggle.sc-ion-datetime-md:disabled{opacity:0.3;pointer-events:none}/*!@.calendar-month-year-toggle ion-icon*/.calendar-month-year-toggle.sc-ion-datetime-md ion-icon.sc-ion-datetime-md{-webkit-padding-start:4px;padding-inline-start:4px;-webkit-padding-end:0;padding-inline-end:0;padding-top:0;padding-bottom:0;-ms-flex-negative:0;flex-shrink:0}/*!@.calendar-month-year-toggle #toggle-wrapper*/.calendar-month-year-toggle.sc-ion-datetime-md #toggle-wrapper.sc-ion-datetime-md{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center}/*!@:host*/.sc-ion-datetime-md-h{--background:var(--ion-color-step-100, #ffffff);--title-color:var(--ion-color-contrast)}/*!@:host .datetime-header*/.sc-ion-datetime-md-h .datetime-header.sc-ion-datetime-md{-webkit-padding-start:20px;padding-inline-start:20px;-webkit-padding-end:20px;padding-inline-end:20px;padding-top:20px;padding-bottom:20px;background:var(--ion-color-base);color:var(--title-color)}/*!@:host .datetime-header .datetime-title*/.sc-ion-datetime-md-h .datetime-header.sc-ion-datetime-md .datetime-title.sc-ion-datetime-md{font-size:0.75rem;text-transform:uppercase}/*!@:host .datetime-header .datetime-selected-date*/.sc-ion-datetime-md-h .datetime-header.sc-ion-datetime-md .datetime-selected-date.sc-ion-datetime-md{margin-top:30px;font-size:2.125rem}/*!@:host .calendar-action-buttons ion-button*/.sc-ion-datetime-md-h .calendar-action-buttons.sc-ion-datetime-md ion-button.sc-ion-datetime-md{--color:var(--ion-color-step-650, #595959)}/*!@.calendar-month-year-toggle*/.calendar-month-year-toggle.sc-ion-datetime-md{-webkit-padding-start:20px;padding-inline-start:20px;-webkit-padding-end:16px;padding-inline-end:16px;padding-top:12px;padding-bottom:12px;min-height:48px;background:transparent;color:var(--ion-color-step-650, #595959);z-index:1}/*!@.calendar-month-year-toggle.ion-focused::after*/.calendar-month-year-toggle.ion-focused.sc-ion-datetime-md::after{opacity:0.04}/*!@.calendar-month-year-toggle ion-ripple-effect*/.calendar-month-year-toggle.sc-ion-datetime-md ion-ripple-effect.sc-ion-datetime-md{color:currentColor}@media (any-hover: hover){/*!@.calendar-month-year-toggle.ion-activatable:not(.ion-focused):hover::after*/.calendar-month-year-toggle.ion-activatable.sc-ion-datetime-md:not(.ion-focused):hover::after{background:currentColor;opacity:0.04}}/*!@:host .calendar-days-of-week*/.sc-ion-datetime-md-h .calendar-days-of-week.sc-ion-datetime-md{-webkit-padding-start:10px;padding-inline-start:10px;-webkit-padding-end:10px;padding-inline-end:10px;padding-top:0px;padding-bottom:0px;color:var(--ion-color-step-500, gray);font-size:0.875rem;line-height:36px}/*!@:host .calendar-body .calendar-month .calendar-month-grid*/.sc-ion-datetime-md-h .calendar-body.sc-ion-datetime-md .calendar-month.sc-ion-datetime-md .calendar-month-grid.sc-ion-datetime-md{-webkit-padding-start:10px;padding-inline-start:10px;-webkit-padding-end:10px;padding-inline-end:10px;padding-top:4px;padding-bottom:4px;grid-template-rows:repeat(6, 1fr)}/*!@:host .calendar-day*/.sc-ion-datetime-md-h .calendar-day.sc-ion-datetime-md{width:42px;min-width:42px;height:42px;font-size:0.875rem}/*!@:host .calendar-day.calendar-day-today*/.sc-ion-datetime-md-h .calendar-day.calendar-day-today.sc-ion-datetime-md{border:1px solid var(--ion-color-base);color:var(--ion-color-base)}/*!@:host .calendar-day.calendar-day-active*/.sc-ion-datetime-md-h .calendar-day.calendar-day-active.sc-ion-datetime-md{color:var(--ion-color-contrast)}/*!@.calendar-day.calendar-day-active*/.calendar-day.calendar-day-active.sc-ion-datetime-md{border:1px solid var(--ion-color-base);background:var(--ion-color-base)}/*!@:host .datetime-time*/.sc-ion-datetime-md-h .datetime-time.sc-ion-datetime-md{-webkit-padding-start:16px;padding-inline-start:16px;-webkit-padding-end:16px;padding-inline-end:16px;padding-top:8px;padding-bottom:8px}/*!@:host .time-header*/.sc-ion-datetime-md-h .time-header.sc-ion-datetime-md{color:var(--ion-color-step-650, #595959)}/*!@:host(.datetime-presentation-month) .datetime-year,\n:host(.datetime-presentation-year) .datetime-year,\n:host(.datetime-presentation-month-year) .datetime-year*/.datetime-presentation-month.sc-ion-datetime-md-h .datetime-year.sc-ion-datetime-md,.datetime-presentation-year.sc-ion-datetime-md-h .datetime-year.sc-ion-datetime-md,.datetime-presentation-month-year.sc-ion-datetime-md-h .datetime-year.sc-ion-datetime-md{margin-top:20px;margin-bottom:20px}/*!@:host .datetime-buttons*/.sc-ion-datetime-md-h .datetime-buttons.sc-ion-datetime-md{-webkit-padding-start:10px;padding-inline-start:10px;-webkit-padding-end:10px;padding-inline-end:10px;padding-top:10px;padding-bottom:10px;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:end;justify-content:flex-end}";
14871
14871
 
14872
14872
  /**
14873
14873
  * @virtualProp {"ios" | "md"} mode - The mode determines which platform styles to use.
@@ -15838,7 +15838,7 @@ class Datetime {
15838
15838
  const renderArray = forcePresentation === 'time-date'
15839
15839
  ? [this.renderTimePickerColumns(forcePresentation), this.renderDatePickerColumns(forcePresentation)]
15840
15840
  : [this.renderDatePickerColumns(forcePresentation), this.renderTimePickerColumns(forcePresentation)];
15841
- return hAsync("ion-picker", null, renderArray);
15841
+ return hAsync("ion-picker-internal", null, renderArray);
15842
15842
  }
15843
15843
  renderDatePickerColumns(forcePresentation) {
15844
15844
  return forcePresentation === 'date-time' || forcePresentation === 'time-date'
@@ -15897,7 +15897,7 @@ class Datetime {
15897
15897
  const todayString = workingParts.day !== null
15898
15898
  ? `${workingParts.year}-${workingParts.month}-${workingParts.day}`
15899
15899
  : `${defaultParts.year}-${defaultParts.month}-${defaultParts.day}`;
15900
- return (hAsync("ion-picker-column", { class: "date-column", color: this.color, disabled: disabled, value: todayString, onIonChange: (ev) => {
15900
+ return (hAsync("ion-picker-column-internal", { class: "date-column", color: this.color, disabled: disabled, items: items, value: todayString, onIonChange: (ev) => {
15901
15901
  // TODO(FW-1823) Remove this when iOS 14 support is dropped.
15902
15902
  // Due to a Safari 14 issue we need to destroy
15903
15903
  // the scroll listener before we update state
@@ -15913,7 +15913,7 @@ class Datetime {
15913
15913
  // the working parts have been updated.
15914
15914
  this.initializeCalendarListener();
15915
15915
  ev.stopPropagation();
15916
- } }, items.map((item) => (hAsync("ion-picker-column-option", { part: item.value === todayString ? `${WHEEL_ITEM_PART} ${WHEEL_ITEM_ACTIVE_PART}` : WHEEL_ITEM_PART, key: item.value, disabled: item.disabled, value: item.value }, item.text)))));
15916
+ } }));
15917
15917
  }
15918
15918
  renderIndividualDatePickerColumns(forcePresentation) {
15919
15919
  const { workingParts, isDateEnabled } = this;
@@ -15981,8 +15981,7 @@ class Datetime {
15981
15981
  }
15982
15982
  const { disabled, workingParts } = this;
15983
15983
  const activePart = this.getActivePartsWithFallback();
15984
- const pickerColumnValue = (_a = (workingParts.day !== null ? workingParts.day : this.defaultParts.day)) !== null && _a !== void 0 ? _a : undefined;
15985
- return (hAsync("ion-picker-column", { class: "day-column", color: this.color, disabled: disabled, value: pickerColumnValue, onIonChange: (ev) => {
15984
+ return (hAsync("ion-picker-column-internal", { class: "day-column", color: this.color, disabled: disabled, items: days, value: (_a = (workingParts.day !== null ? workingParts.day : this.defaultParts.day)) !== null && _a !== void 0 ? _a : undefined, onIonChange: (ev) => {
15986
15985
  // TODO(FW-1823) Remove this when iOS 14 support is dropped.
15987
15986
  // Due to a Safari 14 issue we need to destroy
15988
15987
  // the scroll listener before we update state
@@ -15996,7 +15995,7 @@ class Datetime {
15996
15995
  // the working parts have been updated.
15997
15996
  this.initializeCalendarListener();
15998
15997
  ev.stopPropagation();
15999
- } }, days.map((day) => (hAsync("ion-picker-column-option", { part: day.value === pickerColumnValue ? `${WHEEL_ITEM_PART} ${WHEEL_ITEM_ACTIVE_PART}` : WHEEL_ITEM_PART, key: day.value, disabled: day.disabled, value: day.value }, day.text)))));
15998
+ } }));
16000
15999
  }
16001
16000
  renderMonthPickerColumn(months) {
16002
16001
  if (months.length === 0) {
@@ -16004,7 +16003,7 @@ class Datetime {
16004
16003
  }
16005
16004
  const { disabled, workingParts } = this;
16006
16005
  const activePart = this.getActivePartsWithFallback();
16007
- return (hAsync("ion-picker-column", { class: "month-column", color: this.color, disabled: disabled, value: workingParts.month, onIonChange: (ev) => {
16006
+ return (hAsync("ion-picker-column-internal", { class: "month-column", color: this.color, disabled: disabled, items: months, value: workingParts.month, onIonChange: (ev) => {
16008
16007
  // TODO(FW-1823) Remove this when iOS 14 support is dropped.
16009
16008
  // Due to a Safari 14 issue we need to destroy
16010
16009
  // the scroll listener before we update state
@@ -16018,7 +16017,7 @@ class Datetime {
16018
16017
  // the working parts have been updated.
16019
16018
  this.initializeCalendarListener();
16020
16019
  ev.stopPropagation();
16021
- } }, months.map((month) => (hAsync("ion-picker-column-option", { part: month.value === workingParts.month ? `${WHEEL_ITEM_PART} ${WHEEL_ITEM_ACTIVE_PART}` : WHEEL_ITEM_PART, key: month.value, disabled: month.disabled, value: month.value }, month.text)))));
16020
+ } }));
16022
16021
  }
16023
16022
  renderYearPickerColumn(years) {
16024
16023
  if (years.length === 0) {
@@ -16026,7 +16025,7 @@ class Datetime {
16026
16025
  }
16027
16026
  const { disabled, workingParts } = this;
16028
16027
  const activePart = this.getActivePartsWithFallback();
16029
- return (hAsync("ion-picker-column", { class: "year-column", color: this.color, disabled: disabled, value: workingParts.year, onIonChange: (ev) => {
16028
+ return (hAsync("ion-picker-column-internal", { class: "year-column", color: this.color, disabled: disabled, items: years, value: workingParts.year, onIonChange: (ev) => {
16030
16029
  // TODO(FW-1823) Remove this when iOS 14 support is dropped.
16031
16030
  // Due to a Safari 14 issue we need to destroy
16032
16031
  // the scroll listener before we update state
@@ -16040,7 +16039,7 @@ class Datetime {
16040
16039
  // the working parts have been updated.
16041
16040
  this.initializeCalendarListener();
16042
16041
  ev.stopPropagation();
16043
- } }, years.map((year) => (hAsync("ion-picker-column-option", { part: year.value === workingParts.year ? `${WHEEL_ITEM_PART} ${WHEEL_ITEM_ACTIVE_PART}` : WHEEL_ITEM_PART, key: year.value, disabled: year.disabled, value: year.value }, year.text)))));
16042
+ } }));
16044
16043
  }
16045
16044
  renderTimePickerColumns(forcePresentation) {
16046
16045
  if (['date', 'month', 'month-year', 'year'].includes(forcePresentation)) {
@@ -16069,22 +16068,22 @@ class Datetime {
16069
16068
  if (hoursData.length === 0)
16070
16069
  return [];
16071
16070
  const activePart = this.getActivePartsWithFallback();
16072
- return (hAsync("ion-picker-column", { color: this.color, disabled: disabled, value: activePart.hour, numericInput: true, onIonChange: (ev) => {
16071
+ return (hAsync("ion-picker-column-internal", { color: this.color, disabled: disabled, value: activePart.hour, items: hoursData, numericInput: true, onIonChange: (ev) => {
16073
16072
  this.setWorkingParts(Object.assign(Object.assign({}, workingParts), { hour: ev.detail.value }));
16074
16073
  this.setActiveParts(Object.assign(Object.assign({}, activePart), { hour: ev.detail.value }));
16075
16074
  ev.stopPropagation();
16076
- } }, hoursData.map((hour) => (hAsync("ion-picker-column-option", { part: hour.value === activePart.hour ? `${WHEEL_ITEM_PART} ${WHEEL_ITEM_ACTIVE_PART}` : WHEEL_ITEM_PART, key: hour.value, disabled: hour.disabled, value: hour.value }, hour.text)))));
16075
+ } }));
16077
16076
  }
16078
16077
  renderMinutePickerColumn(minutesData) {
16079
16078
  const { disabled, workingParts } = this;
16080
16079
  if (minutesData.length === 0)
16081
16080
  return [];
16082
16081
  const activePart = this.getActivePartsWithFallback();
16083
- return (hAsync("ion-picker-column", { color: this.color, disabled: disabled, value: activePart.minute, numericInput: true, onIonChange: (ev) => {
16082
+ return (hAsync("ion-picker-column-internal", { color: this.color, disabled: disabled, value: activePart.minute, items: minutesData, numericInput: true, onIonChange: (ev) => {
16084
16083
  this.setWorkingParts(Object.assign(Object.assign({}, workingParts), { minute: ev.detail.value }));
16085
16084
  this.setActiveParts(Object.assign(Object.assign({}, activePart), { minute: ev.detail.value }));
16086
16085
  ev.stopPropagation();
16087
- } }, minutesData.map((minute) => (hAsync("ion-picker-column-option", { part: minute.value === activePart.minute ? `${WHEEL_ITEM_PART} ${WHEEL_ITEM_ACTIVE_PART}` : WHEEL_ITEM_PART, key: minute.value, disabled: minute.disabled, value: minute.value }, minute.text)))));
16086
+ } }));
16088
16087
  }
16089
16088
  renderDayPeriodPickerColumn(dayPeriodData) {
16090
16089
  const { disabled, workingParts } = this;
@@ -16093,12 +16092,12 @@ class Datetime {
16093
16092
  }
16094
16093
  const activePart = this.getActivePartsWithFallback();
16095
16094
  const isDayPeriodRTL = isLocaleDayPeriodRTL(this.locale);
16096
- return (hAsync("ion-picker-column", { style: isDayPeriodRTL ? { order: '-1' } : {}, color: this.color, disabled: disabled, value: activePart.ampm, onIonChange: (ev) => {
16095
+ return (hAsync("ion-picker-column-internal", { style: isDayPeriodRTL ? { order: '-1' } : {}, color: this.color, disabled: disabled, value: activePart.ampm, items: dayPeriodData, onIonChange: (ev) => {
16097
16096
  const hour = calculateHourFromAMPM(workingParts, ev.detail.value);
16098
16097
  this.setWorkingParts(Object.assign(Object.assign({}, workingParts), { ampm: ev.detail.value, hour }));
16099
16098
  this.setActiveParts(Object.assign(Object.assign({}, activePart), { ampm: ev.detail.value, hour }));
16100
16099
  ev.stopPropagation();
16101
- } }, dayPeriodData.map((dayPeriod) => (hAsync("ion-picker-column-option", { part: dayPeriod.value === activePart.ampm ? `${WHEEL_ITEM_PART} ${WHEEL_ITEM_ACTIVE_PART}` : WHEEL_ITEM_PART, key: dayPeriod.value, disabled: dayPeriod.disabled, value: dayPeriod.value }, dayPeriod.text)))));
16100
+ } }));
16102
16101
  }
16103
16102
  renderWheelView(forcePresentation) {
16104
16103
  const { locale } = this;
@@ -16284,7 +16283,7 @@ class Datetime {
16284
16283
  * This will correctly scroll the element position to the correct time value,
16285
16284
  * before the popover is fully presented.
16286
16285
  */
16287
- const cols = ev.target.querySelectorAll('ion-picker-column');
16286
+ const cols = ev.target.querySelectorAll('ion-picker-column-internal');
16288
16287
  // TODO (FW-615): Potentially remove this when intersection observers are fixed in picker column
16289
16288
  cols.forEach((col) => col.scrollActiveItemIntoView());
16290
16289
  }, style: {
@@ -16478,8 +16477,6 @@ class Datetime {
16478
16477
  }; }
16479
16478
  }
16480
16479
  let datetimeIds = 0;
16481
- const WHEEL_ITEM_PART = 'wheel-item';
16482
- const WHEEL_ITEM_ACTIVE_PART = `active`;
16483
16480
 
16484
16481
  const iosDatetimeButtonCss = "/*!@:host*/.sc-ion-datetime-button-ios-h{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}/*!@:host button*/.sc-ion-datetime-button-ios-h button.sc-ion-datetime-button-ios{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:1rem;cursor:pointer;overflow:hidden;-webkit-appearance:none;-moz-appearance:none;appearance:none}/*!@:host(.time-active) #time-button,\n:host(.date-active) #date-button*/.time-active.sc-ion-datetime-button-ios-h #time-button.sc-ion-datetime-button-ios,.date-active.sc-ion-datetime-button-ios-h #date-button.sc-ion-datetime-button-ios{color:var(--ion-color-base)}/*!@:host(.datetime-button-disabled)*/.datetime-button-disabled.sc-ion-datetime-button-ios-h{pointer-events:none}/*!@:host(.datetime-button-disabled) button*/.datetime-button-disabled.sc-ion-datetime-button-ios-h button.sc-ion-datetime-button-ios{opacity:0.4}";
16485
16482
 
@@ -24527,783 +24524,664 @@ class Note {
24527
24524
  }; }
24528
24525
  }
24529
24526
 
24530
- const pickerIosCss$1 = "/*!@:host*/.sc-ion-picker-ios-h{display:-ms-flexbox;display:flex;position:relative;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:100%;height:200px;direction:ltr;z-index:0}/*!@:host .picker-before,\n:host .picker-after*/.sc-ion-picker-ios-h .picker-before.sc-ion-picker-ios,.sc-ion-picker-ios-h .picker-after.sc-ion-picker-ios{position:absolute;width:100%;-webkit-transform:translateZ(0);transform:translateZ(0);z-index:1;pointer-events:none}/*!@:host .picker-before*/.sc-ion-picker-ios-h .picker-before.sc-ion-picker-ios{top:0;height:83px}@supports (inset-inline-start: 0){/*!@:host .picker-before*/.sc-ion-picker-ios-h .picker-before.sc-ion-picker-ios{inset-inline-start:0}}@supports not (inset-inline-start: 0){/*!@:host .picker-before*/.sc-ion-picker-ios-h .picker-before.sc-ion-picker-ios{left:0}/*!@:host-context([dir=rtl]) .picker-before*/[dir=rtl].sc-ion-picker-ios-h .picker-before.sc-ion-picker-ios,[dir=rtl] .sc-ion-picker-ios-h .picker-before.sc-ion-picker-ios{left:unset;right:unset;right:0}/*!@@supports selector(:dir(rtl))*/@supports .sc-ion-picker-ios selector(.sc-ion-picker-ios:dir(rtl)){.sc-ion-picker-ios-h:dir(rtl) .picker-before{left:unset;right:unset;right:0}}}/*!@:host .picker-after*/.sc-ion-picker-ios-h .picker-after.sc-ion-picker-ios{top:116px;height:84px}@supports (inset-inline-start: 0){/*!@:host .picker-after*/.sc-ion-picker-ios-h .picker-after.sc-ion-picker-ios{inset-inline-start:0}}@supports not (inset-inline-start: 0){/*!@:host .picker-after*/.sc-ion-picker-ios-h .picker-after.sc-ion-picker-ios{left:0}/*!@:host-context([dir=rtl]) .picker-after*/[dir=rtl].sc-ion-picker-ios-h .picker-after.sc-ion-picker-ios,[dir=rtl] .sc-ion-picker-ios-h .picker-after.sc-ion-picker-ios{left:unset;right:unset;right:0}/*!@@supports selector(:dir(rtl))*/@supports .sc-ion-picker-ios selector(.sc-ion-picker-ios:dir(rtl)){.sc-ion-picker-ios-h:dir(rtl) .picker-after{left:unset;right:unset;right:0}}}/*!@:host .picker-highlight*/.sc-ion-picker-ios-h .picker-highlight.sc-ion-picker-ios{border-radius:8px;left:0;right:0;top:50%;bottom:0;-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto;margin-top:0;margin-bottom:0;position:absolute;width:calc(100% - 16px);height:34px;-webkit-transform:translateY(-50%);transform:translateY(-50%);background:var(--wheel-highlight-background);z-index:-1}/*!@:host input*/.sc-ion-picker-ios-h input.sc-ion-picker-ios{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}/*!@:host ::slotted(ion-picker-column:first-of-type)*/.sc-ion-picker-ios-h .sc-ion-picker-ios-s>ion-picker-column:first-of-type{text-align:start}/*!@:host ::slotted(ion-picker-column:last-of-type)*/.sc-ion-picker-ios-h .sc-ion-picker-ios-s>ion-picker-column:last-of-type{text-align:end}/*!@:host ::slotted(ion-picker-column:only-child)*/.sc-ion-picker-ios-h .sc-ion-picker-ios-s>ion-picker-column:only-child{text-align:center}/*!@:host .picker-before*/.sc-ion-picker-ios-h .picker-before.sc-ion-picker-ios{background:-webkit-gradient(linear, left top, left bottom, color-stop(20%, rgba(var(--wheel-fade-background-rgb, var(--background-rgb, var(--ion-background-color-rgb, 255, 255, 255))), 1)), to(rgba(var(--wheel-fade-background-rgb, var(--background-rgb, var(--ion-background-color-rgb, 255, 255, 255))), 0.8)));background:linear-gradient(to bottom, rgba(var(--wheel-fade-background-rgb, var(--background-rgb, var(--ion-background-color-rgb, 255, 255, 255))), 1) 20%, rgba(var(--wheel-fade-background-rgb, var(--background-rgb, var(--ion-background-color-rgb, 255, 255, 255))), 0.8) 100%)}/*!@:host .picker-after*/.sc-ion-picker-ios-h .picker-after.sc-ion-picker-ios{background:-webkit-gradient(linear, left bottom, left top, color-stop(20%, rgba(var(--wheel-fade-background-rgb, var(--background-rgb, var(--ion-background-color-rgb, 255, 255, 255))), 1)), to(rgba(var(--wheel-fade-background-rgb, var(--background-rgb, var(--ion-background-color-rgb, 255, 255, 255))), 0.8)));background:linear-gradient(to top, rgba(var(--wheel-fade-background-rgb, var(--background-rgb, var(--ion-background-color-rgb, 255, 255, 255))), 1) 20%, rgba(var(--wheel-fade-background-rgb, var(--background-rgb, var(--ion-background-color-rgb, 255, 255, 255))), 0.8) 100%)}/*!@:host .picker-highlight*/.sc-ion-picker-ios-h .picker-highlight.sc-ion-picker-ios{background:var(--wheel-highlight-background, var(--ion-color-step-150, #eeeeef))}";
24527
+ /**
24528
+ * iOS Picker Enter Animation
24529
+ */
24530
+ const iosEnterAnimation$2 = (baseEl) => {
24531
+ const baseAnimation = createAnimation();
24532
+ const backdropAnimation = createAnimation();
24533
+ const wrapperAnimation = createAnimation();
24534
+ backdropAnimation
24535
+ .addElement(baseEl.querySelector('ion-backdrop'))
24536
+ .fromTo('opacity', 0.01, 'var(--backdrop-opacity)')
24537
+ .beforeStyles({
24538
+ 'pointer-events': 'none',
24539
+ })
24540
+ .afterClearStyles(['pointer-events']);
24541
+ wrapperAnimation
24542
+ .addElement(baseEl.querySelector('.picker-wrapper'))
24543
+ .fromTo('transform', 'translateY(100%)', 'translateY(0%)');
24544
+ return baseAnimation
24545
+ .addElement(baseEl)
24546
+ .easing('cubic-bezier(.36,.66,.04,1)')
24547
+ .duration(400)
24548
+ .addAnimation([backdropAnimation, wrapperAnimation]);
24549
+ };
24550
+
24551
+ /**
24552
+ * iOS Picker Leave Animation
24553
+ */
24554
+ const iosLeaveAnimation$2 = (baseEl) => {
24555
+ const baseAnimation = createAnimation();
24556
+ const backdropAnimation = createAnimation();
24557
+ const wrapperAnimation = createAnimation();
24558
+ backdropAnimation
24559
+ .addElement(baseEl.querySelector('ion-backdrop'))
24560
+ .fromTo('opacity', 'var(--backdrop-opacity)', 0.01);
24561
+ wrapperAnimation
24562
+ .addElement(baseEl.querySelector('.picker-wrapper'))
24563
+ .fromTo('transform', 'translateY(0%)', 'translateY(100%)');
24564
+ return baseAnimation
24565
+ .addElement(baseEl)
24566
+ .easing('cubic-bezier(.36,.66,.04,1)')
24567
+ .duration(400)
24568
+ .addAnimation([backdropAnimation, wrapperAnimation]);
24569
+ };
24570
+
24571
+ const pickerIosCss = ".sc-ion-picker-ios-h{--border-radius:0;--border-style:solid;--min-width:auto;--width:100%;--max-width:500px;--min-height:auto;--max-height:auto;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;top:0;display:block;position:absolute;width:100%;height:100%;outline:none;font-family:var(--ion-font-family, inherit);contain:strict;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:1001}@supports (inset-inline-start: 0){.sc-ion-picker-ios-h{inset-inline-start:0}}@supports not (inset-inline-start: 0){.sc-ion-picker-ios-h{left:0}[dir=rtl].sc-ion-picker-ios-h,[dir=rtl] .sc-ion-picker-ios-h{left:unset;right:unset;right:0}@supports selector(:dir(rtl)){.sc-ion-picker-ios-h:dir(rtl){left:unset;right:unset;right:0}}}.overlay-hidden.sc-ion-picker-ios-h{display:none}.picker-wrapper.sc-ion-picker-ios{border-radius:var(--border-radius);left:0;right:0;bottom:0;-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto;margin-top:auto;margin-bottom:auto;-webkit-transform:translate3d(0, 100%, 0);transform:translate3d(0, 100%, 0);display:-ms-flexbox;display:flex;position:absolute;-ms-flex-direction:column;flex-direction:column;width:var(--width);min-width:var(--min-width);max-width:var(--max-width);height:var(--height);min-height:var(--min-height);max-height:var(--max-height);border-width:var(--border-width);border-style:var(--border-style);border-color:var(--border-color);background:var(--background);contain:strict;overflow:hidden;z-index:10}.picker-toolbar.sc-ion-picker-ios{width:100%;background:transparent;contain:strict;z-index:1}.picker-button.sc-ion-picker-ios{border:0;font-family:inherit}.picker-button.sc-ion-picker-ios:active,.picker-button.sc-ion-picker-ios:focus{outline:none}.picker-columns.sc-ion-picker-ios{display:-ms-flexbox;display:flex;position:relative;-ms-flex-pack:center;justify-content:center;margin-bottom:var(--ion-safe-area-bottom, 0);contain:strict;overflow:hidden}.picker-above-highlight.sc-ion-picker-ios,.picker-below-highlight.sc-ion-picker-ios{display:none;pointer-events:none}.sc-ion-picker-ios-h{--background:var(--ion-background-color, #fff);--border-width:1px 0 0;--border-color:var(--ion-item-border-color, var(--ion-border-color, var(--ion-color-step-250, #c8c7cc)));--height:260px;--backdrop-opacity:var(--ion-backdrop-opacity, 0.26);color:var(--ion-item-color, var(--ion-text-color, #000))}.picker-toolbar.sc-ion-picker-ios{display:-ms-flexbox;display:flex;height:44px;border-bottom:0.55px solid var(--border-color)}.picker-toolbar-button.sc-ion-picker-ios{-ms-flex:1;flex:1;text-align:end}.picker-toolbar-button.sc-ion-picker-ios:last-child .picker-button.sc-ion-picker-ios{font-weight:600}.picker-toolbar-button.sc-ion-picker-ios:first-child{font-weight:normal;text-align:start}.picker-button.sc-ion-picker-ios,.picker-button.ion-activated.sc-ion-picker-ios{margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;-webkit-padding-start:1em;padding-inline-start:1em;-webkit-padding-end:1em;padding-inline-end:1em;padding-top:0;padding-bottom:0;height:44px;background:transparent;color:var(--ion-color-primary, #3880ff);font-size:16px}.picker-columns.sc-ion-picker-ios{height:215px;-webkit-perspective:1000px;perspective:1000px}.picker-above-highlight.sc-ion-picker-ios{top:0;-webkit-transform:translate3d(0, 0, 90px);transform:translate3d(0, 0, 90px);display:block;position:absolute;width:100%;height:81px;border-bottom:1px solid var(--border-color);background:-webkit-gradient(linear, left top, left bottom, color-stop(20%, var(--background, var(--ion-background-color, #fff))), to(rgba(var(--background-rgb, var(--ion-background-color-rgb, 255, 255, 255)), 0.8)));background:linear-gradient(to bottom, var(--background, var(--ion-background-color, #fff)) 20%, rgba(var(--background-rgb, var(--ion-background-color-rgb, 255, 255, 255)), 0.8) 100%);z-index:10}@supports (inset-inline-start: 0){.picker-above-highlight.sc-ion-picker-ios{inset-inline-start:0}}@supports not (inset-inline-start: 0){.picker-above-highlight.sc-ion-picker-ios{left:0}[dir=rtl].sc-ion-picker-ios-h .picker-above-highlight.sc-ion-picker-ios,[dir=rtl] .sc-ion-picker-ios-h .picker-above-highlight.sc-ion-picker-ios{left:unset;right:unset;right:0}[dir=rtl].sc-ion-picker-ios .picker-above-highlight.sc-ion-picker-ios{left:unset;right:unset;right:0}@supports selector(:dir(rtl)){.picker-above-highlight.sc-ion-picker-ios:dir(rtl){left:unset;right:unset;right:0}}}.picker-below-highlight.sc-ion-picker-ios{top:115px;-webkit-transform:translate3d(0, 0, 90px);transform:translate3d(0, 0, 90px);display:block;position:absolute;width:100%;height:119px;border-top:1px solid var(--border-color);background:-webkit-gradient(linear, left bottom, left top, color-stop(30%, var(--background, var(--ion-background-color, #fff))), to(rgba(var(--background-rgb, var(--ion-background-color-rgb, 255, 255, 255)), 0.8)));background:linear-gradient(to top, var(--background, var(--ion-background-color, #fff)) 30%, rgba(var(--background-rgb, var(--ion-background-color-rgb, 255, 255, 255)), 0.8) 100%);z-index:11}@supports (inset-inline-start: 0){.picker-below-highlight.sc-ion-picker-ios{inset-inline-start:0}}@supports not (inset-inline-start: 0){.picker-below-highlight.sc-ion-picker-ios{left:0}[dir=rtl].sc-ion-picker-ios-h .picker-below-highlight.sc-ion-picker-ios,[dir=rtl] .sc-ion-picker-ios-h .picker-below-highlight.sc-ion-picker-ios{left:unset;right:unset;right:0}[dir=rtl].sc-ion-picker-ios .picker-below-highlight.sc-ion-picker-ios{left:unset;right:unset;right:0}@supports selector(:dir(rtl)){.picker-below-highlight.sc-ion-picker-ios:dir(rtl){left:unset;right:unset;right:0}}}";
24531
24572
 
24532
- const pickerMdCss$1 = "/*!@:host*/.sc-ion-picker-md-h{display:-ms-flexbox;display:flex;position:relative;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:100%;height:200px;direction:ltr;z-index:0}/*!@:host .picker-before,\n:host .picker-after*/.sc-ion-picker-md-h .picker-before.sc-ion-picker-md,.sc-ion-picker-md-h .picker-after.sc-ion-picker-md{position:absolute;width:100%;-webkit-transform:translateZ(0);transform:translateZ(0);z-index:1;pointer-events:none}/*!@:host .picker-before*/.sc-ion-picker-md-h .picker-before.sc-ion-picker-md{top:0;height:83px}@supports (inset-inline-start: 0){/*!@:host .picker-before*/.sc-ion-picker-md-h .picker-before.sc-ion-picker-md{inset-inline-start:0}}@supports not (inset-inline-start: 0){/*!@:host .picker-before*/.sc-ion-picker-md-h .picker-before.sc-ion-picker-md{left:0}/*!@:host-context([dir=rtl]) .picker-before*/[dir=rtl].sc-ion-picker-md-h .picker-before.sc-ion-picker-md,[dir=rtl] .sc-ion-picker-md-h .picker-before.sc-ion-picker-md{left:unset;right:unset;right:0}/*!@@supports selector(:dir(rtl))*/@supports .sc-ion-picker-md selector(.sc-ion-picker-md:dir(rtl)){.sc-ion-picker-md-h:dir(rtl) .picker-before{left:unset;right:unset;right:0}}}/*!@:host .picker-after*/.sc-ion-picker-md-h .picker-after.sc-ion-picker-md{top:116px;height:84px}@supports (inset-inline-start: 0){/*!@:host .picker-after*/.sc-ion-picker-md-h .picker-after.sc-ion-picker-md{inset-inline-start:0}}@supports not (inset-inline-start: 0){/*!@:host .picker-after*/.sc-ion-picker-md-h .picker-after.sc-ion-picker-md{left:0}/*!@:host-context([dir=rtl]) .picker-after*/[dir=rtl].sc-ion-picker-md-h .picker-after.sc-ion-picker-md,[dir=rtl] .sc-ion-picker-md-h .picker-after.sc-ion-picker-md{left:unset;right:unset;right:0}/*!@@supports selector(:dir(rtl))*/@supports .sc-ion-picker-md selector(.sc-ion-picker-md:dir(rtl)){.sc-ion-picker-md-h:dir(rtl) .picker-after{left:unset;right:unset;right:0}}}/*!@:host .picker-highlight*/.sc-ion-picker-md-h .picker-highlight.sc-ion-picker-md{border-radius:8px;left:0;right:0;top:50%;bottom:0;-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto;margin-top:0;margin-bottom:0;position:absolute;width:calc(100% - 16px);height:34px;-webkit-transform:translateY(-50%);transform:translateY(-50%);background:var(--wheel-highlight-background);z-index:-1}/*!@:host input*/.sc-ion-picker-md-h input.sc-ion-picker-md{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}/*!@:host ::slotted(ion-picker-column:first-of-type)*/.sc-ion-picker-md-h .sc-ion-picker-md-s>ion-picker-column:first-of-type{text-align:start}/*!@:host ::slotted(ion-picker-column:last-of-type)*/.sc-ion-picker-md-h .sc-ion-picker-md-s>ion-picker-column:last-of-type{text-align:end}/*!@:host ::slotted(ion-picker-column:only-child)*/.sc-ion-picker-md-h .sc-ion-picker-md-s>ion-picker-column:only-child{text-align:center}/*!@:host .picker-before*/.sc-ion-picker-md-h .picker-before.sc-ion-picker-md{background:-webkit-gradient(linear, left top, left bottom, color-stop(20%, rgba(var(--wheel-fade-background-rgb, var(--background-rgb, var(--ion-background-color-rgb, 255, 255, 255))), 1)), color-stop(90%, rgba(var(--wheel-fade-background-rgb, var(--background-rgb, var(--ion-background-color-rgb, 255, 255, 255))), 0)));background:linear-gradient(to bottom, rgba(var(--wheel-fade-background-rgb, var(--background-rgb, var(--ion-background-color-rgb, 255, 255, 255))), 1) 20%, rgba(var(--wheel-fade-background-rgb, var(--background-rgb, var(--ion-background-color-rgb, 255, 255, 255))), 0) 90%)}/*!@:host .picker-after*/.sc-ion-picker-md-h .picker-after.sc-ion-picker-md{background:-webkit-gradient(linear, left bottom, left top, color-stop(30%, rgba(var(--wheel-fade-background-rgb, var(--background-rgb, var(--ion-background-color-rgb, 255, 255, 255))), 1)), color-stop(90%, rgba(var(--wheel-fade-background-rgb, var(--background-rgb, var(--ion-background-color-rgb, 255, 255, 255))), 0)));background:linear-gradient(to top, rgba(var(--wheel-fade-background-rgb, var(--background-rgb, var(--ion-background-color-rgb, 255, 255, 255))), 1) 30%, rgba(var(--wheel-fade-background-rgb, var(--background-rgb, var(--ion-background-color-rgb, 255, 255, 255))), 0) 90%)}";
24573
+ const pickerMdCss = ".sc-ion-picker-md-h{--border-radius:0;--border-style:solid;--min-width:auto;--width:100%;--max-width:500px;--min-height:auto;--max-height:auto;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;top:0;display:block;position:absolute;width:100%;height:100%;outline:none;font-family:var(--ion-font-family, inherit);contain:strict;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:1001}@supports (inset-inline-start: 0){.sc-ion-picker-md-h{inset-inline-start:0}}@supports not (inset-inline-start: 0){.sc-ion-picker-md-h{left:0}[dir=rtl].sc-ion-picker-md-h,[dir=rtl] .sc-ion-picker-md-h{left:unset;right:unset;right:0}@supports selector(:dir(rtl)){.sc-ion-picker-md-h:dir(rtl){left:unset;right:unset;right:0}}}.overlay-hidden.sc-ion-picker-md-h{display:none}.picker-wrapper.sc-ion-picker-md{border-radius:var(--border-radius);left:0;right:0;bottom:0;-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto;margin-top:auto;margin-bottom:auto;-webkit-transform:translate3d(0, 100%, 0);transform:translate3d(0, 100%, 0);display:-ms-flexbox;display:flex;position:absolute;-ms-flex-direction:column;flex-direction:column;width:var(--width);min-width:var(--min-width);max-width:var(--max-width);height:var(--height);min-height:var(--min-height);max-height:var(--max-height);border-width:var(--border-width);border-style:var(--border-style);border-color:var(--border-color);background:var(--background);contain:strict;overflow:hidden;z-index:10}.picker-toolbar.sc-ion-picker-md{width:100%;background:transparent;contain:strict;z-index:1}.picker-button.sc-ion-picker-md{border:0;font-family:inherit}.picker-button.sc-ion-picker-md:active,.picker-button.sc-ion-picker-md:focus{outline:none}.picker-columns.sc-ion-picker-md{display:-ms-flexbox;display:flex;position:relative;-ms-flex-pack:center;justify-content:center;margin-bottom:var(--ion-safe-area-bottom, 0);contain:strict;overflow:hidden}.picker-above-highlight.sc-ion-picker-md,.picker-below-highlight.sc-ion-picker-md{display:none;pointer-events:none}.sc-ion-picker-md-h{--background:var(--ion-background-color, #fff);--border-width:0.55px 0 0;--border-color:var(--ion-item-border-color, var(--ion-border-color, var(--ion-color-step-150, rgba(0, 0, 0, 0.13))));--height:260px;--backdrop-opacity:var(--ion-backdrop-opacity, 0.26);color:var(--ion-item-color, var(--ion-text-color, #000))}.picker-toolbar.sc-ion-picker-md{display:-ms-flexbox;display:flex;-ms-flex-pack:end;justify-content:flex-end;height:44px}.picker-button.sc-ion-picker-md,.picker-button.ion-activated.sc-ion-picker-md{margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;-webkit-padding-start:1.1em;padding-inline-start:1.1em;-webkit-padding-end:1.1em;padding-inline-end:1.1em;padding-top:0;padding-bottom:0;height:44px;background:transparent;color:var(--ion-color-primary, #3880ff);font-size:14px;font-weight:500;text-transform:uppercase;-webkit-box-shadow:none;box-shadow:none}.picker-columns.sc-ion-picker-md{height:216px;-webkit-perspective:1800px;perspective:1800px}.picker-above-highlight.sc-ion-picker-md{top:0;-webkit-transform:translate3d(0, 0, 90px);transform:translate3d(0, 0, 90px);position:absolute;width:100%;height:81px;border-bottom:1px solid var(--ion-item-border-color, var(--ion-border-color, var(--ion-color-step-150, rgba(0, 0, 0, 0.13))));background:-webkit-gradient(linear, left top, left bottom, color-stop(20%, var(--ion-background-color, #fff)), to(rgba(var(--ion-background-color-rgb, 255, 255, 255), 0.8)));background:linear-gradient(to bottom, var(--ion-background-color, #fff) 20%, rgba(var(--ion-background-color-rgb, 255, 255, 255), 0.8) 100%);z-index:10}@supports (inset-inline-start: 0){.picker-above-highlight.sc-ion-picker-md{inset-inline-start:0}}@supports not (inset-inline-start: 0){.picker-above-highlight.sc-ion-picker-md{left:0}[dir=rtl].sc-ion-picker-md-h .picker-above-highlight.sc-ion-picker-md,[dir=rtl] .sc-ion-picker-md-h .picker-above-highlight.sc-ion-picker-md{left:unset;right:unset;right:0}[dir=rtl].sc-ion-picker-md .picker-above-highlight.sc-ion-picker-md{left:unset;right:unset;right:0}@supports selector(:dir(rtl)){.picker-above-highlight.sc-ion-picker-md:dir(rtl){left:unset;right:unset;right:0}}}.picker-below-highlight.sc-ion-picker-md{top:115px;-webkit-transform:translate3d(0, 0, 90px);transform:translate3d(0, 0, 90px);position:absolute;width:100%;height:119px;border-top:1px solid var(--ion-item-border-color, var(--ion-border-color, var(--ion-color-step-150, rgba(0, 0, 0, 0.13))));background:-webkit-gradient(linear, left bottom, left top, color-stop(30%, var(--ion-background-color, #fff)), to(rgba(var(--ion-background-color-rgb, 255, 255, 255), 0.8)));background:linear-gradient(to top, var(--ion-background-color, #fff) 30%, rgba(var(--ion-background-color-rgb, 255, 255, 255), 0.8) 100%);z-index:11}@supports (inset-inline-start: 0){.picker-below-highlight.sc-ion-picker-md{inset-inline-start:0}}@supports not (inset-inline-start: 0){.picker-below-highlight.sc-ion-picker-md{left:0}[dir=rtl].sc-ion-picker-md-h .picker-below-highlight.sc-ion-picker-md,[dir=rtl] .sc-ion-picker-md-h .picker-below-highlight.sc-ion-picker-md{left:unset;right:unset;right:0}[dir=rtl].sc-ion-picker-md .picker-below-highlight.sc-ion-picker-md{left:unset;right:unset;right:0}@supports selector(:dir(rtl)){.picker-below-highlight.sc-ion-picker-md:dir(rtl){left:unset;right:unset;right:0}}}";
24533
24574
 
24575
+ // TODO(FW-2832): types
24534
24576
  /**
24535
24577
  * @virtualProp {"ios" | "md"} mode - The mode determines which platform styles to use.
24536
24578
  */
24537
- class Picker$1 {
24579
+ class Picker {
24538
24580
  constructor(hostRef) {
24539
24581
  registerInstance(this, hostRef);
24540
- this.ionInputModeChange = createEvent(this, "ionInputModeChange", 7);
24541
- this.useInputMode = false;
24542
- this.isInHighlightBounds = (ev) => {
24543
- const { highlightEl } = this;
24544
- if (!highlightEl) {
24545
- return false;
24546
- }
24547
- const bbox = highlightEl.getBoundingClientRect();
24548
- /**
24549
- * Check to see if the user clicked
24550
- * outside the bounds of the highlight.
24551
- */
24552
- const outsideX = ev.clientX < bbox.left || ev.clientX > bbox.right;
24553
- const outsideY = ev.clientY < bbox.top || ev.clientY > bbox.bottom;
24554
- if (outsideX || outsideY) {
24555
- return false;
24556
- }
24557
- return true;
24558
- };
24559
- /**
24560
- * If we are no longer focused
24561
- * on a picker column, then we should
24562
- * exit input mode. An exception is made
24563
- * for the input in the picker since having
24564
- * that focused means we are still in input mode.
24565
- */
24566
- this.onFocusOut = (ev) => {
24567
- // TODO(FW-2832): type
24568
- const { relatedTarget } = ev;
24569
- if (!relatedTarget || (relatedTarget.tagName !== 'ION-PICKER-COLUMN' && relatedTarget !== this.inputEl)) {
24570
- this.exitInputMode();
24571
- }
24582
+ this.didPresent = createEvent(this, "ionPickerDidPresent", 7);
24583
+ this.willPresent = createEvent(this, "ionPickerWillPresent", 7);
24584
+ this.willDismiss = createEvent(this, "ionPickerWillDismiss", 7);
24585
+ this.didDismiss = createEvent(this, "ionPickerDidDismiss", 7);
24586
+ this.didPresentShorthand = createEvent(this, "didPresent", 7);
24587
+ this.willPresentShorthand = createEvent(this, "willPresent", 7);
24588
+ this.willDismissShorthand = createEvent(this, "willDismiss", 7);
24589
+ this.didDismissShorthand = createEvent(this, "didDismiss", 7);
24590
+ this.delegateController = createDelegateController(this);
24591
+ this.lockController = createLockController();
24592
+ this.triggerController = createTriggerController();
24593
+ this.onBackdropTap = () => {
24594
+ this.dismiss(undefined, BACKDROP);
24572
24595
  };
24573
- /**
24574
- * When picker columns receive focus
24575
- * the parent picker needs to determine
24576
- * whether to enter/exit input mode.
24577
- */
24578
- this.onFocusIn = (ev) => {
24579
- // TODO(FW-2832): type
24580
- const { target } = ev;
24581
- /**
24582
- * Due to browser differences in how/when focus
24583
- * is dispatched on certain elements, we need to
24584
- * make sure that this function only ever runs when
24585
- * focusing a picker column.
24586
- */
24587
- if (target.tagName !== 'ION-PICKER-COLUMN') {
24588
- return;
24589
- }
24590
- /**
24591
- * If we have actionOnClick
24592
- * then this means the user focused
24593
- * a picker column via mouse or
24594
- * touch (i.e. a PointerEvent). As a result,
24595
- * we should not enter/exit input mode
24596
- * until the click event has fired, which happens
24597
- * after the `focusin` event.
24598
- *
24599
- * Otherwise, the user likely focused
24600
- * the column using their keyboard and
24601
- * we should enter/exit input mode automatically.
24602
- */
24603
- if (!this.actionOnClick) {
24604
- const columnEl = target;
24605
- const allowInput = columnEl.numericInput;
24606
- if (allowInput) {
24607
- this.enterInputMode(columnEl, false);
24608
- }
24609
- else {
24610
- this.exitInputMode();
24611
- }
24596
+ this.dispatchCancelHandler = (ev) => {
24597
+ const role = ev.detail.role;
24598
+ if (isCancel(role)) {
24599
+ const cancelButton = this.buttons.find((b) => b.role === 'cancel');
24600
+ this.callButtonHandler(cancelButton);
24612
24601
  }
24613
24602
  };
24603
+ this.presented = false;
24604
+ this.overlayIndex = undefined;
24605
+ this.delegate = undefined;
24606
+ this.hasController = false;
24607
+ this.keyboardClose = true;
24608
+ this.enterAnimation = undefined;
24609
+ this.leaveAnimation = undefined;
24610
+ this.buttons = [];
24611
+ this.columns = [];
24612
+ this.cssClass = undefined;
24613
+ this.duration = 0;
24614
+ this.showBackdrop = true;
24615
+ this.backdropDismiss = true;
24616
+ this.animated = true;
24617
+ this.htmlAttributes = undefined;
24618
+ this.isOpen = false;
24619
+ this.trigger = undefined;
24620
+ }
24621
+ onIsOpenChange(newValue, oldValue) {
24622
+ if (newValue === true && oldValue === false) {
24623
+ this.present();
24624
+ }
24625
+ else if (newValue === false && oldValue === true) {
24626
+ this.dismiss();
24627
+ }
24628
+ }
24629
+ triggerChanged() {
24630
+ const { trigger, el, triggerController } = this;
24631
+ if (trigger) {
24632
+ triggerController.addClickListener(el, trigger);
24633
+ }
24634
+ }
24635
+ connectedCallback() {
24636
+ prepareOverlay(this.el);
24637
+ this.triggerChanged();
24638
+ }
24639
+ disconnectedCallback() {
24640
+ this.triggerController.removeClickListener();
24641
+ }
24642
+ componentWillLoad() {
24643
+ setOverlayId(this.el);
24644
+ }
24645
+ componentDidLoad() {
24614
24646
  /**
24615
- * On click we need to run an actionOnClick
24616
- * function that has been set in onPointerDown
24617
- * so that we enter/exit input mode correctly.
24647
+ * If picker was rendered with isOpen="true"
24648
+ * then we should open picker immediately.
24618
24649
  */
24619
- this.onClick = () => {
24620
- const { actionOnClick } = this;
24621
- if (actionOnClick) {
24622
- actionOnClick();
24623
- this.actionOnClick = undefined;
24624
- }
24625
- };
24650
+ if (this.isOpen === true) {
24651
+ raf(() => this.present());
24652
+ }
24626
24653
  /**
24627
- * Clicking a column also focuses the column on
24628
- * certain browsers, so we use onPointerDown
24629
- * to tell the onFocusIn function that users
24630
- * are trying to click the column rather than
24631
- * focus the column using the keyboard. When the
24632
- * user completes the click, the onClick function
24633
- * runs and runs the actionOnClick callback.
24654
+ * When binding values in frameworks such as Angular
24655
+ * it is possible for the value to be set after the Web Component
24656
+ * initializes but before the value watcher is set up in Stencil.
24657
+ * As a result, the watcher callback may not be fired.
24658
+ * We work around this by manually calling the watcher
24659
+ * callback when the component has loaded and the watcher
24660
+ * is configured.
24634
24661
  */
24635
- this.onPointerDown = (ev) => {
24636
- const { useInputMode, inputModeColumn, el } = this;
24637
- if (this.isInHighlightBounds(ev)) {
24638
- /**
24639
- * If we were already in
24640
- * input mode, then we should determine
24641
- * if we tapped a particular column and
24642
- * should switch to input mode for
24643
- * that specific column.
24644
- */
24645
- if (useInputMode) {
24646
- /**
24647
- * If we tapped a picker column
24648
- * then we should either switch to input
24649
- * mode for that column or all columns.
24650
- * Otherwise we should exit input mode
24651
- * since we just tapped the highlight and
24652
- * not a column.
24653
- */
24654
- if (ev.target.tagName === 'ION-PICKER-COLUMN') {
24655
- /**
24656
- * If user taps 2 different columns
24657
- * then we should just switch to input mode
24658
- * for the new column rather than switching to
24659
- * input mode for all columns.
24660
- */
24661
- if (inputModeColumn && inputModeColumn === ev.target) {
24662
- this.actionOnClick = () => {
24663
- this.enterInputMode();
24664
- };
24665
- }
24666
- else {
24667
- this.actionOnClick = () => {
24668
- this.enterInputMode(ev.target);
24669
- };
24670
- }
24671
- }
24672
- else {
24673
- this.actionOnClick = () => {
24674
- this.exitInputMode();
24675
- };
24676
- }
24677
- /**
24678
- * If we were not already in
24679
- * input mode, then we should
24680
- * enter input mode for all columns.
24681
- */
24682
- }
24683
- else {
24684
- /**
24685
- * If there is only 1 numeric input column
24686
- * then we should skip multi column input.
24687
- */
24688
- const columns = el.querySelectorAll('ion-picker-column.picker-column-numeric-input');
24689
- const columnEl = columns.length === 1 ? ev.target : undefined;
24690
- this.actionOnClick = () => {
24691
- this.enterInputMode(columnEl);
24692
- };
24693
- }
24694
- return;
24695
- }
24696
- this.actionOnClick = () => {
24697
- this.exitInputMode();
24698
- };
24699
- };
24700
- /**
24701
- * Enters input mode to allow
24702
- * for text entry of numeric values.
24703
- * If on mobile, we focus a hidden input
24704
- * field so that the on screen keyboard
24705
- * is brought up. When tabbing using a
24706
- * keyboard, picker columns receive an outline
24707
- * to indicate they are focused. As a result,
24708
- * we should not focus the hidden input as it
24709
- * would cause the outline to go away, preventing
24710
- * users from having any visual indication of which
24711
- * column is focused.
24712
- */
24713
- this.enterInputMode = (columnEl, focusInput = true) => {
24714
- const { inputEl, el } = this;
24715
- if (!inputEl) {
24716
- return;
24717
- }
24718
- /**
24719
- * Only active input mode if there is at
24720
- * least one column that accepts numeric input.
24721
- */
24722
- const hasInputColumn = el.querySelector('ion-picker-column.picker-column-numeric-input');
24723
- if (!hasInputColumn) {
24724
- return;
24725
- }
24726
- /**
24727
- * If columnEl is undefined then
24728
- * it is assumed that all numeric pickers
24729
- * are eligible for text entry.
24730
- * (i.e. hour and minute columns)
24731
- */
24732
- this.useInputMode = true;
24733
- this.inputModeColumn = columnEl;
24734
- /**
24735
- * Users with a keyboard and mouse can
24736
- * activate input mode where the input is
24737
- * focused as well as when it is not focused,
24738
- * so we need to make sure we clean up any
24739
- * old listeners.
24740
- */
24741
- if (focusInput) {
24742
- if (this.destroyKeypressListener) {
24743
- this.destroyKeypressListener();
24744
- this.destroyKeypressListener = undefined;
24745
- }
24746
- inputEl.focus();
24747
- }
24748
- else {
24749
- el.addEventListener('keypress', this.onKeyPress);
24750
- this.destroyKeypressListener = () => {
24751
- el.removeEventListener('keypress', this.onKeyPress);
24752
- };
24753
- }
24754
- this.emitInputModeChange();
24755
- };
24756
- this.onKeyPress = (ev) => {
24757
- const { inputEl } = this;
24758
- if (!inputEl) {
24759
- return;
24760
- }
24761
- const parsedValue = parseInt(ev.key, 10);
24762
- /**
24763
- * Only numbers should be allowed
24764
- */
24765
- if (!Number.isNaN(parsedValue)) {
24766
- inputEl.value += ev.key;
24767
- this.onInputChange();
24768
- }
24769
- };
24770
- this.selectSingleColumn = () => {
24771
- const { inputEl, inputModeColumn, singleColumnSearchTimeout } = this;
24772
- if (!inputEl || !inputModeColumn) {
24773
- return;
24774
- }
24775
- const values = inputModeColumn.items.filter((item) => item.disabled !== true);
24776
- /**
24777
- * If users pause for a bit, the search
24778
- * value should be reset similar to how a
24779
- * <select> behaves. So typing "34", waiting,
24780
- * then typing "5" should select "05".
24781
- */
24782
- if (singleColumnSearchTimeout) {
24783
- clearTimeout(singleColumnSearchTimeout);
24784
- }
24785
- this.singleColumnSearchTimeout = setTimeout(() => {
24786
- inputEl.value = '';
24787
- this.singleColumnSearchTimeout = undefined;
24788
- }, 1000);
24789
- /**
24790
- * For values that are longer than 2 digits long
24791
- * we should shift the value over 1 character
24792
- * to the left. So typing "456" would result in "56".
24793
- * TODO: If we want to support more than just
24794
- * time entry, we should update this value to be
24795
- * the max length of all of the picker items.
24796
- */
24797
- if (inputEl.value.length >= 3) {
24798
- const startIndex = inputEl.value.length - 2;
24799
- const newString = inputEl.value.substring(startIndex);
24800
- inputEl.value = newString;
24801
- this.selectSingleColumn();
24802
- return;
24803
- }
24804
- /**
24805
- * Checking the value of the input gets priority
24806
- * first. For example, if the value of the input
24807
- * is "1" and we entered "2", then the complete value
24808
- * is "12" and we should select hour 12.
24809
- *
24810
- * Regex removes any leading zeros from values like "02",
24811
- * but it keeps a single zero if there are only zeros in the string.
24812
- * 0+(?=[1-9]) --> Match 1 or more zeros that are followed by 1-9
24813
- * 0+(?=0$) --> Match 1 or more zeros that must be followed by one 0 and end.
24814
- */
24815
- const findItemFromCompleteValue = values.find(({ text }) => {
24816
- const parsedText = text.replace(/^0+(?=[1-9])|0+(?=0$)/, '');
24817
- return parsedText === inputEl.value;
24818
- });
24819
- if (findItemFromCompleteValue) {
24820
- inputModeColumn.setValue(findItemFromCompleteValue.value);
24821
- return;
24822
- }
24823
- /**
24824
- * If we typed "56" to get minute 56, then typed "7",
24825
- * we should select "07" as "567" is not a valid minute.
24826
- */
24827
- if (inputEl.value.length === 2) {
24828
- const changedCharacter = inputEl.value.substring(inputEl.value.length - 1);
24829
- inputEl.value = changedCharacter;
24830
- this.selectSingleColumn();
24831
- }
24832
- };
24833
- /**
24834
- * Searches a list of column items for a particular
24835
- * value. This is currently used for numeric values.
24836
- * The zeroBehavior can be set to account for leading
24837
- * or trailing zeros when looking at the item text.
24838
- */
24839
- this.searchColumn = (colEl, value, zeroBehavior = 'start') => {
24840
- const behavior = zeroBehavior === 'start' ? /^0+/ : /0$/;
24841
- const item = colEl.items.find(({ text, disabled }) => disabled !== true && text.replace(behavior, '') === value);
24842
- if (item) {
24843
- colEl.setValue(item.value);
24844
- }
24845
- };
24846
- this.selectMultiColumn = () => {
24847
- const { inputEl, el } = this;
24848
- if (!inputEl) {
24849
- return;
24850
- }
24851
- const numericPickers = Array.from(el.querySelectorAll('ion-picker-column')).filter((col) => col.numericInput);
24852
- const firstColumn = numericPickers[0];
24853
- const lastColumn = numericPickers[1];
24854
- let value = inputEl.value;
24855
- let minuteValue;
24856
- switch (value.length) {
24857
- case 1:
24858
- this.searchColumn(firstColumn, value);
24859
- break;
24860
- case 2:
24861
- /**
24862
- * If the first character is `0` or `1` it is
24863
- * possible that users are trying to type `09`
24864
- * or `11` into the hour field, so we should look
24865
- * at that first.
24866
- */
24867
- const firstCharacter = inputEl.value.substring(0, 1);
24868
- value = firstCharacter === '0' || firstCharacter === '1' ? inputEl.value : firstCharacter;
24869
- this.searchColumn(firstColumn, value);
24870
- /**
24871
- * If only checked the first value,
24872
- * we can check the second value
24873
- * for a match in the minutes column
24874
- */
24875
- if (value.length === 1) {
24876
- minuteValue = inputEl.value.substring(inputEl.value.length - 1);
24877
- this.searchColumn(lastColumn, minuteValue, 'end');
24878
- }
24879
- break;
24880
- case 3:
24881
- /**
24882
- * If the first character is `0` or `1` it is
24883
- * possible that users are trying to type `09`
24884
- * or `11` into the hour field, so we should look
24885
- * at that first.
24886
- */
24887
- const firstCharacterAgain = inputEl.value.substring(0, 1);
24888
- value =
24889
- firstCharacterAgain === '0' || firstCharacterAgain === '1'
24890
- ? inputEl.value.substring(0, 2)
24891
- : firstCharacterAgain;
24892
- this.searchColumn(firstColumn, value);
24893
- /**
24894
- * If only checked the first value,
24895
- * we can check the second value
24896
- * for a match in the minutes column
24897
- */
24898
- minuteValue = value.length === 1 ? inputEl.value.substring(1) : inputEl.value.substring(2);
24899
- this.searchColumn(lastColumn, minuteValue, 'end');
24900
- break;
24901
- case 4:
24902
- /**
24903
- * If the first character is `0` or `1` it is
24904
- * possible that users are trying to type `09`
24905
- * or `11` into the hour field, so we should look
24906
- * at that first.
24907
- */
24908
- const firstCharacterAgainAgain = inputEl.value.substring(0, 1);
24909
- value =
24910
- firstCharacterAgainAgain === '0' || firstCharacterAgainAgain === '1'
24911
- ? inputEl.value.substring(0, 2)
24912
- : firstCharacterAgainAgain;
24913
- this.searchColumn(firstColumn, value);
24914
- /**
24915
- * If only checked the first value,
24916
- * we can check the second value
24917
- * for a match in the minutes column
24918
- */
24919
- const minuteValueAgain = value.length === 1
24920
- ? inputEl.value.substring(1, inputEl.value.length)
24921
- : inputEl.value.substring(2, inputEl.value.length);
24922
- this.searchColumn(lastColumn, minuteValueAgain, 'end');
24923
- break;
24924
- default:
24925
- const startIndex = inputEl.value.length - 4;
24926
- const newString = inputEl.value.substring(startIndex);
24927
- inputEl.value = newString;
24928
- this.selectMultiColumn();
24929
- break;
24930
- }
24931
- };
24932
- /**
24933
- * Searches the value of the active column
24934
- * to determine which value users are trying
24935
- * to select
24936
- */
24937
- this.onInputChange = () => {
24938
- const { useInputMode, inputEl, inputModeColumn } = this;
24939
- if (!useInputMode || !inputEl) {
24940
- return;
24941
- }
24942
- if (inputModeColumn) {
24943
- this.selectSingleColumn();
24944
- }
24945
- else {
24946
- this.selectMultiColumn();
24947
- }
24948
- };
24949
- /**
24950
- * Emit ionInputModeChange. Picker columns
24951
- * listen for this event to determine whether
24952
- * or not their column is "active" for text input.
24953
- */
24954
- this.emitInputModeChange = () => {
24955
- const { useInputMode, inputModeColumn } = this;
24956
- this.ionInputModeChange.emit({
24957
- useInputMode,
24958
- inputModeColumn,
24959
- });
24960
- };
24662
+ this.triggerChanged();
24961
24663
  }
24962
24664
  /**
24963
- * When the picker is interacted with
24964
- * we need to prevent touchstart so other
24965
- * gestures do not fire. For example,
24966
- * scrolling on the wheel picker
24967
- * in ion-datetime should not cause
24968
- * a card modal to swipe to close.
24665
+ * Present the picker overlay after it has been created.
24969
24666
  */
24970
- preventTouchStartPropagation(ev) {
24971
- ev.stopPropagation();
24667
+ async present() {
24668
+ const unlock = await this.lockController.lock();
24669
+ await this.delegateController.attachViewToDom();
24670
+ await present(this, 'pickerEnter', iosEnterAnimation$2, iosEnterAnimation$2, undefined);
24671
+ if (this.duration > 0) {
24672
+ this.durationTimeout = setTimeout(() => this.dismiss(), this.duration);
24673
+ }
24674
+ unlock();
24972
24675
  }
24973
- componentWillLoad() {
24974
- getElementRoot(this.el).addEventListener('focusin', this.onFocusIn);
24975
- getElementRoot(this.el).addEventListener('focusout', this.onFocusOut);
24676
+ /**
24677
+ * Dismiss the picker overlay after it has been presented.
24678
+ *
24679
+ * @param data Any data to emit in the dismiss events.
24680
+ * @param role The role of the element that is dismissing the picker.
24681
+ * This can be useful in a button handler for determining which button was
24682
+ * clicked to dismiss the picker.
24683
+ * Some examples include: ``"cancel"`, `"destructive"`, "selected"`, and `"backdrop"`.
24684
+ */
24685
+ async dismiss(data, role) {
24686
+ const unlock = await this.lockController.lock();
24687
+ if (this.durationTimeout) {
24688
+ clearTimeout(this.durationTimeout);
24689
+ }
24690
+ const dismissed = await dismiss(this, data, role, 'pickerLeave', iosLeaveAnimation$2, iosLeaveAnimation$2);
24691
+ if (dismissed) {
24692
+ this.delegateController.removeViewFromDom();
24693
+ }
24694
+ unlock();
24695
+ return dismissed;
24976
24696
  }
24977
24697
  /**
24978
- * @internal
24979
- * Exits text entry mode for the picker
24980
- * This method blurs the hidden input
24981
- * and cause the keyboard to dismiss.
24698
+ * Returns a promise that resolves when the picker did dismiss.
24982
24699
  */
24983
- async exitInputMode() {
24984
- const { inputEl, useInputMode } = this;
24985
- if (!useInputMode || !inputEl) {
24986
- return;
24700
+ onDidDismiss() {
24701
+ return eventMethod(this.el, 'ionPickerDidDismiss');
24702
+ }
24703
+ /**
24704
+ * Returns a promise that resolves when the picker will dismiss.
24705
+ */
24706
+ onWillDismiss() {
24707
+ return eventMethod(this.el, 'ionPickerWillDismiss');
24708
+ }
24709
+ /**
24710
+ * Get the column that matches the specified name.
24711
+ *
24712
+ * @param name The name of the column.
24713
+ */
24714
+ getColumn(name) {
24715
+ return Promise.resolve(this.columns.find((column) => column.name === name));
24716
+ }
24717
+ async buttonClick(button) {
24718
+ const role = button.role;
24719
+ if (isCancel(role)) {
24720
+ return this.dismiss(undefined, role);
24987
24721
  }
24988
- this.useInputMode = false;
24989
- this.inputModeColumn = undefined;
24990
- inputEl.blur();
24991
- inputEl.value = '';
24992
- if (this.destroyKeypressListener) {
24993
- this.destroyKeypressListener();
24994
- this.destroyKeypressListener = undefined;
24722
+ const shouldDismiss = await this.callButtonHandler(button);
24723
+ if (shouldDismiss) {
24724
+ return this.dismiss(this.getSelected(), button.role);
24995
24725
  }
24996
- this.emitInputModeChange();
24726
+ return Promise.resolve();
24727
+ }
24728
+ async callButtonHandler(button) {
24729
+ if (button) {
24730
+ // a handler has been provided, execute it
24731
+ // pass the handler the values from the inputs
24732
+ const rtn = await safeCall(button.handler, this.getSelected());
24733
+ if (rtn === false) {
24734
+ // if the return value of the handler is false then do not dismiss
24735
+ return false;
24736
+ }
24737
+ }
24738
+ return true;
24739
+ }
24740
+ getSelected() {
24741
+ const selected = {};
24742
+ this.columns.forEach((col, index) => {
24743
+ const selectedColumn = col.selectedIndex !== undefined ? col.options[col.selectedIndex] : undefined;
24744
+ selected[col.name] = {
24745
+ text: selectedColumn ? selectedColumn.text : undefined,
24746
+ value: selectedColumn ? selectedColumn.value : undefined,
24747
+ columnIndex: index,
24748
+ };
24749
+ });
24750
+ return selected;
24997
24751
  }
24998
24752
  render() {
24999
- return (hAsync(Host, { onPointerDown: (ev) => this.onPointerDown(ev), onClick: () => this.onClick() }, hAsync("input", { "aria-hidden": "true", tabindex: -1, inputmode: "numeric", type: "number", ref: (el) => (this.inputEl = el), onInput: () => this.onInputChange(), onBlur: () => this.exitInputMode() }), hAsync("div", { class: "picker-before" }), hAsync("div", { class: "picker-after" }), hAsync("div", { class: "picker-highlight", ref: (el) => (this.highlightEl = el) }), hAsync("slot", null)));
24753
+ const { htmlAttributes } = this;
24754
+ const mode = getIonMode$1(this);
24755
+ return (hAsync(Host, Object.assign({ "aria-modal": "true", tabindex: "-1" }, htmlAttributes, { style: {
24756
+ zIndex: `${20000 + this.overlayIndex}`,
24757
+ }, class: Object.assign({ [mode]: true,
24758
+ // Used internally for styling
24759
+ [`picker-${mode}`]: true, 'overlay-hidden': true }, getClassMap(this.cssClass)), onIonBackdropTap: this.onBackdropTap, onIonPickerWillDismiss: this.dispatchCancelHandler }), hAsync("ion-backdrop", { visible: this.showBackdrop, tappable: this.backdropDismiss }), hAsync("div", { tabindex: "0" }), hAsync("div", { class: "picker-wrapper ion-overlay-wrapper", role: "dialog" }, hAsync("div", { class: "picker-toolbar" }, this.buttons.map((b) => (hAsync("div", { class: buttonWrapperClass(b) }, hAsync("button", { type: "button", onClick: () => this.buttonClick(b), class: buttonClass$1(b) }, b.text))))), hAsync("div", { class: "picker-columns" }, hAsync("div", { class: "picker-above-highlight" }), this.presented && this.columns.map((c) => hAsync("ion-picker-column", { col: c })), hAsync("div", { class: "picker-below-highlight" }))), hAsync("div", { tabindex: "0" })));
25000
24760
  }
25001
24761
  get el() { return getElement(this); }
24762
+ static get watchers() { return {
24763
+ "isOpen": ["onIsOpenChange"],
24764
+ "trigger": ["triggerChanged"]
24765
+ }; }
25002
24766
  static get style() { return {
25003
- ios: pickerIosCss$1,
25004
- md: pickerMdCss$1
24767
+ ios: pickerIosCss,
24768
+ md: pickerMdCss
25005
24769
  }; }
25006
24770
  static get cmpMeta() { return {
25007
- "$flags$": 41,
24771
+ "$flags$": 34,
25008
24772
  "$tagName$": "ion-picker",
25009
24773
  "$members$": {
25010
- "exitInputMode": [64]
24774
+ "overlayIndex": [2, "overlay-index"],
24775
+ "delegate": [16],
24776
+ "hasController": [4, "has-controller"],
24777
+ "keyboardClose": [4, "keyboard-close"],
24778
+ "enterAnimation": [16],
24779
+ "leaveAnimation": [16],
24780
+ "buttons": [16],
24781
+ "columns": [16],
24782
+ "cssClass": [1, "css-class"],
24783
+ "duration": [2],
24784
+ "showBackdrop": [4, "show-backdrop"],
24785
+ "backdropDismiss": [4, "backdrop-dismiss"],
24786
+ "animated": [4],
24787
+ "htmlAttributes": [16],
24788
+ "isOpen": [4, "is-open"],
24789
+ "trigger": [1],
24790
+ "presented": [32],
24791
+ "present": [64],
24792
+ "dismiss": [64],
24793
+ "onDidDismiss": [64],
24794
+ "onWillDismiss": [64],
24795
+ "getColumn": [64]
25011
24796
  },
25012
- "$listeners$": [[1, "touchstart", "preventTouchStartPropagation"]],
24797
+ "$listeners$": undefined,
25013
24798
  "$lazyBundleId$": "-",
25014
24799
  "$attrsToReflect$": []
25015
24800
  }; }
25016
24801
  }
25017
-
25018
- /**
25019
- * iOS Picker Enter Animation
25020
- */
25021
- const iosEnterAnimation$2 = (baseEl) => {
25022
- const baseAnimation = createAnimation();
25023
- const backdropAnimation = createAnimation();
25024
- const wrapperAnimation = createAnimation();
25025
- backdropAnimation
25026
- .addElement(baseEl.querySelector('ion-backdrop'))
25027
- .fromTo('opacity', 0.01, 'var(--backdrop-opacity)')
25028
- .beforeStyles({
25029
- 'pointer-events': 'none',
25030
- })
25031
- .afterClearStyles(['pointer-events']);
25032
- wrapperAnimation
25033
- .addElement(baseEl.querySelector('.picker-wrapper'))
25034
- .fromTo('transform', 'translateY(100%)', 'translateY(0%)');
25035
- return baseAnimation
25036
- .addElement(baseEl)
25037
- .easing('cubic-bezier(.36,.66,.04,1)')
25038
- .duration(400)
25039
- .addAnimation([backdropAnimation, wrapperAnimation]);
24802
+ const buttonWrapperClass = (button) => {
24803
+ return {
24804
+ [`picker-toolbar-${button.role}`]: button.role !== undefined,
24805
+ 'picker-toolbar-button': true,
24806
+ };
25040
24807
  };
25041
-
25042
- /**
25043
- * iOS Picker Leave Animation
25044
- */
25045
- const iosLeaveAnimation$2 = (baseEl) => {
25046
- const baseAnimation = createAnimation();
25047
- const backdropAnimation = createAnimation();
25048
- const wrapperAnimation = createAnimation();
25049
- backdropAnimation
25050
- .addElement(baseEl.querySelector('ion-backdrop'))
25051
- .fromTo('opacity', 'var(--backdrop-opacity)', 0.01);
25052
- wrapperAnimation
25053
- .addElement(baseEl.querySelector('.picker-wrapper'))
25054
- .fromTo('transform', 'translateY(0%)', 'translateY(100%)');
25055
- return baseAnimation
25056
- .addElement(baseEl)
25057
- .easing('cubic-bezier(.36,.66,.04,1)')
25058
- .duration(400)
25059
- .addAnimation([backdropAnimation, wrapperAnimation]);
24808
+ const buttonClass$1 = (button) => {
24809
+ return Object.assign({ 'picker-button': true, 'ion-activatable': true }, getClassMap(button.cssClass));
25060
24810
  };
25061
24811
 
25062
- const pickerIosCss = ".sc-ion-picker-legacy-ios-h{--border-radius:0;--border-style:solid;--min-width:auto;--width:100%;--max-width:500px;--min-height:auto;--max-height:auto;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;top:0;display:block;position:absolute;width:100%;height:100%;outline:none;font-family:var(--ion-font-family, inherit);contain:strict;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:1001}@supports (inset-inline-start: 0){.sc-ion-picker-legacy-ios-h{inset-inline-start:0}}@supports not (inset-inline-start: 0){.sc-ion-picker-legacy-ios-h{left:0}[dir=rtl].sc-ion-picker-legacy-ios-h,[dir=rtl] .sc-ion-picker-legacy-ios-h{left:unset;right:unset;right:0}@supports selector(:dir(rtl)){.sc-ion-picker-legacy-ios-h:dir(rtl){left:unset;right:unset;right:0}}}.overlay-hidden.sc-ion-picker-legacy-ios-h{display:none}.picker-wrapper.sc-ion-picker-legacy-ios{border-radius:var(--border-radius);left:0;right:0;bottom:0;-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto;margin-top:auto;margin-bottom:auto;-webkit-transform:translate3d(0, 100%, 0);transform:translate3d(0, 100%, 0);display:-ms-flexbox;display:flex;position:absolute;-ms-flex-direction:column;flex-direction:column;width:var(--width);min-width:var(--min-width);max-width:var(--max-width);height:var(--height);min-height:var(--min-height);max-height:var(--max-height);border-width:var(--border-width);border-style:var(--border-style);border-color:var(--border-color);background:var(--background);contain:strict;overflow:hidden;z-index:10}.picker-toolbar.sc-ion-picker-legacy-ios{width:100%;background:transparent;contain:strict;z-index:1}.picker-button.sc-ion-picker-legacy-ios{border:0;font-family:inherit}.picker-button.sc-ion-picker-legacy-ios:active,.picker-button.sc-ion-picker-legacy-ios:focus{outline:none}.picker-columns.sc-ion-picker-legacy-ios{display:-ms-flexbox;display:flex;position:relative;-ms-flex-pack:center;justify-content:center;margin-bottom:var(--ion-safe-area-bottom, 0);contain:strict;overflow:hidden}.picker-above-highlight.sc-ion-picker-legacy-ios,.picker-below-highlight.sc-ion-picker-legacy-ios{display:none;pointer-events:none}.sc-ion-picker-legacy-ios-h{--background:var(--ion-background-color, #fff);--border-width:1px 0 0;--border-color:var(--ion-item-border-color, var(--ion-border-color, var(--ion-color-step-250, #c8c7cc)));--height:260px;--backdrop-opacity:var(--ion-backdrop-opacity, 0.26);color:var(--ion-item-color, var(--ion-text-color, #000))}.picker-toolbar.sc-ion-picker-legacy-ios{display:-ms-flexbox;display:flex;height:44px;border-bottom:0.55px solid var(--border-color)}.picker-toolbar-button.sc-ion-picker-legacy-ios{-ms-flex:1;flex:1;text-align:end}.picker-toolbar-button.sc-ion-picker-legacy-ios:last-child .picker-button.sc-ion-picker-legacy-ios{font-weight:600}.picker-toolbar-button.sc-ion-picker-legacy-ios:first-child{font-weight:normal;text-align:start}.picker-button.sc-ion-picker-legacy-ios,.picker-button.ion-activated.sc-ion-picker-legacy-ios{margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;-webkit-padding-start:1em;padding-inline-start:1em;-webkit-padding-end:1em;padding-inline-end:1em;padding-top:0;padding-bottom:0;height:44px;background:transparent;color:var(--ion-color-primary, #3880ff);font-size:16px}.picker-columns.sc-ion-picker-legacy-ios{height:215px;-webkit-perspective:1000px;perspective:1000px}.picker-above-highlight.sc-ion-picker-legacy-ios{top:0;-webkit-transform:translate3d(0, 0, 90px);transform:translate3d(0, 0, 90px);display:block;position:absolute;width:100%;height:81px;border-bottom:1px solid var(--border-color);background:-webkit-gradient(linear, left top, left bottom, color-stop(20%, var(--background, var(--ion-background-color, #fff))), to(rgba(var(--background-rgb, var(--ion-background-color-rgb, 255, 255, 255)), 0.8)));background:linear-gradient(to bottom, var(--background, var(--ion-background-color, #fff)) 20%, rgba(var(--background-rgb, var(--ion-background-color-rgb, 255, 255, 255)), 0.8) 100%);z-index:10}@supports (inset-inline-start: 0){.picker-above-highlight.sc-ion-picker-legacy-ios{inset-inline-start:0}}@supports not (inset-inline-start: 0){.picker-above-highlight.sc-ion-picker-legacy-ios{left:0}[dir=rtl].sc-ion-picker-legacy-ios-h .picker-above-highlight.sc-ion-picker-legacy-ios,[dir=rtl] .sc-ion-picker-legacy-ios-h .picker-above-highlight.sc-ion-picker-legacy-ios{left:unset;right:unset;right:0}[dir=rtl].sc-ion-picker-legacy-ios .picker-above-highlight.sc-ion-picker-legacy-ios{left:unset;right:unset;right:0}@supports selector(:dir(rtl)){.picker-above-highlight.sc-ion-picker-legacy-ios:dir(rtl){left:unset;right:unset;right:0}}}.picker-below-highlight.sc-ion-picker-legacy-ios{top:115px;-webkit-transform:translate3d(0, 0, 90px);transform:translate3d(0, 0, 90px);display:block;position:absolute;width:100%;height:119px;border-top:1px solid var(--border-color);background:-webkit-gradient(linear, left bottom, left top, color-stop(30%, var(--background, var(--ion-background-color, #fff))), to(rgba(var(--background-rgb, var(--ion-background-color-rgb, 255, 255, 255)), 0.8)));background:linear-gradient(to top, var(--background, var(--ion-background-color, #fff)) 30%, rgba(var(--background-rgb, var(--ion-background-color-rgb, 255, 255, 255)), 0.8) 100%);z-index:11}@supports (inset-inline-start: 0){.picker-below-highlight.sc-ion-picker-legacy-ios{inset-inline-start:0}}@supports not (inset-inline-start: 0){.picker-below-highlight.sc-ion-picker-legacy-ios{left:0}[dir=rtl].sc-ion-picker-legacy-ios-h .picker-below-highlight.sc-ion-picker-legacy-ios,[dir=rtl] .sc-ion-picker-legacy-ios-h .picker-below-highlight.sc-ion-picker-legacy-ios{left:unset;right:unset;right:0}[dir=rtl].sc-ion-picker-legacy-ios .picker-below-highlight.sc-ion-picker-legacy-ios{left:unset;right:unset;right:0}@supports selector(:dir(rtl)){.picker-below-highlight.sc-ion-picker-legacy-ios:dir(rtl){left:unset;right:unset;right:0}}}";
24812
+ const pickerColumnIosCss = ".picker-col{display:-ms-flexbox;display:flex;position:relative;-ms-flex:1;flex:1;-ms-flex-pack:center;justify-content:center;height:100%;-webkit-box-sizing:content-box;box-sizing:content-box;contain:content}.picker-opts{position:relative;-ms-flex:1;flex:1;max-width:100%}.picker-opt{top:0;display:block;position:absolute;width:100%;border:0;text-align:center;text-overflow:ellipsis;white-space:nowrap;contain:strict;overflow:hidden;will-change:transform}@supports (inset-inline-start: 0){.picker-opt{inset-inline-start:0}}@supports not (inset-inline-start: 0){.picker-opt{left:0}:host-context([dir=rtl]) .picker-opt{left:unset;right:unset;right:0}[dir=rtl] .picker-opt{left:unset;right:unset;right:0}@supports selector(:dir(rtl)){.picker-opt:dir(rtl){left:unset;right:unset;right:0}}}.picker-opt.picker-opt-disabled{pointer-events:none}.picker-opt-disabled{opacity:0}.picker-opts-left{-ms-flex-pack:start;justify-content:flex-start}.picker-opts-right{-ms-flex-pack:end;justify-content:flex-end}.picker-opt:active,.picker-opt:focus{outline:none}.picker-prefix{position:relative;-ms-flex:1;flex:1;text-align:end;white-space:nowrap}.picker-suffix{position:relative;-ms-flex:1;flex:1;text-align:start;white-space:nowrap}.picker-col{-webkit-padding-start:4px;padding-inline-start:4px;-webkit-padding-end:4px;padding-inline-end:4px;padding-top:0;padding-bottom:0;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}.picker-prefix,.picker-suffix,.picker-opts{top:77px;-webkit-transform-style:preserve-3d;transform-style:preserve-3d;color:inherit;font-size:20px;line-height:42px;pointer-events:none}.picker-opt{padding-left:0;padding-right:0;padding-top:0;padding-bottom:0;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;-webkit-transform-origin:center center;transform-origin:center center;height:46px;-webkit-transform-style:preserve-3d;transform-style:preserve-3d;-webkit-transition-timing-function:ease-out;transition-timing-function:ease-out;background:transparent;color:inherit;font-size:20px;line-height:42px;-webkit-backface-visibility:hidden;backface-visibility:hidden;pointer-events:auto}:host-context([dir=rtl]) .picker-opt{-webkit-transform-origin:calc(100% - center) center;transform-origin:calc(100% - center) center}[dir=rtl] .picker-opt{-webkit-transform-origin:calc(100% - center) center;transform-origin:calc(100% - center) center}@supports selector(:dir(rtl)){.picker-opt:dir(rtl){-webkit-transform-origin:calc(100% - center) center;transform-origin:calc(100% - center) center}}";
25063
24813
 
25064
- const pickerMdCss = ".sc-ion-picker-legacy-md-h{--border-radius:0;--border-style:solid;--min-width:auto;--width:100%;--max-width:500px;--min-height:auto;--max-height:auto;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;top:0;display:block;position:absolute;width:100%;height:100%;outline:none;font-family:var(--ion-font-family, inherit);contain:strict;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:1001}@supports (inset-inline-start: 0){.sc-ion-picker-legacy-md-h{inset-inline-start:0}}@supports not (inset-inline-start: 0){.sc-ion-picker-legacy-md-h{left:0}[dir=rtl].sc-ion-picker-legacy-md-h,[dir=rtl] .sc-ion-picker-legacy-md-h{left:unset;right:unset;right:0}@supports selector(:dir(rtl)){.sc-ion-picker-legacy-md-h:dir(rtl){left:unset;right:unset;right:0}}}.overlay-hidden.sc-ion-picker-legacy-md-h{display:none}.picker-wrapper.sc-ion-picker-legacy-md{border-radius:var(--border-radius);left:0;right:0;bottom:0;-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto;margin-top:auto;margin-bottom:auto;-webkit-transform:translate3d(0, 100%, 0);transform:translate3d(0, 100%, 0);display:-ms-flexbox;display:flex;position:absolute;-ms-flex-direction:column;flex-direction:column;width:var(--width);min-width:var(--min-width);max-width:var(--max-width);height:var(--height);min-height:var(--min-height);max-height:var(--max-height);border-width:var(--border-width);border-style:var(--border-style);border-color:var(--border-color);background:var(--background);contain:strict;overflow:hidden;z-index:10}.picker-toolbar.sc-ion-picker-legacy-md{width:100%;background:transparent;contain:strict;z-index:1}.picker-button.sc-ion-picker-legacy-md{border:0;font-family:inherit}.picker-button.sc-ion-picker-legacy-md:active,.picker-button.sc-ion-picker-legacy-md:focus{outline:none}.picker-columns.sc-ion-picker-legacy-md{display:-ms-flexbox;display:flex;position:relative;-ms-flex-pack:center;justify-content:center;margin-bottom:var(--ion-safe-area-bottom, 0);contain:strict;overflow:hidden}.picker-above-highlight.sc-ion-picker-legacy-md,.picker-below-highlight.sc-ion-picker-legacy-md{display:none;pointer-events:none}.sc-ion-picker-legacy-md-h{--background:var(--ion-background-color, #fff);--border-width:0.55px 0 0;--border-color:var(--ion-item-border-color, var(--ion-border-color, var(--ion-color-step-150, rgba(0, 0, 0, 0.13))));--height:260px;--backdrop-opacity:var(--ion-backdrop-opacity, 0.26);color:var(--ion-item-color, var(--ion-text-color, #000))}.picker-toolbar.sc-ion-picker-legacy-md{display:-ms-flexbox;display:flex;-ms-flex-pack:end;justify-content:flex-end;height:44px}.picker-button.sc-ion-picker-legacy-md,.picker-button.ion-activated.sc-ion-picker-legacy-md{margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;-webkit-padding-start:1.1em;padding-inline-start:1.1em;-webkit-padding-end:1.1em;padding-inline-end:1.1em;padding-top:0;padding-bottom:0;height:44px;background:transparent;color:var(--ion-color-primary, #3880ff);font-size:14px;font-weight:500;text-transform:uppercase;-webkit-box-shadow:none;box-shadow:none}.picker-columns.sc-ion-picker-legacy-md{height:216px;-webkit-perspective:1800px;perspective:1800px}.picker-above-highlight.sc-ion-picker-legacy-md{top:0;-webkit-transform:translate3d(0, 0, 90px);transform:translate3d(0, 0, 90px);position:absolute;width:100%;height:81px;border-bottom:1px solid var(--ion-item-border-color, var(--ion-border-color, var(--ion-color-step-150, rgba(0, 0, 0, 0.13))));background:-webkit-gradient(linear, left top, left bottom, color-stop(20%, var(--ion-background-color, #fff)), to(rgba(var(--ion-background-color-rgb, 255, 255, 255), 0.8)));background:linear-gradient(to bottom, var(--ion-background-color, #fff) 20%, rgba(var(--ion-background-color-rgb, 255, 255, 255), 0.8) 100%);z-index:10}@supports (inset-inline-start: 0){.picker-above-highlight.sc-ion-picker-legacy-md{inset-inline-start:0}}@supports not (inset-inline-start: 0){.picker-above-highlight.sc-ion-picker-legacy-md{left:0}[dir=rtl].sc-ion-picker-legacy-md-h .picker-above-highlight.sc-ion-picker-legacy-md,[dir=rtl] .sc-ion-picker-legacy-md-h .picker-above-highlight.sc-ion-picker-legacy-md{left:unset;right:unset;right:0}[dir=rtl].sc-ion-picker-legacy-md .picker-above-highlight.sc-ion-picker-legacy-md{left:unset;right:unset;right:0}@supports selector(:dir(rtl)){.picker-above-highlight.sc-ion-picker-legacy-md:dir(rtl){left:unset;right:unset;right:0}}}.picker-below-highlight.sc-ion-picker-legacy-md{top:115px;-webkit-transform:translate3d(0, 0, 90px);transform:translate3d(0, 0, 90px);position:absolute;width:100%;height:119px;border-top:1px solid var(--ion-item-border-color, var(--ion-border-color, var(--ion-color-step-150, rgba(0, 0, 0, 0.13))));background:-webkit-gradient(linear, left bottom, left top, color-stop(30%, var(--ion-background-color, #fff)), to(rgba(var(--ion-background-color-rgb, 255, 255, 255), 0.8)));background:linear-gradient(to top, var(--ion-background-color, #fff) 30%, rgba(var(--ion-background-color-rgb, 255, 255, 255), 0.8) 100%);z-index:11}@supports (inset-inline-start: 0){.picker-below-highlight.sc-ion-picker-legacy-md{inset-inline-start:0}}@supports not (inset-inline-start: 0){.picker-below-highlight.sc-ion-picker-legacy-md{left:0}[dir=rtl].sc-ion-picker-legacy-md-h .picker-below-highlight.sc-ion-picker-legacy-md,[dir=rtl] .sc-ion-picker-legacy-md-h .picker-below-highlight.sc-ion-picker-legacy-md{left:unset;right:unset;right:0}[dir=rtl].sc-ion-picker-legacy-md .picker-below-highlight.sc-ion-picker-legacy-md{left:unset;right:unset;right:0}@supports selector(:dir(rtl)){.picker-below-highlight.sc-ion-picker-legacy-md:dir(rtl){left:unset;right:unset;right:0}}}";
24814
+ const pickerColumnMdCss = ".picker-col{display:-ms-flexbox;display:flex;position:relative;-ms-flex:1;flex:1;-ms-flex-pack:center;justify-content:center;height:100%;-webkit-box-sizing:content-box;box-sizing:content-box;contain:content}.picker-opts{position:relative;-ms-flex:1;flex:1;max-width:100%}.picker-opt{top:0;display:block;position:absolute;width:100%;border:0;text-align:center;text-overflow:ellipsis;white-space:nowrap;contain:strict;overflow:hidden;will-change:transform}@supports (inset-inline-start: 0){.picker-opt{inset-inline-start:0}}@supports not (inset-inline-start: 0){.picker-opt{left:0}:host-context([dir=rtl]) .picker-opt{left:unset;right:unset;right:0}[dir=rtl] .picker-opt{left:unset;right:unset;right:0}@supports selector(:dir(rtl)){.picker-opt:dir(rtl){left:unset;right:unset;right:0}}}.picker-opt.picker-opt-disabled{pointer-events:none}.picker-opt-disabled{opacity:0}.picker-opts-left{-ms-flex-pack:start;justify-content:flex-start}.picker-opts-right{-ms-flex-pack:end;justify-content:flex-end}.picker-opt:active,.picker-opt:focus{outline:none}.picker-prefix{position:relative;-ms-flex:1;flex:1;text-align:end;white-space:nowrap}.picker-suffix{position:relative;-ms-flex:1;flex:1;text-align:start;white-space:nowrap}.picker-col{-webkit-padding-start:8px;padding-inline-start:8px;-webkit-padding-end:8px;padding-inline-end:8px;padding-top:0;padding-bottom:0;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}.picker-prefix,.picker-suffix,.picker-opts{top:77px;-webkit-transform-style:preserve-3d;transform-style:preserve-3d;color:inherit;font-size:22px;line-height:42px;pointer-events:none}.picker-opt{margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;padding-left:0;padding-right:0;padding-top:0;padding-bottom:0;height:43px;-webkit-transition-timing-function:ease-out;transition-timing-function:ease-out;background:transparent;color:inherit;font-size:22px;line-height:42px;-webkit-backface-visibility:hidden;backface-visibility:hidden;pointer-events:auto}.picker-prefix,.picker-suffix,.picker-opt.picker-opt-selected{color:var(--ion-color-primary, #3880ff)}";
25065
24815
 
25066
- // TODO(FW-2832): types
25067
24816
  /**
25068
- * @virtualProp {"ios" | "md"} mode - The mode determines which platform styles to use.
24817
+ * @internal
25069
24818
  */
25070
- class Picker {
24819
+ class PickerColumnCmp {
25071
24820
  constructor(hostRef) {
25072
24821
  registerInstance(this, hostRef);
25073
- this.didPresent = createEvent(this, "ionPickerDidPresent", 7);
25074
- this.willPresent = createEvent(this, "ionPickerWillPresent", 7);
25075
- this.willDismiss = createEvent(this, "ionPickerWillDismiss", 7);
25076
- this.didDismiss = createEvent(this, "ionPickerDidDismiss", 7);
25077
- this.didPresentShorthand = createEvent(this, "didPresent", 7);
25078
- this.willPresentShorthand = createEvent(this, "willPresent", 7);
25079
- this.willDismissShorthand = createEvent(this, "willDismiss", 7);
25080
- this.didDismissShorthand = createEvent(this, "didDismiss", 7);
25081
- this.delegateController = createDelegateController(this);
25082
- this.lockController = createLockController();
25083
- this.triggerController = createTriggerController();
25084
- this.onBackdropTap = () => {
25085
- this.dismiss(undefined, BACKDROP);
25086
- };
25087
- this.dispatchCancelHandler = (ev) => {
25088
- const role = ev.detail.role;
25089
- if (isCancel(role)) {
25090
- const cancelButton = this.buttons.find((b) => b.role === 'cancel');
25091
- this.callButtonHandler(cancelButton);
24822
+ this.ionPickerColChange = createEvent(this, "ionPickerColChange", 7);
24823
+ this.optHeight = 0;
24824
+ this.rotateFactor = 0;
24825
+ this.scaleFactor = 1;
24826
+ this.velocity = 0;
24827
+ this.y = 0;
24828
+ this.noAnimate = true;
24829
+ // `colDidChange` is a flag that gets set when the column is changed
24830
+ // dynamically. When this flag is set, the column will refresh
24831
+ // after the component re-renders to incorporate the new column data.
24832
+ // This is necessary because `this.refresh` queries for the option elements,
24833
+ // so it needs to wait for the latest elements to be available in the DOM.
24834
+ // Ex: column is created with 3 options. User updates the column data
24835
+ // to have 5 options. The column will still think it only has 3 options.
24836
+ this.colDidChange = false;
24837
+ this.col = undefined;
24838
+ }
24839
+ colChanged() {
24840
+ this.colDidChange = true;
24841
+ }
24842
+ async connectedCallback() {
24843
+ let pickerRotateFactor = 0;
24844
+ let pickerScaleFactor = 0.81;
24845
+ const mode = getIonMode$1(this);
24846
+ if (mode === 'ios') {
24847
+ pickerRotateFactor = -0.46;
24848
+ pickerScaleFactor = 1;
24849
+ }
24850
+ this.rotateFactor = pickerRotateFactor;
24851
+ this.scaleFactor = pickerScaleFactor;
24852
+ this.gesture = (await Promise.resolve().then(function () { return index; })).createGesture({
24853
+ el: this.el,
24854
+ gestureName: 'picker-swipe',
24855
+ gesturePriority: 100,
24856
+ threshold: 0,
24857
+ passive: false,
24858
+ onStart: (ev) => this.onStart(ev),
24859
+ onMove: (ev) => this.onMove(ev),
24860
+ onEnd: (ev) => this.onEnd(ev),
24861
+ });
24862
+ this.gesture.enable();
24863
+ // Options have not been initialized yet
24864
+ // Animation must be disabled through the `noAnimate` flag
24865
+ // Otherwise, the options will render
24866
+ // at the top of the column and transition down
24867
+ this.tmrId = setTimeout(() => {
24868
+ this.noAnimate = false;
24869
+ // After initialization, `refresh()` will be called
24870
+ // At this point, animation will be enabled. The options will
24871
+ // animate as they are being selected.
24872
+ this.refresh(true);
24873
+ }, 250);
24874
+ }
24875
+ componentDidLoad() {
24876
+ this.onDomChange();
24877
+ }
24878
+ componentDidUpdate() {
24879
+ // Options may have changed since last update.
24880
+ if (this.colDidChange) {
24881
+ // Animation must be disabled through the `onDomChange` parameter.
24882
+ // Otherwise, the recently added options will render
24883
+ // at the top of the column and transition down
24884
+ this.onDomChange(true, false);
24885
+ this.colDidChange = false;
24886
+ }
24887
+ }
24888
+ disconnectedCallback() {
24889
+ if (this.rafId !== undefined)
24890
+ cancelAnimationFrame(this.rafId);
24891
+ if (this.tmrId)
24892
+ clearTimeout(this.tmrId);
24893
+ if (this.gesture) {
24894
+ this.gesture.destroy();
24895
+ this.gesture = undefined;
24896
+ }
24897
+ }
24898
+ emitColChange() {
24899
+ this.ionPickerColChange.emit(this.col);
24900
+ }
24901
+ setSelected(selectedIndex, duration) {
24902
+ // if there is a selected index, then figure out it's y position
24903
+ // if there isn't a selected index, then just use the top y position
24904
+ const y = selectedIndex > -1 ? -(selectedIndex * this.optHeight) : 0;
24905
+ this.velocity = 0;
24906
+ // set what y position we're at
24907
+ if (this.rafId !== undefined)
24908
+ cancelAnimationFrame(this.rafId);
24909
+ this.update(y, duration, true);
24910
+ this.emitColChange();
24911
+ }
24912
+ update(y, duration, saveY) {
24913
+ if (!this.optsEl) {
24914
+ return;
24915
+ }
24916
+ // ensure we've got a good round number :)
24917
+ let translateY = 0;
24918
+ let translateZ = 0;
24919
+ const { col, rotateFactor } = this;
24920
+ const prevSelected = col.selectedIndex;
24921
+ const selectedIndex = (col.selectedIndex = this.indexForY(-y));
24922
+ const durationStr = duration === 0 ? '' : duration + 'ms';
24923
+ const scaleStr = `scale(${this.scaleFactor})`;
24924
+ const children = this.optsEl.children;
24925
+ for (let i = 0; i < children.length; i++) {
24926
+ const button = children[i];
24927
+ const opt = col.options[i];
24928
+ const optOffset = i * this.optHeight + y;
24929
+ let transform = '';
24930
+ if (rotateFactor !== 0) {
24931
+ const rotateX = optOffset * rotateFactor;
24932
+ if (Math.abs(rotateX) <= 90) {
24933
+ translateY = 0;
24934
+ translateZ = 90;
24935
+ transform = `rotateX(${rotateX}deg) `;
24936
+ }
24937
+ else {
24938
+ translateY = -9999;
24939
+ }
24940
+ }
24941
+ else {
24942
+ translateZ = 0;
24943
+ translateY = optOffset;
24944
+ }
24945
+ const selected = selectedIndex === i;
24946
+ transform += `translate3d(0px,${translateY}px,${translateZ}px) `;
24947
+ if (this.scaleFactor !== 1 && !selected) {
24948
+ transform += scaleStr;
24949
+ }
24950
+ // Update transition duration
24951
+ if (this.noAnimate) {
24952
+ opt.duration = 0;
24953
+ button.style.transitionDuration = '';
24954
+ }
24955
+ else if (duration !== opt.duration) {
24956
+ opt.duration = duration;
24957
+ button.style.transitionDuration = durationStr;
24958
+ }
24959
+ // Update transform
24960
+ if (transform !== opt.transform) {
24961
+ opt.transform = transform;
24962
+ }
24963
+ button.style.transform = transform;
24964
+ /**
24965
+ * Ensure that the select column
24966
+ * item has the selected class
24967
+ */
24968
+ opt.selected = selected;
24969
+ if (selected) {
24970
+ button.classList.add(PICKER_OPT_SELECTED);
24971
+ }
24972
+ else {
24973
+ button.classList.remove(PICKER_OPT_SELECTED);
25092
24974
  }
25093
- };
25094
- this.presented = false;
25095
- this.overlayIndex = undefined;
25096
- this.delegate = undefined;
25097
- this.hasController = false;
25098
- this.keyboardClose = true;
25099
- this.enterAnimation = undefined;
25100
- this.leaveAnimation = undefined;
25101
- this.buttons = [];
25102
- this.columns = [];
25103
- this.cssClass = undefined;
25104
- this.duration = 0;
25105
- this.showBackdrop = true;
25106
- this.backdropDismiss = true;
25107
- this.animated = true;
25108
- this.htmlAttributes = undefined;
25109
- this.isOpen = false;
25110
- this.trigger = undefined;
25111
- }
25112
- onIsOpenChange(newValue, oldValue) {
25113
- if (newValue === true && oldValue === false) {
25114
- this.present();
25115
24975
  }
25116
- else if (newValue === false && oldValue === true) {
25117
- this.dismiss();
24976
+ this.col.prevSelected = prevSelected;
24977
+ if (saveY) {
24978
+ this.y = y;
25118
24979
  }
25119
- }
25120
- triggerChanged() {
25121
- const { trigger, el, triggerController } = this;
25122
- if (trigger) {
25123
- triggerController.addClickListener(el, trigger);
24980
+ if (this.lastIndex !== selectedIndex) {
24981
+ // have not set a last index yet
24982
+ hapticSelectionChanged();
24983
+ this.lastIndex = selectedIndex;
25124
24984
  }
25125
24985
  }
25126
- connectedCallback() {
25127
- prepareOverlay(this.el);
25128
- this.triggerChanged();
25129
- }
25130
- disconnectedCallback() {
25131
- this.triggerController.removeClickListener();
24986
+ decelerate() {
24987
+ if (this.velocity !== 0) {
24988
+ // still decelerating
24989
+ this.velocity *= DECELERATION_FRICTION;
24990
+ // do not let it go slower than a velocity of 1
24991
+ this.velocity = this.velocity > 0 ? Math.max(this.velocity, 1) : Math.min(this.velocity, -1);
24992
+ let y = this.y + this.velocity;
24993
+ if (y > this.minY) {
24994
+ // whoops, it's trying to scroll up farther than the options we have!
24995
+ y = this.minY;
24996
+ this.velocity = 0;
24997
+ }
24998
+ else if (y < this.maxY) {
24999
+ // gahh, it's trying to scroll down farther than we can!
25000
+ y = this.maxY;
25001
+ this.velocity = 0;
25002
+ }
25003
+ this.update(y, 0, true);
25004
+ const notLockedIn = Math.round(y) % this.optHeight !== 0 || Math.abs(this.velocity) > 1;
25005
+ if (notLockedIn) {
25006
+ // isn't locked in yet, keep decelerating until it is
25007
+ this.rafId = requestAnimationFrame(() => this.decelerate());
25008
+ }
25009
+ else {
25010
+ this.velocity = 0;
25011
+ this.emitColChange();
25012
+ hapticSelectionEnd();
25013
+ }
25014
+ }
25015
+ else if (this.y % this.optHeight !== 0) {
25016
+ // needs to still get locked into a position so options line up
25017
+ const currentPos = Math.abs(this.y % this.optHeight);
25018
+ // create a velocity in the direction it needs to scroll
25019
+ this.velocity = currentPos > this.optHeight / 2 ? 1 : -1;
25020
+ this.decelerate();
25021
+ }
25132
25022
  }
25133
- componentWillLoad() {
25134
- setOverlayId(this.el);
25023
+ indexForY(y) {
25024
+ return Math.min(Math.max(Math.abs(Math.round(y / this.optHeight)), 0), this.col.options.length - 1);
25135
25025
  }
25136
- componentDidLoad() {
25137
- printIonWarning('ion-picker-legacy and ion-picker-legacy-column have been deprecated in favor of new versions of the ion-picker and ion-picker-column components. These new components display inline with your page content allowing for more presentation flexibility than before.', this.el);
25138
- /**
25139
- * If picker was rendered with isOpen="true"
25140
- * then we should open picker immediately.
25141
- */
25142
- if (this.isOpen === true) {
25143
- raf(() => this.present());
25026
+ onStart(detail) {
25027
+ // We have to prevent default in order to block scrolling under the picker
25028
+ // but we DO NOT have to stop propagation, since we still want
25029
+ // some "click" events to capture
25030
+ if (detail.event.cancelable) {
25031
+ detail.event.preventDefault();
25144
25032
  }
25145
- }
25146
- /**
25147
- * Present the picker overlay after it has been created.
25148
- */
25149
- async present() {
25150
- const unlock = await this.lockController.lock();
25151
- await this.delegateController.attachViewToDom();
25152
- await present(this, 'pickerEnter', iosEnterAnimation$2, iosEnterAnimation$2, undefined);
25153
- if (this.duration > 0) {
25154
- this.durationTimeout = setTimeout(() => this.dismiss(), this.duration);
25033
+ detail.event.stopPropagation();
25034
+ hapticSelectionStart();
25035
+ // reset everything
25036
+ if (this.rafId !== undefined)
25037
+ cancelAnimationFrame(this.rafId);
25038
+ const options = this.col.options;
25039
+ let minY = options.length - 1;
25040
+ let maxY = 0;
25041
+ for (let i = 0; i < options.length; i++) {
25042
+ if (!options[i].disabled) {
25043
+ minY = Math.min(minY, i);
25044
+ maxY = Math.max(maxY, i);
25045
+ }
25155
25046
  }
25156
- unlock();
25047
+ this.minY = -(minY * this.optHeight);
25048
+ this.maxY = -(maxY * this.optHeight);
25157
25049
  }
25158
- /**
25159
- * Dismiss the picker overlay after it has been presented.
25160
- *
25161
- * @param data Any data to emit in the dismiss events.
25162
- * @param role The role of the element that is dismissing the picker.
25163
- * This can be useful in a button handler for determining which button was
25164
- * clicked to dismiss the picker.
25165
- * Some examples include: ``"cancel"`, `"destructive"`, "selected"`, and `"backdrop"`.
25166
- */
25167
- async dismiss(data, role) {
25168
- const unlock = await this.lockController.lock();
25169
- if (this.durationTimeout) {
25170
- clearTimeout(this.durationTimeout);
25050
+ onMove(detail) {
25051
+ if (detail.event.cancelable) {
25052
+ detail.event.preventDefault();
25171
25053
  }
25172
- const dismissed = await dismiss(this, data, role, 'pickerLeave', iosLeaveAnimation$2, iosLeaveAnimation$2);
25173
- if (dismissed) {
25174
- this.delegateController.removeViewFromDom();
25054
+ detail.event.stopPropagation();
25055
+ // update the scroll position relative to pointer start position
25056
+ let y = this.y + detail.deltaY;
25057
+ if (y > this.minY) {
25058
+ // scrolling up higher than scroll area
25059
+ y = Math.pow(y, 0.8);
25060
+ this.bounceFrom = y;
25175
25061
  }
25176
- unlock();
25177
- return dismissed;
25178
- }
25179
- /**
25180
- * Returns a promise that resolves when the picker did dismiss.
25181
- */
25182
- onDidDismiss() {
25183
- return eventMethod(this.el, 'ionPickerDidDismiss');
25184
- }
25185
- /**
25186
- * Returns a promise that resolves when the picker will dismiss.
25187
- */
25188
- onWillDismiss() {
25189
- return eventMethod(this.el, 'ionPickerWillDismiss');
25190
- }
25191
- /**
25192
- * Get the column that matches the specified name.
25193
- *
25194
- * @param name The name of the column.
25195
- */
25196
- getColumn(name) {
25197
- return Promise.resolve(this.columns.find((column) => column.name === name));
25062
+ else if (y < this.maxY) {
25063
+ // scrolling down below scroll area
25064
+ y += Math.pow(this.maxY - y, 0.9);
25065
+ this.bounceFrom = y;
25066
+ }
25067
+ else {
25068
+ this.bounceFrom = 0;
25069
+ }
25070
+ this.update(y, 0, false);
25198
25071
  }
25199
- async buttonClick(button) {
25200
- const role = button.role;
25201
- if (isCancel(role)) {
25202
- return this.dismiss(undefined, role);
25072
+ onEnd(detail) {
25073
+ if (this.bounceFrom > 0) {
25074
+ // bounce back up
25075
+ this.update(this.minY, 100, true);
25076
+ this.emitColChange();
25077
+ return;
25203
25078
  }
25204
- const shouldDismiss = await this.callButtonHandler(button);
25205
- if (shouldDismiss) {
25206
- return this.dismiss(this.getSelected(), button.role);
25079
+ else if (this.bounceFrom < 0) {
25080
+ // bounce back down
25081
+ this.update(this.maxY, 100, true);
25082
+ this.emitColChange();
25083
+ return;
25084
+ }
25085
+ this.velocity = clamp(-MAX_PICKER_SPEED, detail.velocityY * 23, MAX_PICKER_SPEED);
25086
+ if (this.velocity === 0 && detail.deltaY === 0) {
25087
+ const opt = detail.event.target.closest('.picker-opt');
25088
+ if (opt === null || opt === void 0 ? void 0 : opt.hasAttribute('opt-index')) {
25089
+ this.setSelected(parseInt(opt.getAttribute('opt-index'), 10), TRANSITION_DURATION);
25090
+ }
25091
+ }
25092
+ else {
25093
+ this.y += detail.deltaY;
25094
+ if (Math.abs(detail.velocityY) < 0.05) {
25095
+ const isScrollingUp = detail.deltaY > 0;
25096
+ const optHeightFraction = (Math.abs(this.y) % this.optHeight) / this.optHeight;
25097
+ if (isScrollingUp && optHeightFraction > 0.5) {
25098
+ this.velocity = Math.abs(this.velocity) * -1;
25099
+ }
25100
+ else if (!isScrollingUp && optHeightFraction <= 0.5) {
25101
+ this.velocity = Math.abs(this.velocity);
25102
+ }
25103
+ }
25104
+ this.decelerate();
25207
25105
  }
25208
- return Promise.resolve();
25209
25106
  }
25210
- async callButtonHandler(button) {
25211
- if (button) {
25212
- // a handler has been provided, execute it
25213
- // pass the handler the values from the inputs
25214
- const rtn = await safeCall(button.handler, this.getSelected());
25215
- if (rtn === false) {
25216
- // if the return value of the handler is false then do not dismiss
25217
- return false;
25107
+ refresh(forceRefresh, animated) {
25108
+ var _a;
25109
+ let min = this.col.options.length - 1;
25110
+ let max = 0;
25111
+ const options = this.col.options;
25112
+ for (let i = 0; i < options.length; i++) {
25113
+ if (!options[i].disabled) {
25114
+ min = Math.min(min, i);
25115
+ max = Math.max(max, i);
25218
25116
  }
25219
25117
  }
25220
- return true;
25118
+ /**
25119
+ * Only update selected value if column has a
25120
+ * velocity of 0. If it does not, then the
25121
+ * column is animating might land on
25122
+ * a value different than the value at
25123
+ * selectedIndex
25124
+ */
25125
+ if (this.velocity !== 0) {
25126
+ return;
25127
+ }
25128
+ const selectedIndex = clamp(min, (_a = this.col.selectedIndex) !== null && _a !== void 0 ? _a : 0, max);
25129
+ if (this.col.prevSelected !== selectedIndex || forceRefresh) {
25130
+ const y = selectedIndex * this.optHeight * -1;
25131
+ const duration = animated ? TRANSITION_DURATION : 0;
25132
+ this.velocity = 0;
25133
+ this.update(y, duration, true);
25134
+ }
25221
25135
  }
25222
- getSelected() {
25223
- const selected = {};
25224
- this.columns.forEach((col, index) => {
25225
- const selectedColumn = col.selectedIndex !== undefined ? col.options[col.selectedIndex] : undefined;
25226
- selected[col.name] = {
25227
- text: selectedColumn ? selectedColumn.text : undefined,
25228
- value: selectedColumn ? selectedColumn.value : undefined,
25229
- columnIndex: index,
25230
- };
25231
- });
25232
- return selected;
25136
+ onDomChange(forceRefresh, animated) {
25137
+ const colEl = this.optsEl;
25138
+ if (colEl) {
25139
+ // DOM READ
25140
+ // We perfom a DOM read over a rendered item, this needs to happen after the first render or after the the column has changed
25141
+ this.optHeight = colEl.firstElementChild ? colEl.firstElementChild.clientHeight : 0;
25142
+ }
25143
+ this.refresh(forceRefresh, animated);
25233
25144
  }
25234
25145
  render() {
25235
- const { htmlAttributes } = this;
25146
+ const col = this.col;
25236
25147
  const mode = getIonMode$1(this);
25237
- return (hAsync(Host, Object.assign({ "aria-modal": "true", tabindex: "-1" }, htmlAttributes, { style: {
25238
- zIndex: `${20000 + this.overlayIndex}`,
25239
- }, class: Object.assign({ [mode]: true,
25240
- // Used internally for styling
25241
- [`picker-${mode}`]: true, 'overlay-hidden': true }, getClassMap(this.cssClass)), onIonBackdropTap: this.onBackdropTap, onIonPickerWillDismiss: this.dispatchCancelHandler }), hAsync("ion-backdrop", { visible: this.showBackdrop, tappable: this.backdropDismiss }), hAsync("div", { tabindex: "0" }), hAsync("div", { class: "picker-wrapper ion-overlay-wrapper", role: "dialog" }, hAsync("div", { class: "picker-toolbar" }, this.buttons.map((b) => (hAsync("div", { class: buttonWrapperClass(b) }, hAsync("button", { type: "button", onClick: () => this.buttonClick(b), class: buttonClass$1(b) }, b.text))))), hAsync("div", { class: "picker-columns" }, hAsync("div", { class: "picker-above-highlight" }), this.presented && this.columns.map((c) => hAsync("ion-picker-legacy-column", { col: c })), hAsync("div", { class: "picker-below-highlight" }))), hAsync("div", { tabindex: "0" })));
25148
+ return (hAsync(Host, { class: Object.assign({ [mode]: true, 'picker-col': true, 'picker-opts-left': this.col.align === 'left', 'picker-opts-right': this.col.align === 'right' }, getClassMap(col.cssClass)), style: {
25149
+ 'max-width': this.col.columnWidth,
25150
+ } }, col.prefix && (hAsync("div", { class: "picker-prefix", style: { width: col.prefixWidth } }, col.prefix)), hAsync("div", { class: "picker-opts", style: { maxWidth: col.optionsWidth }, ref: (el) => (this.optsEl = el) }, col.options.map((o, index) => (hAsync("button", { "aria-label": o.ariaLabel, class: { 'picker-opt': true, 'picker-opt-disabled': !!o.disabled }, "opt-index": index }, o.text)))), col.suffix && (hAsync("div", { class: "picker-suffix", style: { width: col.suffixWidth } }, col.suffix))));
25242
25151
  }
25243
25152
  get el() { return getElement(this); }
25244
25153
  static get watchers() { return {
25245
- "isOpen": ["onIsOpenChange"],
25246
- "trigger": ["triggerChanged"]
25154
+ "col": ["colChanged"]
25247
25155
  }; }
25248
25156
  static get style() { return {
25249
- ios: pickerIosCss,
25250
- md: pickerMdCss
25157
+ ios: pickerColumnIosCss,
25158
+ md: pickerColumnMdCss
25251
25159
  }; }
25252
25160
  static get cmpMeta() { return {
25253
- "$flags$": 34,
25254
- "$tagName$": "ion-picker-legacy",
25161
+ "$flags$": 32,
25162
+ "$tagName$": "ion-picker-column",
25255
25163
  "$members$": {
25256
- "overlayIndex": [2, "overlay-index"],
25257
- "delegate": [16],
25258
- "hasController": [4, "has-controller"],
25259
- "keyboardClose": [4, "keyboard-close"],
25260
- "enterAnimation": [16],
25261
- "leaveAnimation": [16],
25262
- "buttons": [16],
25263
- "columns": [16],
25264
- "cssClass": [1, "css-class"],
25265
- "duration": [2],
25266
- "showBackdrop": [4, "show-backdrop"],
25267
- "backdropDismiss": [4, "backdrop-dismiss"],
25268
- "animated": [4],
25269
- "htmlAttributes": [16],
25270
- "isOpen": [4, "is-open"],
25271
- "trigger": [1],
25272
- "presented": [32],
25273
- "present": [64],
25274
- "dismiss": [64],
25275
- "onDidDismiss": [64],
25276
- "onWillDismiss": [64],
25277
- "getColumn": [64]
25164
+ "col": [16]
25278
25165
  },
25279
25166
  "$listeners$": undefined,
25280
25167
  "$lazyBundleId$": "-",
25281
25168
  "$attrsToReflect$": []
25282
25169
  }; }
25283
25170
  }
25284
- const buttonWrapperClass = (button) => {
25285
- return {
25286
- [`picker-toolbar-${button.role}`]: button.role !== undefined,
25287
- 'picker-toolbar-button': true,
25288
- };
25289
- };
25290
- const buttonClass$1 = (button) => {
25291
- return Object.assign({ 'picker-button': true, 'ion-activatable': true }, getClassMap(button.cssClass));
25292
- };
25171
+ const PICKER_OPT_SELECTED = 'picker-opt-selected';
25172
+ const DECELERATION_FRICTION = 0.97;
25173
+ const MAX_PICKER_SPEED = 90;
25174
+ const TRANSITION_DURATION = 150;
25293
25175
 
25294
- const pickerColumnIosCss$1 = "/*!@:host*/.sc-ion-picker-column-ios-h{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;max-width:100%;height:200px;font-size:22px;text-align:center}/*!@.picker-opts*/.picker-opts.sc-ion-picker-column-ios{-webkit-padding-start:16px;padding-inline-start:16px;-webkit-padding-end:16px;padding-inline-end:16px;padding-top:0px;padding-bottom:0px;min-width:26px;max-height:200px;outline:none;text-align:inherit;-webkit-scroll-snap-type:y mandatory;-ms-scroll-snap-type:y mandatory;scroll-snap-type:y mandatory;overflow-x:hidden;overflow-y:scroll;scrollbar-width:none}/*!@.picker-opts::-webkit-scrollbar*/.picker-opts.sc-ion-picker-column-ios::-webkit-scrollbar{display:none}/*!@::slotted(ion-picker-column-option)*/.sc-ion-picker-column-ios-s>ion-picker-column-option{display:block;scroll-snap-align:center}/*!@.picker-item-empty,\n:host(:not([disabled])) ::slotted(ion-picker-column-option.option-disabled)*/.picker-item-empty.sc-ion-picker-column-ios,.sc-ion-picker-column-ios-h:not([disabled]).sc-ion-picker-column-ios-s>ion-picker-column-option.option-disabled,.sc-ion-picker-column-ios-h:not([disabled]) .sc-ion-picker-column-ios-s>ion-picker-column-option.option-disabled{scroll-snap-align:none}/*!@::slotted([slot=prefix]), ::slotted([slot=suffix])*/.sc-ion-picker-column-ios-s>[slot=prefix],.sc-ion-picker-column-ios-s>[slot=suffix]{max-width:200px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}/*!@::slotted([slot=prefix])*/.sc-ion-picker-column-ios-s>[slot=prefix]{-webkit-padding-start:16px;padding-inline-start:16px;-webkit-padding-end:16px;padding-inline-end:16px;padding-top:0;padding-bottom:0;-ms-flex-pack:end;justify-content:end}/*!@::slotted([slot=suffix])*/.sc-ion-picker-column-ios-s>[slot=suffix]{-webkit-padding-start:16px;padding-inline-start:16px;-webkit-padding-end:16px;padding-inline-end:16px;padding-top:0;padding-bottom:0;-ms-flex-pack:start;justify-content:start}/*!@:host .picker-item*/.sc-ion-picker-column-ios-h .picker-item.sc-ion-picker-column-ios{padding-left:0;padding-right:0;padding-top:0;padding-bottom:0;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;display:block;width:100%;height:34px;border:0px;outline:none;background:transparent;color:inherit;font-family:var(--ion-font-family, inherit);font-size:inherit;line-height:34px;text-align:inherit;text-overflow:ellipsis;white-space:nowrap;cursor:pointer;overflow:hidden;scroll-snap-align:center}/*!@:host .picker-item-empty,\n:host .picker-item[disabled]*/.sc-ion-picker-column-ios-h .picker-item-empty.sc-ion-picker-column-ios,.sc-ion-picker-column-ios-h .picker-item[disabled].sc-ion-picker-column-ios{cursor:default}/*!@:host .picker-item-empty,\n:host(:not([disabled])) .picker-item[disabled]*/.sc-ion-picker-column-ios-h .picker-item-empty.sc-ion-picker-column-ios,.sc-ion-picker-column-ios-h:not([disabled]) .picker-item[disabled].sc-ion-picker-column-ios{scroll-snap-align:none}/*!@:host([disabled])*/[disabled].sc-ion-picker-column-ios-h{overflow-y:hidden}/*!@:host .picker-item[disabled]*/.sc-ion-picker-column-ios-h .picker-item[disabled].sc-ion-picker-column-ios{opacity:0.4}/*!@:host(.picker-column-active) .picker-item.picker-item-active*/.picker-column-active.sc-ion-picker-column-ios-h .picker-item.picker-item-active.sc-ion-picker-column-ios{color:var(--ion-color-base)}@media (any-hover: hover){/*!@:host(:focus) .picker-opts*/.sc-ion-picker-column-ios-h:focus .picker-opts.sc-ion-picker-column-ios{outline:none;background:rgba(var(--ion-color-base-rgb), 0.2)}}";
25176
+ const pickerColumnInternalIosCss = "/*!@:host*/.sc-ion-picker-column-internal-ios-h{-webkit-padding-start:16px;padding-inline-start:16px;-webkit-padding-end:16px;padding-inline-end:16px;padding-top:0px;padding-bottom:0px;height:200px;outline:none;font-size:22px;-webkit-scroll-snap-type:y mandatory;-ms-scroll-snap-type:y mandatory;scroll-snap-type:y mandatory;overflow-x:hidden;overflow-y:scroll;scrollbar-width:none;text-align:center}/*!@:host::-webkit-scrollbar*/.sc-ion-picker-column-internal-ios-h::-webkit-scrollbar{display:none}/*!@:host .picker-item*/.sc-ion-picker-column-internal-ios-h .picker-item.sc-ion-picker-column-internal-ios{padding-left:0;padding-right:0;padding-top:0;padding-bottom:0;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;display:block;width:100%;height:34px;border:0px;outline:none;background:transparent;color:inherit;font-family:var(--ion-font-family, inherit);font-size:inherit;line-height:34px;text-align:inherit;text-overflow:ellipsis;white-space:nowrap;cursor:pointer;overflow:hidden;scroll-snap-align:center}/*!@:host .picker-item-empty,\n:host .picker-item[disabled]*/.sc-ion-picker-column-internal-ios-h .picker-item-empty.sc-ion-picker-column-internal-ios,.sc-ion-picker-column-internal-ios-h .picker-item[disabled].sc-ion-picker-column-internal-ios{cursor:default}/*!@:host .picker-item-empty,\n:host(:not([disabled])) .picker-item[disabled]*/.sc-ion-picker-column-internal-ios-h .picker-item-empty.sc-ion-picker-column-internal-ios,.sc-ion-picker-column-internal-ios-h:not([disabled]) .picker-item[disabled].sc-ion-picker-column-internal-ios{scroll-snap-align:none}/*!@:host([disabled])*/[disabled].sc-ion-picker-column-internal-ios-h{overflow-y:hidden}/*!@:host .picker-item[disabled]*/.sc-ion-picker-column-internal-ios-h .picker-item[disabled].sc-ion-picker-column-internal-ios{opacity:0.4}/*!@:host(.picker-column-active) .picker-item.picker-item-active*/.picker-column-active.sc-ion-picker-column-internal-ios-h .picker-item.picker-item-active.sc-ion-picker-column-internal-ios{color:var(--ion-color-base)}@media (any-hover: hover){/*!@:host(:focus)*/.sc-ion-picker-column-internal-ios-h:focus{outline:none;background:rgba(var(--ion-color-base-rgb), 0.2)}}";
25295
25177
 
25296
- const pickerColumnMdCss$1 = "/*!@:host*/.sc-ion-picker-column-md-h{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;max-width:100%;height:200px;font-size:22px;text-align:center}/*!@.picker-opts*/.picker-opts.sc-ion-picker-column-md{-webkit-padding-start:16px;padding-inline-start:16px;-webkit-padding-end:16px;padding-inline-end:16px;padding-top:0px;padding-bottom:0px;min-width:26px;max-height:200px;outline:none;text-align:inherit;-webkit-scroll-snap-type:y mandatory;-ms-scroll-snap-type:y mandatory;scroll-snap-type:y mandatory;overflow-x:hidden;overflow-y:scroll;scrollbar-width:none}/*!@.picker-opts::-webkit-scrollbar*/.picker-opts.sc-ion-picker-column-md::-webkit-scrollbar{display:none}/*!@::slotted(ion-picker-column-option)*/.sc-ion-picker-column-md-s>ion-picker-column-option{display:block;scroll-snap-align:center}/*!@.picker-item-empty,\n:host(:not([disabled])) ::slotted(ion-picker-column-option.option-disabled)*/.picker-item-empty.sc-ion-picker-column-md,.sc-ion-picker-column-md-h:not([disabled]).sc-ion-picker-column-md-s>ion-picker-column-option.option-disabled,.sc-ion-picker-column-md-h:not([disabled]) .sc-ion-picker-column-md-s>ion-picker-column-option.option-disabled{scroll-snap-align:none}/*!@::slotted([slot=prefix]), ::slotted([slot=suffix])*/.sc-ion-picker-column-md-s>[slot=prefix],.sc-ion-picker-column-md-s>[slot=suffix]{max-width:200px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}/*!@::slotted([slot=prefix])*/.sc-ion-picker-column-md-s>[slot=prefix]{-webkit-padding-start:16px;padding-inline-start:16px;-webkit-padding-end:16px;padding-inline-end:16px;padding-top:0;padding-bottom:0;-ms-flex-pack:end;justify-content:end}/*!@::slotted([slot=suffix])*/.sc-ion-picker-column-md-s>[slot=suffix]{-webkit-padding-start:16px;padding-inline-start:16px;-webkit-padding-end:16px;padding-inline-end:16px;padding-top:0;padding-bottom:0;-ms-flex-pack:start;justify-content:start}/*!@:host .picker-item*/.sc-ion-picker-column-md-h .picker-item.sc-ion-picker-column-md{padding-left:0;padding-right:0;padding-top:0;padding-bottom:0;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;display:block;width:100%;height:34px;border:0px;outline:none;background:transparent;color:inherit;font-family:var(--ion-font-family, inherit);font-size:inherit;line-height:34px;text-align:inherit;text-overflow:ellipsis;white-space:nowrap;cursor:pointer;overflow:hidden;scroll-snap-align:center}/*!@:host .picker-item-empty,\n:host .picker-item[disabled]*/.sc-ion-picker-column-md-h .picker-item-empty.sc-ion-picker-column-md,.sc-ion-picker-column-md-h .picker-item[disabled].sc-ion-picker-column-md{cursor:default}/*!@:host .picker-item-empty,\n:host(:not([disabled])) .picker-item[disabled]*/.sc-ion-picker-column-md-h .picker-item-empty.sc-ion-picker-column-md,.sc-ion-picker-column-md-h:not([disabled]) .picker-item[disabled].sc-ion-picker-column-md{scroll-snap-align:none}/*!@:host([disabled])*/[disabled].sc-ion-picker-column-md-h{overflow-y:hidden}/*!@:host .picker-item[disabled]*/.sc-ion-picker-column-md-h .picker-item[disabled].sc-ion-picker-column-md{opacity:0.4}/*!@:host(.picker-column-active) .picker-item.picker-item-active*/.picker-column-active.sc-ion-picker-column-md-h .picker-item.picker-item-active.sc-ion-picker-column-md{color:var(--ion-color-base)}@media (any-hover: hover){/*!@:host(:focus) .picker-opts*/.sc-ion-picker-column-md-h:focus .picker-opts.sc-ion-picker-column-md{outline:none;background:rgba(var(--ion-color-base-rgb), 0.2)}}/*!@:host .picker-item-active*/.sc-ion-picker-column-md-h .picker-item-active.sc-ion-picker-column-md{color:var(--ion-color-base)}";
25178
+ const pickerColumnInternalMdCss = "/*!@:host*/.sc-ion-picker-column-internal-md-h{-webkit-padding-start:16px;padding-inline-start:16px;-webkit-padding-end:16px;padding-inline-end:16px;padding-top:0px;padding-bottom:0px;height:200px;outline:none;font-size:22px;-webkit-scroll-snap-type:y mandatory;-ms-scroll-snap-type:y mandatory;scroll-snap-type:y mandatory;overflow-x:hidden;overflow-y:scroll;scrollbar-width:none;text-align:center}/*!@:host::-webkit-scrollbar*/.sc-ion-picker-column-internal-md-h::-webkit-scrollbar{display:none}/*!@:host .picker-item*/.sc-ion-picker-column-internal-md-h .picker-item.sc-ion-picker-column-internal-md{padding-left:0;padding-right:0;padding-top:0;padding-bottom:0;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;display:block;width:100%;height:34px;border:0px;outline:none;background:transparent;color:inherit;font-family:var(--ion-font-family, inherit);font-size:inherit;line-height:34px;text-align:inherit;text-overflow:ellipsis;white-space:nowrap;cursor:pointer;overflow:hidden;scroll-snap-align:center}/*!@:host .picker-item-empty,\n:host .picker-item[disabled]*/.sc-ion-picker-column-internal-md-h .picker-item-empty.sc-ion-picker-column-internal-md,.sc-ion-picker-column-internal-md-h .picker-item[disabled].sc-ion-picker-column-internal-md{cursor:default}/*!@:host .picker-item-empty,\n:host(:not([disabled])) .picker-item[disabled]*/.sc-ion-picker-column-internal-md-h .picker-item-empty.sc-ion-picker-column-internal-md,.sc-ion-picker-column-internal-md-h:not([disabled]) .picker-item[disabled].sc-ion-picker-column-internal-md{scroll-snap-align:none}/*!@:host([disabled])*/[disabled].sc-ion-picker-column-internal-md-h{overflow-y:hidden}/*!@:host .picker-item[disabled]*/.sc-ion-picker-column-internal-md-h .picker-item[disabled].sc-ion-picker-column-internal-md{opacity:0.4}/*!@:host(.picker-column-active) .picker-item.picker-item-active*/.picker-column-active.sc-ion-picker-column-internal-md-h .picker-item.picker-item-active.sc-ion-picker-column-internal-md{color:var(--ion-color-base)}@media (any-hover: hover){/*!@:host(:focus)*/.sc-ion-picker-column-internal-md-h:focus{outline:none;background:rgba(var(--ion-color-base-rgb), 0.2)}}/*!@:host .picker-item-active*/.sc-ion-picker-column-internal-md-h .picker-item-active.sc-ion-picker-column-internal-md{color:var(--ion-color-base)}";
25297
25179
 
25298
25180
  /**
25299
25181
  * @virtualProp {"ios" | "md"} mode - The mode determines which platform styles to use.
25300
- *
25301
- * @slot prefix - Content to show on the left side of the picker options.
25302
- * @slot suffix - Content to show on the right side of the picker options.
25182
+ * @internal
25303
25183
  */
25304
- // TODO FW-5580 we can likely go back to a single stylesheet here
25305
- // the per-mode styles were moved to ion-picker-column-option
25306
- class PickerColumn {
25184
+ class PickerColumnInternal {
25307
25185
  constructor(hostRef) {
25308
25186
  registerInstance(this, hostRef);
25309
25187
  this.ionChange = createEvent(this, "ionChange", 7);
@@ -25311,11 +25189,11 @@ class PickerColumn {
25311
25189
  this.isColumnVisible = false;
25312
25190
  this.canExitInputMode = true;
25313
25191
  this.centerPickerItemInView = (target, smooth = true, canExitInputMode = true) => {
25314
- const { isColumnVisible, scrollEl } = this;
25315
- if (isColumnVisible && scrollEl) {
25192
+ const { el, isColumnVisible } = this;
25193
+ if (isColumnVisible) {
25316
25194
  // (Vertical offset from parent) - (three empty picker rows) + (half the height of the target to ensure the scroll triggers)
25317
25195
  const top = target.offsetTop - 3 * target.clientHeight + target.clientHeight / 2;
25318
- if (scrollEl.scrollTop !== top) {
25196
+ if (el.scrollTop !== top) {
25319
25197
  /**
25320
25198
  * Setting this flag prevents input
25321
25199
  * mode from exiting in the picker column's
@@ -25324,7 +25202,7 @@ class PickerColumn {
25324
25202
  * of these can cause a scroll to occur.
25325
25203
  */
25326
25204
  this.canExitInputMode = canExitInputMode;
25327
- scrollEl.scroll({
25205
+ el.scroll({
25328
25206
  top,
25329
25207
  left: 0,
25330
25208
  behavior: smooth ? 'smooth' : undefined,
@@ -25393,13 +25271,11 @@ class PickerColumn {
25393
25271
  * be disabled on Android.
25394
25272
  */
25395
25273
  const enableHaptics = isPlatform('ios');
25396
- const { el, scrollEl } = this;
25274
+ const { el } = this;
25397
25275
  let timeout;
25398
25276
  let activeEl = this.activeItem;
25399
25277
  const scrollCallback = () => {
25400
25278
  raf(() => {
25401
- if (!scrollEl)
25402
- return;
25403
25279
  if (timeout) {
25404
25280
  clearTimeout(timeout);
25405
25281
  timeout = undefined;
@@ -25412,54 +25288,21 @@ class PickerColumn {
25412
25288
  * Select item in the center of the column
25413
25289
  * which is the month/year that we want to select
25414
25290
  */
25415
- const bbox = scrollEl.getBoundingClientRect();
25291
+ const bbox = el.getBoundingClientRect();
25416
25292
  const centerX = bbox.x + bbox.width / 2;
25417
25293
  const centerY = bbox.y + bbox.height / 2;
25418
- /**
25419
- * elementFromPoint returns the top-most element.
25420
- * This means that if an ion-backdrop is overlaying the
25421
- * picker then the appropriate picker column option will
25422
- * not be selected. To account for this, we use elementsFromPoint
25423
- * and use an Array.find to find the appropriate column option
25424
- * at that point.
25425
- *
25426
- * Additionally, the picker column could be used in the
25427
- * Shadow DOM (i.e. in ion-datetime) so we need to make
25428
- * sure we are choosing the correct host otherwise
25429
- * the elements returns by elementsFromPoint will be
25430
- * retargeted. To account for this, we check to see
25431
- * if the picker column has a parent shadow root. If
25432
- * so, we use that shadow root when doing elementsFromPoint.
25433
- * Otherwise, we just use the document.
25434
- */
25435
- const rootNode = el.getRootNode();
25436
- const hasParentShadow = rootNode instanceof ShadowRoot;
25437
- const referenceNode = hasParentShadow ? rootNode : doc;
25438
- /**
25439
- * If the reference node is undefined
25440
- * then it's likely that doc is undefined
25441
- * due to being in an SSR environment.
25442
- */
25443
- if (referenceNode === undefined) {
25444
- return;
25445
- }
25446
- const elementsAtPoint = referenceNode.elementsFromPoint(centerX, centerY);
25447
- /**
25448
- * elementsFromPoint can returns multiple elements
25449
- * so find the relevant picker column option if one exists.
25450
- */
25451
- const newActiveElement = elementsAtPoint.find((el) => el.tagName === 'ION-PICKER-COLUMN-OPTION');
25452
- if (activeEl !== undefined) {
25294
+ const activeElement = el.shadowRoot.elementFromPoint(centerX, centerY);
25295
+ if (activeEl !== null) {
25453
25296
  this.setPickerItemActiveState(activeEl, false);
25454
25297
  }
25455
- if (newActiveElement === undefined || newActiveElement.disabled) {
25298
+ if (activeElement === null || activeElement.disabled) {
25456
25299
  return;
25457
25300
  }
25458
25301
  /**
25459
25302
  * If we are selecting a new value,
25460
25303
  * we need to run haptics again.
25461
25304
  */
25462
- if (newActiveElement !== activeEl) {
25305
+ if (activeElement !== activeEl) {
25463
25306
  enableHaptics && hapticSelectionChanged();
25464
25307
  if (this.canExitInputMode) {
25465
25308
  /**
@@ -25476,8 +25319,8 @@ class PickerColumn {
25476
25319
  this.exitInputMode();
25477
25320
  }
25478
25321
  }
25479
- activeEl = newActiveElement;
25480
- this.setPickerItemActiveState(newActiveElement, true);
25322
+ activeEl = activeElement;
25323
+ this.setPickerItemActiveState(activeElement, true);
25481
25324
  timeout = setTimeout(() => {
25482
25325
  this.isScrolling = false;
25483
25326
  enableHaptics && hapticSelectionEnd();
@@ -25499,7 +25342,20 @@ class PickerColumn {
25499
25342
  * case, we should exit input mode.
25500
25343
  */
25501
25344
  this.canExitInputMode = true;
25502
- this.setValue(newActiveElement.value);
25345
+ const dataIndex = activeElement.getAttribute('data-index');
25346
+ /**
25347
+ * If no value it is
25348
+ * possible we hit one of the
25349
+ * empty padding columns.
25350
+ */
25351
+ if (dataIndex === null) {
25352
+ return;
25353
+ }
25354
+ const index = parseInt(dataIndex, 10);
25355
+ const selectedItem = this.items[index];
25356
+ if (selectedItem.value !== this.value) {
25357
+ this.setValue(selectedItem.value);
25358
+ }
25503
25359
  }, 250);
25504
25360
  });
25505
25361
  };
@@ -25508,11 +25364,9 @@ class PickerColumn {
25508
25364
  * does not fire when component is initially shown.
25509
25365
  */
25510
25366
  raf(() => {
25511
- if (!scrollEl)
25512
- return;
25513
- scrollEl.addEventListener('scroll', scrollCallback);
25367
+ el.addEventListener('scroll', scrollCallback);
25514
25368
  this.destroyScrollListener = () => {
25515
- scrollEl.removeEventListener('scroll', scrollCallback);
25369
+ el.removeEventListener('scroll', scrollCallback);
25516
25370
  };
25517
25371
  });
25518
25372
  };
@@ -25589,586 +25443,597 @@ class PickerColumn {
25589
25443
  }
25590
25444
  };
25591
25445
  new IntersectionObserver(visibleCallback, { threshold: 0.001 }).observe(this.el);
25592
- const parentEl = (this.parentEl = this.el.closest('ion-picker'));
25446
+ const parentEl = (this.parentEl = this.el.closest('ion-picker-internal'));
25593
25447
  if (parentEl !== null) {
25594
25448
  // TODO(FW-2832): type
25595
25449
  parentEl.addEventListener('ionInputModeChange', (ev) => this.inputModeChange(ev));
25596
25450
  }
25597
25451
  }
25598
25452
  componentDidRender() {
25599
- const { el, activeItem, isColumnVisible, value } = this;
25600
- if (isColumnVisible && !activeItem) {
25601
- const firstOption = el.querySelector('ion-picker-column-option');
25602
- /**
25603
- * If the picker column does not have an active item and the current value
25604
- * does not match the first item in the picker column, that means
25605
- * the value is out of bounds. In this case, we assign the value to the
25606
- * first item to match the scroll position of the column.
25607
- *
25608
- */
25609
- if (firstOption !== null && firstOption.value !== value) {
25610
- this.setValue(firstOption.value);
25453
+ var _a;
25454
+ const { activeItem, items, isColumnVisible, value } = this;
25455
+ if (isColumnVisible) {
25456
+ if (activeItem) {
25457
+ this.scrollActiveItemIntoView();
25611
25458
  }
25612
- }
25613
- }
25614
- /** @internal */
25615
- async scrollActiveItemIntoView() {
25616
- const activeEl = this.activeItem;
25617
- if (activeEl) {
25618
- this.centerPickerItemInView(activeEl, false, false);
25619
- }
25620
- }
25621
- /**
25622
- * Sets the value prop and fires the ionChange event.
25623
- * This is used when we need to fire ionChange from
25624
- * user-generated events that cannot be caught with normal
25625
- * input/change event listeners.
25626
- * @internal
25627
- */
25628
- async setValue(value) {
25629
- if (this.value === value) {
25630
- return;
25631
- }
25632
- this.value = value;
25633
- this.ionChange.emit({ value });
25634
- }
25635
- /**
25636
- * Sets focus on the scrollable container within the picker column.
25637
- * Use this method instead of the global `pickerColumn.focus()`.
25638
- */
25639
- async setFocus() {
25640
- if (this.scrollEl) {
25641
- this.scrollEl.focus();
25642
- }
25643
- }
25644
- get activeItem() {
25645
- const { value } = this;
25646
- const options = Array.from(this.el.querySelectorAll('ion-picker-column-option'));
25647
- return options.find((option) => {
25648
- /**
25649
- * If the whole picker column is disabled, the current value should appear active
25650
- * If the current value item is specifically disabled, it should not appear active
25651
- */
25652
- if (!this.disabled && option.disabled) {
25653
- return false;
25459
+ else if (((_a = items[0]) === null || _a === void 0 ? void 0 : _a.value) !== value) {
25460
+ /**
25461
+ * If the picker column does not have an active item and the current value
25462
+ * does not match the first item in the picker column, that means
25463
+ * the value is out of bounds. In this case, we assign the value to the
25464
+ * first item to match the scroll position of the column.
25465
+ *
25466
+ */
25467
+ this.setValue(items[0].value);
25654
25468
  }
25655
- return option.value === value;
25656
- });
25657
- }
25658
- render() {
25659
- const { color, disabled: pickerDisabled, isActive, numericInput } = this;
25660
- const mode = getIonMode$1(this);
25661
- /**
25662
- * exportparts is needed so ion-datetime can expose the parts
25663
- * from two layers of shadow nesting. If this causes problems,
25664
- * the attribute can be moved to datetime.tsx and set on every
25665
- * instance of ion-picker-column there instead.
25666
- * TODO FW-5580 remove exportparts
25667
- */
25668
- return (hAsync(Host, { exportparts: `${PICKER_ITEM_PART}, ${PICKER_ITEM_ACTIVE_PART}`, disabled: pickerDisabled, class: createColorClasses$1(color, {
25669
- [mode]: true,
25670
- ['picker-column-active']: isActive,
25671
- ['picker-column-numeric-input']: numericInput,
25672
- }) }, hAsync("slot", { name: "prefix" }), hAsync("div", { class: "picker-opts", tabindex: pickerDisabled ? undefined : 0, ref: (el) => {
25673
- this.scrollEl = el;
25674
- } }, hAsync("div", { class: "picker-item picker-item-empty", "aria-hidden": "true" }, "\u00A0"), hAsync("div", { class: "picker-item picker-item-empty", "aria-hidden": "true" }, "\u00A0"), hAsync("div", { class: "picker-item picker-item-empty", "aria-hidden": "true" }, "\u00A0"), hAsync("slot", null), hAsync("div", { class: "picker-item picker-item-empty", "aria-hidden": "true" }, "\u00A0"), hAsync("div", { class: "picker-item picker-item-empty", "aria-hidden": "true" }, "\u00A0"), hAsync("div", { class: "picker-item picker-item-empty", "aria-hidden": "true" }, "\u00A0")), hAsync("slot", { name: "suffix" })));
25675
- }
25676
- get el() { return getElement(this); }
25677
- static get watchers() { return {
25678
- "value": ["valueChange"]
25679
- }; }
25680
- static get style() { return {
25681
- ios: pickerColumnIosCss$1,
25682
- md: pickerColumnMdCss$1
25683
- }; }
25684
- static get cmpMeta() { return {
25685
- "$flags$": 41,
25686
- "$tagName$": "ion-picker-column",
25687
- "$members$": {
25688
- "disabled": [4],
25689
- "items": [16],
25690
- "value": [1032],
25691
- "color": [513],
25692
- "numericInput": [4, "numeric-input"],
25693
- "isActive": [32],
25694
- "scrollActiveItemIntoView": [64],
25695
- "setValue": [64],
25696
- "setFocus": [64]
25697
- },
25698
- "$listeners$": undefined,
25699
- "$lazyBundleId$": "-",
25700
- "$attrsToReflect$": [["color", "color"]]
25701
- }; }
25702
- }
25703
- const PICKER_ITEM_ACTIVE_CLASS = 'option-active';
25704
- const PICKER_ITEM_PART = 'wheel-item';
25705
- const PICKER_ITEM_ACTIVE_PART = 'active';
25706
-
25707
- const pickerColumnIosCss = ".picker-col{display:-ms-flexbox;display:flex;position:relative;-ms-flex:1;flex:1;-ms-flex-pack:center;justify-content:center;height:100%;-webkit-box-sizing:content-box;box-sizing:content-box;contain:content}.picker-opts{position:relative;-ms-flex:1;flex:1;max-width:100%}.picker-opt{top:0;display:block;position:absolute;width:100%;border:0;text-align:center;text-overflow:ellipsis;white-space:nowrap;contain:strict;overflow:hidden;will-change:transform}@supports (inset-inline-start: 0){.picker-opt{inset-inline-start:0}}@supports not (inset-inline-start: 0){.picker-opt{left:0}:host-context([dir=rtl]) .picker-opt{left:unset;right:unset;right:0}[dir=rtl] .picker-opt{left:unset;right:unset;right:0}@supports selector(:dir(rtl)){.picker-opt:dir(rtl){left:unset;right:unset;right:0}}}.picker-opt.picker-opt-disabled{pointer-events:none}.picker-opt-disabled{opacity:0}.picker-opts-left{-ms-flex-pack:start;justify-content:flex-start}.picker-opts-right{-ms-flex-pack:end;justify-content:flex-end}.picker-opt:active,.picker-opt:focus{outline:none}.picker-prefix{position:relative;-ms-flex:1;flex:1;text-align:end;white-space:nowrap}.picker-suffix{position:relative;-ms-flex:1;flex:1;text-align:start;white-space:nowrap}.picker-col{-webkit-padding-start:4px;padding-inline-start:4px;-webkit-padding-end:4px;padding-inline-end:4px;padding-top:0;padding-bottom:0;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}.picker-prefix,.picker-suffix,.picker-opts{top:77px;-webkit-transform-style:preserve-3d;transform-style:preserve-3d;color:inherit;font-size:20px;line-height:42px;pointer-events:none}.picker-opt{padding-left:0;padding-right:0;padding-top:0;padding-bottom:0;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;-webkit-transform-origin:center center;transform-origin:center center;height:46px;-webkit-transform-style:preserve-3d;transform-style:preserve-3d;-webkit-transition-timing-function:ease-out;transition-timing-function:ease-out;background:transparent;color:inherit;font-size:20px;line-height:42px;-webkit-backface-visibility:hidden;backface-visibility:hidden;pointer-events:auto}:host-context([dir=rtl]) .picker-opt{-webkit-transform-origin:calc(100% - center) center;transform-origin:calc(100% - center) center}[dir=rtl] .picker-opt{-webkit-transform-origin:calc(100% - center) center;transform-origin:calc(100% - center) center}@supports selector(:dir(rtl)){.picker-opt:dir(rtl){-webkit-transform-origin:calc(100% - center) center;transform-origin:calc(100% - center) center}}";
25708
-
25709
- const pickerColumnMdCss = ".picker-col{display:-ms-flexbox;display:flex;position:relative;-ms-flex:1;flex:1;-ms-flex-pack:center;justify-content:center;height:100%;-webkit-box-sizing:content-box;box-sizing:content-box;contain:content}.picker-opts{position:relative;-ms-flex:1;flex:1;max-width:100%}.picker-opt{top:0;display:block;position:absolute;width:100%;border:0;text-align:center;text-overflow:ellipsis;white-space:nowrap;contain:strict;overflow:hidden;will-change:transform}@supports (inset-inline-start: 0){.picker-opt{inset-inline-start:0}}@supports not (inset-inline-start: 0){.picker-opt{left:0}:host-context([dir=rtl]) .picker-opt{left:unset;right:unset;right:0}[dir=rtl] .picker-opt{left:unset;right:unset;right:0}@supports selector(:dir(rtl)){.picker-opt:dir(rtl){left:unset;right:unset;right:0}}}.picker-opt.picker-opt-disabled{pointer-events:none}.picker-opt-disabled{opacity:0}.picker-opts-left{-ms-flex-pack:start;justify-content:flex-start}.picker-opts-right{-ms-flex-pack:end;justify-content:flex-end}.picker-opt:active,.picker-opt:focus{outline:none}.picker-prefix{position:relative;-ms-flex:1;flex:1;text-align:end;white-space:nowrap}.picker-suffix{position:relative;-ms-flex:1;flex:1;text-align:start;white-space:nowrap}.picker-col{-webkit-padding-start:8px;padding-inline-start:8px;-webkit-padding-end:8px;padding-inline-end:8px;padding-top:0;padding-bottom:0;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}.picker-prefix,.picker-suffix,.picker-opts{top:77px;-webkit-transform-style:preserve-3d;transform-style:preserve-3d;color:inherit;font-size:22px;line-height:42px;pointer-events:none}.picker-opt{margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;padding-left:0;padding-right:0;padding-top:0;padding-bottom:0;height:43px;-webkit-transition-timing-function:ease-out;transition-timing-function:ease-out;background:transparent;color:inherit;font-size:22px;line-height:42px;-webkit-backface-visibility:hidden;backface-visibility:hidden;pointer-events:auto}.picker-prefix,.picker-suffix,.picker-opt.picker-opt-selected{color:var(--ion-color-primary, #3880ff)}";
25710
-
25711
- /**
25712
- * @internal
25713
- */
25714
- class PickerColumnCmp {
25715
- constructor(hostRef) {
25716
- registerInstance(this, hostRef);
25717
- this.ionPickerColChange = createEvent(this, "ionPickerColChange", 7);
25718
- this.optHeight = 0;
25719
- this.rotateFactor = 0;
25720
- this.scaleFactor = 1;
25721
- this.velocity = 0;
25722
- this.y = 0;
25723
- this.noAnimate = true;
25724
- // `colDidChange` is a flag that gets set when the column is changed
25725
- // dynamically. When this flag is set, the column will refresh
25726
- // after the component re-renders to incorporate the new column data.
25727
- // This is necessary because `this.refresh` queries for the option elements,
25728
- // so it needs to wait for the latest elements to be available in the DOM.
25729
- // Ex: column is created with 3 options. User updates the column data
25730
- // to have 5 options. The column will still think it only has 3 options.
25731
- this.colDidChange = false;
25732
- this.col = undefined;
25733
- }
25734
- colChanged() {
25735
- this.colDidChange = true;
25736
- }
25737
- async connectedCallback() {
25738
- let pickerRotateFactor = 0;
25739
- let pickerScaleFactor = 0.81;
25740
- const mode = getIonMode$1(this);
25741
- if (mode === 'ios') {
25742
- pickerRotateFactor = -0.46;
25743
- pickerScaleFactor = 1;
25744
25469
  }
25745
- this.rotateFactor = pickerRotateFactor;
25746
- this.scaleFactor = pickerScaleFactor;
25747
- this.gesture = (await Promise.resolve().then(function () { return index; })).createGesture({
25748
- el: this.el,
25749
- gestureName: 'picker-swipe',
25750
- gesturePriority: 100,
25751
- threshold: 0,
25752
- passive: false,
25753
- onStart: (ev) => this.onStart(ev),
25754
- onMove: (ev) => this.onMove(ev),
25755
- onEnd: (ev) => this.onEnd(ev),
25756
- });
25757
- this.gesture.enable();
25758
- // Options have not been initialized yet
25759
- // Animation must be disabled through the `noAnimate` flag
25760
- // Otherwise, the options will render
25761
- // at the top of the column and transition down
25762
- this.tmrId = setTimeout(() => {
25763
- this.noAnimate = false;
25764
- // After initialization, `refresh()` will be called
25765
- // At this point, animation will be enabled. The options will
25766
- // animate as they are being selected.
25767
- this.refresh(true);
25768
- }, 250);
25769
- }
25770
- componentDidLoad() {
25771
- this.onDomChange();
25772
- }
25773
- componentDidUpdate() {
25774
- // Options may have changed since last update.
25775
- if (this.colDidChange) {
25776
- // Animation must be disabled through the `onDomChange` parameter.
25777
- // Otherwise, the recently added options will render
25778
- // at the top of the column and transition down
25779
- this.onDomChange(true, false);
25780
- this.colDidChange = false;
25470
+ }
25471
+ /** @internal */
25472
+ async scrollActiveItemIntoView() {
25473
+ const activeEl = this.activeItem;
25474
+ if (activeEl) {
25475
+ this.centerPickerItemInView(activeEl, false, false);
25781
25476
  }
25782
25477
  }
25783
- disconnectedCallback() {
25784
- if (this.rafId !== undefined)
25785
- cancelAnimationFrame(this.rafId);
25786
- if (this.tmrId)
25787
- clearTimeout(this.tmrId);
25788
- if (this.gesture) {
25789
- this.gesture.destroy();
25790
- this.gesture = undefined;
25478
+ /**
25479
+ * Sets the value prop and fires the ionChange event.
25480
+ * This is used when we need to fire ionChange from
25481
+ * user-generated events that cannot be caught with normal
25482
+ * input/change event listeners.
25483
+ * @internal
25484
+ */
25485
+ async setValue(value) {
25486
+ const { items } = this;
25487
+ this.value = value;
25488
+ const findItem = items.find((item) => item.value === value && item.disabled !== true);
25489
+ if (findItem) {
25490
+ this.ionChange.emit(findItem);
25791
25491
  }
25792
25492
  }
25793
- emitColChange() {
25794
- this.ionPickerColChange.emit(this.col);
25493
+ get activeItem() {
25494
+ // If the whole picker column is disabled, the current value should appear active
25495
+ // If the current value item is specifically disabled, it should not appear active
25496
+ const selector = `.picker-item[data-value="${this.value}"]${this.disabled ? '' : ':not([disabled])'}`;
25497
+ return getElementRoot(this.el).querySelector(selector);
25795
25498
  }
25796
- setSelected(selectedIndex, duration) {
25797
- // if there is a selected index, then figure out it's y position
25798
- // if there isn't a selected index, then just use the top y position
25799
- const y = selectedIndex > -1 ? -(selectedIndex * this.optHeight) : 0;
25800
- this.velocity = 0;
25801
- // set what y position we're at
25802
- if (this.rafId !== undefined)
25803
- cancelAnimationFrame(this.rafId);
25804
- this.update(y, duration, true);
25805
- this.emitColChange();
25499
+ render() {
25500
+ const { items, color, disabled: pickerDisabled, isActive, numericInput } = this;
25501
+ const mode = getIonMode$1(this);
25502
+ /**
25503
+ * exportparts is needed so ion-datetime can expose the parts
25504
+ * from two layers of shadow nesting. If this causes problems,
25505
+ * the attribute can be moved to datetime.tsx and set on every
25506
+ * instance of ion-picker-column-internal there instead.
25507
+ */
25508
+ return (hAsync(Host, { exportparts: `${PICKER_ITEM_PART}, ${PICKER_ITEM_ACTIVE_PART}`, disabled: pickerDisabled, tabindex: pickerDisabled ? null : 0, class: createColorClasses$1(color, {
25509
+ [mode]: true,
25510
+ ['picker-column-active']: isActive,
25511
+ ['picker-column-numeric-input']: numericInput,
25512
+ }) }, hAsync("div", { class: "picker-item picker-item-empty", "aria-hidden": "true" }, "\u00A0"), hAsync("div", { class: "picker-item picker-item-empty", "aria-hidden": "true" }, "\u00A0"), hAsync("div", { class: "picker-item picker-item-empty", "aria-hidden": "true" }, "\u00A0"), items.map((item, index) => {
25513
+ const isItemDisabled = pickerDisabled || item.disabled || false;
25514
+ return (hAsync("button", { tabindex: "-1", class: {
25515
+ 'picker-item': true,
25516
+ }, "data-value": item.value, "data-index": index, onClick: (ev) => {
25517
+ this.centerPickerItemInView(ev.target, true);
25518
+ }, disabled: isItemDisabled, part: PICKER_ITEM_PART }, item.text));
25519
+ }), hAsync("div", { class: "picker-item picker-item-empty", "aria-hidden": "true" }, "\u00A0"), hAsync("div", { class: "picker-item picker-item-empty", "aria-hidden": "true" }, "\u00A0"), hAsync("div", { class: "picker-item picker-item-empty", "aria-hidden": "true" }, "\u00A0")));
25806
25520
  }
25807
- update(y, duration, saveY) {
25808
- if (!this.optsEl) {
25809
- return;
25810
- }
25811
- // ensure we've got a good round number :)
25812
- let translateY = 0;
25813
- let translateZ = 0;
25814
- const { col, rotateFactor } = this;
25815
- const prevSelected = col.selectedIndex;
25816
- const selectedIndex = (col.selectedIndex = this.indexForY(-y));
25817
- const durationStr = duration === 0 ? '' : duration + 'ms';
25818
- const scaleStr = `scale(${this.scaleFactor})`;
25819
- const children = this.optsEl.children;
25820
- for (let i = 0; i < children.length; i++) {
25821
- const button = children[i];
25822
- const opt = col.options[i];
25823
- const optOffset = i * this.optHeight + y;
25824
- let transform = '';
25825
- if (rotateFactor !== 0) {
25826
- const rotateX = optOffset * rotateFactor;
25827
- if (Math.abs(rotateX) <= 90) {
25828
- translateY = 0;
25829
- translateZ = 90;
25830
- transform = `rotateX(${rotateX}deg) `;
25521
+ get el() { return getElement(this); }
25522
+ static get watchers() { return {
25523
+ "value": ["valueChange"]
25524
+ }; }
25525
+ static get style() { return {
25526
+ ios: pickerColumnInternalIosCss,
25527
+ md: pickerColumnInternalMdCss
25528
+ }; }
25529
+ static get cmpMeta() { return {
25530
+ "$flags$": 41,
25531
+ "$tagName$": "ion-picker-column-internal",
25532
+ "$members$": {
25533
+ "disabled": [4],
25534
+ "items": [16],
25535
+ "value": [1032],
25536
+ "color": [513],
25537
+ "numericInput": [4, "numeric-input"],
25538
+ "isActive": [32],
25539
+ "scrollActiveItemIntoView": [64],
25540
+ "setValue": [64]
25541
+ },
25542
+ "$listeners$": undefined,
25543
+ "$lazyBundleId$": "-",
25544
+ "$attrsToReflect$": [["color", "color"]]
25545
+ }; }
25546
+ }
25547
+ const PICKER_ITEM_ACTIVE_CLASS = 'picker-item-active';
25548
+ const PICKER_ITEM_PART = 'wheel-item';
25549
+ const PICKER_ITEM_ACTIVE_PART = 'active';
25550
+
25551
+ const pickerInternalIosCss = "/*!@:host*/.sc-ion-picker-internal-ios-h{display:-ms-flexbox;display:flex;position:relative;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:100%;height:200px;direction:ltr;z-index:0}/*!@:host .picker-before,\n:host .picker-after*/.sc-ion-picker-internal-ios-h .picker-before.sc-ion-picker-internal-ios,.sc-ion-picker-internal-ios-h .picker-after.sc-ion-picker-internal-ios{position:absolute;width:100%;-webkit-transform:translateZ(0);transform:translateZ(0);z-index:1;pointer-events:none}/*!@:host .picker-before*/.sc-ion-picker-internal-ios-h .picker-before.sc-ion-picker-internal-ios{top:0;height:83px}@supports (inset-inline-start: 0){/*!@:host .picker-before*/.sc-ion-picker-internal-ios-h .picker-before.sc-ion-picker-internal-ios{inset-inline-start:0}}@supports not (inset-inline-start: 0){/*!@:host .picker-before*/.sc-ion-picker-internal-ios-h .picker-before.sc-ion-picker-internal-ios{left:0}/*!@:host-context([dir=rtl]) .picker-before*/[dir=rtl].sc-ion-picker-internal-ios-h .picker-before.sc-ion-picker-internal-ios,[dir=rtl] .sc-ion-picker-internal-ios-h .picker-before.sc-ion-picker-internal-ios{left:unset;right:unset;right:0}/*!@@supports selector(:dir(rtl))*/@supports .sc-ion-picker-internal-ios selector(.sc-ion-picker-internal-ios:dir(rtl)){.sc-ion-picker-internal-ios-h:dir(rtl) .picker-before{left:unset;right:unset;right:0}}}/*!@:host .picker-after*/.sc-ion-picker-internal-ios-h .picker-after.sc-ion-picker-internal-ios{top:116px;height:84px}@supports (inset-inline-start: 0){/*!@:host .picker-after*/.sc-ion-picker-internal-ios-h .picker-after.sc-ion-picker-internal-ios{inset-inline-start:0}}@supports not (inset-inline-start: 0){/*!@:host .picker-after*/.sc-ion-picker-internal-ios-h .picker-after.sc-ion-picker-internal-ios{left:0}/*!@:host-context([dir=rtl]) .picker-after*/[dir=rtl].sc-ion-picker-internal-ios-h .picker-after.sc-ion-picker-internal-ios,[dir=rtl] .sc-ion-picker-internal-ios-h .picker-after.sc-ion-picker-internal-ios{left:unset;right:unset;right:0}/*!@@supports selector(:dir(rtl))*/@supports .sc-ion-picker-internal-ios selector(.sc-ion-picker-internal-ios:dir(rtl)){.sc-ion-picker-internal-ios-h:dir(rtl) .picker-after{left:unset;right:unset;right:0}}}/*!@:host .picker-highlight*/.sc-ion-picker-internal-ios-h .picker-highlight.sc-ion-picker-internal-ios{border-radius:8px;left:0;right:0;top:50%;bottom:0;-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto;margin-top:0;margin-bottom:0;position:absolute;width:calc(100% - 16px);height:34px;-webkit-transform:translateY(-50%);transform:translateY(-50%);background:var(--wheel-highlight-background);z-index:-1}/*!@:host input*/.sc-ion-picker-internal-ios-h input.sc-ion-picker-internal-ios{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}/*!@:host ::slotted(ion-picker-column-internal:first-of-type)*/.sc-ion-picker-internal-ios-h .sc-ion-picker-internal-ios-s>ion-picker-column-internal:first-of-type{text-align:start}/*!@:host ::slotted(ion-picker-column-internal:last-of-type)*/.sc-ion-picker-internal-ios-h .sc-ion-picker-internal-ios-s>ion-picker-column-internal:last-of-type{text-align:end}/*!@:host ::slotted(ion-picker-column-internal:only-child)*/.sc-ion-picker-internal-ios-h .sc-ion-picker-internal-ios-s>ion-picker-column-internal:only-child{text-align:center}/*!@:host .picker-before*/.sc-ion-picker-internal-ios-h .picker-before.sc-ion-picker-internal-ios{background:-webkit-gradient(linear, left top, left bottom, color-stop(20%, rgba(var(--wheel-fade-background-rgb, var(--background-rgb, var(--ion-background-color-rgb, 255, 255, 255))), 1)), to(rgba(var(--wheel-fade-background-rgb, var(--background-rgb, var(--ion-background-color-rgb, 255, 255, 255))), 0.8)));background:linear-gradient(to bottom, rgba(var(--wheel-fade-background-rgb, var(--background-rgb, var(--ion-background-color-rgb, 255, 255, 255))), 1) 20%, rgba(var(--wheel-fade-background-rgb, var(--background-rgb, var(--ion-background-color-rgb, 255, 255, 255))), 0.8) 100%)}/*!@:host .picker-after*/.sc-ion-picker-internal-ios-h .picker-after.sc-ion-picker-internal-ios{background:-webkit-gradient(linear, left bottom, left top, color-stop(20%, rgba(var(--wheel-fade-background-rgb, var(--background-rgb, var(--ion-background-color-rgb, 255, 255, 255))), 1)), to(rgba(var(--wheel-fade-background-rgb, var(--background-rgb, var(--ion-background-color-rgb, 255, 255, 255))), 0.8)));background:linear-gradient(to top, rgba(var(--wheel-fade-background-rgb, var(--background-rgb, var(--ion-background-color-rgb, 255, 255, 255))), 1) 20%, rgba(var(--wheel-fade-background-rgb, var(--background-rgb, var(--ion-background-color-rgb, 255, 255, 255))), 0.8) 100%)}/*!@:host .picker-highlight*/.sc-ion-picker-internal-ios-h .picker-highlight.sc-ion-picker-internal-ios{background:var(--wheel-highlight-background, var(--ion-color-step-150, #eeeeef))}";
25552
+
25553
+ const pickerInternalMdCss = "/*!@:host*/.sc-ion-picker-internal-md-h{display:-ms-flexbox;display:flex;position:relative;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:100%;height:200px;direction:ltr;z-index:0}/*!@:host .picker-before,\n:host .picker-after*/.sc-ion-picker-internal-md-h .picker-before.sc-ion-picker-internal-md,.sc-ion-picker-internal-md-h .picker-after.sc-ion-picker-internal-md{position:absolute;width:100%;-webkit-transform:translateZ(0);transform:translateZ(0);z-index:1;pointer-events:none}/*!@:host .picker-before*/.sc-ion-picker-internal-md-h .picker-before.sc-ion-picker-internal-md{top:0;height:83px}@supports (inset-inline-start: 0){/*!@:host .picker-before*/.sc-ion-picker-internal-md-h .picker-before.sc-ion-picker-internal-md{inset-inline-start:0}}@supports not (inset-inline-start: 0){/*!@:host .picker-before*/.sc-ion-picker-internal-md-h .picker-before.sc-ion-picker-internal-md{left:0}/*!@:host-context([dir=rtl]) .picker-before*/[dir=rtl].sc-ion-picker-internal-md-h .picker-before.sc-ion-picker-internal-md,[dir=rtl] .sc-ion-picker-internal-md-h .picker-before.sc-ion-picker-internal-md{left:unset;right:unset;right:0}/*!@@supports selector(:dir(rtl))*/@supports .sc-ion-picker-internal-md selector(.sc-ion-picker-internal-md:dir(rtl)){.sc-ion-picker-internal-md-h:dir(rtl) .picker-before{left:unset;right:unset;right:0}}}/*!@:host .picker-after*/.sc-ion-picker-internal-md-h .picker-after.sc-ion-picker-internal-md{top:116px;height:84px}@supports (inset-inline-start: 0){/*!@:host .picker-after*/.sc-ion-picker-internal-md-h .picker-after.sc-ion-picker-internal-md{inset-inline-start:0}}@supports not (inset-inline-start: 0){/*!@:host .picker-after*/.sc-ion-picker-internal-md-h .picker-after.sc-ion-picker-internal-md{left:0}/*!@:host-context([dir=rtl]) .picker-after*/[dir=rtl].sc-ion-picker-internal-md-h .picker-after.sc-ion-picker-internal-md,[dir=rtl] .sc-ion-picker-internal-md-h .picker-after.sc-ion-picker-internal-md{left:unset;right:unset;right:0}/*!@@supports selector(:dir(rtl))*/@supports .sc-ion-picker-internal-md selector(.sc-ion-picker-internal-md:dir(rtl)){.sc-ion-picker-internal-md-h:dir(rtl) .picker-after{left:unset;right:unset;right:0}}}/*!@:host .picker-highlight*/.sc-ion-picker-internal-md-h .picker-highlight.sc-ion-picker-internal-md{border-radius:8px;left:0;right:0;top:50%;bottom:0;-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto;margin-top:0;margin-bottom:0;position:absolute;width:calc(100% - 16px);height:34px;-webkit-transform:translateY(-50%);transform:translateY(-50%);background:var(--wheel-highlight-background);z-index:-1}/*!@:host input*/.sc-ion-picker-internal-md-h input.sc-ion-picker-internal-md{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}/*!@:host ::slotted(ion-picker-column-internal:first-of-type)*/.sc-ion-picker-internal-md-h .sc-ion-picker-internal-md-s>ion-picker-column-internal:first-of-type{text-align:start}/*!@:host ::slotted(ion-picker-column-internal:last-of-type)*/.sc-ion-picker-internal-md-h .sc-ion-picker-internal-md-s>ion-picker-column-internal:last-of-type{text-align:end}/*!@:host ::slotted(ion-picker-column-internal:only-child)*/.sc-ion-picker-internal-md-h .sc-ion-picker-internal-md-s>ion-picker-column-internal:only-child{text-align:center}/*!@:host .picker-before*/.sc-ion-picker-internal-md-h .picker-before.sc-ion-picker-internal-md{background:-webkit-gradient(linear, left top, left bottom, color-stop(20%, rgba(var(--wheel-fade-background-rgb, var(--background-rgb, var(--ion-background-color-rgb, 255, 255, 255))), 1)), color-stop(90%, rgba(var(--wheel-fade-background-rgb, var(--background-rgb, var(--ion-background-color-rgb, 255, 255, 255))), 0)));background:linear-gradient(to bottom, rgba(var(--wheel-fade-background-rgb, var(--background-rgb, var(--ion-background-color-rgb, 255, 255, 255))), 1) 20%, rgba(var(--wheel-fade-background-rgb, var(--background-rgb, var(--ion-background-color-rgb, 255, 255, 255))), 0) 90%)}/*!@:host .picker-after*/.sc-ion-picker-internal-md-h .picker-after.sc-ion-picker-internal-md{background:-webkit-gradient(linear, left bottom, left top, color-stop(30%, rgba(var(--wheel-fade-background-rgb, var(--background-rgb, var(--ion-background-color-rgb, 255, 255, 255))), 1)), color-stop(90%, rgba(var(--wheel-fade-background-rgb, var(--background-rgb, var(--ion-background-color-rgb, 255, 255, 255))), 0)));background:linear-gradient(to top, rgba(var(--wheel-fade-background-rgb, var(--background-rgb, var(--ion-background-color-rgb, 255, 255, 255))), 1) 30%, rgba(var(--wheel-fade-background-rgb, var(--background-rgb, var(--ion-background-color-rgb, 255, 255, 255))), 0) 90%)}";
25554
+
25555
+ /**
25556
+ * @virtualProp {"ios" | "md"} mode - The mode determines which platform styles to use.
25557
+ * @internal
25558
+ */
25559
+ class PickerInternal {
25560
+ constructor(hostRef) {
25561
+ registerInstance(this, hostRef);
25562
+ this.ionInputModeChange = createEvent(this, "ionInputModeChange", 7);
25563
+ this.useInputMode = false;
25564
+ this.isInHighlightBounds = (ev) => {
25565
+ const { highlightEl } = this;
25566
+ if (!highlightEl) {
25567
+ return false;
25568
+ }
25569
+ const bbox = highlightEl.getBoundingClientRect();
25570
+ /**
25571
+ * Check to see if the user clicked
25572
+ * outside the bounds of the highlight.
25573
+ */
25574
+ const outsideX = ev.clientX < bbox.left || ev.clientX > bbox.right;
25575
+ const outsideY = ev.clientY < bbox.top || ev.clientY > bbox.bottom;
25576
+ if (outsideX || outsideY) {
25577
+ return false;
25578
+ }
25579
+ return true;
25580
+ };
25581
+ /**
25582
+ * If we are no longer focused
25583
+ * on a picker column, then we should
25584
+ * exit input mode. An exception is made
25585
+ * for the input in the picker since having
25586
+ * that focused means we are still in input mode.
25587
+ */
25588
+ this.onFocusOut = (ev) => {
25589
+ // TODO(FW-2832): type
25590
+ const { relatedTarget } = ev;
25591
+ if (!relatedTarget || (relatedTarget.tagName !== 'ION-PICKER-COLUMN-INTERNAL' && relatedTarget !== this.inputEl)) {
25592
+ this.exitInputMode();
25593
+ }
25594
+ };
25595
+ /**
25596
+ * When picker columns receive focus
25597
+ * the parent picker needs to determine
25598
+ * whether to enter/exit input mode.
25599
+ */
25600
+ this.onFocusIn = (ev) => {
25601
+ // TODO(FW-2832): type
25602
+ const { target } = ev;
25603
+ /**
25604
+ * Due to browser differences in how/when focus
25605
+ * is dispatched on certain elements, we need to
25606
+ * make sure that this function only ever runs when
25607
+ * focusing a picker column.
25608
+ */
25609
+ if (target.tagName !== 'ION-PICKER-COLUMN-INTERNAL') {
25610
+ return;
25611
+ }
25612
+ /**
25613
+ * If we have actionOnClick
25614
+ * then this means the user focused
25615
+ * a picker column via mouse or
25616
+ * touch (i.e. a PointerEvent). As a result,
25617
+ * we should not enter/exit input mode
25618
+ * until the click event has fired, which happens
25619
+ * after the `focusin` event.
25620
+ *
25621
+ * Otherwise, the user likely focused
25622
+ * the column using their keyboard and
25623
+ * we should enter/exit input mode automatically.
25624
+ */
25625
+ if (!this.actionOnClick) {
25626
+ const columnEl = target;
25627
+ const allowInput = columnEl.numericInput;
25628
+ if (allowInput) {
25629
+ this.enterInputMode(columnEl, false);
25831
25630
  }
25832
25631
  else {
25833
- translateY = -9999;
25632
+ this.exitInputMode();
25834
25633
  }
25835
25634
  }
25836
- else {
25837
- translateZ = 0;
25838
- translateY = optOffset;
25839
- }
25840
- const selected = selectedIndex === i;
25841
- transform += `translate3d(0px,${translateY}px,${translateZ}px) `;
25842
- if (this.scaleFactor !== 1 && !selected) {
25843
- transform += scaleStr;
25635
+ };
25636
+ /**
25637
+ * On click we need to run an actionOnClick
25638
+ * function that has been set in onPointerDown
25639
+ * so that we enter/exit input mode correctly.
25640
+ */
25641
+ this.onClick = () => {
25642
+ const { actionOnClick } = this;
25643
+ if (actionOnClick) {
25644
+ actionOnClick();
25645
+ this.actionOnClick = undefined;
25844
25646
  }
25845
- // Update transition duration
25846
- if (this.noAnimate) {
25847
- opt.duration = 0;
25848
- button.style.transitionDuration = '';
25647
+ };
25648
+ /**
25649
+ * Clicking a column also focuses the column on
25650
+ * certain browsers, so we use onPointerDown
25651
+ * to tell the onFocusIn function that users
25652
+ * are trying to click the column rather than
25653
+ * focus the column using the keyboard. When the
25654
+ * user completes the click, the onClick function
25655
+ * runs and runs the actionOnClick callback.
25656
+ */
25657
+ this.onPointerDown = (ev) => {
25658
+ const { useInputMode, inputModeColumn, el } = this;
25659
+ if (this.isInHighlightBounds(ev)) {
25660
+ /**
25661
+ * If we were already in
25662
+ * input mode, then we should determine
25663
+ * if we tapped a particular column and
25664
+ * should switch to input mode for
25665
+ * that specific column.
25666
+ */
25667
+ if (useInputMode) {
25668
+ /**
25669
+ * If we tapped a picker column
25670
+ * then we should either switch to input
25671
+ * mode for that column or all columns.
25672
+ * Otherwise we should exit input mode
25673
+ * since we just tapped the highlight and
25674
+ * not a column.
25675
+ */
25676
+ if (ev.target.tagName === 'ION-PICKER-COLUMN-INTERNAL') {
25677
+ /**
25678
+ * If user taps 2 different columns
25679
+ * then we should just switch to input mode
25680
+ * for the new column rather than switching to
25681
+ * input mode for all columns.
25682
+ */
25683
+ if (inputModeColumn && inputModeColumn === ev.target) {
25684
+ this.actionOnClick = () => {
25685
+ this.enterInputMode();
25686
+ };
25687
+ }
25688
+ else {
25689
+ this.actionOnClick = () => {
25690
+ this.enterInputMode(ev.target);
25691
+ };
25692
+ }
25693
+ }
25694
+ else {
25695
+ this.actionOnClick = () => {
25696
+ this.exitInputMode();
25697
+ };
25698
+ }
25699
+ /**
25700
+ * If we were not already in
25701
+ * input mode, then we should
25702
+ * enter input mode for all columns.
25703
+ */
25704
+ }
25705
+ else {
25706
+ /**
25707
+ * If there is only 1 numeric input column
25708
+ * then we should skip multi column input.
25709
+ */
25710
+ const columns = el.querySelectorAll('ion-picker-column-internal.picker-column-numeric-input');
25711
+ const columnEl = columns.length === 1 ? ev.target : undefined;
25712
+ this.actionOnClick = () => {
25713
+ this.enterInputMode(columnEl);
25714
+ };
25715
+ }
25716
+ return;
25849
25717
  }
25850
- else if (duration !== opt.duration) {
25851
- opt.duration = duration;
25852
- button.style.transitionDuration = durationStr;
25718
+ this.actionOnClick = () => {
25719
+ this.exitInputMode();
25720
+ };
25721
+ };
25722
+ /**
25723
+ * Enters input mode to allow
25724
+ * for text entry of numeric values.
25725
+ * If on mobile, we focus a hidden input
25726
+ * field so that the on screen keyboard
25727
+ * is brought up. When tabbing using a
25728
+ * keyboard, picker columns receive an outline
25729
+ * to indicate they are focused. As a result,
25730
+ * we should not focus the hidden input as it
25731
+ * would cause the outline to go away, preventing
25732
+ * users from having any visual indication of which
25733
+ * column is focused.
25734
+ */
25735
+ this.enterInputMode = (columnEl, focusInput = true) => {
25736
+ const { inputEl, el } = this;
25737
+ if (!inputEl) {
25738
+ return;
25853
25739
  }
25854
- // Update transform
25855
- if (transform !== opt.transform) {
25856
- opt.transform = transform;
25740
+ /**
25741
+ * Only active input mode if there is at
25742
+ * least one column that accepts numeric input.
25743
+ */
25744
+ const hasInputColumn = el.querySelector('ion-picker-column-internal.picker-column-numeric-input');
25745
+ if (!hasInputColumn) {
25746
+ return;
25857
25747
  }
25858
- button.style.transform = transform;
25859
25748
  /**
25860
- * Ensure that the select column
25861
- * item has the selected class
25749
+ * If columnEl is undefined then
25750
+ * it is assumed that all numeric pickers
25751
+ * are eligible for text entry.
25752
+ * (i.e. hour and minute columns)
25862
25753
  */
25863
- opt.selected = selected;
25864
- if (selected) {
25865
- button.classList.add(PICKER_OPT_SELECTED);
25754
+ this.useInputMode = true;
25755
+ this.inputModeColumn = columnEl;
25756
+ /**
25757
+ * Users with a keyboard and mouse can
25758
+ * activate input mode where the input is
25759
+ * focused as well as when it is not focused,
25760
+ * so we need to make sure we clean up any
25761
+ * old listeners.
25762
+ */
25763
+ if (focusInput) {
25764
+ if (this.destroyKeypressListener) {
25765
+ this.destroyKeypressListener();
25766
+ this.destroyKeypressListener = undefined;
25767
+ }
25768
+ inputEl.focus();
25866
25769
  }
25867
25770
  else {
25868
- button.classList.remove(PICKER_OPT_SELECTED);
25771
+ el.addEventListener('keypress', this.onKeyPress);
25772
+ this.destroyKeypressListener = () => {
25773
+ el.removeEventListener('keypress', this.onKeyPress);
25774
+ };
25869
25775
  }
25870
- }
25871
- this.col.prevSelected = prevSelected;
25872
- if (saveY) {
25873
- this.y = y;
25874
- }
25875
- if (this.lastIndex !== selectedIndex) {
25876
- // have not set a last index yet
25877
- hapticSelectionChanged();
25878
- this.lastIndex = selectedIndex;
25879
- }
25880
- }
25881
- decelerate() {
25882
- if (this.velocity !== 0) {
25883
- // still decelerating
25884
- this.velocity *= DECELERATION_FRICTION;
25885
- // do not let it go slower than a velocity of 1
25886
- this.velocity = this.velocity > 0 ? Math.max(this.velocity, 1) : Math.min(this.velocity, -1);
25887
- let y = this.y + this.velocity;
25888
- if (y > this.minY) {
25889
- // whoops, it's trying to scroll up farther than the options we have!
25890
- y = this.minY;
25891
- this.velocity = 0;
25776
+ this.emitInputModeChange();
25777
+ };
25778
+ this.onKeyPress = (ev) => {
25779
+ const { inputEl } = this;
25780
+ if (!inputEl) {
25781
+ return;
25892
25782
  }
25893
- else if (y < this.maxY) {
25894
- // gahh, it's trying to scroll down farther than we can!
25895
- y = this.maxY;
25896
- this.velocity = 0;
25783
+ const parsedValue = parseInt(ev.key, 10);
25784
+ /**
25785
+ * Only numbers should be allowed
25786
+ */
25787
+ if (!Number.isNaN(parsedValue)) {
25788
+ inputEl.value += ev.key;
25789
+ this.onInputChange();
25897
25790
  }
25898
- this.update(y, 0, true);
25899
- const notLockedIn = Math.round(y) % this.optHeight !== 0 || Math.abs(this.velocity) > 1;
25900
- if (notLockedIn) {
25901
- // isn't locked in yet, keep decelerating until it is
25902
- this.rafId = requestAnimationFrame(() => this.decelerate());
25791
+ };
25792
+ this.selectSingleColumn = () => {
25793
+ const { inputEl, inputModeColumn, singleColumnSearchTimeout } = this;
25794
+ if (!inputEl || !inputModeColumn) {
25795
+ return;
25903
25796
  }
25904
- else {
25905
- this.velocity = 0;
25906
- this.emitColChange();
25907
- hapticSelectionEnd();
25797
+ const values = inputModeColumn.items.filter((item) => item.disabled !== true);
25798
+ /**
25799
+ * If users pause for a bit, the search
25800
+ * value should be reset similar to how a
25801
+ * <select> behaves. So typing "34", waiting,
25802
+ * then typing "5" should select "05".
25803
+ */
25804
+ if (singleColumnSearchTimeout) {
25805
+ clearTimeout(singleColumnSearchTimeout);
25908
25806
  }
25909
- }
25910
- else if (this.y % this.optHeight !== 0) {
25911
- // needs to still get locked into a position so options line up
25912
- const currentPos = Math.abs(this.y % this.optHeight);
25913
- // create a velocity in the direction it needs to scroll
25914
- this.velocity = currentPos > this.optHeight / 2 ? 1 : -1;
25915
- this.decelerate();
25916
- }
25917
- }
25918
- indexForY(y) {
25919
- return Math.min(Math.max(Math.abs(Math.round(y / this.optHeight)), 0), this.col.options.length - 1);
25920
- }
25921
- onStart(detail) {
25922
- // We have to prevent default in order to block scrolling under the picker
25923
- // but we DO NOT have to stop propagation, since we still want
25924
- // some "click" events to capture
25925
- if (detail.event.cancelable) {
25926
- detail.event.preventDefault();
25927
- }
25928
- detail.event.stopPropagation();
25929
- hapticSelectionStart();
25930
- // reset everything
25931
- if (this.rafId !== undefined)
25932
- cancelAnimationFrame(this.rafId);
25933
- const options = this.col.options;
25934
- let minY = options.length - 1;
25935
- let maxY = 0;
25936
- for (let i = 0; i < options.length; i++) {
25937
- if (!options[i].disabled) {
25938
- minY = Math.min(minY, i);
25939
- maxY = Math.max(maxY, i);
25807
+ this.singleColumnSearchTimeout = setTimeout(() => {
25808
+ inputEl.value = '';
25809
+ this.singleColumnSearchTimeout = undefined;
25810
+ }, 1000);
25811
+ /**
25812
+ * For values that are longer than 2 digits long
25813
+ * we should shift the value over 1 character
25814
+ * to the left. So typing "456" would result in "56".
25815
+ * TODO: If we want to support more than just
25816
+ * time entry, we should update this value to be
25817
+ * the max length of all of the picker items.
25818
+ */
25819
+ if (inputEl.value.length >= 3) {
25820
+ const startIndex = inputEl.value.length - 2;
25821
+ const newString = inputEl.value.substring(startIndex);
25822
+ inputEl.value = newString;
25823
+ this.selectSingleColumn();
25824
+ return;
25940
25825
  }
25941
- }
25942
- this.minY = -(minY * this.optHeight);
25943
- this.maxY = -(maxY * this.optHeight);
25944
- }
25945
- onMove(detail) {
25946
- if (detail.event.cancelable) {
25947
- detail.event.preventDefault();
25948
- }
25949
- detail.event.stopPropagation();
25950
- // update the scroll position relative to pointer start position
25951
- let y = this.y + detail.deltaY;
25952
- if (y > this.minY) {
25953
- // scrolling up higher than scroll area
25954
- y = Math.pow(y, 0.8);
25955
- this.bounceFrom = y;
25956
- }
25957
- else if (y < this.maxY) {
25958
- // scrolling down below scroll area
25959
- y += Math.pow(this.maxY - y, 0.9);
25960
- this.bounceFrom = y;
25961
- }
25962
- else {
25963
- this.bounceFrom = 0;
25964
- }
25965
- this.update(y, 0, false);
25966
- }
25967
- onEnd(detail) {
25968
- if (this.bounceFrom > 0) {
25969
- // bounce back up
25970
- this.update(this.minY, 100, true);
25971
- this.emitColChange();
25972
- return;
25973
- }
25974
- else if (this.bounceFrom < 0) {
25975
- // bounce back down
25976
- this.update(this.maxY, 100, true);
25977
- this.emitColChange();
25978
- return;
25979
- }
25980
- this.velocity = clamp(-MAX_PICKER_SPEED, detail.velocityY * 23, MAX_PICKER_SPEED);
25981
- if (this.velocity === 0 && detail.deltaY === 0) {
25982
- const opt = detail.event.target.closest('.picker-opt');
25983
- if (opt === null || opt === void 0 ? void 0 : opt.hasAttribute('opt-index')) {
25984
- this.setSelected(parseInt(opt.getAttribute('opt-index'), 10), TRANSITION_DURATION);
25826
+ /**
25827
+ * Checking the value of the input gets priority
25828
+ * first. For example, if the value of the input
25829
+ * is "1" and we entered "2", then the complete value
25830
+ * is "12" and we should select hour 12.
25831
+ *
25832
+ * Regex removes any leading zeros from values like "02",
25833
+ * but it keeps a single zero if there are only zeros in the string.
25834
+ * 0+(?=[1-9]) --> Match 1 or more zeros that are followed by 1-9
25835
+ * 0+(?=0$) --> Match 1 or more zeros that must be followed by one 0 and end.
25836
+ */
25837
+ const findItemFromCompleteValue = values.find(({ text }) => {
25838
+ const parsedText = text.replace(/^0+(?=[1-9])|0+(?=0$)/, '');
25839
+ return parsedText === inputEl.value;
25840
+ });
25841
+ if (findItemFromCompleteValue) {
25842
+ inputModeColumn.setValue(findItemFromCompleteValue.value);
25843
+ return;
25844
+ }
25845
+ /**
25846
+ * If we typed "56" to get minute 56, then typed "7",
25847
+ * we should select "07" as "567" is not a valid minute.
25848
+ */
25849
+ if (inputEl.value.length === 2) {
25850
+ const changedCharacter = inputEl.value.substring(inputEl.value.length - 1);
25851
+ inputEl.value = changedCharacter;
25852
+ this.selectSingleColumn();
25853
+ }
25854
+ };
25855
+ /**
25856
+ * Searches a list of column items for a particular
25857
+ * value. This is currently used for numeric values.
25858
+ * The zeroBehavior can be set to account for leading
25859
+ * or trailing zeros when looking at the item text.
25860
+ */
25861
+ this.searchColumn = (colEl, value, zeroBehavior = 'start') => {
25862
+ const behavior = zeroBehavior === 'start' ? /^0+/ : /0$/;
25863
+ const item = colEl.items.find(({ text, disabled }) => disabled !== true && text.replace(behavior, '') === value);
25864
+ if (item) {
25865
+ colEl.setValue(item.value);
25985
25866
  }
25986
- }
25987
- else {
25988
- this.y += detail.deltaY;
25989
- if (Math.abs(detail.velocityY) < 0.05) {
25990
- const isScrollingUp = detail.deltaY > 0;
25991
- const optHeightFraction = (Math.abs(this.y) % this.optHeight) / this.optHeight;
25992
- if (isScrollingUp && optHeightFraction > 0.5) {
25993
- this.velocity = Math.abs(this.velocity) * -1;
25994
- }
25995
- else if (!isScrollingUp && optHeightFraction <= 0.5) {
25996
- this.velocity = Math.abs(this.velocity);
25997
- }
25867
+ };
25868
+ this.selectMultiColumn = () => {
25869
+ const { inputEl, el } = this;
25870
+ if (!inputEl) {
25871
+ return;
25998
25872
  }
25999
- this.decelerate();
26000
- }
26001
- }
26002
- refresh(forceRefresh, animated) {
26003
- var _a;
26004
- let min = this.col.options.length - 1;
26005
- let max = 0;
26006
- const options = this.col.options;
26007
- for (let i = 0; i < options.length; i++) {
26008
- if (!options[i].disabled) {
26009
- min = Math.min(min, i);
26010
- max = Math.max(max, i);
25873
+ const numericPickers = Array.from(el.querySelectorAll('ion-picker-column-internal')).filter((col) => col.numericInput);
25874
+ const firstColumn = numericPickers[0];
25875
+ const lastColumn = numericPickers[1];
25876
+ let value = inputEl.value;
25877
+ let minuteValue;
25878
+ switch (value.length) {
25879
+ case 1:
25880
+ this.searchColumn(firstColumn, value);
25881
+ break;
25882
+ case 2:
25883
+ /**
25884
+ * If the first character is `0` or `1` it is
25885
+ * possible that users are trying to type `09`
25886
+ * or `11` into the hour field, so we should look
25887
+ * at that first.
25888
+ */
25889
+ const firstCharacter = inputEl.value.substring(0, 1);
25890
+ value = firstCharacter === '0' || firstCharacter === '1' ? inputEl.value : firstCharacter;
25891
+ this.searchColumn(firstColumn, value);
25892
+ /**
25893
+ * If only checked the first value,
25894
+ * we can check the second value
25895
+ * for a match in the minutes column
25896
+ */
25897
+ if (value.length === 1) {
25898
+ minuteValue = inputEl.value.substring(inputEl.value.length - 1);
25899
+ this.searchColumn(lastColumn, minuteValue, 'end');
25900
+ }
25901
+ break;
25902
+ case 3:
25903
+ /**
25904
+ * If the first character is `0` or `1` it is
25905
+ * possible that users are trying to type `09`
25906
+ * or `11` into the hour field, so we should look
25907
+ * at that first.
25908
+ */
25909
+ const firstCharacterAgain = inputEl.value.substring(0, 1);
25910
+ value =
25911
+ firstCharacterAgain === '0' || firstCharacterAgain === '1'
25912
+ ? inputEl.value.substring(0, 2)
25913
+ : firstCharacterAgain;
25914
+ this.searchColumn(firstColumn, value);
25915
+ /**
25916
+ * If only checked the first value,
25917
+ * we can check the second value
25918
+ * for a match in the minutes column
25919
+ */
25920
+ minuteValue = value.length === 1 ? inputEl.value.substring(1) : inputEl.value.substring(2);
25921
+ this.searchColumn(lastColumn, minuteValue, 'end');
25922
+ break;
25923
+ case 4:
25924
+ /**
25925
+ * If the first character is `0` or `1` it is
25926
+ * possible that users are trying to type `09`
25927
+ * or `11` into the hour field, so we should look
25928
+ * at that first.
25929
+ */
25930
+ const firstCharacterAgainAgain = inputEl.value.substring(0, 1);
25931
+ value =
25932
+ firstCharacterAgainAgain === '0' || firstCharacterAgainAgain === '1'
25933
+ ? inputEl.value.substring(0, 2)
25934
+ : firstCharacterAgainAgain;
25935
+ this.searchColumn(firstColumn, value);
25936
+ /**
25937
+ * If only checked the first value,
25938
+ * we can check the second value
25939
+ * for a match in the minutes column
25940
+ */
25941
+ const minuteValueAgain = value.length === 1
25942
+ ? inputEl.value.substring(1, inputEl.value.length)
25943
+ : inputEl.value.substring(2, inputEl.value.length);
25944
+ this.searchColumn(lastColumn, minuteValueAgain, 'end');
25945
+ break;
25946
+ default:
25947
+ const startIndex = inputEl.value.length - 4;
25948
+ const newString = inputEl.value.substring(startIndex);
25949
+ inputEl.value = newString;
25950
+ this.selectMultiColumn();
25951
+ break;
26011
25952
  }
26012
- }
25953
+ };
26013
25954
  /**
26014
- * Only update selected value if column has a
26015
- * velocity of 0. If it does not, then the
26016
- * column is animating might land on
26017
- * a value different than the value at
26018
- * selectedIndex
25955
+ * Searches the value of the active column
25956
+ * to determine which value users are trying
25957
+ * to select
26019
25958
  */
26020
- if (this.velocity !== 0) {
26021
- return;
26022
- }
26023
- const selectedIndex = clamp(min, (_a = this.col.selectedIndex) !== null && _a !== void 0 ? _a : 0, max);
26024
- if (this.col.prevSelected !== selectedIndex || forceRefresh) {
26025
- const y = selectedIndex * this.optHeight * -1;
26026
- const duration = animated ? TRANSITION_DURATION : 0;
26027
- this.velocity = 0;
26028
- this.update(y, duration, true);
26029
- }
26030
- }
26031
- onDomChange(forceRefresh, animated) {
26032
- const colEl = this.optsEl;
26033
- if (colEl) {
26034
- // DOM READ
26035
- // We perfom a DOM read over a rendered item, this needs to happen after the first render or after the the column has changed
26036
- this.optHeight = colEl.firstElementChild ? colEl.firstElementChild.clientHeight : 0;
26037
- }
26038
- this.refresh(forceRefresh, animated);
26039
- }
26040
- render() {
26041
- const col = this.col;
26042
- const mode = getIonMode$1(this);
26043
- return (hAsync(Host, { class: Object.assign({ [mode]: true, 'picker-col': true, 'picker-opts-left': this.col.align === 'left', 'picker-opts-right': this.col.align === 'right' }, getClassMap(col.cssClass)), style: {
26044
- 'max-width': this.col.columnWidth,
26045
- } }, col.prefix && (hAsync("div", { class: "picker-prefix", style: { width: col.prefixWidth } }, col.prefix)), hAsync("div", { class: "picker-opts", style: { maxWidth: col.optionsWidth }, ref: (el) => (this.optsEl = el) }, col.options.map((o, index) => (hAsync("button", { "aria-label": o.ariaLabel, class: { 'picker-opt': true, 'picker-opt-disabled': !!o.disabled }, "opt-index": index }, o.text)))), col.suffix && (hAsync("div", { class: "picker-suffix", style: { width: col.suffixWidth } }, col.suffix))));
26046
- }
26047
- get el() { return getElement(this); }
26048
- static get watchers() { return {
26049
- "col": ["colChanged"]
26050
- }; }
26051
- static get style() { return {
26052
- ios: pickerColumnIosCss,
26053
- md: pickerColumnMdCss
26054
- }; }
26055
- static get cmpMeta() { return {
26056
- "$flags$": 32,
26057
- "$tagName$": "ion-picker-legacy-column",
26058
- "$members$": {
26059
- "col": [16]
26060
- },
26061
- "$listeners$": undefined,
26062
- "$lazyBundleId$": "-",
26063
- "$attrsToReflect$": []
26064
- }; }
26065
- }
26066
- const PICKER_OPT_SELECTED = 'picker-opt-selected';
26067
- const DECELERATION_FRICTION = 0.97;
26068
- const MAX_PICKER_SPEED = 90;
26069
- const TRANSITION_DURATION = 150;
26070
-
26071
- const pickerColumnOptionIosCss = "/*!@button*/button.sc-ion-picker-column-option-ios{padding-left:0;padding-right:0;padding-top:0;padding-bottom:0;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;width:100%;height:34px;border:0px;outline:none;background:transparent;color:inherit;font-family:var(--ion-font-family, inherit);font-size:inherit;line-height:34px;text-align:inherit;text-overflow:ellipsis;white-space:nowrap;cursor:pointer;overflow:hidden}/*!@:host(.option-disabled)*/.option-disabled.sc-ion-picker-column-option-ios-h{opacity:0.4}/*!@:host(.option-disabled) button*/.option-disabled.sc-ion-picker-column-option-ios-h button.sc-ion-picker-column-option-ios{cursor:default}";
26072
-
26073
- const pickerColumnOptionMdCss = "/*!@button*/button.sc-ion-picker-column-option-md{padding-left:0;padding-right:0;padding-top:0;padding-bottom:0;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;width:100%;height:34px;border:0px;outline:none;background:transparent;color:inherit;font-family:var(--ion-font-family, inherit);font-size:inherit;line-height:34px;text-align:inherit;text-overflow:ellipsis;white-space:nowrap;cursor:pointer;overflow:hidden}/*!@:host(.option-disabled)*/.option-disabled.sc-ion-picker-column-option-md-h{opacity:0.4}/*!@:host(.option-disabled) button*/.option-disabled.sc-ion-picker-column-option-md-h button.sc-ion-picker-column-option-md{cursor:default}/*!@:host(.option-active)*/.option-active.sc-ion-picker-column-option-md-h{color:var(--ion-color-base)}";
26074
-
26075
- class PickerColumnOption {
26076
- constructor(hostRef) {
26077
- registerInstance(this, hostRef);
25959
+ this.onInputChange = () => {
25960
+ const { useInputMode, inputEl, inputModeColumn } = this;
25961
+ if (!useInputMode || !inputEl) {
25962
+ return;
25963
+ }
25964
+ if (inputModeColumn) {
25965
+ this.selectSingleColumn();
25966
+ }
25967
+ else {
25968
+ this.selectMultiColumn();
25969
+ }
25970
+ };
26078
25971
  /**
26079
- * We keep track of the parent picker column
26080
- * so we can update the value of it when
26081
- * clicking an enable option.
25972
+ * Emit ionInputModeChange. Picker columns
25973
+ * listen for this event to determine whether
25974
+ * or not their column is "active" for text input.
26082
25975
  */
26083
- this.pickerColumn = null;
26084
- this.ariaLabel = null;
26085
- this.disabled = false;
26086
- this.value = undefined;
26087
- this.color = 'primary';
25976
+ this.emitInputModeChange = () => {
25977
+ const { useInputMode, inputModeColumn } = this;
25978
+ this.ionInputModeChange.emit({
25979
+ useInputMode,
25980
+ inputModeColumn,
25981
+ });
25982
+ };
26088
25983
  }
26089
25984
  /**
26090
- * The aria-label of the option has changed after the
26091
- * first render and needs to be updated within the component.
26092
- *
26093
- * @param ariaLbl The new aria-label value.
25985
+ * When the picker is interacted with
25986
+ * we need to prevent touchstart so other
25987
+ * gestures do not fire. For example,
25988
+ * scrolling on the wheel picker
25989
+ * in ion-datetime should not cause
25990
+ * a card modal to swipe to close.
26094
25991
  */
26095
- onAriaLabelChange(ariaLbl) {
26096
- this.ariaLabel = ariaLbl;
25992
+ preventTouchStartPropagation(ev) {
25993
+ ev.stopPropagation();
26097
25994
  }
26098
25995
  componentWillLoad() {
26099
- const inheritedAttributes = inheritAttributes$1(this.el, ['aria-label']);
26100
- /**
26101
- * The initial value of `aria-label` needs to be set for
26102
- * the first render.
26103
-
26104
- */
26105
- this.ariaLabel = inheritedAttributes['aria-label'] || null;
26106
- }
26107
- connectedCallback() {
26108
- this.pickerColumn = this.el.closest('ion-picker-column');
26109
- }
26110
- disconnectedCallback() {
26111
- this.pickerColumn = null;
25996
+ getElementRoot(this.el).addEventListener('focusin', this.onFocusIn);
25997
+ getElementRoot(this.el).addEventListener('focusout', this.onFocusOut);
26112
25998
  }
26113
25999
  /**
26114
- * The column options can load at any time
26115
- * so the options needs to tell the
26116
- * parent picker column when it is loaded
26117
- * so the picker column can ensure it is
26118
- * centered in the view.
26119
- *
26120
- * We intentionally run this for every
26121
- * option. If we only ran this from
26122
- * the selected option then if the newly
26123
- * loaded options were not selected then
26124
- * scrollActiveItemIntoView would not be called.
26000
+ * @internal
26001
+ * Exits text entry mode for the picker
26002
+ * This method blurs the hidden input
26003
+ * and cause the keyboard to dismiss.
26125
26004
  */
26126
- componentDidLoad() {
26127
- const { pickerColumn } = this;
26128
- if (pickerColumn !== null) {
26129
- pickerColumn.scrollActiveItemIntoView();
26005
+ async exitInputMode() {
26006
+ const { inputEl, useInputMode } = this;
26007
+ if (!useInputMode || !inputEl) {
26008
+ return;
26130
26009
  }
26131
- }
26132
- /**
26133
- * When an option is clicked update the
26134
- * parent picker column value. This
26135
- * component will handle centering the option
26136
- * in the column view.
26137
- */
26138
- onClick() {
26139
- const { pickerColumn } = this;
26140
- if (pickerColumn !== null) {
26141
- pickerColumn.setValue(this.value);
26010
+ this.useInputMode = false;
26011
+ this.inputModeColumn = undefined;
26012
+ inputEl.blur();
26013
+ inputEl.value = '';
26014
+ if (this.destroyKeypressListener) {
26015
+ this.destroyKeypressListener();
26016
+ this.destroyKeypressListener = undefined;
26142
26017
  }
26018
+ this.emitInputModeChange();
26143
26019
  }
26144
26020
  render() {
26145
- const { color, disabled, ariaLabel } = this;
26146
- const mode = getIonMode$1(this);
26147
- return (hAsync(Host, { class: createColorClasses$1(color, {
26148
- [mode]: true,
26149
- ['option-disabled']: disabled,
26150
- }) }, hAsync("button", { tabindex: "-1", "aria-label": ariaLabel, disabled: disabled, onClick: () => this.onClick() }, hAsync("slot", null))));
26021
+ return (hAsync(Host, { onPointerDown: (ev) => this.onPointerDown(ev), onClick: () => this.onClick() }, hAsync("input", { "aria-hidden": "true", tabindex: -1, inputmode: "numeric", type: "number", ref: (el) => (this.inputEl = el), onInput: () => this.onInputChange(), onBlur: () => this.exitInputMode() }), hAsync("div", { class: "picker-before" }), hAsync("div", { class: "picker-after" }), hAsync("div", { class: "picker-highlight", ref: (el) => (this.highlightEl = el) }), hAsync("slot", null)));
26151
26022
  }
26152
26023
  get el() { return getElement(this); }
26153
- static get watchers() { return {
26154
- "aria-label": ["onAriaLabelChange"]
26155
- }; }
26156
26024
  static get style() { return {
26157
- ios: pickerColumnOptionIosCss,
26158
- md: pickerColumnOptionMdCss
26025
+ ios: pickerInternalIosCss,
26026
+ md: pickerInternalMdCss
26159
26027
  }; }
26160
26028
  static get cmpMeta() { return {
26161
26029
  "$flags$": 41,
26162
- "$tagName$": "ion-picker-column-option",
26030
+ "$tagName$": "ion-picker-internal",
26163
26031
  "$members$": {
26164
- "disabled": [4],
26165
- "value": [8],
26166
- "color": [513],
26167
- "ariaLabel": [32]
26032
+ "exitInputMode": [64]
26168
26033
  },
26169
- "$listeners$": undefined,
26034
+ "$listeners$": [[1, "touchstart", "preventTouchStartPropagation"]],
26170
26035
  "$lazyBundleId$": "-",
26171
- "$attrsToReflect$": [["color", "color"]]
26036
+ "$attrsToReflect$": []
26172
26037
  }; }
26173
26038
  }
26174
26039
 
@@ -35159,11 +35024,10 @@ registerComponents([
35159
35024
  Nav,
35160
35025
  NavLink,
35161
35026
  Note,
35162
- Picker$1,
35163
35027
  Picker,
35164
- PickerColumn,
35165
35028
  PickerColumnCmp,
35166
- PickerColumnOption,
35029
+ PickerColumnInternal,
35030
+ PickerInternal,
35167
35031
  Popover,
35168
35032
  ProgressBar,
35169
35033
  Radio,