{"version":3,"file":"calendar-utils.mjs","sources":["../../../../../../packages/components/calendar/src/calendar-utils.ts"],"sourcesContent":["import dayjs from 'dayjs'\r\n\r\nimport type { CalendarDateGroup, CalendarEvent } from './calendar'\r\n\r\nexport const parseTimeToMinutes = (value: string) => {\r\n  const [hours = '0', minutes = '0'] = value.split(':')\r\n  return Number(hours) * 60 + Number(minutes)\r\n}\r\n\r\nexport const toDateValue = (value?: string | Date) => {\r\n  if (!value) {\r\n    return undefined\r\n  }\r\n\r\n  return value instanceof Date ? value : new Date(value)\r\n}\r\n\r\nexport const toInternalDateValue = (value?: string | Date) => {\r\n  if (!value) {\r\n    return undefined\r\n  }\r\n\r\n  return value instanceof Date ? value : new Date(value)\r\n}\r\n\r\nexport const normalizeDateLikeValue = (value: unknown) => {\r\n  if (value instanceof Date) {\r\n    return value.toISOString()\r\n  }\r\n\r\n  if (typeof value === 'string') {\r\n    const date = new Date(value)\r\n    return Number.isNaN(date.getTime()) ? value : date.toISOString()\r\n  }\r\n\r\n  return value\r\n}\r\n\r\nexport const toCalendarEvent = (event: CalendarEvent): CalendarEvent => ({\r\n  ...event,\r\n  start: toInternalDateValue(event.start) || event.start,\r\n  end: toInternalDateValue(event.end) || event.end,\r\n})\r\n\r\nexport const toCalendarEvents = (events: CalendarEvent[]) =>\r\n  events.map(toCalendarEvent)\r\n\r\nexport const normalizeEventValue = (value: unknown): unknown => {\r\n  const normalizedDateLikeValue = normalizeDateLikeValue(value)\r\n  if (normalizedDateLikeValue !== value) {\r\n    return normalizedDateLikeValue\r\n  }\r\n\r\n  if (Array.isArray(value)) {\r\n    return value.map(normalizeEventValue)\r\n  }\r\n\r\n  if (value && typeof value === 'object') {\r\n    return Object.keys(value as Record<string, unknown>)\r\n      .sort()\r\n      .reduce<Record<string, unknown>>((result, key) => {\r\n        result[key] = normalizeEventValue(\r\n          (value as Record<string, unknown>)[key],\r\n        )\r\n        return result\r\n      }, {})\r\n  }\r\n\r\n  return value\r\n}\r\n\r\nexport const getEventsSignature = (events: CalendarEvent[]) =>\r\n  JSON.stringify(events.map(normalizeEventValue))\r\n\r\nexport const isSameEvents = (left: CalendarEvent[], right: CalendarEvent[]) =>\r\n  getEventsSignature(left) === getEventsSignature(right)\r\n\r\nexport const isEventOverlappingRange = (\r\n  event: CalendarEvent,\r\n  rangeStart: Date,\r\n  rangeEnd: Date,\r\n) => {\r\n  const start = toDateValue(event.start)\r\n  const end = toDateValue(event.end) || start\r\n  if (\r\n    !start ||\r\n    Number.isNaN(start.getTime()) ||\r\n    !end ||\r\n    Number.isNaN(end.getTime())\r\n  ) {\r\n    return false\r\n  }\r\n\r\n  const normalizedRangeStart = dayjs(rangeStart).startOf('day').toDate()\r\n  const normalizedRangeEnd = dayjs(rangeEnd).endOf('day').toDate()\r\n  const effectiveEnd = new Date(Math.max(end.getTime() - 1, start.getTime()))\r\n\r\n  return (\r\n    start.getTime() <= normalizedRangeEnd.getTime() &&\r\n    effectiveEnd.getTime() >= normalizedRangeStart.getTime()\r\n  )\r\n}\r\n\r\nexport const isCrossDayEvent = (event: CalendarEvent) => {\r\n  const start = toDateValue(event.start)\r\n  const end = toDateValue(event.end)\r\n\r\n  if (event.allDay) {\r\n    return true\r\n  }\r\n\r\n  if (\r\n    !start ||\r\n    Number.isNaN(start.getTime()) ||\r\n    !end ||\r\n    Number.isNaN(end.getTime())\r\n  ) {\r\n    return false\r\n  }\r\n\r\n  const crossesDayBoundary = dayjs(end)\r\n    .startOf('day')\r\n    .isAfter(dayjs(start).startOf('day'))\r\n  if (!crossesDayBoundary) {\r\n    return false\r\n  }\r\n\r\n  const dayMs = 24 * 60 * 60 * 1000\r\n  const durationMs = end.getTime() - start.getTime()\r\n  return durationMs >= dayMs\r\n}\r\n\r\nexport const getCrossDaySortMetrics = (event: CalendarEvent) => {\r\n  const start = toDateValue(event.start)\r\n  const end = toDateValue(event.end) || start\r\n  if (\r\n    !start ||\r\n    Number.isNaN(start.getTime()) ||\r\n    !end ||\r\n    Number.isNaN(end.getTime())\r\n  ) {\r\n    return {\r\n      spanDays: 0,\r\n      durationMinutes: 0,\r\n      startAt: Number.MAX_SAFE_INTEGER,\r\n    }\r\n  }\r\n\r\n  const effectiveEnd = new Date(Math.max(end.getTime() - 1, start.getTime()))\r\n  const spanDays = Math.max(\r\n    dayjs(effectiveEnd)\r\n      .startOf('day')\r\n      .diff(dayjs(start).startOf('day'), 'day') + 1,\r\n    1,\r\n  )\r\n  const durationMinutes = Math.max(\r\n    Math.round((end.getTime() - start.getTime()) / 60000),\r\n    0,\r\n  )\r\n\r\n  return {\r\n    spanDays,\r\n    durationMinutes,\r\n    startAt: start.getTime(),\r\n  }\r\n}\r\n\r\nexport const formatEventDateTime = (date: Date) => {\r\n  const month = String(date.getMonth() + 1).padStart(2, '0')\r\n  const day = String(date.getDate()).padStart(2, '0')\r\n  const hours = String(date.getHours()).padStart(2, '0')\r\n  const minutes = String(date.getMinutes()).padStart(2, '0')\r\n\r\n  return `${month}-${day} ${hours}:${minutes}`\r\n}\r\n\r\nexport const formatEventTime = (date: Date) => {\r\n  const hours = String(date.getHours()).padStart(2, '0')\r\n  const minutes = String(date.getMinutes()).padStart(2, '0')\r\n\r\n  return `${hours}:${minutes}`\r\n}\r\n\r\nexport const getEventStartTimestamp = (event: CalendarEvent) => {\r\n  const start = toDateValue(event.start)\r\n  return start && !Number.isNaN(start.getTime()) ? start.getTime() : 0\r\n}\r\n\r\nexport const getEventDurationMinutes = (event: CalendarEvent) => {\r\n  const start = toDateValue(event.start)\r\n  const end = toDateValue(event.end)\r\n  if (\r\n    !start ||\r\n    Number.isNaN(start.getTime()) ||\r\n    !end ||\r\n    Number.isNaN(end.getTime())\r\n  ) {\r\n    return 0\r\n  }\r\n\r\n  return Math.max(Math.round((end.getTime() - start.getTime()) / 60000), 0)\r\n}\r\n\r\nexport const getEventSpanDays = (event: CalendarEvent) => {\r\n  const start = toDateValue(event.start)\r\n  const end = toDateValue(event.end)\r\n  if (\r\n    !start ||\r\n    Number.isNaN(start.getTime()) ||\r\n    !end ||\r\n    Number.isNaN(end.getTime())\r\n  ) {\r\n    return 1\r\n  }\r\n\r\n  const startDay = dayjs(start).startOf('day')\r\n  const endDay = dayjs(end).startOf('day')\r\n  const diffDays = endDay.diff(startDay, 'day')\r\n\r\n  return Math.max(diffDays + 1, 1)\r\n}\r\n\r\nexport const clamp = (value: number, min: number, max: number) =>\r\n  Math.min(Math.max(value, min), max)\r\n\r\nexport const toEditDate = (value: unknown) => {\r\n  if (!value) {\r\n    return undefined\r\n  }\r\n\r\n  if (dayjs.isDayjs(value)) {\r\n    return value.toDate()\r\n  }\r\n\r\n  const date = toDateValue(value as string | Date)\r\n  if (!date || Number.isNaN(date.getTime())) {\r\n    return undefined\r\n  }\r\n\r\n  return date\r\n}\r\n\r\nexport const createDraftClassToken = () =>\r\n  `ll-calendar__event-draft-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`\r\n\r\nexport const mergeClassName = (\r\n  currentClass: CalendarEvent['class'],\r\n  nextToken: string,\r\n) => {\r\n  const tokens = String(currentClass || '')\r\n    .split(/\\s+/)\r\n    .filter(Boolean)\r\n  if (!tokens.includes(nextToken)) {\r\n    tokens.push(nextToken)\r\n  }\r\n\r\n  return tokens.join(' ')\r\n}\r\n\r\nexport const stripClassName = (\r\n  currentClass: CalendarEvent['class'],\r\n  removeToken: string,\r\n) =>\r\n  String(currentClass || '')\r\n    .split(/\\s+/)\r\n    .filter((token) => token && token !== removeToken)\r\n    .join(' ')\r\n\r\nexport const hasClassToken = (currentClass: CalendarEvent['class'], token: string) =>\r\n  String(currentClass || '')\r\n    .split(/\\s+/)\r\n    .filter(Boolean)\r\n    .includes(token)\r\n\r\nexport const isToday = (date: Date) => {\r\n  const today = new Date()\r\n  return (\r\n    date.getFullYear() === today.getFullYear() &&\r\n    date.getMonth() === today.getMonth() &&\r\n    date.getDate() === today.getDate()\r\n  )\r\n}\r\n\r\nexport const hasActiveTextSelection = () => {\r\n  if (typeof window === 'undefined' || !window.getSelection) {\r\n    return false\r\n  }\r\n\r\n  const selection = window.getSelection()\r\n  if (!selection) {\r\n    return false\r\n  }\r\n\r\n  return !selection.isCollapsed && Boolean(selection.toString().trim())\r\n}\r\n\r\n// ---- 农历日期转换 ----\r\n\r\nconst LUNAR_DAY_NAMES = [\r\n  '初一', '初二', '初三', '初四', '初五', '初六', '初七', '初八', '初九', '初十',\r\n  '十一', '十二', '十三', '十四', '十五', '十六', '十七', '十八', '十九', '二十',\r\n  '廿一', '廿二', '廿三', '廿四', '廿五', '廿六', '廿七', '廿八', '廿九', '三十',\r\n]\r\n\r\nlet _lunarFormatter: Intl.DateTimeFormat | null | undefined\r\n\r\nconst getLunarFormatter = (): Intl.DateTimeFormat | null => {\r\n  if (_lunarFormatter !== undefined) {\r\n    return _lunarFormatter\r\n  }\r\n  try {\r\n    _lunarFormatter = new Intl.DateTimeFormat('zh-CN-u-ca-chinese', {\r\n      month: 'long',\r\n      day: 'numeric',\r\n    })\r\n  } catch {\r\n    _lunarFormatter = null\r\n  }\r\n  return _lunarFormatter\r\n}\r\n\r\n/**\r\n * 将公历日期转换为农历日期字符串。\r\n * - 农历初一返回月份名称（如\"正月\"、\"腊月\"）\r\n * - 其余日期返回日期名称（如\"初二\"、\"十五\"）\r\n */\r\nexport const getLunarDate = (date: Date | string): string => {\r\n  const d = date instanceof Date ? date : new Date(date as string)\r\n  if (!d || Number.isNaN(d.getTime())) return ''\r\n\r\n  const formatter = getLunarFormatter()\r\n  if (!formatter) return ''\r\n\r\n  try {\r\n    const parts = formatter.formatToParts(d)\r\n    const monthPart = parts.find((p) => p.type === 'month')?.value ?? ''\r\n    const dayPart = parts.find((p) => p.type === 'day')?.value ?? ''\r\n    const dayNum = parseInt(dayPart, 10)\r\n\r\n    if (dayNum === 1) {\r\n      return monthPart\r\n    }\r\n\r\n    return !Number.isNaN(dayNum) && dayNum >= 1 && dayNum <= 30\r\n      ? LUNAR_DAY_NAMES[dayNum - 1]\r\n      : dayPart\r\n  } catch {\r\n    return ''\r\n  }\r\n}\r\n\r\n// ---- 日期组（dateGroups）展开 / 折叠 ----\r\n\r\n/**\r\n * 宽容地将任意「类日期」值解析为原生 Date：\r\n * 支持 Date / dayjs / 秒级或毫秒级时间戳 / ISO 字符串；无法解析返回 null。\r\n */\r\nexport const toDateLike = (value: unknown): Date | null => {\r\n  if (value == null || value === '') {\r\n    return null\r\n  }\r\n\r\n  if (value instanceof Date) {\r\n    return Number.isNaN(value.getTime()) ? null : value\r\n  }\r\n\r\n  if (dayjs.isDayjs(value)) {\r\n    const date = (value as dayjs.Dayjs).toDate()\r\n    return Number.isNaN(date.getTime()) ? null : date\r\n  }\r\n\r\n  if (typeof value === 'number') {\r\n    // 10 位按秒处理，13 位按毫秒处理\r\n    const ms = value < 1e12 ? value * 1000 : value\r\n    const date = new Date(ms)\r\n    return Number.isNaN(date.getTime()) ? null : date\r\n  }\r\n\r\n  if (typeof value === 'string') {\r\n    const numeric = Number(value)\r\n    if (!Number.isNaN(numeric) && /^\\d+$/.test(value.trim())) {\r\n      return toDateLike(numeric)\r\n    }\r\n    const date = new Date(value)\r\n    return Number.isNaN(date.getTime()) ? null : date\r\n  }\r\n\r\n  return null\r\n}\r\n\r\n/** Date → \"YYYY-MM-DD HH:mm:ss\" */\r\nexport const formatDateGroupDateTime = (date: Date) => {\r\n  const year = date.getFullYear()\r\n  const month = String(date.getMonth() + 1).padStart(2, '0')\r\n  const day = String(date.getDate()).padStart(2, '0')\r\n  const hours = String(date.getHours()).padStart(2, '0')\r\n  const minutes = String(date.getMinutes()).padStart(2, '0')\r\n  const seconds = String(date.getSeconds()).padStart(2, '0')\r\n\r\n  return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`\r\n}\r\n\r\n/**\r\n * 用 `{字段名}` 占位符模板生成标题，format 为空时回退到 record.title。\r\n */\r\nexport const applyDateGroupTitleFormat = (\r\n  record: Record<string, any>,\r\n  format?: string,\r\n) => {\r\n  if (!format) {\r\n    return record.title != null ? String(record.title) : ''\r\n  }\r\n\r\n  return format.replace(/\\{(\\w+)\\}/g, (_, key: string) => {\r\n    const value = record[key]\r\n    return value == null ? '' : String(value)\r\n  })\r\n}\r\n\r\n/** 过滤出可用的日期组（启用 + 含 id + 含 startField）。 */\r\nexport const getEnabledDateGroups = (\r\n  groups?: CalendarDateGroup[],\r\n): CalendarDateGroup[] =>\r\n  (groups ?? []).filter(\r\n    (group) =>\r\n      group && group.enabled !== false && Boolean(group.id) && Boolean(group.startField),\r\n  )\r\n\r\nconst COMPOSITE_ID_SEPARATOR = '_'\r\n\r\n/** 生成派生事件复合 ID：`${rawRecordId}_${groupId}`。 */\r\nexport const buildCompositeEventId = (rawRecordId: string, groupId: string) =>\r\n  `${rawRecordId}${COMPOSITE_ID_SEPARATOR}${groupId}`\r\n\r\n/**\r\n * 将一批原始记录按日期组展开为多条派生事件。\r\n *\r\n * @param records 原始数据列表\r\n * @param groups  已过滤的可用日期组（调用方负责 getEnabledDateGroups）\r\n * @param format  标题占位符模板\r\n */\r\nexport const buildDateGroupEvents = (\r\n  records: CalendarEvent[],\r\n  groups: CalendarDateGroup[],\r\n  format?: string,\r\n): CalendarEvent[] => {\r\n  const result: CalendarEvent[] = []\r\n\r\n  records.forEach((record, index) => {\r\n    if (!record || typeof record !== 'object') {\r\n      return\r\n    }\r\n\r\n    const rawRecordId = String(record.id ?? index)\r\n\r\n    // 该记录是否产生了任一日期组派生事件\r\n    let produced = false\r\n\r\n    groups.forEach((group) => {\r\n      const startDate = toDateLike(record[group.startField])\r\n      if (!startDate) {\r\n        return\r\n      }\r\n      produced = true\r\n\r\n      const endVal = group.endField ? record[group.endField] : null\r\n      const endDate = endVal ? toDateLike(endVal) || startDate : startDate\r\n\r\n      const event: CalendarEvent = {\r\n        ...record,\r\n        id: buildCompositeEventId(rawRecordId, group.id),\r\n        title: applyDateGroupTitleFormat(record, format),\r\n        start: formatDateGroupDateTime(startDate),\r\n        end: formatDateGroupDateTime(endDate),\r\n        rawRecordId,\r\n        _dateGroupId: group.id,\r\n      }\r\n\r\n      // 颜色优先级：backgroundColor/borderColor > eventColor > labelColor\r\n      const resolvedEventColor = group.eventColor ?? group.labelColor\r\n      if (resolvedEventColor != null) {\r\n        event.eventColor = resolvedEventColor\r\n      }\r\n      if (group.backgroundColor != null) {\r\n        event.backgroundColor = group.backgroundColor\r\n      }\r\n      if (group.borderColor != null) {\r\n        event.borderColor = group.borderColor\r\n      }\r\n      if (group.color != null) {\r\n        event.color = group.color\r\n      }\r\n\r\n      // 标签优先级：tag/tagText > labelText\r\n      const resolvedTag = group.tag ?? group.tagText ?? group.labelText\r\n      if (resolvedTag != null) {\r\n        event.tag = resolvedTag\r\n      }\r\n      if (group.tagColor != null) {\r\n        event.tagColor = group.tagColor\r\n      }\r\n\r\n      result.push(event)\r\n    })\r\n\r\n    // 未匹配任何日期组、但本身是默认日程结构（含原生 start）的记录：原样透传。\r\n    // 典型场景：用户在日历内新建的事件只有原生 start/end、尚无日期组字段；\r\n    // 若此处丢弃会与 foldDateGroupEvents 的 passthrough 不对称，导致 expand/fold\r\n    // 永不收敛、internalEvents 与 modelValue 反复回写而触发递归更新。\r\n    if (!produced && toDateLike(record.start)) {\r\n      result.push(record)\r\n    }\r\n  })\r\n\r\n  return result\r\n}\r\n\r\n/**\r\n * 解析复合事件 ID，返回 { rawRecordId, groupId }；\r\n * 无法识别（不含分隔符）时 groupId 为 null。\r\n */\r\nexport const parseCompositeEventId = (\r\n  id: string | number | undefined,\r\n  groups: CalendarDateGroup[],\r\n): { rawRecordId: string; groupId: string | null } => {\r\n  const raw = String(id ?? '')\r\n  // 精确匹配已知 groupId 后缀，避免 rawRecordId 含下划线时误切分\r\n  for (const group of groups) {\r\n    const suffix = `${COMPOSITE_ID_SEPARATOR}${group.id}`\r\n    if (raw.endsWith(suffix) && raw.length > suffix.length) {\r\n      return { rawRecordId: raw.slice(0, -suffix.length), groupId: group.id }\r\n    }\r\n  }\r\n  return { rawRecordId: raw, groupId: null }\r\n}\r\n\r\n/**\r\n * 将（被基础组件编辑/拖拽过的）派生事件折叠回原始记录列表。\r\n *\r\n * - 派生事件依据复合 ID 解析出 rawRecordId/groupId，把 start/end 写回对应字段；\r\n * - 派生事件携带的其它字段（除内部标记/渲染字段）一并合并回原始记录；\r\n * - 派生事件的「消失」视为对应原始记录被删除（其所有派生事件均不在列表中时移除记录）；\r\n * - 非派生事件（用户在日历内新建、或本就是原生 start/end 记录）原样保留。\r\n *\r\n * @param events    当前展示层事件列表（可能被编辑过）\r\n * @param baseRecords 上一次的原始记录列表，用于保留未展示字段与判定删除\r\n * @param groups    已过滤的可用日期组\r\n */\r\nexport const foldDateGroupEvents = (\r\n  events: CalendarEvent[],\r\n  baseRecords: CalendarEvent[],\r\n  groups: CalendarDateGroup[],\r\n): CalendarEvent[] => {\r\n  // 渲染/内部字段不回写原始记录\r\n  const INTERNAL_KEYS = new Set([\r\n    'id',\r\n    'start',\r\n    'end',\r\n    'title',\r\n    'rawRecordId',\r\n    '_dateGroupId',\r\n    '_eid',\r\n    'class',\r\n    'eventColor',\r\n    'backgroundColor',\r\n    'borderColor',\r\n    'color',\r\n    'tag',\r\n    'tagColor',\r\n  ])\r\n\r\n  const recordMap = new Map<string, CalendarEvent>()\r\n  const order: string[] = []\r\n  baseRecords.forEach((record, index) => {\r\n    if (!record || typeof record !== 'object') {\r\n      return\r\n    }\r\n    const key = String(record.id ?? index)\r\n    recordMap.set(key, { ...record })\r\n    order.push(key)\r\n  })\r\n\r\n  // 记录本轮哪些 rawRecordId 仍有派生事件存活，以及具体存活的 (rawId, groupId)\r\n  const aliveRawIds = new Set<string>()\r\n  const aliveGroupKeys = new Set<string>()\r\n  const passthrough: CalendarEvent[] = []\r\n\r\n  events.forEach((event) => {\r\n    if (!event || typeof event !== 'object') {\r\n      return\r\n    }\r\n\r\n    const { rawRecordId, groupId } = parseCompositeEventId(event.id, groups)\r\n    const group = groupId ? groups.find((g) => g.id === groupId) : undefined\r\n\r\n    if (!group) {\r\n      // 非派生事件：原样透传（用户在日历内新建的事件等）\r\n      passthrough.push(event)\r\n      return\r\n    }\r\n\r\n    aliveRawIds.add(rawRecordId)\r\n    aliveGroupKeys.add(`${rawRecordId}::${group.id}`)\r\n\r\n    const target: CalendarEvent =\r\n      recordMap.get(rawRecordId) ?? ({ id: rawRecordId } as CalendarEvent)\r\n    if (!recordMap.has(rawRecordId)) {\r\n      recordMap.set(rawRecordId, target)\r\n      order.push(rawRecordId)\r\n    }\r\n\r\n    // 将 start/end 写回日期组字段\r\n    const startDate = toDateLike(event.start)\r\n    if (startDate) {\r\n      target[group.startField] = formatDateGroupDateTime(startDate)\r\n    }\r\n    if (group.endField) {\r\n      const endDate = toDateLike(event.end)\r\n      if (endDate) {\r\n        target[group.endField] = formatDateGroupDateTime(endDate)\r\n      }\r\n    }\r\n\r\n    // 合并派生事件携带的其它业务字段\r\n    Object.keys(event).forEach((key) => {\r\n      if (!INTERNAL_KEYS.has(key)) {\r\n        target[key] = event[key]\r\n      }\r\n    })\r\n  })\r\n\r\n  // 删除判定：\r\n  // - 原始记录曾产生过派生事件、但本轮已无任一派生事件存活 → 视为整条记录被删除；\r\n  // - 原始记录仍存活、但其中某个日期组的派生事件被单独删除 → 清空该组对应日期字段，\r\n  //   避免下次展开时该派生事件「复活」。\r\n  const result: CalendarEvent[] = []\r\n  order.forEach((key) => {\r\n    const record = recordMap.get(key)\r\n    if (!record) {\r\n      return\r\n    }\r\n    const producedDerived = groups.some((group) => toDateLike(record[group.startField]))\r\n    if (producedDerived && !aliveRawIds.has(key)) {\r\n      // 该原始记录的所有派生事件都被删除 → 丢弃整条记录\r\n      return\r\n    }\r\n    if (aliveRawIds.has(key)) {\r\n      groups.forEach((group) => {\r\n        if (!aliveGroupKeys.has(`${key}::${group.id}`)) {\r\n          // 该组派生事件已被删除 → 清空对应日期字段\r\n          delete record[group.startField]\r\n          if (group.endField) {\r\n            delete record[group.endField]\r\n          }\r\n        }\r\n      })\r\n    }\r\n    result.push(record)\r\n  })\r\n\r\n  return [...result, ...passthrough]\r\n}\r\n"],"names":[],"mappings":"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"}