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