@ionic/core 7.5.7-dev.11701113479.149fdab6 → 7.5.7-dev.11701201960.104b3a1f

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 (101) hide show
  1. package/components/data.js +1 -1
  2. package/components/ion-datetime.js +16 -16
  3. package/components/{ion-picker-internal.d.ts → ion-picker-column.d.ts} +4 -4
  4. package/components/ion-picker-column.js +9 -0
  5. package/components/ion-picker-legacy-column.js +1 -1
  6. package/components/ion-picker-legacy.js +2 -2
  7. package/components/ion-picker.d.ts +11 -0
  8. package/components/ion-picker.js +9 -0
  9. package/components/picker-column.js +333 -322
  10. package/components/picker-column2.js +379 -0
  11. package/components/{picker-internal.js → picker.js} +16 -16
  12. package/dist/cjs/{data-c8d21093.js → data-4845b494.js} +1 -1
  13. package/dist/cjs/ion-datetime-button.cjs.entry.js +1 -1
  14. package/dist/cjs/ion-datetime_3.cjs.entry.js +13 -13
  15. package/dist/cjs/{ion-picker-column-internal.cjs.entry.js → ion-picker-column.cjs.entry.js} +9 -9
  16. package/dist/cjs/{ion-picker-internal.cjs.entry.js → ion-picker.cjs.entry.js} +13 -13
  17. package/dist/cjs/ionic.cjs.js +1 -1
  18. package/dist/cjs/loader.cjs.js +1 -1
  19. package/dist/collection/collection-manifest.json +3 -3
  20. package/dist/collection/components/datetime/datetime.ios.css +1 -1
  21. package/dist/collection/components/datetime/datetime.js +9 -9
  22. package/dist/collection/components/datetime/datetime.md.css +1 -1
  23. package/dist/collection/components/datetime/test/disabled/datetime.spec.js +4 -4
  24. package/dist/collection/components/datetime/test/minmax/datetime.e2e.js +5 -5
  25. package/dist/collection/components/datetime/test/prefer-wheel/datetime.e2e.js +2 -2
  26. package/dist/collection/components/datetime/test/presentation/datetime.e2e.js +1 -1
  27. package/dist/collection/components/datetime/test/values/datetime.e2e.js +5 -5
  28. package/dist/collection/components/datetime/utils/data.js +1 -1
  29. package/dist/collection/components/{picker-internal/picker-internal.ios.css → picker/picker.ios.css} +3 -3
  30. package/dist/collection/components/{picker-internal/picker-internal.js → picker/picker.js} +17 -18
  31. package/dist/collection/components/{picker-internal/picker-internal.md.css → picker/picker.md.css} +3 -3
  32. package/dist/collection/components/{picker-internal/test/a11y/picker-internal.e2e.js → picker/test/a11y/picker.e2e.js} +2 -2
  33. package/dist/collection/components/{picker-internal/test/basic/picker-internal.e2e.js → picker/test/basic/picker.e2e.js} +22 -22
  34. package/dist/collection/components/{picker-internal/test/keyboard-entry/picker-internal.e2e.js → picker/test/keyboard-entry/picker.e2e.js} +20 -20
  35. package/dist/collection/components/{picker-column-internal/picker-column-internal.js → picker-column/picker-column.js} +12 -13
  36. package/dist/collection/components/{picker-column-internal/test/basic/picker-column-internal.e2e.js → picker-column/test/basic/picker-column.e2e.js} +7 -7
  37. package/dist/collection/components/{picker-column-internal/test/disabled/picker-column-internal.e2e.js → picker-column/test/disabled/picker-column.e2e.js} +39 -39
  38. package/dist/collection/components/picker-legacy/picker.js +1 -1
  39. package/dist/collection/components/{picker-column-legacy → picker-legacy-column}/test/standalone/picker-column.e2e.js +1 -1
  40. package/dist/docs.json +307 -14
  41. package/dist/esm/{data-44d9e816.js → data-12e24f00.js} +1 -1
  42. package/dist/esm/ion-datetime-button.entry.js +1 -1
  43. package/dist/esm/ion-datetime_3.entry.js +13 -13
  44. package/dist/esm/{ion-picker-column-internal.entry.js → ion-picker-column.entry.js} +9 -9
  45. package/dist/esm/{ion-picker-internal.entry.js → ion-picker.entry.js} +13 -13
  46. package/dist/esm/ionic.js +1 -1
  47. package/dist/esm/loader.js +1 -1
  48. package/dist/esm-es5/ion-datetime-button.entry.js +1 -1
  49. package/dist/esm-es5/ion-datetime_3.entry.js +1 -1
  50. package/dist/esm-es5/ion-picker-column.entry.js +4 -0
  51. package/dist/esm-es5/ion-picker.entry.js +4 -0
  52. package/dist/esm-es5/ionic.js +1 -1
  53. package/dist/esm-es5/loader.js +1 -1
  54. package/dist/html.html-data.json +95 -0
  55. package/dist/ionic/ionic.esm.js +1 -1
  56. package/dist/ionic/p-39074595.entry.js +4 -0
  57. package/dist/ionic/p-40903d34.system.js +1 -1
  58. package/dist/ionic/p-439e20ef.entry.js +4 -0
  59. package/dist/ionic/p-7c66a566.system.entry.js +4 -0
  60. package/dist/ionic/p-9403b297.system.entry.js +4 -0
  61. package/dist/ionic/p-ba70d455.entry.js +4 -0
  62. package/dist/ionic/{p-8ad82eb3.entry.js → p-baa7cb1e.entry.js} +1 -1
  63. package/dist/ionic/p-c32bf078.system.entry.js +4 -0
  64. package/dist/ionic/{p-4c80afe1.system.entry.js → p-cb62e3fc.system.entry.js} +1 -1
  65. package/dist/types/components/datetime/utils/data.d.ts +2 -2
  66. package/dist/types/components/picker/picker-interfaces.d.ts +8 -0
  67. package/dist/types/components/{picker-internal/picker-internal.d.ts → picker/picker.d.ts} +4 -5
  68. package/dist/types/components/{picker-column-internal/picker-column-internal.d.ts → picker-column/picker-column.d.ts} +3 -4
  69. package/dist/types/components.d.ts +47 -47
  70. package/hydrate/index.js +1046 -1048
  71. package/package.json +1 -1
  72. package/components/ion-picker-column-internal.d.ts +0 -11
  73. package/components/ion-picker-column-internal.js +0 -9
  74. package/components/ion-picker-internal.js +0 -9
  75. package/components/picker-column-internal.js +0 -390
  76. package/dist/esm-es5/ion-picker-column-internal.entry.js +0 -4
  77. package/dist/esm-es5/ion-picker-internal.entry.js +0 -4
  78. package/dist/ionic/p-1a368f2e.system.entry.js +0 -4
  79. package/dist/ionic/p-29fe18ef.entry.js +0 -4
  80. package/dist/ionic/p-5bd4e009.entry.js +0 -4
  81. package/dist/ionic/p-beb64be7.system.entry.js +0 -4
  82. package/dist/ionic/p-c56b6570.system.entry.js +0 -4
  83. package/dist/ionic/p-c59d068a.entry.js +0 -4
  84. package/dist/types/components/picker-internal/picker-internal-interfaces.d.ts +0 -8
  85. /package/dist/collection/components/{picker-internal/picker-internal-interfaces.js → picker/picker-interfaces.js} +0 -0
  86. /package/dist/collection/components/{picker-column-internal/picker-column-internal-interfaces.js → picker-column/picker-column-interfaces.js} +0 -0
  87. /package/dist/collection/components/{picker-column-internal/picker-column-internal.ios.css → picker-column/picker-column.ios.css} +0 -0
  88. /package/dist/collection/components/{picker-column-internal/picker-column-internal.md.css → picker-column/picker-column.md.css} +0 -0
  89. /package/dist/collection/components/{picker-column-legacy → picker-legacy-column}/picker-column.ios.css +0 -0
  90. /package/dist/collection/components/{picker-column-legacy → picker-legacy-column}/picker-column.js +0 -0
  91. /package/dist/collection/components/{picker-column-legacy → picker-legacy-column}/picker-column.md.css +0 -0
  92. /package/dist/collection/components/{picker-column-legacy → picker-legacy-column}/test/picker-column-aria.spec.js +0 -0
  93. /package/dist/collection/components/{picker-column-legacy → picker-legacy-column}/test/picker-column-dynamic.spec.js +0 -0
  94. /package/dist/collection/components/{picker-column-legacy → picker-legacy-column}/test/picker-column.spec.js +0 -0
  95. /package/dist/collection/components/{picker-column-legacy → picker-legacy-column}/test/test.utils.js +0 -0
  96. /package/dist/esm-es5/{data-44d9e816.js → data-12e24f00.js} +0 -0
  97. /package/dist/ionic/{p-17240d90.js → p-bb849ebb.js} +0 -0
  98. /package/dist/ionic/{p-b8c3f071.system.js → p-e4219e27.system.js} +0 -0
  99. /package/dist/types/components/{picker-column-internal/picker-column-internal-interfaces.d.ts → picker-column/picker-column-interfaces.d.ts} +0 -0
  100. /package/dist/types/components/{picker-column-legacy → picker-legacy-column}/picker-column.d.ts +0 -0
  101. /package/dist/types/components/{picker-column-legacy → picker-legacy-column}/test/test.utils.d.ts +0 -0
package/hydrate/index.js CHANGED
@@ -14479,7 +14479,7 @@ const getMonthColumnData = (locale, refParts, minParts, maxParts, monthValues, f
14479
14479
  * @param minParts The minimum bound on the date that can be returned
14480
14480
  * @param maxParts The maximum bound on the date that can be returned
14481
14481
  * @param dayValues The allowed date values
14482
- * @returns Date data to be used in ion-picker-column-internal
14482
+ * @returns Date data to be used in ion-picker-column
14483
14483
  */
14484
14484
  const getDayColumnData = (locale, refParts, minParts, maxParts, dayValues, formatOptions = {
14485
14485
  day: 'numeric',
@@ -14826,9 +14826,9 @@ const getHighlightStyles = (highlightedDates, dateIsoString, el) => {
14826
14826
  return undefined;
14827
14827
  };
14828
14828
 
14829
- 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%}";
14829
+ 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*/ion-picker-column.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%}";
14830
14830
 
14831
- 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}";
14831
+ 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*/ion-picker-column.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}";
14832
14832
 
14833
14833
  /**
14834
14834
  * @virtualProp {"ios" | "md"} mode - The mode determines which platform styles to use.
@@ -15799,7 +15799,7 @@ class Datetime {
15799
15799
  const renderArray = forcePresentation === 'time-date'
15800
15800
  ? [this.renderTimePickerColumns(forcePresentation), this.renderDatePickerColumns(forcePresentation)]
15801
15801
  : [this.renderDatePickerColumns(forcePresentation), this.renderTimePickerColumns(forcePresentation)];
15802
- return hAsync("ion-picker-internal", null, renderArray);
15802
+ return hAsync("ion-picker", null, renderArray);
15803
15803
  }
15804
15804
  renderDatePickerColumns(forcePresentation) {
15805
15805
  return forcePresentation === 'date-time' || forcePresentation === 'time-date'
@@ -15858,7 +15858,7 @@ class Datetime {
15858
15858
  const todayString = workingParts.day !== null
15859
15859
  ? `${workingParts.year}-${workingParts.month}-${workingParts.day}`
15860
15860
  : `${defaultParts.year}-${defaultParts.month}-${defaultParts.day}`;
15861
- return (hAsync("ion-picker-column-internal", { class: "date-column", color: this.color, disabled: disabled, items: items, value: todayString, onIonChange: (ev) => {
15861
+ return (hAsync("ion-picker-column", { class: "date-column", color: this.color, disabled: disabled, items: items, value: todayString, onIonChange: (ev) => {
15862
15862
  // TODO(FW-1823) Remove this when iOS 14 support is dropped.
15863
15863
  // Due to a Safari 14 issue we need to destroy
15864
15864
  // the scroll listener before we update state
@@ -15942,7 +15942,7 @@ class Datetime {
15942
15942
  }
15943
15943
  const { disabled, workingParts } = this;
15944
15944
  const activePart = this.getActivePartsWithFallback();
15945
- 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) => {
15945
+ return (hAsync("ion-picker-column", { 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) => {
15946
15946
  // TODO(FW-1823) Remove this when iOS 14 support is dropped.
15947
15947
  // Due to a Safari 14 issue we need to destroy
15948
15948
  // the scroll listener before we update state
@@ -15964,7 +15964,7 @@ class Datetime {
15964
15964
  }
15965
15965
  const { disabled, workingParts } = this;
15966
15966
  const activePart = this.getActivePartsWithFallback();
15967
- return (hAsync("ion-picker-column-internal", { class: "month-column", color: this.color, disabled: disabled, items: months, value: workingParts.month, onIonChange: (ev) => {
15967
+ return (hAsync("ion-picker-column", { class: "month-column", color: this.color, disabled: disabled, items: months, value: workingParts.month, onIonChange: (ev) => {
15968
15968
  // TODO(FW-1823) Remove this when iOS 14 support is dropped.
15969
15969
  // Due to a Safari 14 issue we need to destroy
15970
15970
  // the scroll listener before we update state
@@ -15986,7 +15986,7 @@ class Datetime {
15986
15986
  }
15987
15987
  const { disabled, workingParts } = this;
15988
15988
  const activePart = this.getActivePartsWithFallback();
15989
- return (hAsync("ion-picker-column-internal", { class: "year-column", color: this.color, disabled: disabled, items: years, value: workingParts.year, onIonChange: (ev) => {
15989
+ return (hAsync("ion-picker-column", { class: "year-column", color: this.color, disabled: disabled, items: years, value: workingParts.year, onIonChange: (ev) => {
15990
15990
  // TODO(FW-1823) Remove this when iOS 14 support is dropped.
15991
15991
  // Due to a Safari 14 issue we need to destroy
15992
15992
  // the scroll listener before we update state
@@ -16029,7 +16029,7 @@ class Datetime {
16029
16029
  if (hoursData.length === 0)
16030
16030
  return [];
16031
16031
  const activePart = this.getActivePartsWithFallback();
16032
- return (hAsync("ion-picker-column-internal", { color: this.color, disabled: disabled, value: activePart.hour, items: hoursData, numericInput: true, onIonChange: (ev) => {
16032
+ return (hAsync("ion-picker-column", { color: this.color, disabled: disabled, value: activePart.hour, items: hoursData, numericInput: true, onIonChange: (ev) => {
16033
16033
  this.setWorkingParts(Object.assign(Object.assign({}, workingParts), { hour: ev.detail.value }));
16034
16034
  this.setActiveParts(Object.assign(Object.assign({}, activePart), { hour: ev.detail.value }));
16035
16035
  ev.stopPropagation();
@@ -16040,7 +16040,7 @@ class Datetime {
16040
16040
  if (minutesData.length === 0)
16041
16041
  return [];
16042
16042
  const activePart = this.getActivePartsWithFallback();
16043
- return (hAsync("ion-picker-column-internal", { color: this.color, disabled: disabled, value: activePart.minute, items: minutesData, numericInput: true, onIonChange: (ev) => {
16043
+ return (hAsync("ion-picker-column", { color: this.color, disabled: disabled, value: activePart.minute, items: minutesData, numericInput: true, onIonChange: (ev) => {
16044
16044
  this.setWorkingParts(Object.assign(Object.assign({}, workingParts), { minute: ev.detail.value }));
16045
16045
  this.setActiveParts(Object.assign(Object.assign({}, activePart), { minute: ev.detail.value }));
16046
16046
  ev.stopPropagation();
@@ -16053,7 +16053,7 @@ class Datetime {
16053
16053
  }
16054
16054
  const activePart = this.getActivePartsWithFallback();
16055
16055
  const isDayPeriodRTL = isLocaleDayPeriodRTL(this.locale);
16056
- return (hAsync("ion-picker-column-internal", { style: isDayPeriodRTL ? { order: '-1' } : {}, color: this.color, disabled: disabled, value: activePart.ampm, items: dayPeriodData, onIonChange: (ev) => {
16056
+ return (hAsync("ion-picker-column", { style: isDayPeriodRTL ? { order: '-1' } : {}, color: this.color, disabled: disabled, value: activePart.ampm, items: dayPeriodData, onIonChange: (ev) => {
16057
16057
  const hour = calculateHourFromAMPM(workingParts, ev.detail.value);
16058
16058
  this.setWorkingParts(Object.assign(Object.assign({}, workingParts), { ampm: ev.detail.value, hour }));
16059
16059
  this.setActiveParts(Object.assign(Object.assign({}, activePart), { ampm: ev.detail.value, hour }));
@@ -16244,7 +16244,7 @@ class Datetime {
16244
16244
  * This will correctly scroll the element position to the correct time value,
16245
16245
  * before the popover is fully presented.
16246
16246
  */
16247
- const cols = ev.target.querySelectorAll('ion-picker-column-internal');
16247
+ const cols = ev.target.querySelectorAll('ion-picker-column');
16248
16248
  // TODO (FW-615): Potentially remove this when intersection observers are fixed in picker column
16249
16249
  cols.forEach((col) => col.scrollActiveItemIntoView());
16250
16250
  }, style: {
@@ -24463,655 +24463,778 @@ class Note {
24463
24463
  }; }
24464
24464
  }
24465
24465
 
24466
- /**
24467
- * iOS Picker Enter Animation
24468
- */
24469
- const iosEnterAnimation$2 = (baseEl) => {
24470
- const baseAnimation = createAnimation();
24471
- const backdropAnimation = createAnimation();
24472
- const wrapperAnimation = createAnimation();
24473
- backdropAnimation
24474
- .addElement(baseEl.querySelector('ion-backdrop'))
24475
- .fromTo('opacity', 0.01, 'var(--backdrop-opacity)')
24476
- .beforeStyles({
24477
- 'pointer-events': 'none',
24478
- })
24479
- .afterClearStyles(['pointer-events']);
24480
- wrapperAnimation
24481
- .addElement(baseEl.querySelector('.picker-wrapper'))
24482
- .fromTo('transform', 'translateY(100%)', 'translateY(0%)');
24483
- return baseAnimation
24484
- .addElement(baseEl)
24485
- .easing('cubic-bezier(.36,.66,.04,1)')
24486
- .duration(400)
24487
- .addAnimation([backdropAnimation, wrapperAnimation]);
24488
- };
24489
-
24490
- /**
24491
- * iOS Picker Leave Animation
24492
- */
24493
- const iosLeaveAnimation$2 = (baseEl) => {
24494
- const baseAnimation = createAnimation();
24495
- const backdropAnimation = createAnimation();
24496
- const wrapperAnimation = createAnimation();
24497
- backdropAnimation
24498
- .addElement(baseEl.querySelector('ion-backdrop'))
24499
- .fromTo('opacity', 'var(--backdrop-opacity)', 0.01);
24500
- wrapperAnimation
24501
- .addElement(baseEl.querySelector('.picker-wrapper'))
24502
- .fromTo('transform', 'translateY(0%)', 'translateY(100%)');
24503
- return baseAnimation
24504
- .addElement(baseEl)
24505
- .easing('cubic-bezier(.36,.66,.04,1)')
24506
- .duration(400)
24507
- .addAnimation([backdropAnimation, wrapperAnimation]);
24508
- };
24509
-
24510
- 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}}}";
24466
+ 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))}";
24511
24467
 
24512
- 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}}}";
24468
+ 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%)}";
24513
24469
 
24514
- // TODO(FW-2832): types
24515
24470
  /**
24516
24471
  * @virtualProp {"ios" | "md"} mode - The mode determines which platform styles to use.
24517
24472
  */
24518
- class Picker {
24473
+ class Picker$1 {
24519
24474
  constructor(hostRef) {
24520
24475
  registerInstance(this, hostRef);
24521
- this.didPresent = createEvent(this, "ionPickerDidPresent", 7);
24522
- this.willPresent = createEvent(this, "ionPickerWillPresent", 7);
24523
- this.willDismiss = createEvent(this, "ionPickerWillDismiss", 7);
24524
- this.didDismiss = createEvent(this, "ionPickerDidDismiss", 7);
24525
- this.didPresentShorthand = createEvent(this, "didPresent", 7);
24526
- this.willPresentShorthand = createEvent(this, "willPresent", 7);
24527
- this.willDismissShorthand = createEvent(this, "willDismiss", 7);
24528
- this.didDismissShorthand = createEvent(this, "didDismiss", 7);
24529
- this.delegateController = createDelegateController(this);
24530
- this.lockController = createLockController();
24531
- this.triggerController = createTriggerController();
24532
- this.onBackdropTap = () => {
24533
- this.dismiss(undefined, BACKDROP);
24476
+ this.ionInputModeChange = createEvent(this, "ionInputModeChange", 7);
24477
+ this.useInputMode = false;
24478
+ this.isInHighlightBounds = (ev) => {
24479
+ const { highlightEl } = this;
24480
+ if (!highlightEl) {
24481
+ return false;
24482
+ }
24483
+ const bbox = highlightEl.getBoundingClientRect();
24484
+ /**
24485
+ * Check to see if the user clicked
24486
+ * outside the bounds of the highlight.
24487
+ */
24488
+ const outsideX = ev.clientX < bbox.left || ev.clientX > bbox.right;
24489
+ const outsideY = ev.clientY < bbox.top || ev.clientY > bbox.bottom;
24490
+ if (outsideX || outsideY) {
24491
+ return false;
24492
+ }
24493
+ return true;
24534
24494
  };
24535
- this.dispatchCancelHandler = (ev) => {
24536
- const role = ev.detail.role;
24537
- if (isCancel(role)) {
24538
- const cancelButton = this.buttons.find((b) => b.role === 'cancel');
24539
- this.callButtonHandler(cancelButton);
24495
+ /**
24496
+ * If we are no longer focused
24497
+ * on a picker column, then we should
24498
+ * exit input mode. An exception is made
24499
+ * for the input in the picker since having
24500
+ * that focused means we are still in input mode.
24501
+ */
24502
+ this.onFocusOut = (ev) => {
24503
+ // TODO(FW-2832): type
24504
+ const { relatedTarget } = ev;
24505
+ if (!relatedTarget || (relatedTarget.tagName !== 'ION-PICKER-COLUMN' && relatedTarget !== this.inputEl)) {
24506
+ this.exitInputMode();
24540
24507
  }
24541
24508
  };
24542
- this.presented = false;
24543
- this.overlayIndex = undefined;
24544
- this.delegate = undefined;
24545
- this.hasController = false;
24546
- this.keyboardClose = true;
24547
- this.enterAnimation = undefined;
24548
- this.leaveAnimation = undefined;
24549
- this.buttons = [];
24550
- this.columns = [];
24551
- this.cssClass = undefined;
24552
- this.duration = 0;
24553
- this.showBackdrop = true;
24554
- this.backdropDismiss = true;
24555
- this.animated = true;
24556
- this.htmlAttributes = undefined;
24557
- this.isOpen = false;
24558
- this.trigger = undefined;
24559
- }
24560
- onIsOpenChange(newValue, oldValue) {
24561
- if (newValue === true && oldValue === false) {
24562
- this.present();
24563
- }
24564
- else if (newValue === false && oldValue === true) {
24565
- this.dismiss();
24566
- }
24567
- }
24568
- triggerChanged() {
24569
- const { trigger, el, triggerController } = this;
24570
- if (trigger) {
24571
- triggerController.addClickListener(el, trigger);
24572
- }
24573
- }
24574
- connectedCallback() {
24575
- prepareOverlay(this.el);
24576
- this.triggerChanged();
24577
- }
24578
- disconnectedCallback() {
24579
- this.triggerController.removeClickListener();
24580
- }
24581
- componentWillLoad() {
24582
- setOverlayId(this.el);
24583
- }
24584
- componentDidLoad() {
24585
- printIonWarning('ion-picker-legacy and ion-picker-legacy-column have been deprecated in favor 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);
24586
24509
  /**
24587
- * If picker was rendered with isOpen="true"
24588
- * then we should open picker immediately.
24510
+ * When picker columns receive focus
24511
+ * the parent picker needs to determine
24512
+ * whether to enter/exit input mode.
24589
24513
  */
24590
- if (this.isOpen === true) {
24591
- raf(() => this.present());
24592
- }
24593
- }
24594
- /**
24595
- * Present the picker overlay after it has been created.
24596
- */
24597
- async present() {
24598
- const unlock = await this.lockController.lock();
24599
- await this.delegateController.attachViewToDom();
24600
- await present(this, 'pickerEnter', iosEnterAnimation$2, iosEnterAnimation$2, undefined);
24601
- if (this.duration > 0) {
24602
- this.durationTimeout = setTimeout(() => this.dismiss(), this.duration);
24603
- }
24604
- unlock();
24605
- }
24606
- /**
24607
- * Dismiss the picker overlay after it has been presented.
24608
- *
24609
- * @param data Any data to emit in the dismiss events.
24610
- * @param role The role of the element that is dismissing the picker.
24611
- * This can be useful in a button handler for determining which button was
24612
- * clicked to dismiss the picker.
24613
- * Some examples include: ``"cancel"`, `"destructive"`, "selected"`, and `"backdrop"`.
24614
- */
24615
- async dismiss(data, role) {
24616
- const unlock = await this.lockController.lock();
24617
- if (this.durationTimeout) {
24618
- clearTimeout(this.durationTimeout);
24619
- }
24620
- const dismissed = await dismiss(this, data, role, 'pickerLeave', iosLeaveAnimation$2, iosLeaveAnimation$2);
24621
- if (dismissed) {
24622
- this.delegateController.removeViewFromDom();
24623
- }
24624
- unlock();
24625
- return dismissed;
24626
- }
24627
- /**
24628
- * Returns a promise that resolves when the picker did dismiss.
24629
- */
24630
- onDidDismiss() {
24631
- return eventMethod(this.el, 'ionPickerDidDismiss');
24632
- }
24633
- /**
24634
- * Returns a promise that resolves when the picker will dismiss.
24635
- */
24636
- onWillDismiss() {
24637
- return eventMethod(this.el, 'ionPickerWillDismiss');
24638
- }
24639
- /**
24640
- * Get the column that matches the specified name.
24641
- *
24642
- * @param name The name of the column.
24643
- */
24644
- getColumn(name) {
24645
- return Promise.resolve(this.columns.find((column) => column.name === name));
24646
- }
24647
- async buttonClick(button) {
24648
- const role = button.role;
24649
- if (isCancel(role)) {
24650
- return this.dismiss(undefined, role);
24651
- }
24652
- const shouldDismiss = await this.callButtonHandler(button);
24653
- if (shouldDismiss) {
24654
- return this.dismiss(this.getSelected(), button.role);
24655
- }
24656
- return Promise.resolve();
24657
- }
24658
- async callButtonHandler(button) {
24659
- if (button) {
24660
- // a handler has been provided, execute it
24661
- // pass the handler the values from the inputs
24662
- const rtn = await safeCall(button.handler, this.getSelected());
24663
- if (rtn === false) {
24664
- // if the return value of the handler is false then do not dismiss
24665
- return false;
24514
+ this.onFocusIn = (ev) => {
24515
+ // TODO(FW-2832): type
24516
+ const { target } = ev;
24517
+ /**
24518
+ * Due to browser differences in how/when focus
24519
+ * is dispatched on certain elements, we need to
24520
+ * make sure that this function only ever runs when
24521
+ * focusing a picker column.
24522
+ */
24523
+ if (target.tagName !== 'ION-PICKER-COLUMN') {
24524
+ return;
24666
24525
  }
24667
- }
24668
- return true;
24669
- }
24670
- getSelected() {
24671
- const selected = {};
24672
- this.columns.forEach((col, index) => {
24673
- const selectedColumn = col.selectedIndex !== undefined ? col.options[col.selectedIndex] : undefined;
24674
- selected[col.name] = {
24675
- text: selectedColumn ? selectedColumn.text : undefined,
24676
- value: selectedColumn ? selectedColumn.value : undefined,
24677
- columnIndex: index,
24678
- };
24679
- });
24680
- return selected;
24681
- }
24682
- render() {
24683
- const { htmlAttributes } = this;
24684
- const mode = getIonMode$1(this);
24685
- return (hAsync(Host, Object.assign({ "aria-modal": "true", tabindex: "-1" }, htmlAttributes, { style: {
24686
- zIndex: `${20000 + this.overlayIndex}`,
24687
- }, class: Object.assign({ [mode]: true,
24688
- // Used internally for styling
24689
- [`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" })));
24690
- }
24691
- get el() { return getElement(this); }
24692
- static get watchers() { return {
24693
- "isOpen": ["onIsOpenChange"],
24694
- "trigger": ["triggerChanged"]
24695
- }; }
24696
- static get style() { return {
24697
- ios: pickerIosCss,
24698
- md: pickerMdCss
24699
- }; }
24700
- static get cmpMeta() { return {
24701
- "$flags$": 34,
24702
- "$tagName$": "ion-picker-legacy",
24703
- "$members$": {
24704
- "overlayIndex": [2, "overlay-index"],
24705
- "delegate": [16],
24706
- "hasController": [4, "has-controller"],
24707
- "keyboardClose": [4, "keyboard-close"],
24708
- "enterAnimation": [16],
24709
- "leaveAnimation": [16],
24710
- "buttons": [16],
24711
- "columns": [16],
24712
- "cssClass": [1, "css-class"],
24713
- "duration": [2],
24714
- "showBackdrop": [4, "show-backdrop"],
24715
- "backdropDismiss": [4, "backdrop-dismiss"],
24716
- "animated": [4],
24717
- "htmlAttributes": [16],
24718
- "isOpen": [4, "is-open"],
24719
- "trigger": [1],
24720
- "presented": [32],
24721
- "present": [64],
24722
- "dismiss": [64],
24723
- "onDidDismiss": [64],
24724
- "onWillDismiss": [64],
24725
- "getColumn": [64]
24726
- },
24727
- "$listeners$": undefined,
24728
- "$lazyBundleId$": "-",
24729
- "$attrsToReflect$": []
24730
- }; }
24731
- }
24732
- const buttonWrapperClass = (button) => {
24733
- return {
24734
- [`picker-toolbar-${button.role}`]: button.role !== undefined,
24735
- 'picker-toolbar-button': true,
24736
- };
24737
- };
24738
- const buttonClass$1 = (button) => {
24739
- return Object.assign({ 'picker-button': true, 'ion-activatable': true }, getClassMap(button.cssClass));
24740
- };
24741
-
24742
- 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}}";
24743
-
24744
- 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)}";
24745
-
24746
- /**
24747
- * @internal
24748
- */
24749
- class PickerColumnCmp {
24750
- constructor(hostRef) {
24751
- registerInstance(this, hostRef);
24752
- this.ionPickerColChange = createEvent(this, "ionPickerColChange", 7);
24753
- this.optHeight = 0;
24754
- this.rotateFactor = 0;
24755
- this.scaleFactor = 1;
24756
- this.velocity = 0;
24757
- this.y = 0;
24758
- this.noAnimate = true;
24759
- // `colDidChange` is a flag that gets set when the column is changed
24760
- // dynamically. When this flag is set, the column will refresh
24761
- // after the component re-renders to incorporate the new column data.
24762
- // This is necessary because `this.refresh` queries for the option elements,
24763
- // so it needs to wait for the latest elements to be available in the DOM.
24764
- // Ex: column is created with 3 options. User updates the column data
24765
- // to have 5 options. The column will still think it only has 3 options.
24766
- this.colDidChange = false;
24767
- this.col = undefined;
24768
- }
24769
- colChanged() {
24770
- this.colDidChange = true;
24771
- }
24772
- async connectedCallback() {
24773
- let pickerRotateFactor = 0;
24774
- let pickerScaleFactor = 0.81;
24775
- const mode = getIonMode$1(this);
24776
- if (mode === 'ios') {
24777
- pickerRotateFactor = -0.46;
24778
- pickerScaleFactor = 1;
24779
- }
24780
- this.rotateFactor = pickerRotateFactor;
24781
- this.scaleFactor = pickerScaleFactor;
24782
- this.gesture = (await Promise.resolve().then(function () { return index; })).createGesture({
24783
- el: this.el,
24784
- gestureName: 'picker-swipe',
24785
- gesturePriority: 100,
24786
- threshold: 0,
24787
- passive: false,
24788
- onStart: (ev) => this.onStart(ev),
24789
- onMove: (ev) => this.onMove(ev),
24790
- onEnd: (ev) => this.onEnd(ev),
24791
- });
24792
- this.gesture.enable();
24793
- // Options have not been initialized yet
24794
- // Animation must be disabled through the `noAnimate` flag
24795
- // Otherwise, the options will render
24796
- // at the top of the column and transition down
24797
- this.tmrId = setTimeout(() => {
24798
- this.noAnimate = false;
24799
- // After initialization, `refresh()` will be called
24800
- // At this point, animation will be enabled. The options will
24801
- // animate as they are being selected.
24802
- this.refresh(true);
24803
- }, 250);
24804
- }
24805
- componentDidLoad() {
24806
- this.onDomChange();
24807
- }
24808
- componentDidUpdate() {
24809
- // Options may have changed since last update.
24810
- if (this.colDidChange) {
24811
- // Animation must be disabled through the `onDomChange` parameter.
24812
- // Otherwise, the recently added options will render
24813
- // at the top of the column and transition down
24814
- this.onDomChange(true, false);
24815
- this.colDidChange = false;
24816
- }
24817
- }
24818
- disconnectedCallback() {
24819
- if (this.rafId !== undefined)
24820
- cancelAnimationFrame(this.rafId);
24821
- if (this.tmrId)
24822
- clearTimeout(this.tmrId);
24823
- if (this.gesture) {
24824
- this.gesture.destroy();
24825
- this.gesture = undefined;
24826
- }
24827
- }
24828
- emitColChange() {
24829
- this.ionPickerColChange.emit(this.col);
24830
- }
24831
- setSelected(selectedIndex, duration) {
24832
- // if there is a selected index, then figure out it's y position
24833
- // if there isn't a selected index, then just use the top y position
24834
- const y = selectedIndex > -1 ? -(selectedIndex * this.optHeight) : 0;
24835
- this.velocity = 0;
24836
- // set what y position we're at
24837
- if (this.rafId !== undefined)
24838
- cancelAnimationFrame(this.rafId);
24839
- this.update(y, duration, true);
24840
- this.emitColChange();
24841
- }
24842
- update(y, duration, saveY) {
24843
- if (!this.optsEl) {
24844
- return;
24845
- }
24846
- // ensure we've got a good round number :)
24847
- let translateY = 0;
24848
- let translateZ = 0;
24849
- const { col, rotateFactor } = this;
24850
- const prevSelected = col.selectedIndex;
24851
- const selectedIndex = (col.selectedIndex = this.indexForY(-y));
24852
- const durationStr = duration === 0 ? '' : duration + 'ms';
24853
- const scaleStr = `scale(${this.scaleFactor})`;
24854
- const children = this.optsEl.children;
24855
- for (let i = 0; i < children.length; i++) {
24856
- const button = children[i];
24857
- const opt = col.options[i];
24858
- const optOffset = i * this.optHeight + y;
24859
- let transform = '';
24860
- if (rotateFactor !== 0) {
24861
- const rotateX = optOffset * rotateFactor;
24862
- if (Math.abs(rotateX) <= 90) {
24863
- translateY = 0;
24864
- translateZ = 90;
24865
- transform = `rotateX(${rotateX}deg) `;
24526
+ /**
24527
+ * If we have actionOnClick
24528
+ * then this means the user focused
24529
+ * a picker column via mouse or
24530
+ * touch (i.e. a PointerEvent). As a result,
24531
+ * we should not enter/exit input mode
24532
+ * until the click event has fired, which happens
24533
+ * after the `focusin` event.
24534
+ *
24535
+ * Otherwise, the user likely focused
24536
+ * the column using their keyboard and
24537
+ * we should enter/exit input mode automatically.
24538
+ */
24539
+ if (!this.actionOnClick) {
24540
+ const columnEl = target;
24541
+ const allowInput = columnEl.numericInput;
24542
+ if (allowInput) {
24543
+ this.enterInputMode(columnEl, false);
24866
24544
  }
24867
24545
  else {
24868
- translateY = -9999;
24546
+ this.exitInputMode();
24547
+ }
24548
+ }
24549
+ };
24550
+ /**
24551
+ * On click we need to run an actionOnClick
24552
+ * function that has been set in onPointerDown
24553
+ * so that we enter/exit input mode correctly.
24554
+ */
24555
+ this.onClick = () => {
24556
+ const { actionOnClick } = this;
24557
+ if (actionOnClick) {
24558
+ actionOnClick();
24559
+ this.actionOnClick = undefined;
24560
+ }
24561
+ };
24562
+ /**
24563
+ * Clicking a column also focuses the column on
24564
+ * certain browsers, so we use onPointerDown
24565
+ * to tell the onFocusIn function that users
24566
+ * are trying to click the column rather than
24567
+ * focus the column using the keyboard. When the
24568
+ * user completes the click, the onClick function
24569
+ * runs and runs the actionOnClick callback.
24570
+ */
24571
+ this.onPointerDown = (ev) => {
24572
+ const { useInputMode, inputModeColumn, el } = this;
24573
+ if (this.isInHighlightBounds(ev)) {
24574
+ /**
24575
+ * If we were already in
24576
+ * input mode, then we should determine
24577
+ * if we tapped a particular column and
24578
+ * should switch to input mode for
24579
+ * that specific column.
24580
+ */
24581
+ if (useInputMode) {
24582
+ /**
24583
+ * If we tapped a picker column
24584
+ * then we should either switch to input
24585
+ * mode for that column or all columns.
24586
+ * Otherwise we should exit input mode
24587
+ * since we just tapped the highlight and
24588
+ * not a column.
24589
+ */
24590
+ if (ev.target.tagName === 'ION-PICKER-COLUMN') {
24591
+ /**
24592
+ * If user taps 2 different columns
24593
+ * then we should just switch to input mode
24594
+ * for the new column rather than switching to
24595
+ * input mode for all columns.
24596
+ */
24597
+ if (inputModeColumn && inputModeColumn === ev.target) {
24598
+ this.actionOnClick = () => {
24599
+ this.enterInputMode();
24600
+ };
24601
+ }
24602
+ else {
24603
+ this.actionOnClick = () => {
24604
+ this.enterInputMode(ev.target);
24605
+ };
24606
+ }
24607
+ }
24608
+ else {
24609
+ this.actionOnClick = () => {
24610
+ this.exitInputMode();
24611
+ };
24612
+ }
24613
+ /**
24614
+ * If we were not already in
24615
+ * input mode, then we should
24616
+ * enter input mode for all columns.
24617
+ */
24618
+ }
24619
+ else {
24620
+ /**
24621
+ * If there is only 1 numeric input column
24622
+ * then we should skip multi column input.
24623
+ */
24624
+ const columns = el.querySelectorAll('ion-picker-column.picker-column-numeric-input');
24625
+ const columnEl = columns.length === 1 ? ev.target : undefined;
24626
+ this.actionOnClick = () => {
24627
+ this.enterInputMode(columnEl);
24628
+ };
24629
+ }
24630
+ return;
24631
+ }
24632
+ this.actionOnClick = () => {
24633
+ this.exitInputMode();
24634
+ };
24635
+ };
24636
+ /**
24637
+ * Enters input mode to allow
24638
+ * for text entry of numeric values.
24639
+ * If on mobile, we focus a hidden input
24640
+ * field so that the on screen keyboard
24641
+ * is brought up. When tabbing using a
24642
+ * keyboard, picker columns receive an outline
24643
+ * to indicate they are focused. As a result,
24644
+ * we should not focus the hidden input as it
24645
+ * would cause the outline to go away, preventing
24646
+ * users from having any visual indication of which
24647
+ * column is focused.
24648
+ */
24649
+ this.enterInputMode = (columnEl, focusInput = true) => {
24650
+ const { inputEl, el } = this;
24651
+ if (!inputEl) {
24652
+ return;
24653
+ }
24654
+ /**
24655
+ * Only active input mode if there is at
24656
+ * least one column that accepts numeric input.
24657
+ */
24658
+ const hasInputColumn = el.querySelector('ion-picker-column.picker-column-numeric-input');
24659
+ if (!hasInputColumn) {
24660
+ return;
24661
+ }
24662
+ /**
24663
+ * If columnEl is undefined then
24664
+ * it is assumed that all numeric pickers
24665
+ * are eligible for text entry.
24666
+ * (i.e. hour and minute columns)
24667
+ */
24668
+ this.useInputMode = true;
24669
+ this.inputModeColumn = columnEl;
24670
+ /**
24671
+ * Users with a keyboard and mouse can
24672
+ * activate input mode where the input is
24673
+ * focused as well as when it is not focused,
24674
+ * so we need to make sure we clean up any
24675
+ * old listeners.
24676
+ */
24677
+ if (focusInput) {
24678
+ if (this.destroyKeypressListener) {
24679
+ this.destroyKeypressListener();
24680
+ this.destroyKeypressListener = undefined;
24869
24681
  }
24682
+ inputEl.focus();
24870
24683
  }
24871
24684
  else {
24872
- translateZ = 0;
24873
- translateY = optOffset;
24685
+ el.addEventListener('keypress', this.onKeyPress);
24686
+ this.destroyKeypressListener = () => {
24687
+ el.removeEventListener('keypress', this.onKeyPress);
24688
+ };
24874
24689
  }
24875
- const selected = selectedIndex === i;
24876
- transform += `translate3d(0px,${translateY}px,${translateZ}px) `;
24877
- if (this.scaleFactor !== 1 && !selected) {
24878
- transform += scaleStr;
24690
+ this.emitInputModeChange();
24691
+ };
24692
+ this.onKeyPress = (ev) => {
24693
+ const { inputEl } = this;
24694
+ if (!inputEl) {
24695
+ return;
24879
24696
  }
24880
- // Update transition duration
24881
- if (this.noAnimate) {
24882
- opt.duration = 0;
24883
- button.style.transitionDuration = '';
24697
+ const parsedValue = parseInt(ev.key, 10);
24698
+ /**
24699
+ * Only numbers should be allowed
24700
+ */
24701
+ if (!Number.isNaN(parsedValue)) {
24702
+ inputEl.value += ev.key;
24703
+ this.onInputChange();
24884
24704
  }
24885
- else if (duration !== opt.duration) {
24886
- opt.duration = duration;
24887
- button.style.transitionDuration = durationStr;
24705
+ };
24706
+ this.selectSingleColumn = () => {
24707
+ const { inputEl, inputModeColumn, singleColumnSearchTimeout } = this;
24708
+ if (!inputEl || !inputModeColumn) {
24709
+ return;
24710
+ }
24711
+ const values = inputModeColumn.items.filter((item) => item.disabled !== true);
24712
+ /**
24713
+ * If users pause for a bit, the search
24714
+ * value should be reset similar to how a
24715
+ * <select> behaves. So typing "34", waiting,
24716
+ * then typing "5" should select "05".
24717
+ */
24718
+ if (singleColumnSearchTimeout) {
24719
+ clearTimeout(singleColumnSearchTimeout);
24720
+ }
24721
+ this.singleColumnSearchTimeout = setTimeout(() => {
24722
+ inputEl.value = '';
24723
+ this.singleColumnSearchTimeout = undefined;
24724
+ }, 1000);
24725
+ /**
24726
+ * For values that are longer than 2 digits long
24727
+ * we should shift the value over 1 character
24728
+ * to the left. So typing "456" would result in "56".
24729
+ * TODO: If we want to support more than just
24730
+ * time entry, we should update this value to be
24731
+ * the max length of all of the picker items.
24732
+ */
24733
+ if (inputEl.value.length >= 3) {
24734
+ const startIndex = inputEl.value.length - 2;
24735
+ const newString = inputEl.value.substring(startIndex);
24736
+ inputEl.value = newString;
24737
+ this.selectSingleColumn();
24738
+ return;
24739
+ }
24740
+ /**
24741
+ * Checking the value of the input gets priority
24742
+ * first. For example, if the value of the input
24743
+ * is "1" and we entered "2", then the complete value
24744
+ * is "12" and we should select hour 12.
24745
+ *
24746
+ * Regex removes any leading zeros from values like "02",
24747
+ * but it keeps a single zero if there are only zeros in the string.
24748
+ * 0+(?=[1-9]) --> Match 1 or more zeros that are followed by 1-9
24749
+ * 0+(?=0$) --> Match 1 or more zeros that must be followed by one 0 and end.
24750
+ */
24751
+ const findItemFromCompleteValue = values.find(({ text }) => {
24752
+ const parsedText = text.replace(/^0+(?=[1-9])|0+(?=0$)/, '');
24753
+ return parsedText === inputEl.value;
24754
+ });
24755
+ if (findItemFromCompleteValue) {
24756
+ inputModeColumn.setValue(findItemFromCompleteValue.value);
24757
+ return;
24758
+ }
24759
+ /**
24760
+ * If we typed "56" to get minute 56, then typed "7",
24761
+ * we should select "07" as "567" is not a valid minute.
24762
+ */
24763
+ if (inputEl.value.length === 2) {
24764
+ const changedCharacter = inputEl.value.substring(inputEl.value.length - 1);
24765
+ inputEl.value = changedCharacter;
24766
+ this.selectSingleColumn();
24767
+ }
24768
+ };
24769
+ /**
24770
+ * Searches a list of column items for a particular
24771
+ * value. This is currently used for numeric values.
24772
+ * The zeroBehavior can be set to account for leading
24773
+ * or trailing zeros when looking at the item text.
24774
+ */
24775
+ this.searchColumn = (colEl, value, zeroBehavior = 'start') => {
24776
+ const behavior = zeroBehavior === 'start' ? /^0+/ : /0$/;
24777
+ const item = colEl.items.find(({ text, disabled }) => disabled !== true && text.replace(behavior, '') === value);
24778
+ if (item) {
24779
+ colEl.setValue(item.value);
24780
+ }
24781
+ };
24782
+ this.selectMultiColumn = () => {
24783
+ const { inputEl, el } = this;
24784
+ if (!inputEl) {
24785
+ return;
24786
+ }
24787
+ const numericPickers = Array.from(el.querySelectorAll('ion-picker-column')).filter((col) => col.numericInput);
24788
+ const firstColumn = numericPickers[0];
24789
+ const lastColumn = numericPickers[1];
24790
+ let value = inputEl.value;
24791
+ let minuteValue;
24792
+ switch (value.length) {
24793
+ case 1:
24794
+ this.searchColumn(firstColumn, value);
24795
+ break;
24796
+ case 2:
24797
+ /**
24798
+ * If the first character is `0` or `1` it is
24799
+ * possible that users are trying to type `09`
24800
+ * or `11` into the hour field, so we should look
24801
+ * at that first.
24802
+ */
24803
+ const firstCharacter = inputEl.value.substring(0, 1);
24804
+ value = firstCharacter === '0' || firstCharacter === '1' ? inputEl.value : firstCharacter;
24805
+ this.searchColumn(firstColumn, value);
24806
+ /**
24807
+ * If only checked the first value,
24808
+ * we can check the second value
24809
+ * for a match in the minutes column
24810
+ */
24811
+ if (value.length === 1) {
24812
+ minuteValue = inputEl.value.substring(inputEl.value.length - 1);
24813
+ this.searchColumn(lastColumn, minuteValue, 'end');
24814
+ }
24815
+ break;
24816
+ case 3:
24817
+ /**
24818
+ * If the first character is `0` or `1` it is
24819
+ * possible that users are trying to type `09`
24820
+ * or `11` into the hour field, so we should look
24821
+ * at that first.
24822
+ */
24823
+ const firstCharacterAgain = inputEl.value.substring(0, 1);
24824
+ value =
24825
+ firstCharacterAgain === '0' || firstCharacterAgain === '1'
24826
+ ? inputEl.value.substring(0, 2)
24827
+ : firstCharacterAgain;
24828
+ this.searchColumn(firstColumn, value);
24829
+ /**
24830
+ * If only checked the first value,
24831
+ * we can check the second value
24832
+ * for a match in the minutes column
24833
+ */
24834
+ minuteValue = value.length === 1 ? inputEl.value.substring(1) : inputEl.value.substring(2);
24835
+ this.searchColumn(lastColumn, minuteValue, 'end');
24836
+ break;
24837
+ case 4:
24838
+ /**
24839
+ * If the first character is `0` or `1` it is
24840
+ * possible that users are trying to type `09`
24841
+ * or `11` into the hour field, so we should look
24842
+ * at that first.
24843
+ */
24844
+ const firstCharacterAgainAgain = inputEl.value.substring(0, 1);
24845
+ value =
24846
+ firstCharacterAgainAgain === '0' || firstCharacterAgainAgain === '1'
24847
+ ? inputEl.value.substring(0, 2)
24848
+ : firstCharacterAgainAgain;
24849
+ this.searchColumn(firstColumn, value);
24850
+ /**
24851
+ * If only checked the first value,
24852
+ * we can check the second value
24853
+ * for a match in the minutes column
24854
+ */
24855
+ const minuteValueAgain = value.length === 1
24856
+ ? inputEl.value.substring(1, inputEl.value.length)
24857
+ : inputEl.value.substring(2, inputEl.value.length);
24858
+ this.searchColumn(lastColumn, minuteValueAgain, 'end');
24859
+ break;
24860
+ default:
24861
+ const startIndex = inputEl.value.length - 4;
24862
+ const newString = inputEl.value.substring(startIndex);
24863
+ inputEl.value = newString;
24864
+ this.selectMultiColumn();
24865
+ break;
24888
24866
  }
24889
- // Update transform
24890
- if (transform !== opt.transform) {
24891
- opt.transform = transform;
24867
+ };
24868
+ /**
24869
+ * Searches the value of the active column
24870
+ * to determine which value users are trying
24871
+ * to select
24872
+ */
24873
+ this.onInputChange = () => {
24874
+ const { useInputMode, inputEl, inputModeColumn } = this;
24875
+ if (!useInputMode || !inputEl) {
24876
+ return;
24892
24877
  }
24893
- button.style.transform = transform;
24894
- /**
24895
- * Ensure that the select column
24896
- * item has the selected class
24897
- */
24898
- opt.selected = selected;
24899
- if (selected) {
24900
- button.classList.add(PICKER_OPT_SELECTED);
24878
+ if (inputModeColumn) {
24879
+ this.selectSingleColumn();
24901
24880
  }
24902
24881
  else {
24903
- button.classList.remove(PICKER_OPT_SELECTED);
24882
+ this.selectMultiColumn();
24904
24883
  }
24905
- }
24906
- this.col.prevSelected = prevSelected;
24907
- if (saveY) {
24908
- this.y = y;
24909
- }
24910
- if (this.lastIndex !== selectedIndex) {
24911
- // have not set a last index yet
24912
- hapticSelectionChanged();
24913
- this.lastIndex = selectedIndex;
24914
- }
24884
+ };
24885
+ /**
24886
+ * Emit ionInputModeChange. Picker columns
24887
+ * listen for this event to determine whether
24888
+ * or not their column is "active" for text input.
24889
+ */
24890
+ this.emitInputModeChange = () => {
24891
+ const { useInputMode, inputModeColumn } = this;
24892
+ this.ionInputModeChange.emit({
24893
+ useInputMode,
24894
+ inputModeColumn,
24895
+ });
24896
+ };
24915
24897
  }
24916
- decelerate() {
24917
- if (this.velocity !== 0) {
24918
- // still decelerating
24919
- this.velocity *= DECELERATION_FRICTION;
24920
- // do not let it go slower than a velocity of 1
24921
- this.velocity = this.velocity > 0 ? Math.max(this.velocity, 1) : Math.min(this.velocity, -1);
24922
- let y = this.y + this.velocity;
24923
- if (y > this.minY) {
24924
- // whoops, it's trying to scroll up farther than the options we have!
24925
- y = this.minY;
24926
- this.velocity = 0;
24927
- }
24928
- else if (y < this.maxY) {
24929
- // gahh, it's trying to scroll down farther than we can!
24930
- y = this.maxY;
24931
- this.velocity = 0;
24932
- }
24933
- this.update(y, 0, true);
24934
- const notLockedIn = Math.round(y) % this.optHeight !== 0 || Math.abs(this.velocity) > 1;
24935
- if (notLockedIn) {
24936
- // isn't locked in yet, keep decelerating until it is
24937
- this.rafId = requestAnimationFrame(() => this.decelerate());
24938
- }
24939
- else {
24940
- this.velocity = 0;
24941
- this.emitColChange();
24942
- hapticSelectionEnd();
24943
- }
24898
+ /**
24899
+ * When the picker is interacted with
24900
+ * we need to prevent touchstart so other
24901
+ * gestures do not fire. For example,
24902
+ * scrolling on the wheel picker
24903
+ * in ion-datetime should not cause
24904
+ * a card modal to swipe to close.
24905
+ */
24906
+ preventTouchStartPropagation(ev) {
24907
+ ev.stopPropagation();
24908
+ }
24909
+ componentWillLoad() {
24910
+ getElementRoot(this.el).addEventListener('focusin', this.onFocusIn);
24911
+ getElementRoot(this.el).addEventListener('focusout', this.onFocusOut);
24912
+ }
24913
+ /**
24914
+ * @internal
24915
+ * Exits text entry mode for the picker
24916
+ * This method blurs the hidden input
24917
+ * and cause the keyboard to dismiss.
24918
+ */
24919
+ async exitInputMode() {
24920
+ const { inputEl, useInputMode } = this;
24921
+ if (!useInputMode || !inputEl) {
24922
+ return;
24944
24923
  }
24945
- else if (this.y % this.optHeight !== 0) {
24946
- // needs to still get locked into a position so options line up
24947
- const currentPos = Math.abs(this.y % this.optHeight);
24948
- // create a velocity in the direction it needs to scroll
24949
- this.velocity = currentPos > this.optHeight / 2 ? 1 : -1;
24950
- this.decelerate();
24924
+ this.useInputMode = false;
24925
+ this.inputModeColumn = undefined;
24926
+ inputEl.blur();
24927
+ inputEl.value = '';
24928
+ if (this.destroyKeypressListener) {
24929
+ this.destroyKeypressListener();
24930
+ this.destroyKeypressListener = undefined;
24951
24931
  }
24932
+ this.emitInputModeChange();
24952
24933
  }
24953
- indexForY(y) {
24954
- return Math.min(Math.max(Math.abs(Math.round(y / this.optHeight)), 0), this.col.options.length - 1);
24934
+ render() {
24935
+ 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)));
24955
24936
  }
24956
- onStart(detail) {
24957
- // We have to prevent default in order to block scrolling under the picker
24958
- // but we DO NOT have to stop propagation, since we still want
24959
- // some "click" events to capture
24960
- if (detail.event.cancelable) {
24961
- detail.event.preventDefault();
24937
+ get el() { return getElement(this); }
24938
+ static get style() { return {
24939
+ ios: pickerIosCss$1,
24940
+ md: pickerMdCss$1
24941
+ }; }
24942
+ static get cmpMeta() { return {
24943
+ "$flags$": 41,
24944
+ "$tagName$": "ion-picker",
24945
+ "$members$": {
24946
+ "exitInputMode": [64]
24947
+ },
24948
+ "$listeners$": [[1, "touchstart", "preventTouchStartPropagation"]],
24949
+ "$lazyBundleId$": "-",
24950
+ "$attrsToReflect$": []
24951
+ }; }
24952
+ }
24953
+
24954
+ /**
24955
+ * iOS Picker Enter Animation
24956
+ */
24957
+ const iosEnterAnimation$2 = (baseEl) => {
24958
+ const baseAnimation = createAnimation();
24959
+ const backdropAnimation = createAnimation();
24960
+ const wrapperAnimation = createAnimation();
24961
+ backdropAnimation
24962
+ .addElement(baseEl.querySelector('ion-backdrop'))
24963
+ .fromTo('opacity', 0.01, 'var(--backdrop-opacity)')
24964
+ .beforeStyles({
24965
+ 'pointer-events': 'none',
24966
+ })
24967
+ .afterClearStyles(['pointer-events']);
24968
+ wrapperAnimation
24969
+ .addElement(baseEl.querySelector('.picker-wrapper'))
24970
+ .fromTo('transform', 'translateY(100%)', 'translateY(0%)');
24971
+ return baseAnimation
24972
+ .addElement(baseEl)
24973
+ .easing('cubic-bezier(.36,.66,.04,1)')
24974
+ .duration(400)
24975
+ .addAnimation([backdropAnimation, wrapperAnimation]);
24976
+ };
24977
+
24978
+ /**
24979
+ * iOS Picker Leave Animation
24980
+ */
24981
+ const iosLeaveAnimation$2 = (baseEl) => {
24982
+ const baseAnimation = createAnimation();
24983
+ const backdropAnimation = createAnimation();
24984
+ const wrapperAnimation = createAnimation();
24985
+ backdropAnimation
24986
+ .addElement(baseEl.querySelector('ion-backdrop'))
24987
+ .fromTo('opacity', 'var(--backdrop-opacity)', 0.01);
24988
+ wrapperAnimation
24989
+ .addElement(baseEl.querySelector('.picker-wrapper'))
24990
+ .fromTo('transform', 'translateY(0%)', 'translateY(100%)');
24991
+ return baseAnimation
24992
+ .addElement(baseEl)
24993
+ .easing('cubic-bezier(.36,.66,.04,1)')
24994
+ .duration(400)
24995
+ .addAnimation([backdropAnimation, wrapperAnimation]);
24996
+ };
24997
+
24998
+ 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}}}";
24999
+
25000
+ 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}}}";
25001
+
25002
+ // TODO(FW-2832): types
25003
+ /**
25004
+ * @virtualProp {"ios" | "md"} mode - The mode determines which platform styles to use.
25005
+ */
25006
+ class Picker {
25007
+ constructor(hostRef) {
25008
+ registerInstance(this, hostRef);
25009
+ this.didPresent = createEvent(this, "ionPickerDidPresent", 7);
25010
+ this.willPresent = createEvent(this, "ionPickerWillPresent", 7);
25011
+ this.willDismiss = createEvent(this, "ionPickerWillDismiss", 7);
25012
+ this.didDismiss = createEvent(this, "ionPickerDidDismiss", 7);
25013
+ this.didPresentShorthand = createEvent(this, "didPresent", 7);
25014
+ this.willPresentShorthand = createEvent(this, "willPresent", 7);
25015
+ this.willDismissShorthand = createEvent(this, "willDismiss", 7);
25016
+ this.didDismissShorthand = createEvent(this, "didDismiss", 7);
25017
+ this.delegateController = createDelegateController(this);
25018
+ this.lockController = createLockController();
25019
+ this.triggerController = createTriggerController();
25020
+ this.onBackdropTap = () => {
25021
+ this.dismiss(undefined, BACKDROP);
25022
+ };
25023
+ this.dispatchCancelHandler = (ev) => {
25024
+ const role = ev.detail.role;
25025
+ if (isCancel(role)) {
25026
+ const cancelButton = this.buttons.find((b) => b.role === 'cancel');
25027
+ this.callButtonHandler(cancelButton);
25028
+ }
25029
+ };
25030
+ this.presented = false;
25031
+ this.overlayIndex = undefined;
25032
+ this.delegate = undefined;
25033
+ this.hasController = false;
25034
+ this.keyboardClose = true;
25035
+ this.enterAnimation = undefined;
25036
+ this.leaveAnimation = undefined;
25037
+ this.buttons = [];
25038
+ this.columns = [];
25039
+ this.cssClass = undefined;
25040
+ this.duration = 0;
25041
+ this.showBackdrop = true;
25042
+ this.backdropDismiss = true;
25043
+ this.animated = true;
25044
+ this.htmlAttributes = undefined;
25045
+ this.isOpen = false;
25046
+ this.trigger = undefined;
25047
+ }
25048
+ onIsOpenChange(newValue, oldValue) {
25049
+ if (newValue === true && oldValue === false) {
25050
+ this.present();
24962
25051
  }
24963
- detail.event.stopPropagation();
24964
- hapticSelectionStart();
24965
- // reset everything
24966
- if (this.rafId !== undefined)
24967
- cancelAnimationFrame(this.rafId);
24968
- const options = this.col.options;
24969
- let minY = options.length - 1;
24970
- let maxY = 0;
24971
- for (let i = 0; i < options.length; i++) {
24972
- if (!options[i].disabled) {
24973
- minY = Math.min(minY, i);
24974
- maxY = Math.max(maxY, i);
24975
- }
25052
+ else if (newValue === false && oldValue === true) {
25053
+ this.dismiss();
24976
25054
  }
24977
- this.minY = -(minY * this.optHeight);
24978
- this.maxY = -(maxY * this.optHeight);
24979
25055
  }
24980
- onMove(detail) {
24981
- if (detail.event.cancelable) {
24982
- detail.event.preventDefault();
24983
- }
24984
- detail.event.stopPropagation();
24985
- // update the scroll position relative to pointer start position
24986
- let y = this.y + detail.deltaY;
24987
- if (y > this.minY) {
24988
- // scrolling up higher than scroll area
24989
- y = Math.pow(y, 0.8);
24990
- this.bounceFrom = y;
25056
+ triggerChanged() {
25057
+ const { trigger, el, triggerController } = this;
25058
+ if (trigger) {
25059
+ triggerController.addClickListener(el, trigger);
24991
25060
  }
24992
- else if (y < this.maxY) {
24993
- // scrolling down below scroll area
24994
- y += Math.pow(this.maxY - y, 0.9);
24995
- this.bounceFrom = y;
25061
+ }
25062
+ connectedCallback() {
25063
+ prepareOverlay(this.el);
25064
+ this.triggerChanged();
25065
+ }
25066
+ disconnectedCallback() {
25067
+ this.triggerController.removeClickListener();
25068
+ }
25069
+ componentWillLoad() {
25070
+ setOverlayId(this.el);
25071
+ }
25072
+ componentDidLoad() {
25073
+ 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);
25074
+ /**
25075
+ * If picker was rendered with isOpen="true"
25076
+ * then we should open picker immediately.
25077
+ */
25078
+ if (this.isOpen === true) {
25079
+ raf(() => this.present());
24996
25080
  }
24997
- else {
24998
- this.bounceFrom = 0;
25081
+ }
25082
+ /**
25083
+ * Present the picker overlay after it has been created.
25084
+ */
25085
+ async present() {
25086
+ const unlock = await this.lockController.lock();
25087
+ await this.delegateController.attachViewToDom();
25088
+ await present(this, 'pickerEnter', iosEnterAnimation$2, iosEnterAnimation$2, undefined);
25089
+ if (this.duration > 0) {
25090
+ this.durationTimeout = setTimeout(() => this.dismiss(), this.duration);
24999
25091
  }
25000
- this.update(y, 0, false);
25092
+ unlock();
25001
25093
  }
25002
- onEnd(detail) {
25003
- if (this.bounceFrom > 0) {
25004
- // bounce back up
25005
- this.update(this.minY, 100, true);
25006
- this.emitColChange();
25007
- return;
25094
+ /**
25095
+ * Dismiss the picker overlay after it has been presented.
25096
+ *
25097
+ * @param data Any data to emit in the dismiss events.
25098
+ * @param role The role of the element that is dismissing the picker.
25099
+ * This can be useful in a button handler for determining which button was
25100
+ * clicked to dismiss the picker.
25101
+ * Some examples include: ``"cancel"`, `"destructive"`, "selected"`, and `"backdrop"`.
25102
+ */
25103
+ async dismiss(data, role) {
25104
+ const unlock = await this.lockController.lock();
25105
+ if (this.durationTimeout) {
25106
+ clearTimeout(this.durationTimeout);
25008
25107
  }
25009
- else if (this.bounceFrom < 0) {
25010
- // bounce back down
25011
- this.update(this.maxY, 100, true);
25012
- this.emitColChange();
25013
- return;
25108
+ const dismissed = await dismiss(this, data, role, 'pickerLeave', iosLeaveAnimation$2, iosLeaveAnimation$2);
25109
+ if (dismissed) {
25110
+ this.delegateController.removeViewFromDom();
25014
25111
  }
25015
- this.velocity = clamp(-MAX_PICKER_SPEED, detail.velocityY * 23, MAX_PICKER_SPEED);
25016
- if (this.velocity === 0 && detail.deltaY === 0) {
25017
- const opt = detail.event.target.closest('.picker-opt');
25018
- if (opt === null || opt === void 0 ? void 0 : opt.hasAttribute('opt-index')) {
25019
- this.setSelected(parseInt(opt.getAttribute('opt-index'), 10), TRANSITION_DURATION);
25020
- }
25112
+ unlock();
25113
+ return dismissed;
25114
+ }
25115
+ /**
25116
+ * Returns a promise that resolves when the picker did dismiss.
25117
+ */
25118
+ onDidDismiss() {
25119
+ return eventMethod(this.el, 'ionPickerDidDismiss');
25120
+ }
25121
+ /**
25122
+ * Returns a promise that resolves when the picker will dismiss.
25123
+ */
25124
+ onWillDismiss() {
25125
+ return eventMethod(this.el, 'ionPickerWillDismiss');
25126
+ }
25127
+ /**
25128
+ * Get the column that matches the specified name.
25129
+ *
25130
+ * @param name The name of the column.
25131
+ */
25132
+ getColumn(name) {
25133
+ return Promise.resolve(this.columns.find((column) => column.name === name));
25134
+ }
25135
+ async buttonClick(button) {
25136
+ const role = button.role;
25137
+ if (isCancel(role)) {
25138
+ return this.dismiss(undefined, role);
25021
25139
  }
25022
- else {
25023
- this.y += detail.deltaY;
25024
- if (Math.abs(detail.velocityY) < 0.05) {
25025
- const isScrollingUp = detail.deltaY > 0;
25026
- const optHeightFraction = (Math.abs(this.y) % this.optHeight) / this.optHeight;
25027
- if (isScrollingUp && optHeightFraction > 0.5) {
25028
- this.velocity = Math.abs(this.velocity) * -1;
25029
- }
25030
- else if (!isScrollingUp && optHeightFraction <= 0.5) {
25031
- this.velocity = Math.abs(this.velocity);
25032
- }
25033
- }
25034
- this.decelerate();
25140
+ const shouldDismiss = await this.callButtonHandler(button);
25141
+ if (shouldDismiss) {
25142
+ return this.dismiss(this.getSelected(), button.role);
25035
25143
  }
25144
+ return Promise.resolve();
25036
25145
  }
25037
- refresh(forceRefresh, animated) {
25038
- var _a;
25039
- let min = this.col.options.length - 1;
25040
- let max = 0;
25041
- const options = this.col.options;
25042
- for (let i = 0; i < options.length; i++) {
25043
- if (!options[i].disabled) {
25044
- min = Math.min(min, i);
25045
- max = Math.max(max, i);
25146
+ async callButtonHandler(button) {
25147
+ if (button) {
25148
+ // a handler has been provided, execute it
25149
+ // pass the handler the values from the inputs
25150
+ const rtn = await safeCall(button.handler, this.getSelected());
25151
+ if (rtn === false) {
25152
+ // if the return value of the handler is false then do not dismiss
25153
+ return false;
25046
25154
  }
25047
25155
  }
25048
- /**
25049
- * Only update selected value if column has a
25050
- * velocity of 0. If it does not, then the
25051
- * column is animating might land on
25052
- * a value different than the value at
25053
- * selectedIndex
25054
- */
25055
- if (this.velocity !== 0) {
25056
- return;
25057
- }
25058
- const selectedIndex = clamp(min, (_a = this.col.selectedIndex) !== null && _a !== void 0 ? _a : 0, max);
25059
- if (this.col.prevSelected !== selectedIndex || forceRefresh) {
25060
- const y = selectedIndex * this.optHeight * -1;
25061
- const duration = animated ? TRANSITION_DURATION : 0;
25062
- this.velocity = 0;
25063
- this.update(y, duration, true);
25064
- }
25156
+ return true;
25065
25157
  }
25066
- onDomChange(forceRefresh, animated) {
25067
- const colEl = this.optsEl;
25068
- if (colEl) {
25069
- // DOM READ
25070
- // We perfom a DOM read over a rendered item, this needs to happen after the first render or after the the column has changed
25071
- this.optHeight = colEl.firstElementChild ? colEl.firstElementChild.clientHeight : 0;
25072
- }
25073
- this.refresh(forceRefresh, animated);
25158
+ getSelected() {
25159
+ const selected = {};
25160
+ this.columns.forEach((col, index) => {
25161
+ const selectedColumn = col.selectedIndex !== undefined ? col.options[col.selectedIndex] : undefined;
25162
+ selected[col.name] = {
25163
+ text: selectedColumn ? selectedColumn.text : undefined,
25164
+ value: selectedColumn ? selectedColumn.value : undefined,
25165
+ columnIndex: index,
25166
+ };
25167
+ });
25168
+ return selected;
25074
25169
  }
25075
25170
  render() {
25076
- const col = this.col;
25171
+ const { htmlAttributes } = this;
25077
25172
  const mode = getIonMode$1(this);
25078
- 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: {
25079
- 'max-width': this.col.columnWidth,
25080
- } }, 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))));
25173
+ return (hAsync(Host, Object.assign({ "aria-modal": "true", tabindex: "-1" }, htmlAttributes, { style: {
25174
+ zIndex: `${20000 + this.overlayIndex}`,
25175
+ }, class: Object.assign({ [mode]: true,
25176
+ // Used internally for styling
25177
+ [`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" })));
25081
25178
  }
25082
25179
  get el() { return getElement(this); }
25083
25180
  static get watchers() { return {
25084
- "col": ["colChanged"]
25181
+ "isOpen": ["onIsOpenChange"],
25182
+ "trigger": ["triggerChanged"]
25085
25183
  }; }
25086
25184
  static get style() { return {
25087
- ios: pickerColumnIosCss,
25088
- md: pickerColumnMdCss
25185
+ ios: pickerIosCss,
25186
+ md: pickerMdCss
25089
25187
  }; }
25090
25188
  static get cmpMeta() { return {
25091
- "$flags$": 32,
25092
- "$tagName$": "ion-picker-legacy-column",
25189
+ "$flags$": 34,
25190
+ "$tagName$": "ion-picker-legacy",
25093
25191
  "$members$": {
25094
- "col": [16]
25192
+ "overlayIndex": [2, "overlay-index"],
25193
+ "delegate": [16],
25194
+ "hasController": [4, "has-controller"],
25195
+ "keyboardClose": [4, "keyboard-close"],
25196
+ "enterAnimation": [16],
25197
+ "leaveAnimation": [16],
25198
+ "buttons": [16],
25199
+ "columns": [16],
25200
+ "cssClass": [1, "css-class"],
25201
+ "duration": [2],
25202
+ "showBackdrop": [4, "show-backdrop"],
25203
+ "backdropDismiss": [4, "backdrop-dismiss"],
25204
+ "animated": [4],
25205
+ "htmlAttributes": [16],
25206
+ "isOpen": [4, "is-open"],
25207
+ "trigger": [1],
25208
+ "presented": [32],
25209
+ "present": [64],
25210
+ "dismiss": [64],
25211
+ "onDidDismiss": [64],
25212
+ "onWillDismiss": [64],
25213
+ "getColumn": [64]
25095
25214
  },
25096
25215
  "$listeners$": undefined,
25097
25216
  "$lazyBundleId$": "-",
25098
25217
  "$attrsToReflect$": []
25099
25218
  }; }
25100
25219
  }
25101
- const PICKER_OPT_SELECTED = 'picker-opt-selected';
25102
- const DECELERATION_FRICTION = 0.97;
25103
- const MAX_PICKER_SPEED = 90;
25104
- const TRANSITION_DURATION = 150;
25220
+ const buttonWrapperClass = (button) => {
25221
+ return {
25222
+ [`picker-toolbar-${button.role}`]: button.role !== undefined,
25223
+ 'picker-toolbar-button': true,
25224
+ };
25225
+ };
25226
+ const buttonClass$1 = (button) => {
25227
+ return Object.assign({ 'picker-button': true, 'ion-activatable': true }, getClassMap(button.cssClass));
25228
+ };
25105
25229
 
25106
- 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)}}";
25230
+ const pickerColumnIosCss$1 = "/*!@:host*/.sc-ion-picker-column-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-ios-h::-webkit-scrollbar{display:none}/*!@: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)*/.sc-ion-picker-column-ios-h:focus{outline:none;background:rgba(var(--ion-color-base-rgb), 0.2)}}";
25107
25231
 
25108
- 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)}";
25232
+ const pickerColumnMdCss$1 = "/*!@:host*/.sc-ion-picker-column-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-md-h::-webkit-scrollbar{display:none}/*!@: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)*/.sc-ion-picker-column-md-h:focus{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)}";
25109
25233
 
25110
25234
  /**
25111
25235
  * @virtualProp {"ios" | "md"} mode - The mode determines which platform styles to use.
25112
- * @internal
25113
25236
  */
25114
- class PickerColumnInternal {
25237
+ class PickerColumn {
25115
25238
  constructor(hostRef) {
25116
25239
  registerInstance(this, hostRef);
25117
25240
  this.ionChange = createEvent(this, "ionChange", 7);
@@ -25373,7 +25496,7 @@ class PickerColumnInternal {
25373
25496
  }
25374
25497
  };
25375
25498
  new IntersectionObserver(visibleCallback, { threshold: 0.001 }).observe(this.el);
25376
- const parentEl = (this.parentEl = this.el.closest('ion-picker-internal'));
25499
+ const parentEl = (this.parentEl = this.el.closest('ion-picker'));
25377
25500
  if (parentEl !== null) {
25378
25501
  // TODO(FW-2832): type
25379
25502
  parentEl.addEventListener('ionInputModeChange', (ev) => this.inputModeChange(ev));
@@ -25433,7 +25556,7 @@ class PickerColumnInternal {
25433
25556
  * exportparts is needed so ion-datetime can expose the parts
25434
25557
  * from two layers of shadow nesting. If this causes problems,
25435
25558
  * the attribute can be moved to datetime.tsx and set on every
25436
- * instance of ion-picker-column-internal there instead.
25559
+ * instance of ion-picker-column there instead.
25437
25560
  */
25438
25561
  return (hAsync(Host, { exportparts: `${PICKER_ITEM_PART}, ${PICKER_ITEM_ACTIVE_PART}`, disabled: pickerDisabled, tabindex: pickerDisabled ? null : 0, class: createColorClasses$1(color, {
25439
25562
  [mode]: true,
@@ -25453,12 +25576,12 @@ class PickerColumnInternal {
25453
25576
  "value": ["valueChange"]
25454
25577
  }; }
25455
25578
  static get style() { return {
25456
- ios: pickerColumnInternalIosCss,
25457
- md: pickerColumnInternalMdCss
25579
+ ios: pickerColumnIosCss$1,
25580
+ md: pickerColumnMdCss$1
25458
25581
  }; }
25459
25582
  static get cmpMeta() { return {
25460
25583
  "$flags$": 41,
25461
- "$tagName$": "ion-picker-column-internal",
25584
+ "$tagName$": "ion-picker-column",
25462
25585
  "$members$": {
25463
25586
  "disabled": [4],
25464
25587
  "items": [16],
@@ -25478,494 +25601,369 @@ const PICKER_ITEM_ACTIVE_CLASS = 'picker-item-active';
25478
25601
  const PICKER_ITEM_PART = 'wheel-item';
25479
25602
  const PICKER_ITEM_ACTIVE_PART = 'active';
25480
25603
 
25481
- 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))}";
25604
+ 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}}";
25482
25605
 
25483
- 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%)}";
25606
+ 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)}";
25484
25607
 
25485
25608
  /**
25486
- * @virtualProp {"ios" | "md"} mode - The mode determines which platform styles to use.
25487
25609
  * @internal
25488
25610
  */
25489
- class PickerInternal {
25611
+ class PickerColumnCmp {
25490
25612
  constructor(hostRef) {
25491
25613
  registerInstance(this, hostRef);
25492
- this.ionInputModeChange = createEvent(this, "ionInputModeChange", 7);
25493
- this.useInputMode = false;
25494
- this.isInHighlightBounds = (ev) => {
25495
- const { highlightEl } = this;
25496
- if (!highlightEl) {
25497
- return false;
25498
- }
25499
- const bbox = highlightEl.getBoundingClientRect();
25500
- /**
25501
- * Check to see if the user clicked
25502
- * outside the bounds of the highlight.
25503
- */
25504
- const outsideX = ev.clientX < bbox.left || ev.clientX > bbox.right;
25505
- const outsideY = ev.clientY < bbox.top || ev.clientY > bbox.bottom;
25506
- if (outsideX || outsideY) {
25507
- return false;
25508
- }
25509
- return true;
25510
- };
25511
- /**
25512
- * If we are no longer focused
25513
- * on a picker column, then we should
25514
- * exit input mode. An exception is made
25515
- * for the input in the picker since having
25516
- * that focused means we are still in input mode.
25517
- */
25518
- this.onFocusOut = (ev) => {
25519
- // TODO(FW-2832): type
25520
- const { relatedTarget } = ev;
25521
- if (!relatedTarget || (relatedTarget.tagName !== 'ION-PICKER-COLUMN-INTERNAL' && relatedTarget !== this.inputEl)) {
25522
- this.exitInputMode();
25523
- }
25524
- };
25525
- /**
25526
- * When picker columns receive focus
25527
- * the parent picker needs to determine
25528
- * whether to enter/exit input mode.
25529
- */
25530
- this.onFocusIn = (ev) => {
25531
- // TODO(FW-2832): type
25532
- const { target } = ev;
25533
- /**
25534
- * Due to browser differences in how/when focus
25535
- * is dispatched on certain elements, we need to
25536
- * make sure that this function only ever runs when
25537
- * focusing a picker column.
25538
- */
25539
- if (target.tagName !== 'ION-PICKER-COLUMN-INTERNAL') {
25540
- return;
25541
- }
25542
- /**
25543
- * If we have actionOnClick
25544
- * then this means the user focused
25545
- * a picker column via mouse or
25546
- * touch (i.e. a PointerEvent). As a result,
25547
- * we should not enter/exit input mode
25548
- * until the click event has fired, which happens
25549
- * after the `focusin` event.
25550
- *
25551
- * Otherwise, the user likely focused
25552
- * the column using their keyboard and
25553
- * we should enter/exit input mode automatically.
25554
- */
25555
- if (!this.actionOnClick) {
25556
- const columnEl = target;
25557
- const allowInput = columnEl.numericInput;
25558
- if (allowInput) {
25559
- this.enterInputMode(columnEl, false);
25560
- }
25561
- else {
25562
- this.exitInputMode();
25563
- }
25564
- }
25565
- };
25566
- /**
25567
- * On click we need to run an actionOnClick
25568
- * function that has been set in onPointerDown
25569
- * so that we enter/exit input mode correctly.
25570
- */
25571
- this.onClick = () => {
25572
- const { actionOnClick } = this;
25573
- if (actionOnClick) {
25574
- actionOnClick();
25575
- this.actionOnClick = undefined;
25576
- }
25577
- };
25578
- /**
25579
- * Clicking a column also focuses the column on
25580
- * certain browsers, so we use onPointerDown
25581
- * to tell the onFocusIn function that users
25582
- * are trying to click the column rather than
25583
- * focus the column using the keyboard. When the
25584
- * user completes the click, the onClick function
25585
- * runs and runs the actionOnClick callback.
25586
- */
25587
- this.onPointerDown = (ev) => {
25588
- const { useInputMode, inputModeColumn, el } = this;
25589
- if (this.isInHighlightBounds(ev)) {
25590
- /**
25591
- * If we were already in
25592
- * input mode, then we should determine
25593
- * if we tapped a particular column and
25594
- * should switch to input mode for
25595
- * that specific column.
25596
- */
25597
- if (useInputMode) {
25598
- /**
25599
- * If we tapped a picker column
25600
- * then we should either switch to input
25601
- * mode for that column or all columns.
25602
- * Otherwise we should exit input mode
25603
- * since we just tapped the highlight and
25604
- * not a column.
25605
- */
25606
- if (ev.target.tagName === 'ION-PICKER-COLUMN-INTERNAL') {
25607
- /**
25608
- * If user taps 2 different columns
25609
- * then we should just switch to input mode
25610
- * for the new column rather than switching to
25611
- * input mode for all columns.
25612
- */
25613
- if (inputModeColumn && inputModeColumn === ev.target) {
25614
- this.actionOnClick = () => {
25615
- this.enterInputMode();
25616
- };
25617
- }
25618
- else {
25619
- this.actionOnClick = () => {
25620
- this.enterInputMode(ev.target);
25621
- };
25622
- }
25623
- }
25624
- else {
25625
- this.actionOnClick = () => {
25626
- this.exitInputMode();
25627
- };
25628
- }
25629
- /**
25630
- * If we were not already in
25631
- * input mode, then we should
25632
- * enter input mode for all columns.
25633
- */
25614
+ this.ionPickerColChange = createEvent(this, "ionPickerColChange", 7);
25615
+ this.optHeight = 0;
25616
+ this.rotateFactor = 0;
25617
+ this.scaleFactor = 1;
25618
+ this.velocity = 0;
25619
+ this.y = 0;
25620
+ this.noAnimate = true;
25621
+ // `colDidChange` is a flag that gets set when the column is changed
25622
+ // dynamically. When this flag is set, the column will refresh
25623
+ // after the component re-renders to incorporate the new column data.
25624
+ // This is necessary because `this.refresh` queries for the option elements,
25625
+ // so it needs to wait for the latest elements to be available in the DOM.
25626
+ // Ex: column is created with 3 options. User updates the column data
25627
+ // to have 5 options. The column will still think it only has 3 options.
25628
+ this.colDidChange = false;
25629
+ this.col = undefined;
25630
+ }
25631
+ colChanged() {
25632
+ this.colDidChange = true;
25633
+ }
25634
+ async connectedCallback() {
25635
+ let pickerRotateFactor = 0;
25636
+ let pickerScaleFactor = 0.81;
25637
+ const mode = getIonMode$1(this);
25638
+ if (mode === 'ios') {
25639
+ pickerRotateFactor = -0.46;
25640
+ pickerScaleFactor = 1;
25641
+ }
25642
+ this.rotateFactor = pickerRotateFactor;
25643
+ this.scaleFactor = pickerScaleFactor;
25644
+ this.gesture = (await Promise.resolve().then(function () { return index; })).createGesture({
25645
+ el: this.el,
25646
+ gestureName: 'picker-swipe',
25647
+ gesturePriority: 100,
25648
+ threshold: 0,
25649
+ passive: false,
25650
+ onStart: (ev) => this.onStart(ev),
25651
+ onMove: (ev) => this.onMove(ev),
25652
+ onEnd: (ev) => this.onEnd(ev),
25653
+ });
25654
+ this.gesture.enable();
25655
+ // Options have not been initialized yet
25656
+ // Animation must be disabled through the `noAnimate` flag
25657
+ // Otherwise, the options will render
25658
+ // at the top of the column and transition down
25659
+ this.tmrId = setTimeout(() => {
25660
+ this.noAnimate = false;
25661
+ // After initialization, `refresh()` will be called
25662
+ // At this point, animation will be enabled. The options will
25663
+ // animate as they are being selected.
25664
+ this.refresh(true);
25665
+ }, 250);
25666
+ }
25667
+ componentDidLoad() {
25668
+ this.onDomChange();
25669
+ }
25670
+ componentDidUpdate() {
25671
+ // Options may have changed since last update.
25672
+ if (this.colDidChange) {
25673
+ // Animation must be disabled through the `onDomChange` parameter.
25674
+ // Otherwise, the recently added options will render
25675
+ // at the top of the column and transition down
25676
+ this.onDomChange(true, false);
25677
+ this.colDidChange = false;
25678
+ }
25679
+ }
25680
+ disconnectedCallback() {
25681
+ if (this.rafId !== undefined)
25682
+ cancelAnimationFrame(this.rafId);
25683
+ if (this.tmrId)
25684
+ clearTimeout(this.tmrId);
25685
+ if (this.gesture) {
25686
+ this.gesture.destroy();
25687
+ this.gesture = undefined;
25688
+ }
25689
+ }
25690
+ emitColChange() {
25691
+ this.ionPickerColChange.emit(this.col);
25692
+ }
25693
+ setSelected(selectedIndex, duration) {
25694
+ // if there is a selected index, then figure out it's y position
25695
+ // if there isn't a selected index, then just use the top y position
25696
+ const y = selectedIndex > -1 ? -(selectedIndex * this.optHeight) : 0;
25697
+ this.velocity = 0;
25698
+ // set what y position we're at
25699
+ if (this.rafId !== undefined)
25700
+ cancelAnimationFrame(this.rafId);
25701
+ this.update(y, duration, true);
25702
+ this.emitColChange();
25703
+ }
25704
+ update(y, duration, saveY) {
25705
+ if (!this.optsEl) {
25706
+ return;
25707
+ }
25708
+ // ensure we've got a good round number :)
25709
+ let translateY = 0;
25710
+ let translateZ = 0;
25711
+ const { col, rotateFactor } = this;
25712
+ const prevSelected = col.selectedIndex;
25713
+ const selectedIndex = (col.selectedIndex = this.indexForY(-y));
25714
+ const durationStr = duration === 0 ? '' : duration + 'ms';
25715
+ const scaleStr = `scale(${this.scaleFactor})`;
25716
+ const children = this.optsEl.children;
25717
+ for (let i = 0; i < children.length; i++) {
25718
+ const button = children[i];
25719
+ const opt = col.options[i];
25720
+ const optOffset = i * this.optHeight + y;
25721
+ let transform = '';
25722
+ if (rotateFactor !== 0) {
25723
+ const rotateX = optOffset * rotateFactor;
25724
+ if (Math.abs(rotateX) <= 90) {
25725
+ translateY = 0;
25726
+ translateZ = 90;
25727
+ transform = `rotateX(${rotateX}deg) `;
25634
25728
  }
25635
25729
  else {
25636
- /**
25637
- * If there is only 1 numeric input column
25638
- * then we should skip multi column input.
25639
- */
25640
- const columns = el.querySelectorAll('ion-picker-column-internal.picker-column-numeric-input');
25641
- const columnEl = columns.length === 1 ? ev.target : undefined;
25642
- this.actionOnClick = () => {
25643
- this.enterInputMode(columnEl);
25644
- };
25645
- }
25646
- return;
25647
- }
25648
- this.actionOnClick = () => {
25649
- this.exitInputMode();
25650
- };
25651
- };
25652
- /**
25653
- * Enters input mode to allow
25654
- * for text entry of numeric values.
25655
- * If on mobile, we focus a hidden input
25656
- * field so that the on screen keyboard
25657
- * is brought up. When tabbing using a
25658
- * keyboard, picker columns receive an outline
25659
- * to indicate they are focused. As a result,
25660
- * we should not focus the hidden input as it
25661
- * would cause the outline to go away, preventing
25662
- * users from having any visual indication of which
25663
- * column is focused.
25664
- */
25665
- this.enterInputMode = (columnEl, focusInput = true) => {
25666
- const { inputEl, el } = this;
25667
- if (!inputEl) {
25668
- return;
25669
- }
25670
- /**
25671
- * Only active input mode if there is at
25672
- * least one column that accepts numeric input.
25673
- */
25674
- const hasInputColumn = el.querySelector('ion-picker-column-internal.picker-column-numeric-input');
25675
- if (!hasInputColumn) {
25676
- return;
25677
- }
25678
- /**
25679
- * If columnEl is undefined then
25680
- * it is assumed that all numeric pickers
25681
- * are eligible for text entry.
25682
- * (i.e. hour and minute columns)
25683
- */
25684
- this.useInputMode = true;
25685
- this.inputModeColumn = columnEl;
25686
- /**
25687
- * Users with a keyboard and mouse can
25688
- * activate input mode where the input is
25689
- * focused as well as when it is not focused,
25690
- * so we need to make sure we clean up any
25691
- * old listeners.
25692
- */
25693
- if (focusInput) {
25694
- if (this.destroyKeypressListener) {
25695
- this.destroyKeypressListener();
25696
- this.destroyKeypressListener = undefined;
25730
+ translateY = -9999;
25697
25731
  }
25698
- inputEl.focus();
25699
25732
  }
25700
25733
  else {
25701
- el.addEventListener('keypress', this.onKeyPress);
25702
- this.destroyKeypressListener = () => {
25703
- el.removeEventListener('keypress', this.onKeyPress);
25704
- };
25705
- }
25706
- this.emitInputModeChange();
25707
- };
25708
- this.onKeyPress = (ev) => {
25709
- const { inputEl } = this;
25710
- if (!inputEl) {
25711
- return;
25712
- }
25713
- const parsedValue = parseInt(ev.key, 10);
25714
- /**
25715
- * Only numbers should be allowed
25716
- */
25717
- if (!Number.isNaN(parsedValue)) {
25718
- inputEl.value += ev.key;
25719
- this.onInputChange();
25720
- }
25721
- };
25722
- this.selectSingleColumn = () => {
25723
- const { inputEl, inputModeColumn, singleColumnSearchTimeout } = this;
25724
- if (!inputEl || !inputModeColumn) {
25725
- return;
25726
- }
25727
- const values = inputModeColumn.items.filter((item) => item.disabled !== true);
25728
- /**
25729
- * If users pause for a bit, the search
25730
- * value should be reset similar to how a
25731
- * <select> behaves. So typing "34", waiting,
25732
- * then typing "5" should select "05".
25733
- */
25734
- if (singleColumnSearchTimeout) {
25735
- clearTimeout(singleColumnSearchTimeout);
25736
- }
25737
- this.singleColumnSearchTimeout = setTimeout(() => {
25738
- inputEl.value = '';
25739
- this.singleColumnSearchTimeout = undefined;
25740
- }, 1000);
25741
- /**
25742
- * For values that are longer than 2 digits long
25743
- * we should shift the value over 1 character
25744
- * to the left. So typing "456" would result in "56".
25745
- * TODO: If we want to support more than just
25746
- * time entry, we should update this value to be
25747
- * the max length of all of the picker items.
25748
- */
25749
- if (inputEl.value.length >= 3) {
25750
- const startIndex = inputEl.value.length - 2;
25751
- const newString = inputEl.value.substring(startIndex);
25752
- inputEl.value = newString;
25753
- this.selectSingleColumn();
25754
- return;
25755
- }
25756
- /**
25757
- * Checking the value of the input gets priority
25758
- * first. For example, if the value of the input
25759
- * is "1" and we entered "2", then the complete value
25760
- * is "12" and we should select hour 12.
25761
- *
25762
- * Regex removes any leading zeros from values like "02",
25763
- * but it keeps a single zero if there are only zeros in the string.
25764
- * 0+(?=[1-9]) --> Match 1 or more zeros that are followed by 1-9
25765
- * 0+(?=0$) --> Match 1 or more zeros that must be followed by one 0 and end.
25766
- */
25767
- const findItemFromCompleteValue = values.find(({ text }) => {
25768
- const parsedText = text.replace(/^0+(?=[1-9])|0+(?=0$)/, '');
25769
- return parsedText === inputEl.value;
25770
- });
25771
- if (findItemFromCompleteValue) {
25772
- inputModeColumn.setValue(findItemFromCompleteValue.value);
25773
- return;
25774
- }
25775
- /**
25776
- * If we typed "56" to get minute 56, then typed "7",
25777
- * we should select "07" as "567" is not a valid minute.
25778
- */
25779
- if (inputEl.value.length === 2) {
25780
- const changedCharacter = inputEl.value.substring(inputEl.value.length - 1);
25781
- inputEl.value = changedCharacter;
25782
- this.selectSingleColumn();
25734
+ translateZ = 0;
25735
+ translateY = optOffset;
25783
25736
  }
25784
- };
25785
- /**
25786
- * Searches a list of column items for a particular
25787
- * value. This is currently used for numeric values.
25788
- * The zeroBehavior can be set to account for leading
25789
- * or trailing zeros when looking at the item text.
25790
- */
25791
- this.searchColumn = (colEl, value, zeroBehavior = 'start') => {
25792
- const behavior = zeroBehavior === 'start' ? /^0+/ : /0$/;
25793
- const item = colEl.items.find(({ text, disabled }) => disabled !== true && text.replace(behavior, '') === value);
25794
- if (item) {
25795
- colEl.setValue(item.value);
25737
+ const selected = selectedIndex === i;
25738
+ transform += `translate3d(0px,${translateY}px,${translateZ}px) `;
25739
+ if (this.scaleFactor !== 1 && !selected) {
25740
+ transform += scaleStr;
25796
25741
  }
25797
- };
25798
- this.selectMultiColumn = () => {
25799
- const { inputEl, el } = this;
25800
- if (!inputEl) {
25801
- return;
25742
+ // Update transition duration
25743
+ if (this.noAnimate) {
25744
+ opt.duration = 0;
25745
+ button.style.transitionDuration = '';
25802
25746
  }
25803
- const numericPickers = Array.from(el.querySelectorAll('ion-picker-column-internal')).filter((col) => col.numericInput);
25804
- const firstColumn = numericPickers[0];
25805
- const lastColumn = numericPickers[1];
25806
- let value = inputEl.value;
25807
- let minuteValue;
25808
- switch (value.length) {
25809
- case 1:
25810
- this.searchColumn(firstColumn, value);
25811
- break;
25812
- case 2:
25813
- /**
25814
- * If the first character is `0` or `1` it is
25815
- * possible that users are trying to type `09`
25816
- * or `11` into the hour field, so we should look
25817
- * at that first.
25818
- */
25819
- const firstCharacter = inputEl.value.substring(0, 1);
25820
- value = firstCharacter === '0' || firstCharacter === '1' ? inputEl.value : firstCharacter;
25821
- this.searchColumn(firstColumn, value);
25822
- /**
25823
- * If only checked the first value,
25824
- * we can check the second value
25825
- * for a match in the minutes column
25826
- */
25827
- if (value.length === 1) {
25828
- minuteValue = inputEl.value.substring(inputEl.value.length - 1);
25829
- this.searchColumn(lastColumn, minuteValue, 'end');
25830
- }
25831
- break;
25832
- case 3:
25833
- /**
25834
- * If the first character is `0` or `1` it is
25835
- * possible that users are trying to type `09`
25836
- * or `11` into the hour field, so we should look
25837
- * at that first.
25838
- */
25839
- const firstCharacterAgain = inputEl.value.substring(0, 1);
25840
- value =
25841
- firstCharacterAgain === '0' || firstCharacterAgain === '1'
25842
- ? inputEl.value.substring(0, 2)
25843
- : firstCharacterAgain;
25844
- this.searchColumn(firstColumn, value);
25845
- /**
25846
- * If only checked the first value,
25847
- * we can check the second value
25848
- * for a match in the minutes column
25849
- */
25850
- minuteValue = value.length === 1 ? inputEl.value.substring(1) : inputEl.value.substring(2);
25851
- this.searchColumn(lastColumn, minuteValue, 'end');
25852
- break;
25853
- case 4:
25854
- /**
25855
- * If the first character is `0` or `1` it is
25856
- * possible that users are trying to type `09`
25857
- * or `11` into the hour field, so we should look
25858
- * at that first.
25859
- */
25860
- const firstCharacterAgainAgain = inputEl.value.substring(0, 1);
25861
- value =
25862
- firstCharacterAgainAgain === '0' || firstCharacterAgainAgain === '1'
25863
- ? inputEl.value.substring(0, 2)
25864
- : firstCharacterAgainAgain;
25865
- this.searchColumn(firstColumn, value);
25866
- /**
25867
- * If only checked the first value,
25868
- * we can check the second value
25869
- * for a match in the minutes column
25870
- */
25871
- const minuteValueAgain = value.length === 1
25872
- ? inputEl.value.substring(1, inputEl.value.length)
25873
- : inputEl.value.substring(2, inputEl.value.length);
25874
- this.searchColumn(lastColumn, minuteValueAgain, 'end');
25875
- break;
25876
- default:
25877
- const startIndex = inputEl.value.length - 4;
25878
- const newString = inputEl.value.substring(startIndex);
25879
- inputEl.value = newString;
25880
- this.selectMultiColumn();
25881
- break;
25747
+ else if (duration !== opt.duration) {
25748
+ opt.duration = duration;
25749
+ button.style.transitionDuration = durationStr;
25882
25750
  }
25883
- };
25884
- /**
25885
- * Searches the value of the active column
25886
- * to determine which value users are trying
25887
- * to select
25888
- */
25889
- this.onInputChange = () => {
25890
- const { useInputMode, inputEl, inputModeColumn } = this;
25891
- if (!useInputMode || !inputEl) {
25892
- return;
25751
+ // Update transform
25752
+ if (transform !== opt.transform) {
25753
+ opt.transform = transform;
25893
25754
  }
25894
- if (inputModeColumn) {
25895
- this.selectSingleColumn();
25755
+ button.style.transform = transform;
25756
+ /**
25757
+ * Ensure that the select column
25758
+ * item has the selected class
25759
+ */
25760
+ opt.selected = selected;
25761
+ if (selected) {
25762
+ button.classList.add(PICKER_OPT_SELECTED);
25896
25763
  }
25897
25764
  else {
25898
- this.selectMultiColumn();
25765
+ button.classList.remove(PICKER_OPT_SELECTED);
25899
25766
  }
25900
- };
25901
- /**
25902
- * Emit ionInputModeChange. Picker columns
25903
- * listen for this event to determine whether
25904
- * or not their column is "active" for text input.
25905
- */
25906
- this.emitInputModeChange = () => {
25907
- const { useInputMode, inputModeColumn } = this;
25908
- this.ionInputModeChange.emit({
25909
- useInputMode,
25910
- inputModeColumn,
25911
- });
25912
- };
25767
+ }
25768
+ this.col.prevSelected = prevSelected;
25769
+ if (saveY) {
25770
+ this.y = y;
25771
+ }
25772
+ if (this.lastIndex !== selectedIndex) {
25773
+ // have not set a last index yet
25774
+ hapticSelectionChanged();
25775
+ this.lastIndex = selectedIndex;
25776
+ }
25913
25777
  }
25914
- /**
25915
- * When the picker is interacted with
25916
- * we need to prevent touchstart so other
25917
- * gestures do not fire. For example,
25918
- * scrolling on the wheel picker
25919
- * in ion-datetime should not cause
25920
- * a card modal to swipe to close.
25921
- */
25922
- preventTouchStartPropagation(ev) {
25923
- ev.stopPropagation();
25778
+ decelerate() {
25779
+ if (this.velocity !== 0) {
25780
+ // still decelerating
25781
+ this.velocity *= DECELERATION_FRICTION;
25782
+ // do not let it go slower than a velocity of 1
25783
+ this.velocity = this.velocity > 0 ? Math.max(this.velocity, 1) : Math.min(this.velocity, -1);
25784
+ let y = this.y + this.velocity;
25785
+ if (y > this.minY) {
25786
+ // whoops, it's trying to scroll up farther than the options we have!
25787
+ y = this.minY;
25788
+ this.velocity = 0;
25789
+ }
25790
+ else if (y < this.maxY) {
25791
+ // gahh, it's trying to scroll down farther than we can!
25792
+ y = this.maxY;
25793
+ this.velocity = 0;
25794
+ }
25795
+ this.update(y, 0, true);
25796
+ const notLockedIn = Math.round(y) % this.optHeight !== 0 || Math.abs(this.velocity) > 1;
25797
+ if (notLockedIn) {
25798
+ // isn't locked in yet, keep decelerating until it is
25799
+ this.rafId = requestAnimationFrame(() => this.decelerate());
25800
+ }
25801
+ else {
25802
+ this.velocity = 0;
25803
+ this.emitColChange();
25804
+ hapticSelectionEnd();
25805
+ }
25806
+ }
25807
+ else if (this.y % this.optHeight !== 0) {
25808
+ // needs to still get locked into a position so options line up
25809
+ const currentPos = Math.abs(this.y % this.optHeight);
25810
+ // create a velocity in the direction it needs to scroll
25811
+ this.velocity = currentPos > this.optHeight / 2 ? 1 : -1;
25812
+ this.decelerate();
25813
+ }
25924
25814
  }
25925
- componentWillLoad() {
25926
- getElementRoot(this.el).addEventListener('focusin', this.onFocusIn);
25927
- getElementRoot(this.el).addEventListener('focusout', this.onFocusOut);
25815
+ indexForY(y) {
25816
+ return Math.min(Math.max(Math.abs(Math.round(y / this.optHeight)), 0), this.col.options.length - 1);
25928
25817
  }
25929
- /**
25930
- * @internal
25931
- * Exits text entry mode for the picker
25932
- * This method blurs the hidden input
25933
- * and cause the keyboard to dismiss.
25934
- */
25935
- async exitInputMode() {
25936
- const { inputEl, useInputMode } = this;
25937
- if (!useInputMode || !inputEl) {
25818
+ onStart(detail) {
25819
+ // We have to prevent default in order to block scrolling under the picker
25820
+ // but we DO NOT have to stop propagation, since we still want
25821
+ // some "click" events to capture
25822
+ if (detail.event.cancelable) {
25823
+ detail.event.preventDefault();
25824
+ }
25825
+ detail.event.stopPropagation();
25826
+ hapticSelectionStart();
25827
+ // reset everything
25828
+ if (this.rafId !== undefined)
25829
+ cancelAnimationFrame(this.rafId);
25830
+ const options = this.col.options;
25831
+ let minY = options.length - 1;
25832
+ let maxY = 0;
25833
+ for (let i = 0; i < options.length; i++) {
25834
+ if (!options[i].disabled) {
25835
+ minY = Math.min(minY, i);
25836
+ maxY = Math.max(maxY, i);
25837
+ }
25838
+ }
25839
+ this.minY = -(minY * this.optHeight);
25840
+ this.maxY = -(maxY * this.optHeight);
25841
+ }
25842
+ onMove(detail) {
25843
+ if (detail.event.cancelable) {
25844
+ detail.event.preventDefault();
25845
+ }
25846
+ detail.event.stopPropagation();
25847
+ // update the scroll position relative to pointer start position
25848
+ let y = this.y + detail.deltaY;
25849
+ if (y > this.minY) {
25850
+ // scrolling up higher than scroll area
25851
+ y = Math.pow(y, 0.8);
25852
+ this.bounceFrom = y;
25853
+ }
25854
+ else if (y < this.maxY) {
25855
+ // scrolling down below scroll area
25856
+ y += Math.pow(this.maxY - y, 0.9);
25857
+ this.bounceFrom = y;
25858
+ }
25859
+ else {
25860
+ this.bounceFrom = 0;
25861
+ }
25862
+ this.update(y, 0, false);
25863
+ }
25864
+ onEnd(detail) {
25865
+ if (this.bounceFrom > 0) {
25866
+ // bounce back up
25867
+ this.update(this.minY, 100, true);
25868
+ this.emitColChange();
25938
25869
  return;
25939
25870
  }
25940
- this.useInputMode = false;
25941
- this.inputModeColumn = undefined;
25942
- inputEl.blur();
25943
- inputEl.value = '';
25944
- if (this.destroyKeypressListener) {
25945
- this.destroyKeypressListener();
25946
- this.destroyKeypressListener = undefined;
25871
+ else if (this.bounceFrom < 0) {
25872
+ // bounce back down
25873
+ this.update(this.maxY, 100, true);
25874
+ this.emitColChange();
25875
+ return;
25947
25876
  }
25948
- this.emitInputModeChange();
25877
+ this.velocity = clamp(-MAX_PICKER_SPEED, detail.velocityY * 23, MAX_PICKER_SPEED);
25878
+ if (this.velocity === 0 && detail.deltaY === 0) {
25879
+ const opt = detail.event.target.closest('.picker-opt');
25880
+ if (opt === null || opt === void 0 ? void 0 : opt.hasAttribute('opt-index')) {
25881
+ this.setSelected(parseInt(opt.getAttribute('opt-index'), 10), TRANSITION_DURATION);
25882
+ }
25883
+ }
25884
+ else {
25885
+ this.y += detail.deltaY;
25886
+ if (Math.abs(detail.velocityY) < 0.05) {
25887
+ const isScrollingUp = detail.deltaY > 0;
25888
+ const optHeightFraction = (Math.abs(this.y) % this.optHeight) / this.optHeight;
25889
+ if (isScrollingUp && optHeightFraction > 0.5) {
25890
+ this.velocity = Math.abs(this.velocity) * -1;
25891
+ }
25892
+ else if (!isScrollingUp && optHeightFraction <= 0.5) {
25893
+ this.velocity = Math.abs(this.velocity);
25894
+ }
25895
+ }
25896
+ this.decelerate();
25897
+ }
25898
+ }
25899
+ refresh(forceRefresh, animated) {
25900
+ var _a;
25901
+ let min = this.col.options.length - 1;
25902
+ let max = 0;
25903
+ const options = this.col.options;
25904
+ for (let i = 0; i < options.length; i++) {
25905
+ if (!options[i].disabled) {
25906
+ min = Math.min(min, i);
25907
+ max = Math.max(max, i);
25908
+ }
25909
+ }
25910
+ /**
25911
+ * Only update selected value if column has a
25912
+ * velocity of 0. If it does not, then the
25913
+ * column is animating might land on
25914
+ * a value different than the value at
25915
+ * selectedIndex
25916
+ */
25917
+ if (this.velocity !== 0) {
25918
+ return;
25919
+ }
25920
+ const selectedIndex = clamp(min, (_a = this.col.selectedIndex) !== null && _a !== void 0 ? _a : 0, max);
25921
+ if (this.col.prevSelected !== selectedIndex || forceRefresh) {
25922
+ const y = selectedIndex * this.optHeight * -1;
25923
+ const duration = animated ? TRANSITION_DURATION : 0;
25924
+ this.velocity = 0;
25925
+ this.update(y, duration, true);
25926
+ }
25927
+ }
25928
+ onDomChange(forceRefresh, animated) {
25929
+ const colEl = this.optsEl;
25930
+ if (colEl) {
25931
+ // DOM READ
25932
+ // We perfom a DOM read over a rendered item, this needs to happen after the first render or after the the column has changed
25933
+ this.optHeight = colEl.firstElementChild ? colEl.firstElementChild.clientHeight : 0;
25934
+ }
25935
+ this.refresh(forceRefresh, animated);
25949
25936
  }
25950
25937
  render() {
25951
- 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)));
25938
+ const col = this.col;
25939
+ const mode = getIonMode$1(this);
25940
+ 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: {
25941
+ 'max-width': this.col.columnWidth,
25942
+ } }, 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))));
25952
25943
  }
25953
25944
  get el() { return getElement(this); }
25945
+ static get watchers() { return {
25946
+ "col": ["colChanged"]
25947
+ }; }
25954
25948
  static get style() { return {
25955
- ios: pickerInternalIosCss,
25956
- md: pickerInternalMdCss
25949
+ ios: pickerColumnIosCss,
25950
+ md: pickerColumnMdCss
25957
25951
  }; }
25958
25952
  static get cmpMeta() { return {
25959
- "$flags$": 41,
25960
- "$tagName$": "ion-picker-internal",
25953
+ "$flags$": 32,
25954
+ "$tagName$": "ion-picker-legacy-column",
25961
25955
  "$members$": {
25962
- "exitInputMode": [64]
25956
+ "col": [16]
25963
25957
  },
25964
- "$listeners$": [[1, "touchstart", "preventTouchStartPropagation"]],
25958
+ "$listeners$": undefined,
25965
25959
  "$lazyBundleId$": "-",
25966
25960
  "$attrsToReflect$": []
25967
25961
  }; }
25968
25962
  }
25963
+ const PICKER_OPT_SELECTED = 'picker-opt-selected';
25964
+ const DECELERATION_FRICTION = 0.97;
25965
+ const MAX_PICKER_SPEED = 90;
25966
+ const TRANSITION_DURATION = 150;
25969
25967
 
25970
25968
  /**
25971
25969
  * Returns the dimensions of the popover
@@ -34930,10 +34928,10 @@ registerComponents([
34930
34928
  Nav,
34931
34929
  NavLink,
34932
34930
  Note,
34931
+ Picker$1,
34933
34932
  Picker,
34933
+ PickerColumn,
34934
34934
  PickerColumnCmp,
34935
- PickerColumnInternal,
34936
- PickerInternal,
34937
34935
  Popover,
34938
34936
  ProgressBar,
34939
34937
  Radio,