oss-developer-platform
/
dev-ui
/node_modules
/@internationalized
/date
/dist
/DateFormatter.main.js
| function $parcel$export(e, n, v, s) { | |
| Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true}); | |
| } | |
| $parcel$export(module.exports, "DateFormatter", () => $8f23a04ae90a588b$export$ad991b66133851cf); | |
| /* | |
| * Copyright 2020 Adobe. All rights reserved. | |
| * This file is licensed to you under the Apache License, Version 2.0 (the "License"); | |
| * you may not use this file except in compliance with the License. You may obtain a copy | |
| * of the License at http://www.apache.org/licenses/LICENSE-2.0 | |
| * | |
| * Unless required by applicable law or agreed to in writing, software distributed under | |
| * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS | |
| * OF ANY KIND, either express or implied. See the License for the specific language | |
| * governing permissions and limitations under the License. | |
| */ let $8f23a04ae90a588b$var$formatterCache = new Map(); | |
| class $8f23a04ae90a588b$export$ad991b66133851cf { | |
| /** Formats a date as a string according to the locale and format options passed to the constructor. */ format(value) { | |
| return this.formatter.format(value); | |
| } | |
| /** Formats a date to an array of parts such as separators, numbers, punctuation, and more. */ formatToParts(value) { | |
| return this.formatter.formatToParts(value); | |
| } | |
| /** Formats a date range as a string. */ formatRange(start, end) { | |
| // @ts-ignore | |
| if (typeof this.formatter.formatRange === 'function') // @ts-ignore | |
| return this.formatter.formatRange(start, end); | |
| if (end < start) throw new RangeError('End date must be >= start date'); | |
| // Very basic fallback for old browsers. | |
| return `${this.formatter.format(start)} \u{2013} ${this.formatter.format(end)}`; | |
| } | |
| /** Formats a date range as an array of parts. */ formatRangeToParts(start, end) { | |
| // @ts-ignore | |
| if (typeof this.formatter.formatRangeToParts === 'function') // @ts-ignore | |
| return this.formatter.formatRangeToParts(start, end); | |
| if (end < start) throw new RangeError('End date must be >= start date'); | |
| let startParts = this.formatter.formatToParts(start); | |
| let endParts = this.formatter.formatToParts(end); | |
| return [ | |
| ...startParts.map((p)=>({ | |
| ...p, | |
| source: 'startRange' | |
| })), | |
| { | |
| type: 'literal', | |
| value: " \u2013 ", | |
| source: 'shared' | |
| }, | |
| ...endParts.map((p)=>({ | |
| ...p, | |
| source: 'endRange' | |
| })) | |
| ]; | |
| } | |
| /** Returns the resolved formatting options based on the values passed to the constructor. */ resolvedOptions() { | |
| let resolvedOptions = this.formatter.resolvedOptions(); | |
| if ($8f23a04ae90a588b$var$hasBuggyResolvedHourCycle()) { | |
| if (!this.resolvedHourCycle) this.resolvedHourCycle = $8f23a04ae90a588b$var$getResolvedHourCycle(resolvedOptions.locale, this.options); | |
| resolvedOptions.hourCycle = this.resolvedHourCycle; | |
| resolvedOptions.hour12 = this.resolvedHourCycle === 'h11' || this.resolvedHourCycle === 'h12'; | |
| } | |
| // Safari uses a different name for the Ethiopic (Amete Alem) calendar. | |
| // https://bugs.webkit.org/show_bug.cgi?id=241564 | |
| if (resolvedOptions.calendar === 'ethiopic-amete-alem') resolvedOptions.calendar = 'ethioaa'; | |
| return resolvedOptions; | |
| } | |
| constructor(locale, options = {}){ | |
| this.formatter = $8f23a04ae90a588b$var$getCachedDateFormatter(locale, options); | |
| this.options = options; | |
| } | |
| } | |
| // There are multiple bugs involving the hour12 and hourCycle options in various browser engines. | |
| // - Chrome [1] (and the ECMA 402 spec [2]) resolve hour12: false in English and other locales to h24 (24:00 - 23:59) | |
| // rather than h23 (00:00 - 23:59). Same can happen with hour12: true in French, which Chrome resolves to h11 (00:00 - 11:59) | |
| // rather than h12 (12:00 - 11:59). | |
| // - WebKit returns an incorrect hourCycle resolved option in the French locale due to incorrect parsing of 'h' literal | |
| // in the resolved pattern. It also formats incorrectly when specifying the hourCycle option for the same reason. [3] | |
| // [1] https://bugs.chromium.org/p/chromium/issues/detail?id=1045791 | |
| // [2] https://github.com/tc39/ecma402/issues/402 | |
| // [3] https://bugs.webkit.org/show_bug.cgi?id=229313 | |
| // https://github.com/unicode-org/cldr/blob/018b55eff7ceb389c7e3fc44e2f657eae3b10b38/common/supplemental/supplementalData.xml#L4774-L4802 | |
| const $8f23a04ae90a588b$var$hour12Preferences = { | |
| true: { | |
| // Only Japanese uses the h11 style for 12 hour time. All others use h12. | |
| ja: 'h11' | |
| }, | |
| false: { | |
| } | |
| }; | |
| function $8f23a04ae90a588b$var$getCachedDateFormatter(locale, options = {}) { | |
| // Work around buggy hour12 behavior in Chrome / ECMA 402 spec by using hourCycle instead. | |
| // Only apply the workaround if the issue is detected, because the hourCycle option is buggy in Safari. | |
| if (typeof options.hour12 === 'boolean' && $8f23a04ae90a588b$var$hasBuggyHour12Behavior()) { | |
| options = { | |
| ...options | |
| }; | |
| let pref = $8f23a04ae90a588b$var$hour12Preferences[String(options.hour12)][locale.split('-')[0]]; | |
| let defaultHourCycle = options.hour12 ? 'h12' : 'h23'; | |
| options.hourCycle = pref !== null && pref !== void 0 ? pref : defaultHourCycle; | |
| delete options.hour12; | |
| } | |
| let cacheKey = locale + (options ? Object.entries(options).sort((a, b)=>a[0] < b[0] ? -1 : 1).join() : ''); | |
| if ($8f23a04ae90a588b$var$formatterCache.has(cacheKey)) return $8f23a04ae90a588b$var$formatterCache.get(cacheKey); | |
| let numberFormatter = new Intl.DateTimeFormat(locale, options); | |
| $8f23a04ae90a588b$var$formatterCache.set(cacheKey, numberFormatter); | |
| return numberFormatter; | |
| } | |
| let $8f23a04ae90a588b$var$_hasBuggyHour12Behavior = null; | |
| function $8f23a04ae90a588b$var$hasBuggyHour12Behavior() { | |
| if ($8f23a04ae90a588b$var$_hasBuggyHour12Behavior == null) $8f23a04ae90a588b$var$_hasBuggyHour12Behavior = new Intl.DateTimeFormat('en-US', { | |
| hour: 'numeric', | |
| hour12: false | |
| }).format(new Date(2020, 2, 3, 0)) === '24'; | |
| return $8f23a04ae90a588b$var$_hasBuggyHour12Behavior; | |
| } | |
| let $8f23a04ae90a588b$var$_hasBuggyResolvedHourCycle = null; | |
| function $8f23a04ae90a588b$var$hasBuggyResolvedHourCycle() { | |
| if ($8f23a04ae90a588b$var$_hasBuggyResolvedHourCycle == null) $8f23a04ae90a588b$var$_hasBuggyResolvedHourCycle = new Intl.DateTimeFormat('fr', { | |
| hour: 'numeric', | |
| hour12: false | |
| }).resolvedOptions().hourCycle === 'h12'; | |
| return $8f23a04ae90a588b$var$_hasBuggyResolvedHourCycle; | |
| } | |
| function $8f23a04ae90a588b$var$getResolvedHourCycle(locale, options) { | |
| if (!options.timeStyle && !options.hour) return undefined; | |
| // Work around buggy results in resolved hourCycle and hour12 options in WebKit. | |
| // Format the minimum possible hour and maximum possible hour in a day and parse the results. | |
| locale = locale.replace(/(-u-)?-nu-[a-zA-Z0-9]+/, ''); | |
| locale += (locale.includes('-u-') ? '' : '-u') + '-nu-latn'; | |
| let formatter = $8f23a04ae90a588b$var$getCachedDateFormatter(locale, { | |
| ...options, | |
| timeZone: undefined // use local timezone | |
| }); | |
| let min = parseInt(formatter.formatToParts(new Date(2020, 2, 3, 0)).find((p)=>p.type === 'hour').value, 10); | |
| let max = parseInt(formatter.formatToParts(new Date(2020, 2, 3, 23)).find((p)=>p.type === 'hour').value, 10); | |
| if (min === 0 && max === 23) return 'h23'; | |
| if (min === 24 && max === 23) return 'h24'; | |
| if (min === 0 && max === 11) return 'h11'; | |
| if (min === 12 && max === 11) return 'h12'; | |
| throw new Error('Unexpected hour cycle result'); | |
| } | |
| //# sourceMappingURL=DateFormatter.main.js.map | |