{"version":3,"file":"formats.cjs","sources":["../../../src/datetime/formats.ts"],"sourcesContent":["export interface SystemDateFormatSettings {\n  fullDate: string;\n  interval: {\n    millisecond: string;\n    second: string;\n    minute: string;\n    hour: string;\n    day: string;\n    month: string;\n    year: string;\n  };\n  useBrowserLocale: boolean;\n}\n\nconst DEFAULT_SYSTEM_DATE_FORMAT = 'YYYY-MM-DD HH:mm:ss';\nconst DEFAULT_SYSTEM_DATE_MS_FORMAT = 'YYYY-MM-DD HH:mm:ss.SSS';\n\nexport class SystemDateFormatsState {\n  fullDate = DEFAULT_SYSTEM_DATE_FORMAT;\n  fullDateMS = DEFAULT_SYSTEM_DATE_MS_FORMAT;\n  interval = {\n    millisecond: 'HH:mm:ss.SSS',\n    second: 'HH:mm:ss',\n    minute: 'HH:mm',\n    hour: 'MM/DD HH:mm',\n    day: 'MM/DD',\n    month: 'YYYY-MM',\n    year: 'YYYY',\n  };\n\n  update(settings: SystemDateFormatSettings) {\n    this.fullDate = settings.fullDate;\n    this.interval = settings.interval;\n\n    if (settings.useBrowserLocale) {\n      this.useBrowserLocale();\n    }\n  }\n\n  useBrowserLocale() {\n    this.fullDate = localTimeFormat({\n      year: 'numeric',\n      month: '2-digit',\n      day: '2-digit',\n      hour: '2-digit',\n      minute: '2-digit',\n      second: '2-digit',\n    });\n\n    // ES5 doesn't support `DateTimeFormatOptions.fractionalSecondDigits` so we have to use\n    // a hack with string replacement.\n    this.fullDateMS = this.fullDate.replace('ss', 'ss.SSS');\n\n    this.interval.millisecond = localTimeFormat(\n      { hour: '2-digit', minute: '2-digit', second: '2-digit', hour12: false },\n      null,\n      this.interval.second\n    ).replace('ss', 'ss.SSS');\n    this.interval.second = localTimeFormat(\n      { hour: '2-digit', minute: '2-digit', second: '2-digit', hour12: false },\n      null,\n      this.interval.second\n    );\n    this.interval.minute = localTimeFormat(\n      { hour: '2-digit', minute: '2-digit', hour12: false },\n      null,\n      this.interval.minute\n    );\n    this.interval.hour = localTimeFormat(\n      { month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit', hour12: false },\n      null,\n      this.interval.hour\n    );\n    this.interval.day = localTimeFormat({ month: '2-digit', day: '2-digit', hour12: false }, null, this.interval.day);\n    this.interval.month = localTimeFormat(\n      { year: 'numeric', month: '2-digit', hour12: false },\n      null,\n      this.interval.month\n    );\n  }\n\n  getTimeFieldUnit(useMsResolution?: boolean) {\n    return `time:${useMsResolution ? this.fullDateMS : this.fullDate}`;\n  }\n}\n\n/**\n * localTimeFormat helps to generate date formats for momentjs based on browser's locale\n *\n * @param locale browser locale, or default\n * @param options DateTimeFormatOptions to format date\n * @param fallback default format if Intl API is not present\n */\nexport function localTimeFormat(\n  options: Intl.DateTimeFormatOptions,\n  locale?: string | string[] | null,\n  fallback?: string\n): string {\n  if (missingIntlDateTimeFormatSupport()) {\n    return fallback ?? DEFAULT_SYSTEM_DATE_FORMAT;\n  }\n\n  if (!locale && navigator) {\n    locale = [...navigator.languages];\n  }\n\n  // https://momentjs.com/docs/#/displaying/format/\n  let dateTimeFormat: Intl.DateTimeFormat;\n\n  try {\n    dateTimeFormat = new Intl.DateTimeFormat(locale || undefined, options);\n  } catch {\n    dateTimeFormat = new Intl.DateTimeFormat('en-US', options);\n  }\n  const parts = dateTimeFormat.formatToParts(new Date());\n  const hour12 = dateTimeFormat.resolvedOptions().hour12;\n\n  const mapping: { [key: string]: string } = {\n    year: 'YYYY',\n    month: 'MM',\n    day: 'DD',\n    hour: hour12 ? 'hh' : 'HH',\n    minute: 'mm',\n    second: 'ss',\n    weekday: 'ddd',\n    era: 'N',\n    dayPeriod: 'A',\n    timeZoneName: 'Z',\n  };\n\n  return parts.map((part) => mapping[part.type] || part.value).join('');\n}\n\nexport const systemDateFormats = new SystemDateFormatsState();\n\nconst missingIntlDateTimeFormatSupport = (): boolean => {\n  return !('DateTimeFormat' in Intl) || !('formatToParts' in Intl.DateTimeFormat.prototype);\n};\n"],"names":[],"mappings":"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"}