mirror of
https://code.equilibrium.co.ao/ITO/doneit-web.git
synced 2026-04-18 20:47:54 +00:00
1 line
197 KiB
JSON
1 line
197 KiB
JSON
{"ast":null,"code":"import _asyncToGenerator from \"C:/Users/eudes.inacio/GabineteDigital/gabinete-digital-fo/node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js\";\nimport { r as registerInstance, e as createEvent, h, H as Host, i as getElement } from './index-7a8b7a1c.js';\nimport { b as getIonMode } from './ionic-global-63a97a32.js';\nimport { a as addEventListener, k as clamp, j as findItemLabel, e as renderHiddenInput } from './helpers-1457892a.js';\nimport { p as pickerController, B as BACKDROP, i as isCancel, e as prepareOverlay, d as present, f as dismiss, g as eventMethod, s as safeCall } from './overlays-a62f858b.js';\nimport { h as hostContext, g as getClassMap } from './theme-ff3fc52f.js';\nimport { c as createAnimation } from './animation-822d986b.js';\nimport { b as hapticSelectionChanged, h as hapticSelectionEnd, a as hapticSelectionStart } from './haptic-27b3f981.js';\nimport './hardware-back-button-4a6b37fb.js';\n\n/**\n * Gets a date value given a format\n * Defaults to the current date if\n * no date given\n */\nconst getDateValue = (date, format) => {\n const getValue = getValueFromFormat(date, format);\n if (getValue !== undefined) {\n if (format === FORMAT_A || format === FORMAT_a) {\n date.ampm = getValue;\n }\n return getValue;\n }\n const defaultDate = parseDate(new Date().toISOString());\n return getValueFromFormat(defaultDate, format);\n};\nconst renderDatetime = (template, value, locale) => {\n if (value === undefined) {\n return undefined;\n }\n const tokens = [];\n let hasText = false;\n FORMAT_KEYS.forEach((format, index) => {\n if (template.indexOf(format.f) > -1) {\n const token = '{' + index + '}';\n const text = renderTextFormat(format.f, value[format.k], value, locale);\n if (!hasText && text !== undefined && value[format.k] != null) {\n hasText = true;\n }\n tokens.push(token, text || '');\n template = template.replace(format.f, token);\n }\n });\n if (!hasText) {\n return undefined;\n }\n for (let i = 0; i < tokens.length; i += 2) {\n template = template.replace(tokens[i], tokens[i + 1]);\n }\n return template;\n};\nconst renderTextFormat = (format, value, date, locale) => {\n if (format === FORMAT_DDDD || format === FORMAT_DDD) {\n try {\n value = new Date(date.year, date.month - 1, date.day).getDay();\n if (format === FORMAT_DDDD) {\n return (locale.dayNames ? locale.dayNames : DAY_NAMES)[value];\n }\n return (locale.dayShortNames ? locale.dayShortNames : DAY_SHORT_NAMES)[value];\n } catch (e) {\n // ignore\n }\n return undefined;\n }\n if (format === FORMAT_A) {\n return date !== undefined && date.hour !== undefined ? date.hour < 12 ? 'AM' : 'PM' : value ? value.toUpperCase() : '';\n }\n if (format === FORMAT_a) {\n return date !== undefined && date.hour !== undefined ? date.hour < 12 ? 'am' : 'pm' : value || '';\n }\n if (value == null) {\n return '';\n }\n if (format === FORMAT_YY || format === FORMAT_MM || format === FORMAT_DD || format === FORMAT_HH || format === FORMAT_mm || format === FORMAT_ss) {\n return twoDigit(value);\n }\n if (format === FORMAT_YYYY) {\n return fourDigit(value);\n }\n if (format === FORMAT_MMMM) {\n return (locale.monthNames ? locale.monthNames : MONTH_NAMES)[value - 1];\n }\n if (format === FORMAT_MMM) {\n return (locale.monthShortNames ? locale.monthShortNames : MONTH_SHORT_NAMES)[value - 1];\n }\n if (format === FORMAT_hh || format === FORMAT_h) {\n if (value === 0) {\n return '12';\n }\n if (value > 12) {\n value -= 12;\n }\n if (format === FORMAT_hh && value < 10) {\n return '0' + value;\n }\n }\n return value.toString();\n};\nconst dateValueRange = (format, min, max) => {\n const opts = [];\n if (format === FORMAT_YYYY || format === FORMAT_YY) {\n // year\n if (max.year === undefined || min.year === undefined) {\n throw new Error('min and max year is undefined');\n }\n for (let i = max.year; i >= min.year; i--) {\n opts.push(i);\n }\n } else if (format === FORMAT_MMMM || format === FORMAT_MMM || format === FORMAT_MM || format === FORMAT_M || format === FORMAT_hh || format === FORMAT_h) {\n // month or 12-hour\n for (let i = 1; i < 13; i++) {\n opts.push(i);\n }\n } else if (format === FORMAT_DDDD || format === FORMAT_DDD || format === FORMAT_DD || format === FORMAT_D) {\n // day\n for (let i = 1; i < 32; i++) {\n opts.push(i);\n }\n } else if (format === FORMAT_HH || format === FORMAT_H) {\n // 24-hour\n for (let i = 0; i < 24; i++) {\n opts.push(i);\n }\n } else if (format === FORMAT_mm || format === FORMAT_m) {\n // minutes\n for (let i = 0; i < 60; i++) {\n opts.push(i);\n }\n } else if (format === FORMAT_ss || format === FORMAT_s) {\n // seconds\n for (let i = 0; i < 60; i++) {\n opts.push(i);\n }\n } else if (format === FORMAT_A || format === FORMAT_a) {\n // AM/PM\n opts.push('am', 'pm');\n }\n return opts;\n};\nconst dateSortValue = (year, month, day, hour = 0, minute = 0) => {\n return parseInt(`1${fourDigit(year)}${twoDigit(month)}${twoDigit(day)}${twoDigit(hour)}${twoDigit(minute)}`, 10);\n};\nconst dateDataSortValue = data => {\n return dateSortValue(data.year, data.month, data.day, data.hour, data.minute);\n};\nconst daysInMonth = (month, year) => {\n return month === 4 || month === 6 || month === 9 || month === 11 ? 30 : month === 2 ? isLeapYear(year) ? 29 : 28 : 31;\n};\nconst isLeapYear = year => {\n return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;\n};\nconst ISO_8601_REGEXP = /^(\\d{4}|[+\\-]\\d{6})(?:-(\\d{2})(?:-(\\d{2}))?)?(?:T(\\d{2}):(\\d{2})(?::(\\d{2})(?:\\.(\\d{3}))?)?(?:(Z)|([+\\-])(\\d{2})(?::(\\d{2}))?)?)?$/;\nconst TIME_REGEXP = /^((\\d{2}):(\\d{2})(?::(\\d{2})(?:\\.(\\d{3}))?)?(?:(Z)|([+\\-])(\\d{2})(?::(\\d{2}))?)?)?$/;\nconst parseDate = val => {\n // manually parse IS0 cuz Date.parse cannot be trusted\n // ISO 8601 format: 1994-12-15T13:47:20Z\n let parse = null;\n if (val != null && val !== '') {\n // try parsing for just time first, HH:MM\n parse = TIME_REGEXP.exec(val);\n if (parse) {\n // adjust the array so it fits nicely with the datetime parse\n parse.unshift(undefined, undefined);\n parse[2] = parse[3] = undefined;\n } else {\n // try parsing for full ISO datetime\n parse = ISO_8601_REGEXP.exec(val);\n }\n }\n if (parse === null) {\n // wasn't able to parse the ISO datetime\n return undefined;\n }\n // ensure all the parse values exist with at least 0\n for (let i = 1; i < 8; i++) {\n parse[i] = parse[i] !== undefined ? parseInt(parse[i], 10) : undefined;\n }\n let tzOffset = 0;\n if (parse[9] && parse[10]) {\n // hours\n tzOffset = parseInt(parse[10], 10) * 60;\n if (parse[11]) {\n // minutes\n tzOffset += parseInt(parse[11], 10);\n }\n if (parse[9] === '-') {\n // + or -\n tzOffset *= -1;\n }\n }\n return {\n year: parse[1],\n month: parse[2],\n day: parse[3],\n hour: parse[4],\n minute: parse[5],\n second: parse[6],\n millisecond: parse[7],\n tzOffset\n };\n};\n/**\n * Converts a valid UTC datetime string to JS Date time object.\n * By default uses the users local timezone, but an optional\n * timezone can be provided.\n * Note: This is not meant for time strings\n * such as \"01:47\"\n */\nconst getDateTime = (dateString = '', timeZone = '') => {\n /**\n * If user passed in undefined\n * or null, convert it to the\n * empty string since the rest\n * of this functions expects\n * a string\n */\n if (dateString === undefined || dateString === null) {\n dateString = '';\n }\n /**\n * Ensures that YYYY-MM-DD, YYYY-MM,\n * YYYY-DD, YYYY, etc does not get affected\n * by timezones and stays on the day/month\n * that the user provided\n */\n if (dateString.length === 10 || dateString.length === 7 || dateString.length === 4) {\n dateString += ' ';\n }\n const date = typeof dateString === 'string' && dateString.length > 0 ? new Date(dateString) : new Date();\n const localDateTime = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds()));\n if (timeZone && timeZone.length > 0) {\n return new Date(date.getTime() - getTimezoneOffset(localDateTime, timeZone));\n }\n return localDateTime;\n};\nconst getTimezoneOffset = (localDate, timeZone) => {\n const utcDateTime = new Date(localDate.toLocaleString('en-US', {\n timeZone: 'utc'\n }));\n const tzDateTime = new Date(localDate.toLocaleString('en-US', {\n timeZone\n }));\n return utcDateTime.getTime() - tzDateTime.getTime();\n};\nconst updateDate = (existingData, newData, displayTimezone) => {\n if (!newData || typeof newData === 'string') {\n const dateTime = getDateTime(newData, displayTimezone);\n if (!Number.isNaN(dateTime.getTime())) {\n newData = dateTime.toISOString();\n }\n }\n if (newData && newData !== '') {\n if (typeof newData === 'string') {\n // new date is a string, and hopefully in the ISO format\n // convert it to our DatetimeData if a valid ISO\n newData = parseDate(newData);\n if (newData) {\n // successfully parsed the ISO string to our DatetimeData\n Object.assign(existingData, newData);\n return true;\n }\n } else if (newData.year || newData.hour || newData.month || newData.day || newData.minute || newData.second) {\n // newData is from the datetime picker's selected values\n // update the existing datetimeValue with the new values\n if (newData.ampm !== undefined && newData.hour !== undefined) {\n // change the value of the hour based on whether or not it is am or pm\n // if the meridiem is pm and equal to 12, it remains 12\n // otherwise we add 12 to the hour value\n // if the meridiem is am and equal to 12, we change it to 0\n // otherwise we use its current hour value\n // for example: 8 pm becomes 20, 12 am becomes 0, 4 am becomes 4\n newData.hour.value = newData.ampm.value === 'pm' ? newData.hour.value === 12 ? 12 : newData.hour.value + 12 : newData.hour.value === 12 ? 0 : newData.hour.value;\n }\n // merge new values from the picker's selection\n // to the existing DatetimeData values\n for (const key of Object.keys(newData)) {\n existingData[key] = newData[key].value;\n }\n return true;\n } else if (newData.ampm) {\n // Even though in the picker column hour values are between 1 and 12, the hour value is actually normalized\n // to [0, 23] interval. Because of this when changing between AM and PM we have to update the hour so it points\n // to the correct HH hour\n newData.hour = {\n value: newData.hour ? newData.hour.value : newData.ampm.value === 'pm' ? existingData.hour < 12 ? existingData.hour + 12 : existingData.hour : existingData.hour >= 12 ? existingData.hour - 12 : existingData.hour\n };\n existingData['hour'] = newData['hour'].value;\n existingData['ampm'] = newData['ampm'].value;\n return true;\n }\n // eww, invalid data\n console.warn(`Error parsing date: \"${newData}\". Please provide a valid ISO 8601 datetime format: https://www.w3.org/TR/NOTE-datetime`);\n } else {\n // blank data, clear everything out\n for (const k in existingData) {\n if (existingData.hasOwnProperty(k)) {\n delete existingData[k];\n }\n }\n }\n return false;\n};\nconst parseTemplate = template => {\n const formats = [];\n template = template.replace(/[^\\w\\s]/gi, ' ');\n FORMAT_KEYS.forEach(format => {\n if (format.f.length > 1 && template.indexOf(format.f) > -1 && template.indexOf(format.f + format.f.charAt(0)) < 0) {\n template = template.replace(format.f, ' ' + format.f + ' ');\n }\n });\n const words = template.split(' ').filter(w => w.length > 0);\n words.forEach((word, i) => {\n FORMAT_KEYS.forEach(format => {\n if (word === format.f) {\n if (word === FORMAT_A || word === FORMAT_a) {\n // this format is an am/pm format, so it's an \"a\" or \"A\"\n if (formats.indexOf(FORMAT_h) < 0 && formats.indexOf(FORMAT_hh) < 0 || VALID_AMPM_PREFIX.indexOf(words[i - 1]) === -1) {\n // template does not already have a 12-hour format\n // or this am/pm format doesn't have a hour, minute, or second format immediately before it\n // so do not treat this word \"a\" or \"A\" as the am/pm format\n return;\n }\n }\n formats.push(word);\n }\n });\n });\n return formats;\n};\nconst getValueFromFormat = (date, format) => {\n if (format === FORMAT_A || format === FORMAT_a) {\n return date.hour < 12 ? 'am' : 'pm';\n }\n if (format === FORMAT_hh || format === FORMAT_h) {\n return date.hour > 12 ? date.hour - 12 : date.hour === 0 ? 12 : date.hour;\n }\n return date[convertFormatToKey(format)];\n};\nconst convertFormatToKey = format => {\n for (const k in FORMAT_KEYS) {\n if (FORMAT_KEYS[k].f === format) {\n return FORMAT_KEYS[k].k;\n }\n }\n return undefined;\n};\nconst convertDataToISO = data => {\n // https://www.w3.org/TR/NOTE-datetime\n let rtn = '';\n if (data.year !== undefined) {\n // YYYY\n rtn = fourDigit(data.year);\n if (data.month !== undefined) {\n // YYYY-MM\n rtn += '-' + twoDigit(data.month);\n if (data.day !== undefined) {\n // YYYY-MM-DD\n rtn += '-' + twoDigit(data.day);\n if (data.hour !== undefined) {\n // YYYY-MM-DDTHH:mm:SS\n rtn += `T${twoDigit(data.hour)}:${twoDigit(data.minute)}:${twoDigit(data.second)}`;\n if (data.millisecond > 0) {\n // YYYY-MM-DDTHH:mm:SS.SSS\n rtn += '.' + threeDigit(data.millisecond);\n }\n if (data.tzOffset === undefined) {\n // YYYY-MM-DDTHH:mm:SSZ\n rtn += 'Z';\n } else {\n // YYYY-MM-DDTHH:mm:SS+/-HH:mm\n rtn += (data.tzOffset > 0 ? '+' : '-') + twoDigit(Math.floor(Math.abs(data.tzOffset / 60))) + ':' + twoDigit(data.tzOffset % 60);\n }\n }\n }\n }\n } else if (data.hour !== undefined) {\n // HH:mm\n rtn = twoDigit(data.hour) + ':' + twoDigit(data.minute);\n if (data.second !== undefined) {\n // HH:mm:SS\n rtn += ':' + twoDigit(data.second);\n if (data.millisecond !== undefined) {\n // HH:mm:SS.SSS\n rtn += '.' + threeDigit(data.millisecond);\n }\n }\n }\n return rtn;\n};\n/**\n * Use to convert a string of comma separated strings or\n * an array of strings, and clean up any user input\n */\nconst convertToArrayOfStrings = (input, type) => {\n if (input == null) {\n return undefined;\n }\n if (typeof input === 'string') {\n // convert the string to an array of strings\n // auto remove any [] characters\n input = input.replace(/\\[|\\]/g, '').split(',');\n }\n let values;\n if (Array.isArray(input)) {\n // trim up each string value\n values = input.map(val => val.toString().trim());\n }\n if (values === undefined || values.length === 0) {\n console.warn(`Invalid \"${type}Names\". Must be an array of strings, or a comma separated string.`);\n }\n return values;\n};\n/**\n * Use to convert a string of comma separated numbers or\n * an array of numbers, and clean up any user input\n */\nconst convertToArrayOfNumbers = (input, type) => {\n if (typeof input === 'string') {\n // convert the string to an array of strings\n // auto remove any whitespace and [] characters\n input = input.replace(/\\[|\\]|\\s/g, '').split(',');\n }\n let values;\n if (Array.isArray(input)) {\n // ensure each value is an actual number in the returned array\n values = input.map(num => parseInt(num, 10)).filter(isFinite);\n } else {\n values = [input];\n }\n if (values.length === 0) {\n console.warn(`Invalid \"${type}Values\". Must be an array of numbers, or a comma separated string of numbers.`);\n }\n return values;\n};\nconst twoDigit = val => {\n return ('0' + (val !== undefined ? Math.abs(val) : '0')).slice(-2);\n};\nconst threeDigit = val => {\n return ('00' + (val !== undefined ? Math.abs(val) : '0')).slice(-3);\n};\nconst fourDigit = val => {\n return ('000' + (val !== undefined ? Math.abs(val) : '0')).slice(-4);\n};\nconst FORMAT_YYYY = 'YYYY';\nconst FORMAT_YY = 'YY';\nconst FORMAT_MMMM = 'MMMM';\nconst FORMAT_MMM = 'MMM';\nconst FORMAT_MM = 'MM';\nconst FORMAT_M = 'M';\nconst FORMAT_DDDD = 'DDDD';\nconst FORMAT_DDD = 'DDD';\nconst FORMAT_DD = 'DD';\nconst FORMAT_D = 'D';\nconst FORMAT_HH = 'HH';\nconst FORMAT_H = 'H';\nconst FORMAT_hh = 'hh';\nconst FORMAT_h = 'h';\nconst FORMAT_mm = 'mm';\nconst FORMAT_m = 'm';\nconst FORMAT_ss = 'ss';\nconst FORMAT_s = 's';\nconst FORMAT_A = 'A';\nconst FORMAT_a = 'a';\nconst FORMAT_KEYS = [{\n f: FORMAT_YYYY,\n k: 'year'\n}, {\n f: FORMAT_MMMM,\n k: 'month'\n}, {\n f: FORMAT_DDDD,\n k: 'day'\n}, {\n f: FORMAT_MMM,\n k: 'month'\n}, {\n f: FORMAT_DDD,\n k: 'day'\n}, {\n f: FORMAT_YY,\n k: 'year'\n}, {\n f: FORMAT_MM,\n k: 'month'\n}, {\n f: FORMAT_DD,\n k: 'day'\n}, {\n f: FORMAT_HH,\n k: 'hour'\n}, {\n f: FORMAT_hh,\n k: 'hour'\n}, {\n f: FORMAT_mm,\n k: 'minute'\n}, {\n f: FORMAT_ss,\n k: 'second'\n}, {\n f: FORMAT_M,\n k: 'month'\n}, {\n f: FORMAT_D,\n k: 'day'\n}, {\n f: FORMAT_H,\n k: 'hour'\n}, {\n f: FORMAT_h,\n k: 'hour'\n}, {\n f: FORMAT_m,\n k: 'minute'\n}, {\n f: FORMAT_s,\n k: 'second'\n}, {\n f: FORMAT_A,\n k: 'ampm'\n}, {\n f: FORMAT_a,\n k: 'ampm'\n}];\nconst DAY_NAMES = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\nconst DAY_SHORT_NAMES = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\nconst MONTH_NAMES = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];\nconst MONTH_SHORT_NAMES = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\nconst VALID_AMPM_PREFIX = [FORMAT_hh, FORMAT_h, FORMAT_mm, FORMAT_m, FORMAT_ss, FORMAT_s];\nconst datetimeIosCss = \":host{padding-left:var(--padding-start);padding-right:var(--padding-end);padding-top:var(--padding-top);padding-bottom:var(--padding-bottom);display:-ms-flexbox;display:flex;position:relative;min-width:16px;min-height:1.2em;font-family:var(--ion-font-family, inherit);text-overflow:ellipsis;white-space:nowrap;overflow:hidden;z-index:2}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){:host{padding-left:unset;padding-right:unset;-webkit-padding-start:var(--padding-start);padding-inline-start:var(--padding-start);-webkit-padding-end:var(--padding-end);padding-inline-end:var(--padding-end)}}:host(.in-item){position:static}:host(.datetime-placeholder){color:var(--placeholder-color)}:host(.datetime-disabled){opacity:0.3;pointer-events:none}:host(.datetime-readonly){pointer-events:none}button{left:0;top:0;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;position:absolute;width:100%;height:100%;border:0;background:transparent;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;outline:none}[dir=rtl] button,:host-context([dir=rtl]) button{left:unset;right:unset;right:0}button::-moz-focus-inner{border:0}.datetime-text{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;-ms-flex:1;flex:1;min-height:inherit;direction:ltr;overflow:inherit}[dir=rtl] .datetime-text,:host-context([dir=rtl]) .datetime-text{direction:rtl}:host{--placeholder-color:var(--ion-color-step-400, #999999);--padding-top:10px;--padding-end:10px;--padding-bottom:10px;--padding-start:20px}\";\nconst datetimeMdCss = \":host{padding-left:var(--padding-start);padding-right:var(--padding-end);padding-top:var(--padding-top);padding-bottom:var(--padding-bottom);display:-ms-flexbox;display:flex;position:relative;min-width:16px;min-height:1.2em;font-family:var(--ion-font-family, inherit);text-overflow:ellipsis;white-space:nowrap;overflow:hidden;z-index:2}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){:host{padding-left:unset;padding-right:unset;-webkit-padding-start:var(--padding-start);padding-inline-start:var(--padding-start);-webkit-padding-end:var(--padding-end);padding-inline-end:var(--padding-end)}}:host(.in-item){position:static}:host(.datetime-placeholder){color:var(--placeholder-color)}:host(.datetime-disabled){opacity:0.3;pointer-events:none}:host(.datetime-readonly){pointer-events:none}button{left:0;top:0;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;position:absolute;width:100%;height:100%;border:0;background:transparent;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;outline:none}[dir=rtl] button,:host-context([dir=rtl]) button{left:unset;right:unset;right:0}button::-moz-focus-inner{border:0}.datetime-text{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;-ms-flex:1;flex:1;min-height:inherit;direction:ltr;overflow:inherit}[dir=rtl] .datetime-text,:host-context([dir=rtl]) .datetime-text{direction:rtl}:host{--placeholder-color:var(--ion-placeholder-color, var(--ion-color-step-400, #999999));--padding-top:10px;--padding-end:0;--padding-bottom:11px;--padding-start:16px}\";\nconst Datetime = class {\n constructor(hostRef) {\n registerInstance(this, hostRef);\n this.ionCancel = createEvent(this, \"ionCancel\", 7);\n this.ionChange = createEvent(this, \"ionChange\", 7);\n this.ionFocus = createEvent(this, \"ionFocus\", 7);\n this.ionBlur = createEvent(this, \"ionBlur\", 7);\n this.ionStyle = createEvent(this, \"ionStyle\", 7);\n this.inputId = `ion-dt-${datetimeIds++}`;\n this.locale = {};\n this.datetimeMin = {};\n this.datetimeMax = {};\n this.datetimeValue = {};\n this.isExpanded = false;\n /**\n * The name of the control, which is submitted with the form data.\n */\n this.name = this.inputId;\n /**\n * If `true`, the user cannot interact with the datetime.\n */\n this.disabled = false;\n /**\n * If `true`, the datetime appears normal but is not interactive.\n */\n this.readonly = false;\n /**\n * The display format of the date and time as text that shows\n * within the item. When the `pickerFormat` input is not used, then the\n * `displayFormat` is used for both display the formatted text, and determining\n * the datetime picker's columns. See the `pickerFormat` input description for\n * more info. Defaults to `MMM D, YYYY`.\n */\n this.displayFormat = 'MMM D, YYYY';\n /**\n * The text to display on the picker's cancel button.\n */\n this.cancelText = 'Cancel';\n /**\n * The text to display on the picker's \"Done\" button.\n */\n this.doneText = 'Done';\n this.onClick = () => {\n this.setFocus();\n this.open();\n };\n this.onFocus = () => {\n this.ionFocus.emit();\n };\n this.onBlur = () => {\n this.ionBlur.emit();\n };\n }\n disabledChanged() {\n this.emitStyle();\n }\n /**\n * Update the datetime value when the value changes\n */\n valueChanged() {\n this.updateDatetimeValue(this.value);\n this.emitStyle();\n this.ionChange.emit({\n value: this.value\n });\n }\n componentWillLoad() {\n // first see if locale names were provided in the inputs\n // then check to see if they're in the config\n // if neither were provided then it will use default English names\n this.locale = {\n // this.locale[type] = convertToArrayOfStrings((this[type] ? this[type] : this.config.get(type), type);\n monthNames: convertToArrayOfStrings(this.monthNames, 'monthNames'),\n monthShortNames: convertToArrayOfStrings(this.monthShortNames, 'monthShortNames'),\n dayNames: convertToArrayOfStrings(this.dayNames, 'dayNames'),\n dayShortNames: convertToArrayOfStrings(this.dayShortNames, 'dayShortNames')\n };\n this.updateDatetimeValue(this.value);\n this.emitStyle();\n }\n /**\n * Opens the datetime overlay.\n */\n open() {\n var _this = this;\n return _asyncToGenerator(function* () {\n if (_this.disabled || _this.isExpanded) {\n return;\n }\n const pickerOptions = _this.generatePickerOptions();\n const picker = yield pickerController.create(pickerOptions);\n _this.isExpanded = true;\n picker.onDidDismiss().then(() => {\n _this.isExpanded = false;\n _this.setFocus();\n });\n addEventListener(picker, 'ionPickerColChange', /*#__PURE__*/function () {\n var _ref = _asyncToGenerator(function* (event) {\n const data = event.detail;\n const colSelectedIndex = data.selectedIndex;\n const colOptions = data.options;\n const changeData = {};\n changeData[data.name] = {\n value: colOptions[colSelectedIndex].value\n };\n if (data.name !== 'ampm' && _this.datetimeValue.ampm !== undefined) {\n changeData['ampm'] = {\n value: _this.datetimeValue.ampm\n };\n }\n _this.updateDatetimeValue(changeData);\n picker.columns = _this.generateColumns();\n });\n return function (_x) {\n return _ref.apply(this, arguments);\n };\n }());\n yield picker.present();\n })();\n }\n emitStyle() {\n this.ionStyle.emit({\n 'interactive': true,\n 'datetime': true,\n 'has-placeholder': this.placeholder != null,\n 'has-value': this.hasValue(),\n 'interactive-disabled': this.disabled\n });\n }\n updateDatetimeValue(value) {\n updateDate(this.datetimeValue, value, this.displayTimezone);\n }\n generatePickerOptions() {\n const mode = getIonMode(this);\n this.locale = {\n monthNames: convertToArrayOfStrings(this.monthNames, 'monthNames'),\n monthShortNames: convertToArrayOfStrings(this.monthShortNames, 'monthShortNames'),\n dayNames: convertToArrayOfStrings(this.dayNames, 'dayNames'),\n dayShortNames: convertToArrayOfStrings(this.dayShortNames, 'dayShortNames')\n };\n const pickerOptions = Object.assign(Object.assign({\n mode\n }, this.pickerOptions), {\n columns: this.generateColumns()\n });\n // If the user has not passed in picker buttons,\n // add a cancel and ok button to the picker\n const buttons = pickerOptions.buttons;\n if (!buttons || buttons.length === 0) {\n pickerOptions.buttons = [{\n text: this.cancelText,\n role: 'cancel',\n handler: () => {\n this.updateDatetimeValue(this.value);\n this.ionCancel.emit();\n }\n }, {\n text: this.doneText,\n handler: data => {\n this.updateDatetimeValue(data);\n /**\n * Prevent convertDataToISO from doing any\n * kind of transformation based on timezone\n * This cancels out any change it attempts to make\n *\n * Important: Take the timezone offset based on\n * the date that is currently selected, otherwise\n * there can be 1 hr difference when dealing w/ DST\n */\n const date = new Date(convertDataToISO(this.datetimeValue));\n // If a custom display timezone is provided, use that tzOffset value instead\n this.datetimeValue.tzOffset = this.displayTimezone !== undefined && this.displayTimezone.length > 0 ? getTimezoneOffset(date, this.displayTimezone) / 1000 / 60 * -1 : date.getTimezoneOffset() * -1;\n this.value = convertDataToISO(this.datetimeValue);\n }\n }];\n }\n return pickerOptions;\n }\n generateColumns() {\n // if a picker format wasn't provided, then fallback\n // to use the display format\n let template = this.pickerFormat || this.displayFormat || DEFAULT_FORMAT;\n if (template.length === 0) {\n return [];\n }\n // make sure we've got up to date sizing information\n this.calcMinMax();\n // does not support selecting by day name\n // automatically remove any day name formats\n template = template.replace('DDDD', '{~}').replace('DDD', '{~}');\n if (template.indexOf('D') === -1) {\n // there is not a day in the template\n // replace the day name with a numeric one if it exists\n template = template.replace('{~}', 'D');\n }\n // make sure no day name replacer is left in the string\n template = template.replace(/{~}/g, '');\n // parse apart the given template into an array of \"formats\"\n const columns = parseTemplate(template).map(format => {\n // loop through each format in the template\n // create a new picker column to build up with data\n const key = convertFormatToKey(format);\n let values;\n // check if they have exact values to use for this date part\n // otherwise use the default date part values\n const self = this;\n values = self[key + 'Values'] ? convertToArrayOfNumbers(self[key + 'Values'], key) : dateValueRange(format, this.datetimeMin, this.datetimeMax);\n const colOptions = values.map(val => {\n return {\n value: val,\n text: renderTextFormat(format, val, undefined, this.locale)\n };\n });\n // cool, we've loaded up the columns with options\n // preselect the option for this column\n const optValue = getDateValue(this.datetimeValue, format);\n const selectedIndex = colOptions.findIndex(opt => opt.value === optValue);\n return {\n name: key,\n selectedIndex: selectedIndex >= 0 ? selectedIndex : 0,\n options: colOptions\n };\n });\n // Normalize min/max\n const min = this.datetimeMin;\n const max = this.datetimeMax;\n ['month', 'day', 'hour', 'minute'].filter(name => !columns.find(column => column.name === name)).forEach(name => {\n min[name] = 0;\n max[name] = 0;\n });\n return this.validateColumns(divyColumns(columns));\n }\n validateColumns(columns) {\n const today = new Date();\n const minCompareVal = dateDataSortValue(this.datetimeMin);\n const maxCompareVal = dateDataSortValue(this.datetimeMax);\n const yearCol = columns.find(c => c.name === 'year');\n let selectedYear = today.getFullYear();\n if (yearCol) {\n // default to the first value if the current year doesn't exist in the options\n if (!yearCol.options.find(col => col.value === today.getFullYear())) {\n selectedYear = yearCol.options[0].value;\n }\n const selectedIndex = yearCol.selectedIndex;\n if (selectedIndex !== undefined) {\n const yearOpt = yearCol.options[selectedIndex];\n if (yearOpt) {\n // they have a selected year value\n selectedYear = yearOpt.value;\n }\n }\n }\n const selectedMonth = this.validateColumn(columns, 'month', 1, minCompareVal, maxCompareVal, [selectedYear, 0, 0, 0, 0], [selectedYear, 12, 31, 23, 59]);\n const numDaysInMonth = daysInMonth(selectedMonth, selectedYear);\n const selectedDay = this.validateColumn(columns, 'day', 2, minCompareVal, maxCompareVal, [selectedYear, selectedMonth, 0, 0, 0], [selectedYear, selectedMonth, numDaysInMonth, 23, 59]);\n const selectedHour = this.validateColumn(columns, 'hour', 3, minCompareVal, maxCompareVal, [selectedYear, selectedMonth, selectedDay, 0, 0], [selectedYear, selectedMonth, selectedDay, 23, 59]);\n this.validateColumn(columns, 'minute', 4, minCompareVal, maxCompareVal, [selectedYear, selectedMonth, selectedDay, selectedHour, 0], [selectedYear, selectedMonth, selectedDay, selectedHour, 59]);\n return columns;\n }\n calcMinMax() {\n const todaysYear = new Date().getFullYear();\n if (this.yearValues !== undefined) {\n const years = convertToArrayOfNumbers(this.yearValues, 'year');\n if (this.min === undefined) {\n this.min = Math.min(...years).toString();\n }\n if (this.max === undefined) {\n this.max = Math.max(...years).toString();\n }\n } else {\n if (this.min === undefined) {\n this.min = (todaysYear - 100).toString();\n }\n if (this.max === undefined) {\n this.max = todaysYear.toString();\n }\n }\n const min = this.datetimeMin = parseDate(this.min);\n const max = this.datetimeMax = parseDate(this.max);\n min.year = min.year || todaysYear;\n max.year = max.year || todaysYear;\n min.month = min.month || 1;\n max.month = max.month || 12;\n min.day = min.day || 1;\n max.day = max.day || 31;\n min.hour = min.hour || 0;\n max.hour = max.hour === undefined ? 23 : max.hour;\n min.minute = min.minute || 0;\n max.minute = max.minute === undefined ? 59 : max.minute;\n min.second = min.second || 0;\n max.second = max.second === undefined ? 59 : max.second;\n // Ensure min/max constraints\n if (min.year > max.year) {\n console.error('min.year > max.year');\n min.year = max.year - 100;\n }\n if (min.year === max.year) {\n if (min.month > max.month) {\n console.error('min.month > max.month');\n min.month = 1;\n } else if (min.month === max.month && min.day > max.day) {\n console.error('min.day > max.day');\n min.day = 1;\n }\n }\n }\n validateColumn(columns, name, index, min, max, lowerBounds, upperBounds) {\n const column = columns.find(c => c.name === name);\n if (!column) {\n return 0;\n }\n const lb = lowerBounds.slice();\n const ub = upperBounds.slice();\n const options = column.options;\n let indexMin = options.length - 1;\n let indexMax = 0;\n for (let i = 0; i < options.length; i++) {\n const opts = options[i];\n const value = opts.value;\n lb[index] = opts.value;\n ub[index] = opts.value;\n const disabled = opts.disabled = value < lowerBounds[index] || value > upperBounds[index] || dateSortValue(ub[0], ub[1], ub[2], ub[3], ub[4]) < min || dateSortValue(lb[0], lb[1], lb[2], lb[3], lb[4]) > max;\n if (!disabled) {\n indexMin = Math.min(indexMin, i);\n indexMax = Math.max(indexMax, i);\n }\n }\n const selectedIndex = column.selectedIndex = clamp(indexMin, column.selectedIndex, indexMax);\n const opt = column.options[selectedIndex];\n if (opt) {\n return opt.value;\n }\n return 0;\n }\n get text() {\n // create the text of the formatted data\n const template = this.displayFormat || this.pickerFormat || DEFAULT_FORMAT;\n if (this.value === undefined || this.value === null || this.value.length === 0) {\n return;\n }\n return renderDatetime(template, this.datetimeValue, this.locale);\n }\n hasValue() {\n return this.text !== undefined;\n }\n setFocus() {\n if (this.buttonEl) {\n this.buttonEl.focus();\n }\n }\n render() {\n const {\n inputId,\n text,\n disabled,\n readonly,\n isExpanded,\n el,\n placeholder\n } = this;\n const mode = getIonMode(this);\n const labelId = inputId + '-lbl';\n const label = findItemLabel(el);\n const addPlaceholderClass = text === undefined && placeholder != null ? true : false;\n // If selected text has been passed in, use that first\n // otherwise use the placeholder\n const datetimeText = text === undefined ? placeholder != null ? placeholder : '' : text;\n const datetimeTextPart = text === undefined ? placeholder != null ? 'placeholder' : undefined : 'text';\n if (label) {\n label.id = labelId;\n }\n renderHiddenInput(true, el, this.name, this.value, this.disabled);\n return h(Host, {\n onClick: this.onClick,\n \"aria-disabled\": disabled ? 'true' : null,\n \"aria-expanded\": `${isExpanded}`,\n \"aria-haspopup\": \"true\",\n \"aria-labelledby\": label ? labelId : null,\n class: {\n [mode]: true,\n 'datetime-disabled': disabled,\n 'datetime-readonly': readonly,\n 'datetime-placeholder': addPlaceholderClass,\n 'in-item': hostContext('ion-item', el)\n }\n }, h(\"div\", {\n class: \"datetime-text\",\n part: datetimeTextPart\n }, datetimeText), h(\"button\", {\n type: \"button\",\n onFocus: this.onFocus,\n onBlur: this.onBlur,\n disabled: this.disabled,\n ref: btnEl => this.buttonEl = btnEl\n }));\n }\n get el() {\n return getElement(this);\n }\n static get watchers() {\n return {\n \"disabled\": [\"disabledChanged\"],\n \"value\": [\"valueChanged\"]\n };\n }\n};\nconst divyColumns = columns => {\n const columnsWidth = [];\n let col;\n let width;\n for (let i = 0; i < columns.length; i++) {\n col = columns[i];\n columnsWidth.push(0);\n for (const option of col.options) {\n width = option.text.length;\n if (width > columnsWidth[i]) {\n columnsWidth[i] = width;\n }\n }\n }\n if (columnsWidth.length === 2) {\n width = Math.max(columnsWidth[0], columnsWidth[1]);\n columns[0].align = 'right';\n columns[1].align = 'left';\n columns[0].optionsWidth = columns[1].optionsWidth = `${width * 17}px`;\n } else if (columnsWidth.length === 3) {\n width = Math.max(columnsWidth[0], columnsWidth[2]);\n columns[0].align = 'right';\n columns[1].columnWidth = `${columnsWidth[1] * 17}px`;\n columns[0].optionsWidth = columns[2].optionsWidth = `${width * 17}px`;\n columns[2].align = 'left';\n }\n return columns;\n};\nconst DEFAULT_FORMAT = 'MMM D, YYYY';\nlet datetimeIds = 0;\nDatetime.style = {\n ios: datetimeIosCss,\n md: datetimeMdCss\n};\n\n/**\n * iOS Picker Enter Animation\n */\nconst iosEnterAnimation = baseEl => {\n const baseAnimation = createAnimation();\n const backdropAnimation = createAnimation();\n const wrapperAnimation = createAnimation();\n backdropAnimation.addElement(baseEl.querySelector('ion-backdrop')).fromTo('opacity', 0.01, 'var(--backdrop-opacity)').beforeStyles({\n 'pointer-events': 'none'\n }).afterClearStyles(['pointer-events']);\n wrapperAnimation.addElement(baseEl.querySelector('.picker-wrapper')).fromTo('transform', 'translateY(100%)', 'translateY(0%)');\n return baseAnimation.addElement(baseEl).easing('cubic-bezier(.36,.66,.04,1)').duration(400).addAnimation([backdropAnimation, wrapperAnimation]);\n};\n\n/**\n * iOS Picker Leave Animation\n */\nconst iosLeaveAnimation = baseEl => {\n const baseAnimation = createAnimation();\n const backdropAnimation = createAnimation();\n const wrapperAnimation = createAnimation();\n backdropAnimation.addElement(baseEl.querySelector('ion-backdrop')).fromTo('opacity', 'var(--backdrop-opacity)', 0.01);\n wrapperAnimation.addElement(baseEl.querySelector('.picker-wrapper')).fromTo('transform', 'translateY(0%)', 'translateY(100%)');\n return baseAnimation.addElement(baseEl).easing('cubic-bezier(.36,.66,.04,1)').duration(400).addAnimation([backdropAnimation, wrapperAnimation]);\n};\nconst 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;left:0;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}[dir=rtl].sc-ion-picker-ios-h,[dir=rtl] .sc-ion-picker-ios-h{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;margin-left:auto;margin-right: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}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.picker-wrapper.sc-ion-picker-ios{margin-left:unset;margin-right:unset;-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto}}.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;direction:ltr;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;padding-left:1em;padding-right:1em;padding-top:0;padding-bottom:0;height:44px;background:transparent;color:var(--ion-color-primary, #3880ff);font-size:16px}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.picker-button.sc-ion-picker-ios,.picker-button.ion-activated.sc-ion-picker-ios{padding-left:unset;padding-right:unset;-webkit-padding-start:1em;padding-inline-start:1em;-webkit-padding-end:1em;padding-inline-end:1em}}.picker-columns.sc-ion-picker-ios{height:215px;-webkit-perspective:1000px;perspective:1000px}.picker-above-highlight.sc-ion-picker-ios{left:0;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}[dir=rtl].sc-ion-picker-ios .picker-above-highlight.sc-ion-picker-ios,[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}.picker-below-highlight.sc-ion-picker-ios{left:0;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}[dir=rtl].sc-ion-picker-ios .picker-below-highlight.sc-ion-picker-ios,[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}\";\nconst 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;left:0;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}[dir=rtl].sc-ion-picker-md-h,[dir=rtl] .sc-ion-picker-md-h{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;margin-left:auto;margin-right: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}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.picker-wrapper.sc-ion-picker-md{margin-left:unset;margin-right:unset;-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto}}.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;direction:ltr;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;padding-left:1.1em;padding-right: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}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.picker-button.sc-ion-picker-md,.picker-button.ion-activated.sc-ion-picker-md{padding-left:unset;padding-right:unset;-webkit-padding-start:1.1em;padding-inline-start:1.1em;-webkit-padding-end:1.1em;padding-inline-end:1.1em}}.picker-columns.sc-ion-picker-md{height:216px;-webkit-perspective:1800px;perspective:1800px}.picker-above-highlight.sc-ion-picker-md{left:0;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}[dir=rtl].sc-ion-picker-md .picker-above-highlight.sc-ion-picker-md,[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}.picker-below-highlight.sc-ion-picker-md{left:0;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}[dir=rtl].sc-ion-picker-md .picker-below-highlight.sc-ion-picker-md,[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}\";\nconst Picker = class {\n constructor(hostRef) {\n registerInstance(this, hostRef);\n this.didPresent = createEvent(this, \"ionPickerDidPresent\", 7);\n this.willPresent = createEvent(this, \"ionPickerWillPresent\", 7);\n this.willDismiss = createEvent(this, \"ionPickerWillDismiss\", 7);\n this.didDismiss = createEvent(this, \"ionPickerDidDismiss\", 7);\n this.presented = false;\n /**\n * If `true`, the keyboard will be automatically dismissed when the overlay is presented.\n */\n this.keyboardClose = true;\n /**\n * Array of buttons to be displayed at the top of the picker.\n */\n this.buttons = [];\n /**\n * Array of columns to be displayed in the picker.\n */\n this.columns = [];\n /**\n * Number of milliseconds to wait before dismissing the picker.\n */\n this.duration = 0;\n /**\n * If `true`, a backdrop will be displayed behind the picker.\n */\n this.showBackdrop = true;\n /**\n * If `true`, the picker will be dismissed when the backdrop is clicked.\n */\n this.backdropDismiss = true;\n /**\n * If `true`, the picker will animate.\n */\n this.animated = true;\n this.onBackdropTap = () => {\n this.dismiss(undefined, BACKDROP);\n };\n this.dispatchCancelHandler = ev => {\n const role = ev.detail.role;\n if (isCancel(role)) {\n const cancelButton = this.buttons.find(b => b.role === 'cancel');\n this.callButtonHandler(cancelButton);\n }\n };\n }\n connectedCallback() {\n prepareOverlay(this.el);\n }\n /**\n * Present the picker overlay after it has been created.\n */\n present() {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n yield present(_this2, 'pickerEnter', iosEnterAnimation, iosEnterAnimation, undefined);\n if (_this2.duration > 0) {\n _this2.durationTimeout = setTimeout(() => _this2.dismiss(), _this2.duration);\n }\n })();\n }\n /**\n * Dismiss the picker overlay after it has been presented.\n *\n * @param data Any data to emit in the dismiss events.\n * @param role The role of the element that is dismissing the picker.\n * This can be useful in a button handler for determining which button was\n * clicked to dismiss the picker.\n * Some examples include: ``\"cancel\"`, `\"destructive\"`, \"selected\"`, and `\"backdrop\"`.\n */\n dismiss(data, role) {\n if (this.durationTimeout) {\n clearTimeout(this.durationTimeout);\n }\n return dismiss(this, data, role, 'pickerLeave', iosLeaveAnimation, iosLeaveAnimation);\n }\n /**\n * Returns a promise that resolves when the picker did dismiss.\n */\n onDidDismiss() {\n return eventMethod(this.el, 'ionPickerDidDismiss');\n }\n /**\n * Returns a promise that resolves when the picker will dismiss.\n */\n onWillDismiss() {\n return eventMethod(this.el, 'ionPickerWillDismiss');\n }\n /**\n * Get the column that matches the specified name.\n *\n * @param name The name of the column.\n */\n getColumn(name) {\n return Promise.resolve(this.columns.find(column => column.name === name));\n }\n buttonClick(button) {\n var _this3 = this;\n return _asyncToGenerator(function* () {\n const role = button.role;\n if (isCancel(role)) {\n return _this3.dismiss(undefined, role);\n }\n const shouldDismiss = yield _this3.callButtonHandler(button);\n if (shouldDismiss) {\n return _this3.dismiss(_this3.getSelected(), button.role);\n }\n return Promise.resolve();\n })();\n }\n callButtonHandler(button) {\n var _this4 = this;\n return _asyncToGenerator(function* () {\n if (button) {\n // a handler has been provided, execute it\n // pass the handler the values from the inputs\n const rtn = yield safeCall(button.handler, _this4.getSelected());\n if (rtn === false) {\n // if the return value of the handler is false then do not dismiss\n return false;\n }\n }\n return true;\n })();\n }\n getSelected() {\n const selected = {};\n this.columns.forEach((col, index) => {\n const selectedColumn = col.selectedIndex !== undefined ? col.options[col.selectedIndex] : undefined;\n selected[col.name] = {\n text: selectedColumn ? selectedColumn.text : undefined,\n value: selectedColumn ? selectedColumn.value : undefined,\n columnIndex: index\n };\n });\n return selected;\n }\n render() {\n const {\n htmlAttributes\n } = this;\n const mode = getIonMode(this);\n return h(Host, Object.assign({\n \"aria-modal\": \"true\",\n tabindex: \"-1\"\n }, htmlAttributes, {\n style: {\n zIndex: `${20000 + this.overlayIndex}`\n },\n class: Object.assign({\n [mode]: true,\n // Used internally for styling\n [`picker-${mode}`]: true\n }, getClassMap(this.cssClass)),\n onIonBackdropTap: this.onBackdropTap,\n onIonPickerWillDismiss: this.dispatchCancelHandler\n }), h(\"ion-backdrop\", {\n visible: this.showBackdrop,\n tappable: this.backdropDismiss\n }), h(\"div\", {\n tabindex: \"0\"\n }), h(\"div\", {\n class: \"picker-wrapper ion-overlay-wrapper\",\n role: \"dialog\"\n }, h(\"div\", {\n class: \"picker-toolbar\"\n }, this.buttons.map(b => h(\"div\", {\n class: buttonWrapperClass(b)\n }, h(\"button\", {\n type: \"button\",\n onClick: () => this.buttonClick(b),\n class: buttonClass(b)\n }, b.text)))), h(\"div\", {\n class: \"picker-columns\"\n }, h(\"div\", {\n class: \"picker-above-highlight\"\n }), this.presented && this.columns.map(c => h(\"ion-picker-column\", {\n col: c\n })), h(\"div\", {\n class: \"picker-below-highlight\"\n }))), h(\"div\", {\n tabindex: \"0\"\n }));\n }\n get el() {\n return getElement(this);\n }\n};\nconst buttonWrapperClass = button => {\n return {\n [`picker-toolbar-${button.role}`]: button.role !== undefined,\n 'picker-toolbar-button': true\n };\n};\nconst buttonClass = button => {\n return Object.assign({\n 'picker-button': true,\n 'ion-activatable': true\n }, getClassMap(button.cssClass));\n};\nPicker.style = {\n ios: pickerIosCss,\n md: pickerMdCss\n};\nconst 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{left:0;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}[dir=rtl] .picker-opt,:host-context([dir=rtl]) .picker-opt{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{padding-left:4px;padding-right:4px;padding-top:0;padding-bottom:0;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.picker-col{padding-left:unset;padding-right:unset;-webkit-padding-start:4px;padding-inline-start:4px;-webkit-padding-end:4px;padding-inline-end:4px}}.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}[dir=rtl] .picker-opt,:host-context([dir=rtl]) .picker-opt{-webkit-transform-origin:calc(100% - center) center;transform-origin:calc(100% - center) center}\";\nconst 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{left:0;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}[dir=rtl] .picker-opt,:host-context([dir=rtl]) .picker-opt{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{padding-left:8px;padding-right:8px;padding-top:0;padding-bottom:0;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.picker-col{padding-left:unset;padding-right:unset;-webkit-padding-start:8px;padding-inline-start:8px;-webkit-padding-end:8px;padding-inline-end:8px}}.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)}\";\nconst PickerColumnCmp = class {\n constructor(hostRef) {\n registerInstance(this, hostRef);\n this.ionPickerColChange = createEvent(this, \"ionPickerColChange\", 7);\n this.optHeight = 0;\n this.rotateFactor = 0;\n this.scaleFactor = 1;\n this.velocity = 0;\n this.y = 0;\n this.noAnimate = true;\n }\n colChanged() {\n this.refresh();\n }\n connectedCallback() {\n var _this5 = this;\n return _asyncToGenerator(function* () {\n let pickerRotateFactor = 0;\n let pickerScaleFactor = 0.81;\n const mode = getIonMode(_this5);\n if (mode === 'ios') {\n pickerRotateFactor = -0.46;\n pickerScaleFactor = 1;\n }\n _this5.rotateFactor = pickerRotateFactor;\n _this5.scaleFactor = pickerScaleFactor;\n _this5.gesture = (yield import('./index-34cb2743.js')).createGesture({\n el: _this5.el,\n gestureName: 'picker-swipe',\n gesturePriority: 100,\n threshold: 0,\n passive: false,\n onStart: ev => _this5.onStart(ev),\n onMove: ev => _this5.onMove(ev),\n onEnd: ev => _this5.onEnd(ev)\n });\n _this5.gesture.enable();\n _this5.tmrId = setTimeout(() => {\n _this5.noAnimate = false;\n _this5.refresh(true);\n }, 250);\n })();\n }\n componentDidLoad() {\n const colEl = this.optsEl;\n if (colEl) {\n // DOM READ\n // We perfom a DOM read over a rendered item, this needs to happen after the first render\n this.optHeight = colEl.firstElementChild ? colEl.firstElementChild.clientHeight : 0;\n }\n this.refresh();\n }\n disconnectedCallback() {\n cancelAnimationFrame(this.rafId);\n clearTimeout(this.tmrId);\n if (this.gesture) {\n this.gesture.destroy();\n this.gesture = undefined;\n }\n }\n emitColChange() {\n this.ionPickerColChange.emit(this.col);\n }\n setSelected(selectedIndex, duration) {\n // if there is a selected index, then figure out it's y position\n // if there isn't a selected index, then just use the top y position\n const y = selectedIndex > -1 ? -(selectedIndex * this.optHeight) : 0;\n this.velocity = 0;\n // set what y position we're at\n cancelAnimationFrame(this.rafId);\n this.update(y, duration, true);\n this.emitColChange();\n }\n update(y, duration, saveY) {\n if (!this.optsEl) {\n return;\n }\n // ensure we've got a good round number :)\n let translateY = 0;\n let translateZ = 0;\n const {\n col,\n rotateFactor\n } = this;\n const selectedIndex = col.selectedIndex = this.indexForY(-y);\n const durationStr = duration === 0 ? '' : duration + 'ms';\n const scaleStr = `scale(${this.scaleFactor})`;\n const children = this.optsEl.children;\n for (let i = 0; i < children.length; i++) {\n const button = children[i];\n const opt = col.options[i];\n const optOffset = i * this.optHeight + y;\n let transform = '';\n if (rotateFactor !== 0) {\n const rotateX = optOffset * rotateFactor;\n if (Math.abs(rotateX) <= 90) {\n translateY = 0;\n translateZ = 90;\n transform = `rotateX(${rotateX}deg) `;\n } else {\n translateY = -9999;\n }\n } else {\n translateZ = 0;\n translateY = optOffset;\n }\n const selected = selectedIndex === i;\n transform += `translate3d(0px,${translateY}px,${translateZ}px) `;\n if (this.scaleFactor !== 1 && !selected) {\n transform += scaleStr;\n }\n // Update transition duration\n if (this.noAnimate) {\n opt.duration = 0;\n button.style.transitionDuration = '';\n } else if (duration !== opt.duration) {\n opt.duration = duration;\n button.style.transitionDuration = durationStr;\n }\n // Update transform\n if (transform !== opt.transform) {\n opt.transform = transform;\n button.style.transform = transform;\n }\n // Update selected item\n if (selected !== opt.selected) {\n opt.selected = selected;\n if (selected) {\n button.classList.add(PICKER_OPT_SELECTED);\n } else {\n button.classList.remove(PICKER_OPT_SELECTED);\n }\n }\n }\n this.col.prevSelected = selectedIndex;\n if (saveY) {\n this.y = y;\n }\n if (this.lastIndex !== selectedIndex) {\n // have not set a last index yet\n hapticSelectionChanged();\n this.lastIndex = selectedIndex;\n }\n }\n decelerate() {\n if (this.velocity !== 0) {\n // still decelerating\n this.velocity *= DECELERATION_FRICTION;\n // do not let it go slower than a velocity of 1\n this.velocity = this.velocity > 0 ? Math.max(this.velocity, 1) : Math.min(this.velocity, -1);\n let y = this.y + this.velocity;\n if (y > this.minY) {\n // whoops, it's trying to scroll up farther than the options we have!\n y = this.minY;\n this.velocity = 0;\n } else if (y < this.maxY) {\n // gahh, it's trying to scroll down farther than we can!\n y = this.maxY;\n this.velocity = 0;\n }\n this.update(y, 0, true);\n const notLockedIn = Math.round(y) % this.optHeight !== 0 || Math.abs(this.velocity) > 1;\n if (notLockedIn) {\n // isn't locked in yet, keep decelerating until it is\n this.rafId = requestAnimationFrame(() => this.decelerate());\n } else {\n this.velocity = 0;\n this.emitColChange();\n hapticSelectionEnd();\n }\n } else if (this.y % this.optHeight !== 0) {\n // needs to still get locked into a position so options line up\n const currentPos = Math.abs(this.y % this.optHeight);\n // create a velocity in the direction it needs to scroll\n this.velocity = currentPos > this.optHeight / 2 ? 1 : -1;\n this.decelerate();\n }\n }\n indexForY(y) {\n return Math.min(Math.max(Math.abs(Math.round(y / this.optHeight)), 0), this.col.options.length - 1);\n }\n // TODO should this check disabled?\n onStart(detail) {\n // We have to prevent default in order to block scrolling under the picker\n // but we DO NOT have to stop propagation, since we still want\n // some \"click\" events to capture\n if (detail.event.cancelable) {\n detail.event.preventDefault();\n }\n detail.event.stopPropagation();\n hapticSelectionStart();\n // reset everything\n cancelAnimationFrame(this.rafId);\n const options = this.col.options;\n let minY = options.length - 1;\n let maxY = 0;\n for (let i = 0; i < options.length; i++) {\n if (!options[i].disabled) {\n minY = Math.min(minY, i);\n maxY = Math.max(maxY, i);\n }\n }\n this.minY = -(minY * this.optHeight);\n this.maxY = -(maxY * this.optHeight);\n }\n onMove(detail) {\n if (detail.event.cancelable) {\n detail.event.preventDefault();\n }\n detail.event.stopPropagation();\n // update the scroll position relative to pointer start position\n let y = this.y + detail.deltaY;\n if (y > this.minY) {\n // scrolling up higher than scroll area\n y = Math.pow(y, 0.8);\n this.bounceFrom = y;\n } else if (y < this.maxY) {\n // scrolling down below scroll area\n y += Math.pow(this.maxY - y, 0.9);\n this.bounceFrom = y;\n } else {\n this.bounceFrom = 0;\n }\n this.update(y, 0, false);\n }\n onEnd(detail) {\n if (this.bounceFrom > 0) {\n // bounce back up\n this.update(this.minY, 100, true);\n this.emitColChange();\n return;\n } else if (this.bounceFrom < 0) {\n // bounce back down\n this.update(this.maxY, 100, true);\n this.emitColChange();\n return;\n }\n this.velocity = clamp(-MAX_PICKER_SPEED, detail.velocityY * 23, MAX_PICKER_SPEED);\n if (this.velocity === 0 && detail.deltaY === 0) {\n const opt = detail.event.target.closest('.picker-opt');\n if (opt && opt.hasAttribute('opt-index')) {\n this.setSelected(parseInt(opt.getAttribute('opt-index'), 10), TRANSITION_DURATION);\n }\n } else {\n this.y += detail.deltaY;\n if (Math.abs(detail.velocityY) < 0.05) {\n const isScrollingUp = detail.deltaY > 0;\n const optHeightFraction = Math.abs(this.y) % this.optHeight / this.optHeight;\n if (isScrollingUp && optHeightFraction > 0.5) {\n this.velocity = Math.abs(this.velocity) * -1;\n } else if (!isScrollingUp && optHeightFraction <= 0.5) {\n this.velocity = Math.abs(this.velocity);\n }\n }\n this.decelerate();\n }\n }\n refresh(forceRefresh) {\n let min = this.col.options.length - 1;\n let max = 0;\n const options = this.col.options;\n for (let i = 0; i < options.length; i++) {\n if (!options[i].disabled) {\n min = Math.min(min, i);\n max = Math.max(max, i);\n }\n }\n /**\n * Only update selected value if column has a\n * velocity of 0. If it does not, then the\n * column is animating might land on\n * a value different than the value at\n * selectedIndex\n */\n if (this.velocity !== 0) {\n return;\n }\n const selectedIndex = clamp(min, this.col.selectedIndex || 0, max);\n if (this.col.prevSelected !== selectedIndex || forceRefresh) {\n const y = selectedIndex * this.optHeight * -1;\n this.velocity = 0;\n this.update(y, TRANSITION_DURATION, true);\n }\n }\n render() {\n const col = this.col;\n const Button = 'button';\n const mode = getIonMode(this);\n return h(Host, {\n class: {\n [mode]: true,\n 'picker-col': true,\n 'picker-opts-left': this.col.align === 'left',\n 'picker-opts-right': this.col.align === 'right'\n },\n style: {\n 'max-width': this.col.columnWidth\n }\n }, col.prefix && h(\"div\", {\n class: \"picker-prefix\",\n style: {\n width: col.prefixWidth\n }\n }, col.prefix), h(\"div\", {\n class: \"picker-opts\",\n style: {\n maxWidth: col.optionsWidth\n },\n ref: el => this.optsEl = el\n }, col.options.map((o, index) => h(Button, {\n type: \"button\",\n class: {\n 'picker-opt': true,\n 'picker-opt-disabled': !!o.disabled\n },\n \"opt-index\": index\n }, o.text))), col.suffix && h(\"div\", {\n class: \"picker-suffix\",\n style: {\n width: col.suffixWidth\n }\n }, col.suffix));\n }\n get el() {\n return getElement(this);\n }\n static get watchers() {\n return {\n \"col\": [\"colChanged\"]\n };\n }\n};\nconst PICKER_OPT_SELECTED = 'picker-opt-selected';\nconst DECELERATION_FRICTION = 0.97;\nconst MAX_PICKER_SPEED = 90;\nconst TRANSITION_DURATION = 150;\nPickerColumnCmp.style = {\n ios: pickerColumnIosCss,\n md: pickerColumnMdCss\n};\nexport { Datetime as ion_datetime, Picker as ion_picker, PickerColumnCmp as ion_picker_column };","map":{"version":3,"names":["r","registerInstance","e","createEvent","h","H","Host","i","getElement","b","getIonMode","a","addEventListener","k","clamp","j","findItemLabel","renderHiddenInput","p","pickerController","B","BACKDROP","isCancel","prepareOverlay","d","present","f","dismiss","g","eventMethod","s","safeCall","hostContext","getClassMap","c","createAnimation","hapticSelectionChanged","hapticSelectionEnd","hapticSelectionStart","getDateValue","date","format","getValue","getValueFromFormat","undefined","FORMAT_A","FORMAT_a","ampm","defaultDate","parseDate","Date","toISOString","renderDatetime","template","value","locale","tokens","hasText","FORMAT_KEYS","forEach","index","indexOf","token","text","renderTextFormat","push","replace","length","FORMAT_DDDD","FORMAT_DDD","year","month","day","getDay","dayNames","DAY_NAMES","dayShortNames","DAY_SHORT_NAMES","hour","toUpperCase","FORMAT_YY","FORMAT_MM","FORMAT_DD","FORMAT_HH","FORMAT_mm","FORMAT_ss","twoDigit","FORMAT_YYYY","fourDigit","FORMAT_MMMM","monthNames","MONTH_NAMES","FORMAT_MMM","monthShortNames","MONTH_SHORT_NAMES","FORMAT_hh","FORMAT_h","toString","dateValueRange","min","max","opts","Error","FORMAT_M","FORMAT_D","FORMAT_H","FORMAT_m","FORMAT_s","dateSortValue","minute","parseInt","dateDataSortValue","data","daysInMonth","isLeapYear","ISO_8601_REGEXP","TIME_REGEXP","val","parse","exec","unshift","tzOffset","second","millisecond","getDateTime","dateString","timeZone","localDateTime","UTC","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","getMilliseconds","getTime","getTimezoneOffset","localDate","utcDateTime","toLocaleString","tzDateTime","updateDate","existingData","newData","displayTimezone","dateTime","Number","isNaN","Object","assign","key","keys","console","warn","hasOwnProperty","parseTemplate","formats","charAt","words","split","filter","w","word","VALID_AMPM_PREFIX","convertFormatToKey","convertDataToISO","rtn","threeDigit","Math","floor","abs","convertToArrayOfStrings","input","type","values","Array","isArray","map","trim","convertToArrayOfNumbers","num","isFinite","slice","datetimeIosCss","datetimeMdCss","Datetime","constructor","hostRef","ionCancel","ionChange","ionFocus","ionBlur","ionStyle","inputId","datetimeIds","datetimeMin","datetimeMax","datetimeValue","isExpanded","name","disabled","readonly","displayFormat","cancelText","doneText","onClick","setFocus","open","onFocus","emit","onBlur","disabledChanged","emitStyle","valueChanged","updateDatetimeValue","componentWillLoad","_this","_asyncToGenerator","pickerOptions","generatePickerOptions","picker","create","onDidDismiss","then","_ref","event","detail","colSelectedIndex","selectedIndex","colOptions","options","changeData","columns","generateColumns","_x","apply","arguments","placeholder","hasValue","mode","buttons","role","handler","pickerFormat","DEFAULT_FORMAT","calcMinMax","self","optValue","findIndex","opt","find","column","validateColumns","divyColumns","today","minCompareVal","maxCompareVal","yearCol","selectedYear","col","yearOpt","selectedMonth","validateColumn","numDaysInMonth","selectedDay","selectedHour","todaysYear","yearValues","years","error","lowerBounds","upperBounds","lb","ub","indexMin","indexMax","buttonEl","focus","render","el","labelId","label","addPlaceholderClass","datetimeText","datetimeTextPart","id","class","part","ref","btnEl","watchers","columnsWidth","width","option","align","optionsWidth","columnWidth","style","ios","md","iosEnterAnimation","baseEl","baseAnimation","backdropAnimation","wrapperAnimation","addElement","querySelector","fromTo","beforeStyles","afterClearStyles","easing","duration","addAnimation","iosLeaveAnimation","pickerIosCss","pickerMdCss","Picker","didPresent","willPresent","willDismiss","didDismiss","presented","keyboardClose","showBackdrop","backdropDismiss","animated","onBackdropTap","dispatchCancelHandler","ev","cancelButton","callButtonHandler","connectedCallback","_this2","durationTimeout","setTimeout","clearTimeout","onWillDismiss","getColumn","Promise","resolve","buttonClick","button","_this3","shouldDismiss","getSelected","_this4","selected","selectedColumn","columnIndex","htmlAttributes","tabindex","zIndex","overlayIndex","cssClass","onIonBackdropTap","onIonPickerWillDismiss","visible","tappable","buttonWrapperClass","buttonClass","pickerColumnIosCss","pickerColumnMdCss","PickerColumnCmp","ionPickerColChange","optHeight","rotateFactor","scaleFactor","velocity","y","noAnimate","colChanged","refresh","_this5","pickerRotateFactor","pickerScaleFactor","gesture","createGesture","gestureName","gesturePriority","threshold","passive","onStart","onMove","onEnd","enable","tmrId","componentDidLoad","colEl","optsEl","firstElementChild","clientHeight","disconnectedCallback","cancelAnimationFrame","rafId","destroy","emitColChange","setSelected","update","saveY","translateY","translateZ","indexForY","durationStr","scaleStr","children","optOffset","transform","rotateX","transitionDuration","classList","add","PICKER_OPT_SELECTED","remove","prevSelected","lastIndex","decelerate","DECELERATION_FRICTION","minY","maxY","notLockedIn","round","requestAnimationFrame","currentPos","cancelable","preventDefault","stopPropagation","deltaY","pow","bounceFrom","MAX_PICKER_SPEED","velocityY","target","closest","hasAttribute","getAttribute","TRANSITION_DURATION","isScrollingUp","optHeightFraction","forceRefresh","Button","prefix","prefixWidth","maxWidth","o","suffix","suffixWidth","ion_datetime","ion_picker","ion_picker_column"],"sources":["C:/Users/eudes.inacio/GabineteDigital/gabinete-digital-fo/node_modules/@ionic/core/dist/esm/ion-datetime_3.entry.js"],"sourcesContent":["import { r as registerInstance, e as createEvent, h, H as Host, i as getElement } from './index-7a8b7a1c.js';\nimport { b as getIonMode } from './ionic-global-63a97a32.js';\nimport { a as addEventListener, k as clamp, j as findItemLabel, e as renderHiddenInput } from './helpers-1457892a.js';\nimport { p as pickerController, B as BACKDROP, i as isCancel, e as prepareOverlay, d as present, f as dismiss, g as eventMethod, s as safeCall } from './overlays-a62f858b.js';\nimport { h as hostContext, g as getClassMap } from './theme-ff3fc52f.js';\nimport { c as createAnimation } from './animation-822d986b.js';\nimport { b as hapticSelectionChanged, h as hapticSelectionEnd, a as hapticSelectionStart } from './haptic-27b3f981.js';\nimport './hardware-back-button-4a6b37fb.js';\n\n/**\n * Gets a date value given a format\n * Defaults to the current date if\n * no date given\n */\nconst getDateValue = (date, format) => {\n const getValue = getValueFromFormat(date, format);\n if (getValue !== undefined) {\n if (format === FORMAT_A || format === FORMAT_a) {\n date.ampm = getValue;\n }\n return getValue;\n }\n const defaultDate = parseDate(new Date().toISOString());\n return getValueFromFormat(defaultDate, format);\n};\nconst renderDatetime = (template, value, locale) => {\n if (value === undefined) {\n return undefined;\n }\n const tokens = [];\n let hasText = false;\n FORMAT_KEYS.forEach((format, index) => {\n if (template.indexOf(format.f) > -1) {\n const token = '{' + index + '}';\n const text = renderTextFormat(format.f, value[format.k], value, locale);\n if (!hasText && text !== undefined && value[format.k] != null) {\n hasText = true;\n }\n tokens.push(token, text || '');\n template = template.replace(format.f, token);\n }\n });\n if (!hasText) {\n return undefined;\n }\n for (let i = 0; i < tokens.length; i += 2) {\n template = template.replace(tokens[i], tokens[i + 1]);\n }\n return template;\n};\nconst renderTextFormat = (format, value, date, locale) => {\n if ((format === FORMAT_DDDD || format === FORMAT_DDD)) {\n try {\n value = (new Date(date.year, date.month - 1, date.day)).getDay();\n if (format === FORMAT_DDDD) {\n return (locale.dayNames ? locale.dayNames : DAY_NAMES)[value];\n }\n return (locale.dayShortNames ? locale.dayShortNames : DAY_SHORT_NAMES)[value];\n }\n catch (e) {\n // ignore\n }\n return undefined;\n }\n if (format === FORMAT_A) {\n return date !== undefined && date.hour !== undefined\n ? (date.hour < 12 ? 'AM' : 'PM')\n : value ? value.toUpperCase() : '';\n }\n if (format === FORMAT_a) {\n return date !== undefined && date.hour !== undefined\n ? (date.hour < 12 ? 'am' : 'pm')\n : value || '';\n }\n if (value == null) {\n return '';\n }\n if (format === FORMAT_YY || format === FORMAT_MM ||\n format === FORMAT_DD || format === FORMAT_HH ||\n format === FORMAT_mm || format === FORMAT_ss) {\n return twoDigit(value);\n }\n if (format === FORMAT_YYYY) {\n return fourDigit(value);\n }\n if (format === FORMAT_MMMM) {\n return (locale.monthNames ? locale.monthNames : MONTH_NAMES)[value - 1];\n }\n if (format === FORMAT_MMM) {\n return (locale.monthShortNames ? locale.monthShortNames : MONTH_SHORT_NAMES)[value - 1];\n }\n if (format === FORMAT_hh || format === FORMAT_h) {\n if (value === 0) {\n return '12';\n }\n if (value > 12) {\n value -= 12;\n }\n if (format === FORMAT_hh && value < 10) {\n return ('0' + value);\n }\n }\n return value.toString();\n};\nconst dateValueRange = (format, min, max) => {\n const opts = [];\n if (format === FORMAT_YYYY || format === FORMAT_YY) {\n // year\n if (max.year === undefined || min.year === undefined) {\n throw new Error('min and max year is undefined');\n }\n for (let i = max.year; i >= min.year; i--) {\n opts.push(i);\n }\n }\n else if (format === FORMAT_MMMM || format === FORMAT_MMM ||\n format === FORMAT_MM || format === FORMAT_M ||\n format === FORMAT_hh || format === FORMAT_h) {\n // month or 12-hour\n for (let i = 1; i < 13; i++) {\n opts.push(i);\n }\n }\n else if (format === FORMAT_DDDD || format === FORMAT_DDD ||\n format === FORMAT_DD || format === FORMAT_D) {\n // day\n for (let i = 1; i < 32; i++) {\n opts.push(i);\n }\n }\n else if (format === FORMAT_HH || format === FORMAT_H) {\n // 24-hour\n for (let i = 0; i < 24; i++) {\n opts.push(i);\n }\n }\n else if (format === FORMAT_mm || format === FORMAT_m) {\n // minutes\n for (let i = 0; i < 60; i++) {\n opts.push(i);\n }\n }\n else if (format === FORMAT_ss || format === FORMAT_s) {\n // seconds\n for (let i = 0; i < 60; i++) {\n opts.push(i);\n }\n }\n else if (format === FORMAT_A || format === FORMAT_a) {\n // AM/PM\n opts.push('am', 'pm');\n }\n return opts;\n};\nconst dateSortValue = (year, month, day, hour = 0, minute = 0) => {\n return parseInt(`1${fourDigit(year)}${twoDigit(month)}${twoDigit(day)}${twoDigit(hour)}${twoDigit(minute)}`, 10);\n};\nconst dateDataSortValue = (data) => {\n return dateSortValue(data.year, data.month, data.day, data.hour, data.minute);\n};\nconst daysInMonth = (month, year) => {\n return (month === 4 || month === 6 || month === 9 || month === 11) ? 30 : (month === 2) ? isLeapYear(year) ? 29 : 28 : 31;\n};\nconst isLeapYear = (year) => {\n return (year % 4 === 0 && year % 100 !== 0) || (year % 400 === 0);\n};\nconst ISO_8601_REGEXP = /^(\\d{4}|[+\\-]\\d{6})(?:-(\\d{2})(?:-(\\d{2}))?)?(?:T(\\d{2}):(\\d{2})(?::(\\d{2})(?:\\.(\\d{3}))?)?(?:(Z)|([+\\-])(\\d{2})(?::(\\d{2}))?)?)?$/;\nconst TIME_REGEXP = /^((\\d{2}):(\\d{2})(?::(\\d{2})(?:\\.(\\d{3}))?)?(?:(Z)|([+\\-])(\\d{2})(?::(\\d{2}))?)?)?$/;\nconst parseDate = (val) => {\n // manually parse IS0 cuz Date.parse cannot be trusted\n // ISO 8601 format: 1994-12-15T13:47:20Z\n let parse = null;\n if (val != null && val !== '') {\n // try parsing for just time first, HH:MM\n parse = TIME_REGEXP.exec(val);\n if (parse) {\n // adjust the array so it fits nicely with the datetime parse\n parse.unshift(undefined, undefined);\n parse[2] = parse[3] = undefined;\n }\n else {\n // try parsing for full ISO datetime\n parse = ISO_8601_REGEXP.exec(val);\n }\n }\n if (parse === null) {\n // wasn't able to parse the ISO datetime\n return undefined;\n }\n // ensure all the parse values exist with at least 0\n for (let i = 1; i < 8; i++) {\n parse[i] = parse[i] !== undefined ? parseInt(parse[i], 10) : undefined;\n }\n let tzOffset = 0;\n if (parse[9] && parse[10]) {\n // hours\n tzOffset = parseInt(parse[10], 10) * 60;\n if (parse[11]) {\n // minutes\n tzOffset += parseInt(parse[11], 10);\n }\n if (parse[9] === '-') {\n // + or -\n tzOffset *= -1;\n }\n }\n return {\n year: parse[1],\n month: parse[2],\n day: parse[3],\n hour: parse[4],\n minute: parse[5],\n second: parse[6],\n millisecond: parse[7],\n tzOffset,\n };\n};\n/**\n * Converts a valid UTC datetime string to JS Date time object.\n * By default uses the users local timezone, but an optional\n * timezone can be provided.\n * Note: This is not meant for time strings\n * such as \"01:47\"\n */\nconst getDateTime = (dateString = '', timeZone = '') => {\n /**\n * If user passed in undefined\n * or null, convert it to the\n * empty string since the rest\n * of this functions expects\n * a string\n */\n if (dateString === undefined || dateString === null) {\n dateString = '';\n }\n /**\n * Ensures that YYYY-MM-DD, YYYY-MM,\n * YYYY-DD, YYYY, etc does not get affected\n * by timezones and stays on the day/month\n * that the user provided\n */\n if (dateString.length === 10 ||\n dateString.length === 7 ||\n dateString.length === 4) {\n dateString += ' ';\n }\n const date = (typeof dateString === 'string' && dateString.length > 0) ? new Date(dateString) : new Date();\n const localDateTime = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds()));\n if (timeZone && timeZone.length > 0) {\n return new Date(date.getTime() - getTimezoneOffset(localDateTime, timeZone));\n }\n return localDateTime;\n};\nconst getTimezoneOffset = (localDate, timeZone) => {\n const utcDateTime = new Date(localDate.toLocaleString('en-US', { timeZone: 'utc' }));\n const tzDateTime = new Date(localDate.toLocaleString('en-US', { timeZone }));\n return utcDateTime.getTime() - tzDateTime.getTime();\n};\nconst updateDate = (existingData, newData, displayTimezone) => {\n if (!newData || typeof newData === 'string') {\n const dateTime = getDateTime(newData, displayTimezone);\n if (!Number.isNaN(dateTime.getTime())) {\n newData = dateTime.toISOString();\n }\n }\n if (newData && newData !== '') {\n if (typeof newData === 'string') {\n // new date is a string, and hopefully in the ISO format\n // convert it to our DatetimeData if a valid ISO\n newData = parseDate(newData);\n if (newData) {\n // successfully parsed the ISO string to our DatetimeData\n Object.assign(existingData, newData);\n return true;\n }\n }\n else if ((newData.year || newData.hour || newData.month || newData.day || newData.minute || newData.second)) {\n // newData is from the datetime picker's selected values\n // update the existing datetimeValue with the new values\n if (newData.ampm !== undefined && newData.hour !== undefined) {\n // change the value of the hour based on whether or not it is am or pm\n // if the meridiem is pm and equal to 12, it remains 12\n // otherwise we add 12 to the hour value\n // if the meridiem is am and equal to 12, we change it to 0\n // otherwise we use its current hour value\n // for example: 8 pm becomes 20, 12 am becomes 0, 4 am becomes 4\n newData.hour.value = (newData.ampm.value === 'pm')\n ? (newData.hour.value === 12 ? 12 : newData.hour.value + 12)\n : (newData.hour.value === 12 ? 0 : newData.hour.value);\n }\n // merge new values from the picker's selection\n // to the existing DatetimeData values\n for (const key of Object.keys(newData)) {\n existingData[key] = newData[key].value;\n }\n return true;\n }\n else if (newData.ampm) {\n // Even though in the picker column hour values are between 1 and 12, the hour value is actually normalized\n // to [0, 23] interval. Because of this when changing between AM and PM we have to update the hour so it points\n // to the correct HH hour\n newData.hour = {\n value: newData.hour\n ? newData.hour.value\n : (newData.ampm.value === 'pm'\n ? (existingData.hour < 12 ? existingData.hour + 12 : existingData.hour)\n : (existingData.hour >= 12 ? existingData.hour - 12 : existingData.hour))\n };\n existingData['hour'] = newData['hour'].value;\n existingData['ampm'] = newData['ampm'].value;\n return true;\n }\n // eww, invalid data\n console.warn(`Error parsing date: \"${newData}\". Please provide a valid ISO 8601 datetime format: https://www.w3.org/TR/NOTE-datetime`);\n }\n else {\n // blank data, clear everything out\n for (const k in existingData) {\n if (existingData.hasOwnProperty(k)) {\n delete existingData[k];\n }\n }\n }\n return false;\n};\nconst parseTemplate = (template) => {\n const formats = [];\n template = template.replace(/[^\\w\\s]/gi, ' ');\n FORMAT_KEYS.forEach(format => {\n if (format.f.length > 1 && template.indexOf(format.f) > -1 && template.indexOf(format.f + format.f.charAt(0)) < 0) {\n template = template.replace(format.f, ' ' + format.f + ' ');\n }\n });\n const words = template.split(' ').filter(w => w.length > 0);\n words.forEach((word, i) => {\n FORMAT_KEYS.forEach(format => {\n if (word === format.f) {\n if (word === FORMAT_A || word === FORMAT_a) {\n // this format is an am/pm format, so it's an \"a\" or \"A\"\n if ((formats.indexOf(FORMAT_h) < 0 && formats.indexOf(FORMAT_hh) < 0) ||\n VALID_AMPM_PREFIX.indexOf(words[i - 1]) === -1) {\n // template does not already have a 12-hour format\n // or this am/pm format doesn't have a hour, minute, or second format immediately before it\n // so do not treat this word \"a\" or \"A\" as the am/pm format\n return;\n }\n }\n formats.push(word);\n }\n });\n });\n return formats;\n};\nconst getValueFromFormat = (date, format) => {\n if (format === FORMAT_A || format === FORMAT_a) {\n return (date.hour < 12 ? 'am' : 'pm');\n }\n if (format === FORMAT_hh || format === FORMAT_h) {\n return (date.hour > 12 ? date.hour - 12 : (date.hour === 0 ? 12 : date.hour));\n }\n return date[convertFormatToKey(format)];\n};\nconst convertFormatToKey = (format) => {\n for (const k in FORMAT_KEYS) {\n if (FORMAT_KEYS[k].f === format) {\n return FORMAT_KEYS[k].k;\n }\n }\n return undefined;\n};\nconst convertDataToISO = (data) => {\n // https://www.w3.org/TR/NOTE-datetime\n let rtn = '';\n if (data.year !== undefined) {\n // YYYY\n rtn = fourDigit(data.year);\n if (data.month !== undefined) {\n // YYYY-MM\n rtn += '-' + twoDigit(data.month);\n if (data.day !== undefined) {\n // YYYY-MM-DD\n rtn += '-' + twoDigit(data.day);\n if (data.hour !== undefined) {\n // YYYY-MM-DDTHH:mm:SS\n rtn += `T${twoDigit(data.hour)}:${twoDigit(data.minute)}:${twoDigit(data.second)}`;\n if (data.millisecond > 0) {\n // YYYY-MM-DDTHH:mm:SS.SSS\n rtn += '.' + threeDigit(data.millisecond);\n }\n if (data.tzOffset === undefined) {\n // YYYY-MM-DDTHH:mm:SSZ\n rtn += 'Z';\n }\n else {\n // YYYY-MM-DDTHH:mm:SS+/-HH:mm\n rtn += (data.tzOffset > 0 ? '+' : '-') + twoDigit(Math.floor(Math.abs(data.tzOffset / 60))) + ':' + twoDigit(data.tzOffset % 60);\n }\n }\n }\n }\n }\n else if (data.hour !== undefined) {\n // HH:mm\n rtn = twoDigit(data.hour) + ':' + twoDigit(data.minute);\n if (data.second !== undefined) {\n // HH:mm:SS\n rtn += ':' + twoDigit(data.second);\n if (data.millisecond !== undefined) {\n // HH:mm:SS.SSS\n rtn += '.' + threeDigit(data.millisecond);\n }\n }\n }\n return rtn;\n};\n/**\n * Use to convert a string of comma separated strings or\n * an array of strings, and clean up any user input\n */\nconst convertToArrayOfStrings = (input, type) => {\n if (input == null) {\n return undefined;\n }\n if (typeof input === 'string') {\n // convert the string to an array of strings\n // auto remove any [] characters\n input = input.replace(/\\[|\\]/g, '').split(',');\n }\n let values;\n if (Array.isArray(input)) {\n // trim up each string value\n values = input.map(val => val.toString().trim());\n }\n if (values === undefined || values.length === 0) {\n console.warn(`Invalid \"${type}Names\". Must be an array of strings, or a comma separated string.`);\n }\n return values;\n};\n/**\n * Use to convert a string of comma separated numbers or\n * an array of numbers, and clean up any user input\n */\nconst convertToArrayOfNumbers = (input, type) => {\n if (typeof input === 'string') {\n // convert the string to an array of strings\n // auto remove any whitespace and [] characters\n input = input.replace(/\\[|\\]|\\s/g, '').split(',');\n }\n let values;\n if (Array.isArray(input)) {\n // ensure each value is an actual number in the returned array\n values = input\n .map((num) => parseInt(num, 10))\n .filter(isFinite);\n }\n else {\n values = [input];\n }\n if (values.length === 0) {\n console.warn(`Invalid \"${type}Values\". Must be an array of numbers, or a comma separated string of numbers.`);\n }\n return values;\n};\nconst twoDigit = (val) => {\n return ('0' + (val !== undefined ? Math.abs(val) : '0')).slice(-2);\n};\nconst threeDigit = (val) => {\n return ('00' + (val !== undefined ? Math.abs(val) : '0')).slice(-3);\n};\nconst fourDigit = (val) => {\n return ('000' + (val !== undefined ? Math.abs(val) : '0')).slice(-4);\n};\nconst FORMAT_YYYY = 'YYYY';\nconst FORMAT_YY = 'YY';\nconst FORMAT_MMMM = 'MMMM';\nconst FORMAT_MMM = 'MMM';\nconst FORMAT_MM = 'MM';\nconst FORMAT_M = 'M';\nconst FORMAT_DDDD = 'DDDD';\nconst FORMAT_DDD = 'DDD';\nconst FORMAT_DD = 'DD';\nconst FORMAT_D = 'D';\nconst FORMAT_HH = 'HH';\nconst FORMAT_H = 'H';\nconst FORMAT_hh = 'hh';\nconst FORMAT_h = 'h';\nconst FORMAT_mm = 'mm';\nconst FORMAT_m = 'm';\nconst FORMAT_ss = 'ss';\nconst FORMAT_s = 's';\nconst FORMAT_A = 'A';\nconst FORMAT_a = 'a';\nconst FORMAT_KEYS = [\n { f: FORMAT_YYYY, k: 'year' },\n { f: FORMAT_MMMM, k: 'month' },\n { f: FORMAT_DDDD, k: 'day' },\n { f: FORMAT_MMM, k: 'month' },\n { f: FORMAT_DDD, k: 'day' },\n { f: FORMAT_YY, k: 'year' },\n { f: FORMAT_MM, k: 'month' },\n { f: FORMAT_DD, k: 'day' },\n { f: FORMAT_HH, k: 'hour' },\n { f: FORMAT_hh, k: 'hour' },\n { f: FORMAT_mm, k: 'minute' },\n { f: FORMAT_ss, k: 'second' },\n { f: FORMAT_M, k: 'month' },\n { f: FORMAT_D, k: 'day' },\n { f: FORMAT_H, k: 'hour' },\n { f: FORMAT_h, k: 'hour' },\n { f: FORMAT_m, k: 'minute' },\n { f: FORMAT_s, k: 'second' },\n { f: FORMAT_A, k: 'ampm' },\n { f: FORMAT_a, k: 'ampm' },\n];\nconst DAY_NAMES = [\n 'Sunday',\n 'Monday',\n 'Tuesday',\n 'Wednesday',\n 'Thursday',\n 'Friday',\n 'Saturday',\n];\nconst DAY_SHORT_NAMES = [\n 'Sun',\n 'Mon',\n 'Tue',\n 'Wed',\n 'Thu',\n 'Fri',\n 'Sat',\n];\nconst MONTH_NAMES = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n];\nconst MONTH_SHORT_NAMES = [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec',\n];\nconst VALID_AMPM_PREFIX = [\n FORMAT_hh, FORMAT_h, FORMAT_mm, FORMAT_m, FORMAT_ss, FORMAT_s\n];\n\nconst datetimeIosCss = \":host{padding-left:var(--padding-start);padding-right:var(--padding-end);padding-top:var(--padding-top);padding-bottom:var(--padding-bottom);display:-ms-flexbox;display:flex;position:relative;min-width:16px;min-height:1.2em;font-family:var(--ion-font-family, inherit);text-overflow:ellipsis;white-space:nowrap;overflow:hidden;z-index:2}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){:host{padding-left:unset;padding-right:unset;-webkit-padding-start:var(--padding-start);padding-inline-start:var(--padding-start);-webkit-padding-end:var(--padding-end);padding-inline-end:var(--padding-end)}}:host(.in-item){position:static}:host(.datetime-placeholder){color:var(--placeholder-color)}:host(.datetime-disabled){opacity:0.3;pointer-events:none}:host(.datetime-readonly){pointer-events:none}button{left:0;top:0;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;position:absolute;width:100%;height:100%;border:0;background:transparent;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;outline:none}[dir=rtl] button,:host-context([dir=rtl]) button{left:unset;right:unset;right:0}button::-moz-focus-inner{border:0}.datetime-text{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;-ms-flex:1;flex:1;min-height:inherit;direction:ltr;overflow:inherit}[dir=rtl] .datetime-text,:host-context([dir=rtl]) .datetime-text{direction:rtl}:host{--placeholder-color:var(--ion-color-step-400, #999999);--padding-top:10px;--padding-end:10px;--padding-bottom:10px;--padding-start:20px}\";\n\nconst datetimeMdCss = \":host{padding-left:var(--padding-start);padding-right:var(--padding-end);padding-top:var(--padding-top);padding-bottom:var(--padding-bottom);display:-ms-flexbox;display:flex;position:relative;min-width:16px;min-height:1.2em;font-family:var(--ion-font-family, inherit);text-overflow:ellipsis;white-space:nowrap;overflow:hidden;z-index:2}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){:host{padding-left:unset;padding-right:unset;-webkit-padding-start:var(--padding-start);padding-inline-start:var(--padding-start);-webkit-padding-end:var(--padding-end);padding-inline-end:var(--padding-end)}}:host(.in-item){position:static}:host(.datetime-placeholder){color:var(--placeholder-color)}:host(.datetime-disabled){opacity:0.3;pointer-events:none}:host(.datetime-readonly){pointer-events:none}button{left:0;top:0;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;position:absolute;width:100%;height:100%;border:0;background:transparent;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;outline:none}[dir=rtl] button,:host-context([dir=rtl]) button{left:unset;right:unset;right:0}button::-moz-focus-inner{border:0}.datetime-text{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;-ms-flex:1;flex:1;min-height:inherit;direction:ltr;overflow:inherit}[dir=rtl] .datetime-text,:host-context([dir=rtl]) .datetime-text{direction:rtl}:host{--placeholder-color:var(--ion-placeholder-color, var(--ion-color-step-400, #999999));--padding-top:10px;--padding-end:0;--padding-bottom:11px;--padding-start:16px}\";\n\nconst Datetime = class {\n constructor(hostRef) {\n registerInstance(this, hostRef);\n this.ionCancel = createEvent(this, \"ionCancel\", 7);\n this.ionChange = createEvent(this, \"ionChange\", 7);\n this.ionFocus = createEvent(this, \"ionFocus\", 7);\n this.ionBlur = createEvent(this, \"ionBlur\", 7);\n this.ionStyle = createEvent(this, \"ionStyle\", 7);\n this.inputId = `ion-dt-${datetimeIds++}`;\n this.locale = {};\n this.datetimeMin = {};\n this.datetimeMax = {};\n this.datetimeValue = {};\n this.isExpanded = false;\n /**\n * The name of the control, which is submitted with the form data.\n */\n this.name = this.inputId;\n /**\n * If `true`, the user cannot interact with the datetime.\n */\n this.disabled = false;\n /**\n * If `true`, the datetime appears normal but is not interactive.\n */\n this.readonly = false;\n /**\n * The display format of the date and time as text that shows\n * within the item. When the `pickerFormat` input is not used, then the\n * `displayFormat` is used for both display the formatted text, and determining\n * the datetime picker's columns. See the `pickerFormat` input description for\n * more info. Defaults to `MMM D, YYYY`.\n */\n this.displayFormat = 'MMM D, YYYY';\n /**\n * The text to display on the picker's cancel button.\n */\n this.cancelText = 'Cancel';\n /**\n * The text to display on the picker's \"Done\" button.\n */\n this.doneText = 'Done';\n this.onClick = () => {\n this.setFocus();\n this.open();\n };\n this.onFocus = () => {\n this.ionFocus.emit();\n };\n this.onBlur = () => {\n this.ionBlur.emit();\n };\n }\n disabledChanged() {\n this.emitStyle();\n }\n /**\n * Update the datetime value when the value changes\n */\n valueChanged() {\n this.updateDatetimeValue(this.value);\n this.emitStyle();\n this.ionChange.emit({\n value: this.value\n });\n }\n componentWillLoad() {\n // first see if locale names were provided in the inputs\n // then check to see if they're in the config\n // if neither were provided then it will use default English names\n this.locale = {\n // this.locale[type] = convertToArrayOfStrings((this[type] ? this[type] : this.config.get(type), type);\n monthNames: convertToArrayOfStrings(this.monthNames, 'monthNames'),\n monthShortNames: convertToArrayOfStrings(this.monthShortNames, 'monthShortNames'),\n dayNames: convertToArrayOfStrings(this.dayNames, 'dayNames'),\n dayShortNames: convertToArrayOfStrings(this.dayShortNames, 'dayShortNames')\n };\n this.updateDatetimeValue(this.value);\n this.emitStyle();\n }\n /**\n * Opens the datetime overlay.\n */\n async open() {\n if (this.disabled || this.isExpanded) {\n return;\n }\n const pickerOptions = this.generatePickerOptions();\n const picker = await pickerController.create(pickerOptions);\n this.isExpanded = true;\n picker.onDidDismiss().then(() => {\n this.isExpanded = false;\n this.setFocus();\n });\n addEventListener(picker, 'ionPickerColChange', async (event) => {\n const data = event.detail;\n const colSelectedIndex = data.selectedIndex;\n const colOptions = data.options;\n const changeData = {};\n changeData[data.name] = {\n value: colOptions[colSelectedIndex].value\n };\n if (data.name !== 'ampm' && this.datetimeValue.ampm !== undefined) {\n changeData['ampm'] = {\n value: this.datetimeValue.ampm\n };\n }\n this.updateDatetimeValue(changeData);\n picker.columns = this.generateColumns();\n });\n await picker.present();\n }\n emitStyle() {\n this.ionStyle.emit({\n 'interactive': true,\n 'datetime': true,\n 'has-placeholder': this.placeholder != null,\n 'has-value': this.hasValue(),\n 'interactive-disabled': this.disabled,\n });\n }\n updateDatetimeValue(value) {\n updateDate(this.datetimeValue, value, this.displayTimezone);\n }\n generatePickerOptions() {\n const mode = getIonMode(this);\n this.locale = {\n monthNames: convertToArrayOfStrings(this.monthNames, 'monthNames'),\n monthShortNames: convertToArrayOfStrings(this.monthShortNames, 'monthShortNames'),\n dayNames: convertToArrayOfStrings(this.dayNames, 'dayNames'),\n dayShortNames: convertToArrayOfStrings(this.dayShortNames, 'dayShortNames')\n };\n const pickerOptions = Object.assign(Object.assign({ mode }, this.pickerOptions), { columns: this.generateColumns() });\n // If the user has not passed in picker buttons,\n // add a cancel and ok button to the picker\n const buttons = pickerOptions.buttons;\n if (!buttons || buttons.length === 0) {\n pickerOptions.buttons = [\n {\n text: this.cancelText,\n role: 'cancel',\n handler: () => {\n this.updateDatetimeValue(this.value);\n this.ionCancel.emit();\n }\n },\n {\n text: this.doneText,\n handler: (data) => {\n this.updateDatetimeValue(data);\n /**\n * Prevent convertDataToISO from doing any\n * kind of transformation based on timezone\n * This cancels out any change it attempts to make\n *\n * Important: Take the timezone offset based on\n * the date that is currently selected, otherwise\n * there can be 1 hr difference when dealing w/ DST\n */\n const date = new Date(convertDataToISO(this.datetimeValue));\n // If a custom display timezone is provided, use that tzOffset value instead\n this.datetimeValue.tzOffset = (this.displayTimezone !== undefined && this.displayTimezone.length > 0)\n ? ((getTimezoneOffset(date, this.displayTimezone)) / 1000 / 60) * -1\n : date.getTimezoneOffset() * -1;\n this.value = convertDataToISO(this.datetimeValue);\n }\n }\n ];\n }\n return pickerOptions;\n }\n generateColumns() {\n // if a picker format wasn't provided, then fallback\n // to use the display format\n let template = this.pickerFormat || this.displayFormat || DEFAULT_FORMAT;\n if (template.length === 0) {\n return [];\n }\n // make sure we've got up to date sizing information\n this.calcMinMax();\n // does not support selecting by day name\n // automatically remove any day name formats\n template = template.replace('DDDD', '{~}').replace('DDD', '{~}');\n if (template.indexOf('D') === -1) {\n // there is not a day in the template\n // replace the day name with a numeric one if it exists\n template = template.replace('{~}', 'D');\n }\n // make sure no day name replacer is left in the string\n template = template.replace(/{~}/g, '');\n // parse apart the given template into an array of \"formats\"\n const columns = parseTemplate(template).map((format) => {\n // loop through each format in the template\n // create a new picker column to build up with data\n const key = convertFormatToKey(format);\n let values;\n // check if they have exact values to use for this date part\n // otherwise use the default date part values\n const self = this;\n values = self[key + 'Values']\n ? convertToArrayOfNumbers(self[key + 'Values'], key)\n : dateValueRange(format, this.datetimeMin, this.datetimeMax);\n const colOptions = values.map(val => {\n return {\n value: val,\n text: renderTextFormat(format, val, undefined, this.locale),\n };\n });\n // cool, we've loaded up the columns with options\n // preselect the option for this column\n const optValue = getDateValue(this.datetimeValue, format);\n const selectedIndex = colOptions.findIndex(opt => opt.value === optValue);\n return {\n name: key,\n selectedIndex: selectedIndex >= 0 ? selectedIndex : 0,\n options: colOptions\n };\n });\n // Normalize min/max\n const min = this.datetimeMin;\n const max = this.datetimeMax;\n ['month', 'day', 'hour', 'minute']\n .filter(name => !columns.find(column => column.name === name))\n .forEach(name => {\n min[name] = 0;\n max[name] = 0;\n });\n return this.validateColumns(divyColumns(columns));\n }\n validateColumns(columns) {\n const today = new Date();\n const minCompareVal = dateDataSortValue(this.datetimeMin);\n const maxCompareVal = dateDataSortValue(this.datetimeMax);\n const yearCol = columns.find(c => c.name === 'year');\n let selectedYear = today.getFullYear();\n if (yearCol) {\n // default to the first value if the current year doesn't exist in the options\n if (!yearCol.options.find(col => col.value === today.getFullYear())) {\n selectedYear = yearCol.options[0].value;\n }\n const selectedIndex = yearCol.selectedIndex;\n if (selectedIndex !== undefined) {\n const yearOpt = yearCol.options[selectedIndex];\n if (yearOpt) {\n // they have a selected year value\n selectedYear = yearOpt.value;\n }\n }\n }\n const selectedMonth = this.validateColumn(columns, 'month', 1, minCompareVal, maxCompareVal, [selectedYear, 0, 0, 0, 0], [selectedYear, 12, 31, 23, 59]);\n const numDaysInMonth = daysInMonth(selectedMonth, selectedYear);\n const selectedDay = this.validateColumn(columns, 'day', 2, minCompareVal, maxCompareVal, [selectedYear, selectedMonth, 0, 0, 0], [selectedYear, selectedMonth, numDaysInMonth, 23, 59]);\n const selectedHour = this.validateColumn(columns, 'hour', 3, minCompareVal, maxCompareVal, [selectedYear, selectedMonth, selectedDay, 0, 0], [selectedYear, selectedMonth, selectedDay, 23, 59]);\n this.validateColumn(columns, 'minute', 4, minCompareVal, maxCompareVal, [selectedYear, selectedMonth, selectedDay, selectedHour, 0], [selectedYear, selectedMonth, selectedDay, selectedHour, 59]);\n return columns;\n }\n calcMinMax() {\n const todaysYear = new Date().getFullYear();\n if (this.yearValues !== undefined) {\n const years = convertToArrayOfNumbers(this.yearValues, 'year');\n if (this.min === undefined) {\n this.min = Math.min(...years).toString();\n }\n if (this.max === undefined) {\n this.max = Math.max(...years).toString();\n }\n }\n else {\n if (this.min === undefined) {\n this.min = (todaysYear - 100).toString();\n }\n if (this.max === undefined) {\n this.max = todaysYear.toString();\n }\n }\n const min = this.datetimeMin = parseDate(this.min);\n const max = this.datetimeMax = parseDate(this.max);\n min.year = min.year || todaysYear;\n max.year = max.year || todaysYear;\n min.month = min.month || 1;\n max.month = max.month || 12;\n min.day = min.day || 1;\n max.day = max.day || 31;\n min.hour = min.hour || 0;\n max.hour = max.hour === undefined ? 23 : max.hour;\n min.minute = min.minute || 0;\n max.minute = max.minute === undefined ? 59 : max.minute;\n min.second = min.second || 0;\n max.second = max.second === undefined ? 59 : max.second;\n // Ensure min/max constraints\n if (min.year > max.year) {\n console.error('min.year > max.year');\n min.year = max.year - 100;\n }\n if (min.year === max.year) {\n if (min.month > max.month) {\n console.error('min.month > max.month');\n min.month = 1;\n }\n else if (min.month === max.month && min.day > max.day) {\n console.error('min.day > max.day');\n min.day = 1;\n }\n }\n }\n validateColumn(columns, name, index, min, max, lowerBounds, upperBounds) {\n const column = columns.find(c => c.name === name);\n if (!column) {\n return 0;\n }\n const lb = lowerBounds.slice();\n const ub = upperBounds.slice();\n const options = column.options;\n let indexMin = options.length - 1;\n let indexMax = 0;\n for (let i = 0; i < options.length; i++) {\n const opts = options[i];\n const value = opts.value;\n lb[index] = opts.value;\n ub[index] = opts.value;\n const disabled = opts.disabled = (value < lowerBounds[index] ||\n value > upperBounds[index] ||\n dateSortValue(ub[0], ub[1], ub[2], ub[3], ub[4]) < min ||\n dateSortValue(lb[0], lb[1], lb[2], lb[3], lb[4]) > max);\n if (!disabled) {\n indexMin = Math.min(indexMin, i);\n indexMax = Math.max(indexMax, i);\n }\n }\n const selectedIndex = column.selectedIndex = clamp(indexMin, column.selectedIndex, indexMax);\n const opt = column.options[selectedIndex];\n if (opt) {\n return opt.value;\n }\n return 0;\n }\n get text() {\n // create the text of the formatted data\n const template = this.displayFormat || this.pickerFormat || DEFAULT_FORMAT;\n if (this.value === undefined ||\n this.value === null ||\n this.value.length === 0) {\n return;\n }\n return renderDatetime(template, this.datetimeValue, this.locale);\n }\n hasValue() {\n return this.text !== undefined;\n }\n setFocus() {\n if (this.buttonEl) {\n this.buttonEl.focus();\n }\n }\n render() {\n const { inputId, text, disabled, readonly, isExpanded, el, placeholder } = this;\n const mode = getIonMode(this);\n const labelId = inputId + '-lbl';\n const label = findItemLabel(el);\n const addPlaceholderClass = (text === undefined && placeholder != null) ? true : false;\n // If selected text has been passed in, use that first\n // otherwise use the placeholder\n const datetimeText = text === undefined\n ? (placeholder != null ? placeholder : '')\n : text;\n const datetimeTextPart = text === undefined\n ? (placeholder != null ? 'placeholder' : undefined)\n : 'text';\n if (label) {\n label.id = labelId;\n }\n renderHiddenInput(true, el, this.name, this.value, this.disabled);\n return (h(Host, { onClick: this.onClick, \"aria-disabled\": disabled ? 'true' : null, \"aria-expanded\": `${isExpanded}`, \"aria-haspopup\": \"true\", \"aria-labelledby\": label ? labelId : null, class: {\n [mode]: true,\n 'datetime-disabled': disabled,\n 'datetime-readonly': readonly,\n 'datetime-placeholder': addPlaceholderClass,\n 'in-item': hostContext('ion-item', el)\n } }, h(\"div\", { class: \"datetime-text\", part: datetimeTextPart }, datetimeText), h(\"button\", { type: \"button\", onFocus: this.onFocus, onBlur: this.onBlur, disabled: this.disabled, ref: btnEl => this.buttonEl = btnEl })));\n }\n get el() { return getElement(this); }\n static get watchers() { return {\n \"disabled\": [\"disabledChanged\"],\n \"value\": [\"valueChanged\"]\n }; }\n};\nconst divyColumns = (columns) => {\n const columnsWidth = [];\n let col;\n let width;\n for (let i = 0; i < columns.length; i++) {\n col = columns[i];\n columnsWidth.push(0);\n for (const option of col.options) {\n width = option.text.length;\n if (width > columnsWidth[i]) {\n columnsWidth[i] = width;\n }\n }\n }\n if (columnsWidth.length === 2) {\n width = Math.max(columnsWidth[0], columnsWidth[1]);\n columns[0].align = 'right';\n columns[1].align = 'left';\n columns[0].optionsWidth = columns[1].optionsWidth = `${width * 17}px`;\n }\n else if (columnsWidth.length === 3) {\n width = Math.max(columnsWidth[0], columnsWidth[2]);\n columns[0].align = 'right';\n columns[1].columnWidth = `${columnsWidth[1] * 17}px`;\n columns[0].optionsWidth = columns[2].optionsWidth = `${width * 17}px`;\n columns[2].align = 'left';\n }\n return columns;\n};\nconst DEFAULT_FORMAT = 'MMM D, YYYY';\nlet datetimeIds = 0;\nDatetime.style = {\n ios: datetimeIosCss,\n md: datetimeMdCss\n};\n\n/**\n * iOS Picker Enter Animation\n */\nconst iosEnterAnimation = (baseEl) => {\n const baseAnimation = createAnimation();\n const backdropAnimation = createAnimation();\n const wrapperAnimation = createAnimation();\n backdropAnimation\n .addElement(baseEl.querySelector('ion-backdrop'))\n .fromTo('opacity', 0.01, 'var(--backdrop-opacity)')\n .beforeStyles({\n 'pointer-events': 'none'\n })\n .afterClearStyles(['pointer-events']);\n wrapperAnimation\n .addElement(baseEl.querySelector('.picker-wrapper'))\n .fromTo('transform', 'translateY(100%)', 'translateY(0%)');\n return baseAnimation\n .addElement(baseEl)\n .easing('cubic-bezier(.36,.66,.04,1)')\n .duration(400)\n .addAnimation([backdropAnimation, wrapperAnimation]);\n};\n\n/**\n * iOS Picker Leave Animation\n */\nconst iosLeaveAnimation = (baseEl) => {\n const baseAnimation = createAnimation();\n const backdropAnimation = createAnimation();\n const wrapperAnimation = createAnimation();\n backdropAnimation\n .addElement(baseEl.querySelector('ion-backdrop'))\n .fromTo('opacity', 'var(--backdrop-opacity)', 0.01);\n wrapperAnimation\n .addElement(baseEl.querySelector('.picker-wrapper'))\n .fromTo('transform', 'translateY(0%)', 'translateY(100%)');\n return baseAnimation\n .addElement(baseEl)\n .easing('cubic-bezier(.36,.66,.04,1)')\n .duration(400)\n .addAnimation([backdropAnimation, wrapperAnimation]);\n};\n\nconst 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;left:0;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}[dir=rtl].sc-ion-picker-ios-h,[dir=rtl] .sc-ion-picker-ios-h{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;margin-left:auto;margin-right: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}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.picker-wrapper.sc-ion-picker-ios{margin-left:unset;margin-right:unset;-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto}}.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;direction:ltr;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;padding-left:1em;padding-right:1em;padding-top:0;padding-bottom:0;height:44px;background:transparent;color:var(--ion-color-primary, #3880ff);font-size:16px}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.picker-button.sc-ion-picker-ios,.picker-button.ion-activated.sc-ion-picker-ios{padding-left:unset;padding-right:unset;-webkit-padding-start:1em;padding-inline-start:1em;-webkit-padding-end:1em;padding-inline-end:1em}}.picker-columns.sc-ion-picker-ios{height:215px;-webkit-perspective:1000px;perspective:1000px}.picker-above-highlight.sc-ion-picker-ios{left:0;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}[dir=rtl].sc-ion-picker-ios .picker-above-highlight.sc-ion-picker-ios,[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}.picker-below-highlight.sc-ion-picker-ios{left:0;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}[dir=rtl].sc-ion-picker-ios .picker-below-highlight.sc-ion-picker-ios,[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}\";\n\nconst 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;left:0;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}[dir=rtl].sc-ion-picker-md-h,[dir=rtl] .sc-ion-picker-md-h{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;margin-left:auto;margin-right: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}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.picker-wrapper.sc-ion-picker-md{margin-left:unset;margin-right:unset;-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto}}.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;direction:ltr;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;padding-left:1.1em;padding-right: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}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.picker-button.sc-ion-picker-md,.picker-button.ion-activated.sc-ion-picker-md{padding-left:unset;padding-right:unset;-webkit-padding-start:1.1em;padding-inline-start:1.1em;-webkit-padding-end:1.1em;padding-inline-end:1.1em}}.picker-columns.sc-ion-picker-md{height:216px;-webkit-perspective:1800px;perspective:1800px}.picker-above-highlight.sc-ion-picker-md{left:0;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}[dir=rtl].sc-ion-picker-md .picker-above-highlight.sc-ion-picker-md,[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}.picker-below-highlight.sc-ion-picker-md{left:0;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}[dir=rtl].sc-ion-picker-md .picker-below-highlight.sc-ion-picker-md,[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}\";\n\nconst Picker = class {\n constructor(hostRef) {\n registerInstance(this, hostRef);\n this.didPresent = createEvent(this, \"ionPickerDidPresent\", 7);\n this.willPresent = createEvent(this, \"ionPickerWillPresent\", 7);\n this.willDismiss = createEvent(this, \"ionPickerWillDismiss\", 7);\n this.didDismiss = createEvent(this, \"ionPickerDidDismiss\", 7);\n this.presented = false;\n /**\n * If `true`, the keyboard will be automatically dismissed when the overlay is presented.\n */\n this.keyboardClose = true;\n /**\n * Array of buttons to be displayed at the top of the picker.\n */\n this.buttons = [];\n /**\n * Array of columns to be displayed in the picker.\n */\n this.columns = [];\n /**\n * Number of milliseconds to wait before dismissing the picker.\n */\n this.duration = 0;\n /**\n * If `true`, a backdrop will be displayed behind the picker.\n */\n this.showBackdrop = true;\n /**\n * If `true`, the picker will be dismissed when the backdrop is clicked.\n */\n this.backdropDismiss = true;\n /**\n * If `true`, the picker will animate.\n */\n this.animated = true;\n this.onBackdropTap = () => {\n this.dismiss(undefined, BACKDROP);\n };\n this.dispatchCancelHandler = (ev) => {\n const role = ev.detail.role;\n if (isCancel(role)) {\n const cancelButton = this.buttons.find(b => b.role === 'cancel');\n this.callButtonHandler(cancelButton);\n }\n };\n }\n connectedCallback() {\n prepareOverlay(this.el);\n }\n /**\n * Present the picker overlay after it has been created.\n */\n async present() {\n await present(this, 'pickerEnter', iosEnterAnimation, iosEnterAnimation, undefined);\n if (this.duration > 0) {\n this.durationTimeout = setTimeout(() => this.dismiss(), this.duration);\n }\n }\n /**\n * Dismiss the picker overlay after it has been presented.\n *\n * @param data Any data to emit in the dismiss events.\n * @param role The role of the element that is dismissing the picker.\n * This can be useful in a button handler for determining which button was\n * clicked to dismiss the picker.\n * Some examples include: ``\"cancel\"`, `\"destructive\"`, \"selected\"`, and `\"backdrop\"`.\n */\n dismiss(data, role) {\n if (this.durationTimeout) {\n clearTimeout(this.durationTimeout);\n }\n return dismiss(this, data, role, 'pickerLeave', iosLeaveAnimation, iosLeaveAnimation);\n }\n /**\n * Returns a promise that resolves when the picker did dismiss.\n */\n onDidDismiss() {\n return eventMethod(this.el, 'ionPickerDidDismiss');\n }\n /**\n * Returns a promise that resolves when the picker will dismiss.\n */\n onWillDismiss() {\n return eventMethod(this.el, 'ionPickerWillDismiss');\n }\n /**\n * Get the column that matches the specified name.\n *\n * @param name The name of the column.\n */\n getColumn(name) {\n return Promise.resolve(this.columns.find(column => column.name === name));\n }\n async buttonClick(button) {\n const role = button.role;\n if (isCancel(role)) {\n return this.dismiss(undefined, role);\n }\n const shouldDismiss = await this.callButtonHandler(button);\n if (shouldDismiss) {\n return this.dismiss(this.getSelected(), button.role);\n }\n return Promise.resolve();\n }\n async callButtonHandler(button) {\n if (button) {\n // a handler has been provided, execute it\n // pass the handler the values from the inputs\n const rtn = await safeCall(button.handler, this.getSelected());\n if (rtn === false) {\n // if the return value of the handler is false then do not dismiss\n return false;\n }\n }\n return true;\n }\n getSelected() {\n const selected = {};\n this.columns.forEach((col, index) => {\n const selectedColumn = col.selectedIndex !== undefined\n ? col.options[col.selectedIndex]\n : undefined;\n selected[col.name] = {\n text: selectedColumn ? selectedColumn.text : undefined,\n value: selectedColumn ? selectedColumn.value : undefined,\n columnIndex: index\n };\n });\n return selected;\n }\n render() {\n const { htmlAttributes } = this;\n const mode = getIonMode(this);\n return (h(Host, Object.assign({ \"aria-modal\": \"true\", tabindex: \"-1\" }, htmlAttributes, { style: {\n zIndex: `${20000 + this.overlayIndex}`\n }, class: Object.assign({ [mode]: true,\n // Used internally for styling\n [`picker-${mode}`]: true }, getClassMap(this.cssClass)), onIonBackdropTap: this.onBackdropTap, onIonPickerWillDismiss: this.dispatchCancelHandler }), h(\"ion-backdrop\", { visible: this.showBackdrop, tappable: this.backdropDismiss }), h(\"div\", { tabindex: \"0\" }), h(\"div\", { class: \"picker-wrapper ion-overlay-wrapper\", role: \"dialog\" }, h(\"div\", { class: \"picker-toolbar\" }, this.buttons.map(b => (h(\"div\", { class: buttonWrapperClass(b) }, h(\"button\", { type: \"button\", onClick: () => this.buttonClick(b), class: buttonClass(b) }, b.text))))), h(\"div\", { class: \"picker-columns\" }, h(\"div\", { class: \"picker-above-highlight\" }), this.presented && this.columns.map(c => h(\"ion-picker-column\", { col: c })), h(\"div\", { class: \"picker-below-highlight\" }))), h(\"div\", { tabindex: \"0\" })));\n }\n get el() { return getElement(this); }\n};\nconst buttonWrapperClass = (button) => {\n return {\n [`picker-toolbar-${button.role}`]: button.role !== undefined,\n 'picker-toolbar-button': true\n };\n};\nconst buttonClass = (button) => {\n return Object.assign({ 'picker-button': true, 'ion-activatable': true }, getClassMap(button.cssClass));\n};\nPicker.style = {\n ios: pickerIosCss,\n md: pickerMdCss\n};\n\nconst 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{left:0;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}[dir=rtl] .picker-opt,:host-context([dir=rtl]) .picker-opt{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{padding-left:4px;padding-right:4px;padding-top:0;padding-bottom:0;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.picker-col{padding-left:unset;padding-right:unset;-webkit-padding-start:4px;padding-inline-start:4px;-webkit-padding-end:4px;padding-inline-end:4px}}.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}[dir=rtl] .picker-opt,:host-context([dir=rtl]) .picker-opt{-webkit-transform-origin:calc(100% - center) center;transform-origin:calc(100% - center) center}\";\n\nconst 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{left:0;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}[dir=rtl] .picker-opt,:host-context([dir=rtl]) .picker-opt{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{padding-left:8px;padding-right:8px;padding-top:0;padding-bottom:0;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.picker-col{padding-left:unset;padding-right:unset;-webkit-padding-start:8px;padding-inline-start:8px;-webkit-padding-end:8px;padding-inline-end:8px}}.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)}\";\n\nconst PickerColumnCmp = class {\n constructor(hostRef) {\n registerInstance(this, hostRef);\n this.ionPickerColChange = createEvent(this, \"ionPickerColChange\", 7);\n this.optHeight = 0;\n this.rotateFactor = 0;\n this.scaleFactor = 1;\n this.velocity = 0;\n this.y = 0;\n this.noAnimate = true;\n }\n colChanged() {\n this.refresh();\n }\n async connectedCallback() {\n let pickerRotateFactor = 0;\n let pickerScaleFactor = 0.81;\n const mode = getIonMode(this);\n if (mode === 'ios') {\n pickerRotateFactor = -0.46;\n pickerScaleFactor = 1;\n }\n this.rotateFactor = pickerRotateFactor;\n this.scaleFactor = pickerScaleFactor;\n this.gesture = (await import('./index-34cb2743.js')).createGesture({\n el: this.el,\n gestureName: 'picker-swipe',\n gesturePriority: 100,\n threshold: 0,\n passive: false,\n onStart: ev => this.onStart(ev),\n onMove: ev => this.onMove(ev),\n onEnd: ev => this.onEnd(ev),\n });\n this.gesture.enable();\n this.tmrId = setTimeout(() => {\n this.noAnimate = false;\n this.refresh(true);\n }, 250);\n }\n componentDidLoad() {\n const colEl = this.optsEl;\n if (colEl) {\n // DOM READ\n // We perfom a DOM read over a rendered item, this needs to happen after the first render\n this.optHeight = (colEl.firstElementChild ? colEl.firstElementChild.clientHeight : 0);\n }\n this.refresh();\n }\n disconnectedCallback() {\n cancelAnimationFrame(this.rafId);\n clearTimeout(this.tmrId);\n if (this.gesture) {\n this.gesture.destroy();\n this.gesture = undefined;\n }\n }\n emitColChange() {\n this.ionPickerColChange.emit(this.col);\n }\n setSelected(selectedIndex, duration) {\n // if there is a selected index, then figure out it's y position\n // if there isn't a selected index, then just use the top y position\n const y = (selectedIndex > -1) ? -(selectedIndex * this.optHeight) : 0;\n this.velocity = 0;\n // set what y position we're at\n cancelAnimationFrame(this.rafId);\n this.update(y, duration, true);\n this.emitColChange();\n }\n update(y, duration, saveY) {\n if (!this.optsEl) {\n return;\n }\n // ensure we've got a good round number :)\n let translateY = 0;\n let translateZ = 0;\n const { col, rotateFactor } = this;\n const selectedIndex = col.selectedIndex = this.indexForY(-y);\n const durationStr = (duration === 0) ? '' : duration + 'ms';\n const scaleStr = `scale(${this.scaleFactor})`;\n const children = this.optsEl.children;\n for (let i = 0; i < children.length; i++) {\n const button = children[i];\n const opt = col.options[i];\n const optOffset = (i * this.optHeight) + y;\n let transform = '';\n if (rotateFactor !== 0) {\n const rotateX = optOffset * rotateFactor;\n if (Math.abs(rotateX) <= 90) {\n translateY = 0;\n translateZ = 90;\n transform = `rotateX(${rotateX}deg) `;\n }\n else {\n translateY = -9999;\n }\n }\n else {\n translateZ = 0;\n translateY = optOffset;\n }\n const selected = selectedIndex === i;\n transform += `translate3d(0px,${translateY}px,${translateZ}px) `;\n if (this.scaleFactor !== 1 && !selected) {\n transform += scaleStr;\n }\n // Update transition duration\n if (this.noAnimate) {\n opt.duration = 0;\n button.style.transitionDuration = '';\n }\n else if (duration !== opt.duration) {\n opt.duration = duration;\n button.style.transitionDuration = durationStr;\n }\n // Update transform\n if (transform !== opt.transform) {\n opt.transform = transform;\n button.style.transform = transform;\n }\n // Update selected item\n if (selected !== opt.selected) {\n opt.selected = selected;\n if (selected) {\n button.classList.add(PICKER_OPT_SELECTED);\n }\n else {\n button.classList.remove(PICKER_OPT_SELECTED);\n }\n }\n }\n this.col.prevSelected = selectedIndex;\n if (saveY) {\n this.y = y;\n }\n if (this.lastIndex !== selectedIndex) {\n // have not set a last index yet\n hapticSelectionChanged();\n this.lastIndex = selectedIndex;\n }\n }\n decelerate() {\n if (this.velocity !== 0) {\n // still decelerating\n this.velocity *= DECELERATION_FRICTION;\n // do not let it go slower than a velocity of 1\n this.velocity = (this.velocity > 0)\n ? Math.max(this.velocity, 1)\n : Math.min(this.velocity, -1);\n let y = this.y + this.velocity;\n if (y > this.minY) {\n // whoops, it's trying to scroll up farther than the options we have!\n y = this.minY;\n this.velocity = 0;\n }\n else if (y < this.maxY) {\n // gahh, it's trying to scroll down farther than we can!\n y = this.maxY;\n this.velocity = 0;\n }\n this.update(y, 0, true);\n const notLockedIn = (Math.round(y) % this.optHeight !== 0) || (Math.abs(this.velocity) > 1);\n if (notLockedIn) {\n // isn't locked in yet, keep decelerating until it is\n this.rafId = requestAnimationFrame(() => this.decelerate());\n }\n else {\n this.velocity = 0;\n this.emitColChange();\n hapticSelectionEnd();\n }\n }\n else if (this.y % this.optHeight !== 0) {\n // needs to still get locked into a position so options line up\n const currentPos = Math.abs(this.y % this.optHeight);\n // create a velocity in the direction it needs to scroll\n this.velocity = (currentPos > (this.optHeight / 2) ? 1 : -1);\n this.decelerate();\n }\n }\n indexForY(y) {\n return Math.min(Math.max(Math.abs(Math.round(y / this.optHeight)), 0), this.col.options.length - 1);\n }\n // TODO should this check disabled?\n onStart(detail) {\n // We have to prevent default in order to block scrolling under the picker\n // but we DO NOT have to stop propagation, since we still want\n // some \"click\" events to capture\n if (detail.event.cancelable) {\n detail.event.preventDefault();\n }\n detail.event.stopPropagation();\n hapticSelectionStart();\n // reset everything\n cancelAnimationFrame(this.rafId);\n const options = this.col.options;\n let minY = (options.length - 1);\n let maxY = 0;\n for (let i = 0; i < options.length; i++) {\n if (!options[i].disabled) {\n minY = Math.min(minY, i);\n maxY = Math.max(maxY, i);\n }\n }\n this.minY = -(minY * this.optHeight);\n this.maxY = -(maxY * this.optHeight);\n }\n onMove(detail) {\n if (detail.event.cancelable) {\n detail.event.preventDefault();\n }\n detail.event.stopPropagation();\n // update the scroll position relative to pointer start position\n let y = this.y + detail.deltaY;\n if (y > this.minY) {\n // scrolling up higher than scroll area\n y = Math.pow(y, 0.8);\n this.bounceFrom = y;\n }\n else if (y < this.maxY) {\n // scrolling down below scroll area\n y += Math.pow(this.maxY - y, 0.9);\n this.bounceFrom = y;\n }\n else {\n this.bounceFrom = 0;\n }\n this.update(y, 0, false);\n }\n onEnd(detail) {\n if (this.bounceFrom > 0) {\n // bounce back up\n this.update(this.minY, 100, true);\n this.emitColChange();\n return;\n }\n else if (this.bounceFrom < 0) {\n // bounce back down\n this.update(this.maxY, 100, true);\n this.emitColChange();\n return;\n }\n this.velocity = clamp(-MAX_PICKER_SPEED, detail.velocityY * 23, MAX_PICKER_SPEED);\n if (this.velocity === 0 && detail.deltaY === 0) {\n const opt = detail.event.target.closest('.picker-opt');\n if (opt && opt.hasAttribute('opt-index')) {\n this.setSelected(parseInt(opt.getAttribute('opt-index'), 10), TRANSITION_DURATION);\n }\n }\n else {\n this.y += detail.deltaY;\n if (Math.abs(detail.velocityY) < 0.05) {\n const isScrollingUp = detail.deltaY > 0;\n const optHeightFraction = (Math.abs(this.y) % this.optHeight) / this.optHeight;\n if (isScrollingUp && optHeightFraction > 0.5) {\n this.velocity = Math.abs(this.velocity) * -1;\n }\n else if (!isScrollingUp && optHeightFraction <= 0.5) {\n this.velocity = Math.abs(this.velocity);\n }\n }\n this.decelerate();\n }\n }\n refresh(forceRefresh) {\n let min = this.col.options.length - 1;\n let max = 0;\n const options = this.col.options;\n for (let i = 0; i < options.length; i++) {\n if (!options[i].disabled) {\n min = Math.min(min, i);\n max = Math.max(max, i);\n }\n }\n /**\n * Only update selected value if column has a\n * velocity of 0. If it does not, then the\n * column is animating might land on\n * a value different than the value at\n * selectedIndex\n */\n if (this.velocity !== 0) {\n return;\n }\n const selectedIndex = clamp(min, this.col.selectedIndex || 0, max);\n if (this.col.prevSelected !== selectedIndex || forceRefresh) {\n const y = (selectedIndex * this.optHeight) * -1;\n this.velocity = 0;\n this.update(y, TRANSITION_DURATION, true);\n }\n }\n render() {\n const col = this.col;\n const Button = 'button';\n const mode = getIonMode(this);\n return (h(Host, { class: {\n [mode]: true,\n 'picker-col': true,\n 'picker-opts-left': this.col.align === 'left',\n 'picker-opts-right': this.col.align === 'right'\n }, style: {\n 'max-width': this.col.columnWidth\n } }, col.prefix && (h(\"div\", { class: \"picker-prefix\", style: { width: col.prefixWidth } }, col.prefix)), h(\"div\", { class: \"picker-opts\", style: { maxWidth: col.optionsWidth }, ref: el => this.optsEl = el }, col.options.map((o, index) => h(Button, { type: \"button\", class: { 'picker-opt': true, 'picker-opt-disabled': !!o.disabled }, \"opt-index\": index }, o.text))), col.suffix && (h(\"div\", { class: \"picker-suffix\", style: { width: col.suffixWidth } }, col.suffix))));\n }\n get el() { return getElement(this); }\n static get watchers() { return {\n \"col\": [\"colChanged\"]\n }; }\n};\nconst PICKER_OPT_SELECTED = 'picker-opt-selected';\nconst DECELERATION_FRICTION = 0.97;\nconst MAX_PICKER_SPEED = 90;\nconst TRANSITION_DURATION = 150;\nPickerColumnCmp.style = {\n ios: pickerColumnIosCss,\n md: pickerColumnMdCss\n};\n\nexport { Datetime as ion_datetime, Picker as ion_picker, PickerColumnCmp as ion_picker_column };\n"],"mappings":"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"},"metadata":{},"sourceType":"module"} |