{"version":3,"file":"use-calendar-editor.mjs","sources":["../../../../../../packages/components/calendar/src/use-calendar-editor.ts"],"sourcesContent":["import dayjs from 'dayjs'\r\nimport {\r\n  computed,\r\n  nextTick,\r\n  reactive,\r\n  ref,\r\n  type ComputedRef,\r\n  type Ref,\r\n} from 'vue'\r\n\r\nimport {\r\n  normalizeCalendarEvent,\r\n  normalizeCalendarEvents,\r\n  type CalendarEvent,\r\n  type CalendarEventDisplayField,\r\n  type CalendarProps,\r\n} from './calendar'\r\nimport {\r\n  createDraftClassToken,\r\n  clamp,\r\n  hasActiveTextSelection,\r\n  hasClassToken,\r\n  mergeClassName,\r\n  normalizeDateLikeValue,\r\n  stripClassName,\r\n  toDateValue,\r\n  toEditDate,\r\n} from './calendar-utils'\r\n\r\ntype CalendarEmit = (event: any, payload: any) => void\r\n\r\ntype EditableConfig = {\r\n  drag?: boolean\r\n  resize?: boolean\r\n  delete?: boolean\r\n  create?: boolean\r\n  selectCreate?: boolean\r\n}\r\n\r\ntype EditPanelRef = {\r\n  popoverRef?: { value?: HTMLElement | null }\r\n  boundaryRef?: { value?: HTMLElement | null }\r\n} | null\r\n\r\ntype ContextMenuPanelRef = {\r\n  menuRef?: { value?: HTMLElement | null }\r\n} | null\r\n\r\ntype AnchorRectLike = {\r\n  left: number\r\n  top: number\r\n  right: number\r\n  bottom: number\r\n  width: number\r\n  height: number\r\n}\r\n\r\nconst resolveExposedElement = (rawRef: unknown): HTMLElement | null => {\r\n  if (!rawRef) {\r\n    return null\r\n  }\r\n\r\n  // defineExpose 的 ref 在父实例上可能是“已解包元素”或“ref 对象”。\r\n  if (rawRef instanceof HTMLElement) {\r\n    return rawRef\r\n  }\r\n\r\n  const maybeRef = rawRef as { value?: unknown }\r\n  return maybeRef.value instanceof HTMLElement ? maybeRef.value : null\r\n}\r\n\r\nconst createPointAnchorRect = (x: number, y: number): AnchorRectLike => ({\r\n  left: x,\r\n  right: x,\r\n  top: y,\r\n  bottom: y,\r\n  width: 0,\r\n  height: 0,\r\n})\r\n\r\nconst resolveAnchorRect = (anchor?: unknown): AnchorRectLike | null => {\r\n  if (!anchor) {\r\n    return null\r\n  }\r\n\r\n  if (anchor instanceof MouseEvent) {\r\n    const anchorElement =\r\n      anchor.currentTarget instanceof HTMLElement\r\n        ? anchor.currentTarget\r\n        : anchor.target instanceof HTMLElement\r\n          ? anchor.target\r\n          : null\r\n\r\n    if (anchorElement) {\r\n      return anchorElement.getBoundingClientRect()\r\n    }\r\n\r\n    return createPointAnchorRect(anchor.clientX, anchor.clientY)\r\n  }\r\n\r\n  if (anchor instanceof HTMLElement) {\r\n    return anchor.getBoundingClientRect()\r\n  }\r\n\r\n  const maybeRect = anchor as Partial<AnchorRectLike>\r\n  if (\r\n    typeof maybeRect.left === 'number' &&\r\n    typeof maybeRect.top === 'number' &&\r\n    typeof maybeRect.right === 'number' &&\r\n    typeof maybeRect.bottom === 'number' &&\r\n    typeof maybeRect.width === 'number' &&\r\n    typeof maybeRect.height === 'number'\r\n  ) {\r\n    return {\r\n      left: maybeRect.left,\r\n      top: maybeRect.top,\r\n      right: maybeRect.right,\r\n      bottom: maybeRect.bottom,\r\n      width: maybeRect.width,\r\n      height: maybeRect.height,\r\n    }\r\n  }\r\n\r\n  const maybePoint = anchor as { x?: unknown; y?: unknown }\r\n  if (typeof maybePoint.x === 'number' && typeof maybePoint.y === 'number') {\r\n    return createPointAnchorRect(maybePoint.x, maybePoint.y)\r\n  }\r\n\r\n  return null\r\n}\r\n\r\nexport interface UseCalendarEditorOptions {\r\n  props: Pick<\r\n    CalendarProps,\r\n    'readonly' | 'eventTitleKey' | 'selectable' | 'disableCreateInPast'\r\n  >\r\n  emit: CalendarEmit\r\n  defaultEventTitle: string\r\n  slotStepMinutes: Ref<number>\r\n  editableDisplayFields: ComputedRef<CalendarEventDisplayField[]>\r\n  internalEvents: Ref<CalendarEvent[]>\r\n  currentEditableEvent: ComputedRef<EditableConfig>\r\n  canQuickCreate: ComputedRef<boolean>\r\n  canSelectCreate: ComputedRef<boolean>\r\n  getEventIdentifier: (event?: Partial<CalendarEvent>) => string\r\n  commitEvents: (events: CalendarEvent[]) => void\r\n  patchEvent: (\r\n    nextEvent: CalendarEvent,\r\n    previousEvent?: CalendarEvent,\r\n  ) => CalendarEvent[]\r\n  canCreateAtRange: (\r\n    startValue: string | Date | undefined,\r\n    endValue?: string | Date,\r\n  ) => boolean\r\n  calendarContainerRef?: Ref<HTMLElement | null | undefined>\r\n}\r\n\r\nexport const useCalendarEditor = (options: UseCalendarEditorOptions) => {\r\n  const {\r\n    props,\r\n    emit,\r\n    defaultEventTitle,\r\n    slotStepMinutes,\r\n    editableDisplayFields,\r\n    internalEvents,\r\n    currentEditableEvent,\r\n    canQuickCreate,\r\n    canSelectCreate,\r\n    getEventIdentifier,\r\n    commitEvents,\r\n    patchEvent,\r\n    canCreateAtRange,\r\n    calendarContainerRef,\r\n  } = options\r\n\r\n  const editPanelRef = ref<EditPanelRef>(null)\r\n\r\n  const editBoundaryStyle = ref<Record<string, string>>({\r\n    position: 'fixed',\r\n    left: '-9999px',\r\n    top: '-9999px',\r\n    width: '0px',\r\n    height: '0px',\r\n    visibility: 'hidden',\r\n  })\r\n\r\n  const syncEditBoundaryStyle = () => {\r\n    const containerEl = calendarContainerRef?.value\r\n    if (!(containerEl instanceof HTMLElement)) {\r\n      editBoundaryStyle.value = {\r\n        ...editBoundaryStyle.value,\r\n        left: '-9999px',\r\n        top: '-9999px',\r\n        width: '0px',\r\n        height: '0px',\r\n        visibility: 'hidden',\r\n      }\r\n      return\r\n    }\r\n\r\n    const rect = containerEl.getBoundingClientRect()\r\n    editBoundaryStyle.value = {\r\n      ...editBoundaryStyle.value,\r\n      left: `${rect.left}px`,\r\n      top: `${rect.top}px`,\r\n      width: `${Math.max(rect.width, 0)}px`,\r\n      height: `${Math.max(rect.height, 0)}px`,\r\n      visibility: 'hidden',\r\n    }\r\n  }\r\n\r\n  const resolveBoundaryProxyRect = (): AnchorRectLike => {\r\n    const boundaryEl = resolveExposedElement(editPanelRef.value?.boundaryRef)\r\n    if (boundaryEl instanceof HTMLElement) {\r\n      const boundaryRect = boundaryEl.getBoundingClientRect()\r\n      if (boundaryRect.width > 0 && boundaryRect.height > 0) {\r\n        return boundaryRect\r\n      }\r\n    }\r\n\r\n    return {\r\n      left: 0,\r\n      top: 0,\r\n      right: window.innerWidth,\r\n      bottom: window.innerHeight,\r\n      width: window.innerWidth,\r\n      height: window.innerHeight,\r\n    }\r\n  }\r\n\r\n  const editPopoverOpen = ref(false)\r\n  const editPresentationMode = ref<'popover' | 'drawer'>('popover')\r\n  const editPopoverPlacement = ref<'right' | 'left' | 'top' | 'bottom'>('right')\r\n  const editingEventIdentifier = ref('')\r\n  const editingDraftClassToken = ref('')\r\n  const newDraftEventIdRef = ref('')\r\n  const createDraftEventRef = ref<CalendarEvent | null>(null)\r\n  const contextMenuPanelRef = ref<ContextMenuPanelRef>(null)\r\n  const contextMenuOpen = ref(false)\r\n  const contextMenuEvent = ref<CalendarEvent | null>(null)\r\n\r\n  const contextMenuStyle = ref<Record<string, string>>({\r\n    position: 'fixed',\r\n    left: '-9999px',\r\n    top: '-9999px',\r\n    visibility: 'hidden',\r\n  })\r\n  const editPopoverStyle = ref<Record<string, string>>({\r\n    position: 'absolute',\r\n    left: '-9999px',\r\n    top: '-9999px',\r\n    visibility: 'hidden',\r\n  })\r\n\r\n  const editFormData = reactive<Record<string, any>>({\r\n    title: '',\r\n    timeRange: [],\r\n  })\r\n\r\n  const isCreatingEvent = computed(() => Boolean(createDraftEventRef.value))\r\n  const editingEventTitle = computed(\r\n    () => String(editFormData.title || '').trim() || defaultEventTitle,\r\n  )\r\n\r\n  const isEditingTargetEvent = (\r\n    event: CalendarEvent,\r\n    identifier = editingEventIdentifier.value,\r\n    draftToken = editingDraftClassToken.value,\r\n  ) => {\r\n    const matchedByIdentifier =\r\n      Boolean(identifier) && getEventIdentifier(event) === identifier\r\n    const matchedByDraftToken =\r\n      Boolean(draftToken) && hasClassToken(event.class, draftToken)\r\n\r\n    return matchedByIdentifier || matchedByDraftToken\r\n  }\r\n\r\n  const resetEditFormData = () => {\r\n    Object.keys(editFormData).forEach((key) => {\r\n      delete editFormData[key]\r\n    })\r\n    editFormData.title = ''\r\n    editFormData.timeRange = []\r\n  }\r\n\r\n  const mergeEditFormData = (source?: Partial<CalendarEvent>) => {\r\n    resetEditFormData()\r\n\r\n    if (!source || typeof source !== 'object') {\r\n      return\r\n    }\r\n\r\n    Object.keys(source).forEach((key) => {\r\n      editFormData[key] = source[key as keyof CalendarEvent]\r\n    })\r\n  }\r\n\r\n  const applyEventTitle = (event: CalendarEvent, nextTitle?: string) => {\r\n    const sourceTitle =\r\n      nextTitle ??\r\n      String(\r\n        event.title ||\r\n          (props.eventTitleKey ? event[props.eventTitleKey] : '') ||\r\n          '',\r\n      ).trim()\r\n    const normalizedTitle = sourceTitle || defaultEventTitle\r\n\r\n    event.title = normalizedTitle\r\n    if (props.eventTitleKey && props.eventTitleKey !== 'title') {\r\n      event[props.eventTitleKey] = normalizedTitle\r\n    }\r\n\r\n    return normalizedTitle\r\n  }\r\n\r\n  const closeContextMenu = () => {\r\n    contextMenuOpen.value = false\r\n    contextMenuEvent.value = null\r\n  }\r\n\r\n  const openContextMenu = async (\r\n    event: CalendarEvent,\r\n    nativeEvent: MouseEvent,\r\n  ) => {\r\n    syncEditBoundaryStyle()\r\n\r\n    contextMenuEvent.value = event\r\n    contextMenuStyle.value = {\r\n      ...contextMenuStyle.value,\r\n      left: '-9999px',\r\n      top: '-9999px',\r\n      visibility: 'hidden',\r\n    }\r\n    contextMenuOpen.value = true\r\n\r\n    await nextTick()\r\n\r\n    const menuEl = resolveExposedElement(contextMenuPanelRef.value?.menuRef)\r\n    const boundaryRect = resolveBoundaryProxyRect()\r\n    const margin = 12\r\n    const menuWidth = menuEl?.offsetWidth || 180\r\n    const menuHeight = menuEl?.offsetHeight || 88\r\n    // 以 boundary-proxy 的 viewport 坐标范围做硬裁切，四边不超出代理区域\r\n    const nextLeft = clamp(\r\n      nativeEvent.clientX,\r\n      boundaryRect.left + margin,\r\n      boundaryRect.right - menuWidth - margin,\r\n    )\r\n    const nextTop = clamp(\r\n      nativeEvent.clientY,\r\n      boundaryRect.top + margin,\r\n      boundaryRect.bottom - menuHeight - margin,\r\n    )\r\n\r\n    contextMenuStyle.value = {\r\n      ...contextMenuStyle.value,\r\n      left: `${nextLeft}px`,\r\n      top: `${nextTop}px`,\r\n      visibility: 'visible',\r\n    }\r\n  }\r\n\r\n  const openEditPopover = async (\r\n    event: CalendarEvent,\r\n    draftClassToken = '',\r\n    anchor?: unknown,\r\n  ) => {\r\n    if (props.readonly) {\r\n      return\r\n    }\r\n\r\n    closeContextMenu()\r\n    // 统一约定：openEditPopover 始终优先展示弹窗，抽屉仅由 openCreateEventDrawer 触发。\r\n    editPresentationMode.value = 'popover'\r\n\r\n    const start = toDateValue(event.start) || new Date()\r\n    const end =\r\n      toDateValue(event.end) ||\r\n      new Date(\r\n        start.getTime() + Math.max(slotStepMinutes.value, 30) * 60 * 1000,\r\n      )\r\n\r\n    mergeEditFormData(event)\r\n    editFormData.title =\r\n      String(\r\n        event.title || (props.eventTitleKey ? event[props.eventTitleKey] : ''),\r\n      ).trim() || defaultEventTitle\r\n    editFormData.timeRange = [dayjs(start), dayjs(end)]\r\n\r\n    editableDisplayFields.value.forEach((field) => {\r\n      editFormData[field.key] = event[field.key]\r\n    })\r\n\r\n    editingEventIdentifier.value = getEventIdentifier(event)\r\n    editingDraftClassToken.value = draftClassToken\r\n\r\n    editPopoverStyle.value = {\r\n      ...editPopoverStyle.value,\r\n      position: 'absolute',\r\n      left: '-9999px',\r\n      top: '-9999px',\r\n      visibility: 'hidden',\r\n    }\r\n    syncEditBoundaryStyle()\r\n\r\n    editPopoverOpen.value = true\r\n\r\n    await nextTick()\r\n    let popupEl = resolveExposedElement(editPanelRef.value?.popoverRef)\r\n    if (!popupEl && editPresentationMode.value === 'popover') {\r\n      // 子组件拆分后 Teleport 挂载可能晚一个 tick，补一次读取。\r\n      await nextTick()\r\n      popupEl = resolveExposedElement(editPanelRef.value?.popoverRef)\r\n    }\r\n\r\n    if (!popupEl) {\r\n      return\r\n    }\r\n\r\n    const margin = 12\r\n    const gap = 10\r\n\r\n    // 将定位逻辑提取为内部函数，便于初次定位与延迟二次定位复用\r\n    const applyPosition = (resolvedAnchor: unknown) => {\r\n      const currentPopupEl = resolveExposedElement(editPanelRef.value?.popoverRef)\r\n      if (!currentPopupEl) {\r\n        return\r\n      }\r\n      const currentPopupRect = {\r\n        width: currentPopupEl.offsetWidth,\r\n        height: currentPopupEl.offsetHeight,\r\n      }\r\n      const currentBoundaryRect = resolveBoundaryProxyRect()\r\n\r\n      const clampLeft = (v: number) =>\r\n        clamp(\r\n          v,\r\n          margin,\r\n          currentBoundaryRect.width - currentPopupRect.width - margin,\r\n        )\r\n      const clampTop = (v: number) =>\r\n        clamp(\r\n          v,\r\n          margin,\r\n          currentBoundaryRect.height - currentPopupRect.height - margin,\r\n        )\r\n\r\n      const anchorRect = resolveAnchorRect(resolvedAnchor)\r\n      const localAnchorRect = anchorRect\r\n        ? {\r\n            left: anchorRect.left - currentBoundaryRect.left,\r\n            right: anchorRect.right - currentBoundaryRect.left,\r\n            top: anchorRect.top - currentBoundaryRect.top,\r\n            bottom: anchorRect.bottom - currentBoundaryRect.top,\r\n            width: anchorRect.width,\r\n            height: anchorRect.height,\r\n          }\r\n        : null\r\n\r\n      // 默认居中\r\n      let nextLeft = clampLeft(\r\n        (currentBoundaryRect.width - currentPopupRect.width) / 2,\r\n      )\r\n      let nextTop = clampTop(\r\n        (currentBoundaryRect.height - currentPopupRect.height) / 2,\r\n      )\r\n      let nextPlacement: 'right' | 'left' | 'top' | 'bottom' = 'top'\r\n\r\n      if (localAnchorRect) {\r\n        const preferRight =\r\n          currentBoundaryRect.width - localAnchorRect.right >=\r\n          localAnchorRect.left\r\n        const preferBottom =\r\n          currentBoundaryRect.height - localAnchorRect.bottom >=\r\n          localAnchorRect.top\r\n\r\n        const placements: Array<'right' | 'left' | 'bottom' | 'top'> = [\r\n          preferRight ? 'right' : 'left',\r\n          preferRight ? 'left' : 'right',\r\n          preferBottom ? 'bottom' : 'top',\r\n          preferBottom ? 'top' : 'bottom',\r\n        ]\r\n\r\n        const candidates = placements.map((placement) => {\r\n          let rawLeft = 0\r\n          let rawTop = 0\r\n\r\n          if (placement === 'right') {\r\n            rawLeft = localAnchorRect.right + gap\r\n            rawTop =\r\n              localAnchorRect.top +\r\n              (localAnchorRect.height - currentPopupRect.height) / 2\r\n          } else if (placement === 'left') {\r\n            rawLeft = localAnchorRect.left - currentPopupRect.width - gap\r\n            rawTop =\r\n              localAnchorRect.top +\r\n              (localAnchorRect.height - currentPopupRect.height) / 2\r\n          } else if (placement === 'bottom') {\r\n            rawLeft =\r\n              localAnchorRect.left +\r\n              (localAnchorRect.width - currentPopupRect.width) / 2\r\n            rawTop = localAnchorRect.bottom + gap\r\n          } else {\r\n            rawLeft =\r\n              localAnchorRect.left +\r\n              (localAnchorRect.width - currentPopupRect.width) / 2\r\n            rawTop = localAnchorRect.top - currentPopupRect.height - gap\r\n          }\r\n\r\n          const overflow =\r\n            Math.max(0, margin - rawLeft) +\r\n            Math.max(\r\n              0,\r\n              rawLeft +\r\n                currentPopupRect.width -\r\n                (currentBoundaryRect.width - margin),\r\n            ) +\r\n            Math.max(0, margin - rawTop) +\r\n            Math.max(\r\n              0,\r\n              rawTop +\r\n                currentPopupRect.height -\r\n                (currentBoundaryRect.height - margin),\r\n            )\r\n\r\n          return {\r\n            placement,\r\n            left: clampLeft(rawLeft),\r\n            top: clampTop(rawTop),\r\n            overflow,\r\n          }\r\n        })\r\n\r\n        const bestCandidate =\r\n          candidates.find((c) => c.overflow === 0) ||\r\n          candidates.reduce((best, c) =>\r\n            c.overflow < best.overflow ? c : best,\r\n          )\r\n\r\n        nextLeft = bestCandidate.left\r\n        nextTop = bestCandidate.top\r\n        nextPlacement = bestCandidate.placement\r\n      }\r\n\r\n      editPopoverPlacement.value = nextPlacement\r\n      editPopoverStyle.value = {\r\n        ...editPopoverStyle.value,\r\n        position: 'absolute',\r\n        left: `${nextLeft}px`,\r\n        top: `${nextTop}px`,\r\n        visibility: 'visible',\r\n      }\r\n    }\r\n\r\n    // 优先使用外部传入的 anchor，否则尝试立即查找草稿日程 DOM 元素。\r\n    // 月视图：自定义 #cell 模板通过 newDraftEventIdRef 给外层 div 加 is-new class\r\n    // 周/日视图：VueCal 将 event.class（含 draftClassToken）应用到 .vuecal__event，通过 token class 查找\r\n    const findDraftAnchorEl = () => {\r\n      const container = calendarContainerRef?.value\r\n      if (!container || !draftClassToken) return undefined\r\n      return (\r\n        container.querySelector('.is-new') ??\r\n        container.querySelector(`.${draftClassToken}`) ??\r\n        undefined\r\n      )\r\n    }\r\n\r\n    const immediateAnchor: unknown = anchor || findDraftAnchorEl()\r\n    if (immediateAnchor || !draftClassToken) {\r\n      // 有明确锚点或非草稿创建场景，立即定位并显示\r\n      applyPosition(immediateAnchor)\r\n    } else if (calendarContainerRef?.value) {\r\n      // 草稿日程尚未渲染到 DOM（月视图 vuecal 延迟），保持隐藏\r\n      // 500ms 后再次查找锚点（月视图用 .is-new，周/日视图用 draftClassToken）\r\n      const container = calendarContainerRef.value\r\n      const snapshotToken = draftClassToken\r\n      setTimeout(() => {\r\n        if (\r\n          !editPopoverOpen.value ||\r\n          editingDraftClassToken.value !== snapshotToken\r\n        ) {\r\n          return\r\n        }\r\n        const draftEl =\r\n          container.querySelector('.is-new') ??\r\n          container.querySelector(`.${snapshotToken}`) ??\r\n          undefined\r\n        applyPosition(draftEl)\r\n      }, 500)\r\n    }\r\n  }\r\n\r\n  const clearEditingDraftToken = () => {\r\n    const token = editingDraftClassToken.value\r\n    const identifier = editingEventIdentifier.value\r\n    if (!token || !identifier) {\r\n      return\r\n    }\r\n\r\n    const nextEvents = internalEvents.value.map((event) => {\r\n      if (getEventIdentifier(event) !== identifier) {\r\n        return event\r\n      }\r\n\r\n      return {\r\n        ...event,\r\n        class: stripClassName(event.class, token),\r\n      }\r\n    })\r\n\r\n    commitEvents(nextEvents)\r\n    editingDraftClassToken.value = ''\r\n  }\r\n\r\n  const closeEditPopover = () => {\r\n    editingEventIdentifier.value = ''\r\n    editingDraftClassToken.value = ''\r\n    newDraftEventIdRef.value = ''\r\n    createDraftEventRef.value = null\r\n    closeContextMenu()\r\n    editPopoverOpen.value = false\r\n  }\r\n\r\n  const openCreateEventDrawer = (baseEvent?: Partial<CalendarEvent>) => {\r\n    if (props.readonly) {\r\n      return\r\n    }\r\n\r\n    if (!canQuickCreate.value) {\r\n      return\r\n    }\r\n\r\n    const now = new Date()\r\n    const start = toDateValue(baseEvent?.start) || now\r\n    const end =\r\n      toDateValue(baseEvent?.end) ||\r\n      new Date(\r\n        start.getTime() + Math.max(slotStepMinutes.value, 30) * 60 * 1000,\r\n      )\r\n\r\n    if (!canCreateAtRange(start, end)) {\r\n      return\r\n    }\r\n\r\n    mergeEditFormData(baseEvent)\r\n    editFormData.title =\r\n      String(baseEvent?.title || baseEvent?.[props.eventTitleKey] || '').trim() ||\r\n      defaultEventTitle\r\n    editFormData.timeRange = [dayjs(start), dayjs(end)]\r\n\r\n    editableDisplayFields.value.forEach((field) => {\r\n      editFormData[field.key] = baseEvent?.[field.key]\r\n    })\r\n\r\n    createDraftEventRef.value = {\r\n      ...(baseEvent as CalendarEvent),\r\n      start,\r\n      end,\r\n      split: baseEvent?.split,\r\n      class: (baseEvent as CalendarEvent)?.class,\r\n    }\r\n\r\n    editingEventIdentifier.value = ''\r\n    editingDraftClassToken.value = ''\r\n    newDraftEventIdRef.value = String(createDraftEventRef.value?.id ?? '')\r\n    editPresentationMode.value = 'drawer'\r\n    editPopoverOpen.value = true\r\n  }\r\n\r\n  const handleSwitchPresentation = () => {\r\n    editPresentationMode.value =\r\n      editPresentationMode.value === 'popover' ? 'drawer' : 'popover'\r\n\r\n    if (editPresentationMode.value === 'popover') {\r\n      const currentEvent = internalEvents.value.find((event) =>\r\n        isEditingTargetEvent(event),\r\n      )\r\n\r\n      if (currentEvent) {\r\n        openEditPopover(currentEvent, editingDraftClassToken.value)\r\n      }\r\n    }\r\n  }\r\n\r\n  const removeEventWithMatcher = (matcher: (event: CalendarEvent) => boolean) => {\r\n    if (props.readonly) {\r\n      return false\r\n    }\r\n\r\n    if (currentEditableEvent.value.delete === false) {\r\n      return false\r\n    }\r\n\r\n    let deletedEvent: CalendarEvent | undefined\r\n    const nextEvents = internalEvents.value.filter((event) => {\r\n      const matched = matcher(event)\r\n      if (matched && !deletedEvent) {\r\n        deletedEvent = normalizeCalendarEvent(event)\r\n      }\r\n\r\n      return !matched\r\n    })\r\n\r\n    if (!deletedEvent) {\r\n      return false\r\n    }\r\n\r\n    commitEvents(nextEvents)\r\n    emit('event-delete', {\r\n      raw: {\r\n        event: deletedEvent,\r\n      },\r\n      event: deletedEvent,\r\n      events: normalizeCalendarEvents(nextEvents),\r\n    })\r\n\r\n    return true\r\n  }\r\n\r\n  const deleteEvent = (target?: CalendarEvent) => {\r\n    if (props.readonly) {\r\n      return false\r\n    }\r\n\r\n    if (!target) {\r\n      return false\r\n    }\r\n\r\n    const identifier = getEventIdentifier(target)\r\n    if (!identifier) {\r\n      return false\r\n    }\r\n\r\n    return removeEventWithMatcher(\r\n      (event) => getEventIdentifier(event) === identifier,\r\n    )\r\n  }\r\n\r\n  const copyEvent = (target?: CalendarEvent) => {\r\n    if (props.readonly) {\r\n      return false\r\n    }\r\n\r\n    if (!target) {\r\n      return false\r\n    }\r\n\r\n    const identifier = getEventIdentifier(target)\r\n    const sourceEvent =\r\n      internalEvents.value.find(\r\n        (event) => getEventIdentifier(event) === identifier,\r\n      ) || target\r\n\r\n    const sourceStart = toDateValue(sourceEvent.start)\r\n    if (!sourceStart || Number.isNaN(sourceStart.getTime())) {\r\n      return false\r\n    }\r\n\r\n    const sourceEnd =\r\n      toDateValue(sourceEvent.end) ||\r\n      new Date(\r\n        sourceStart.getTime() + Math.max(slotStepMinutes.value, 30) * 60 * 1000,\r\n      )\r\n    const shiftMs = 60 * 60 * 1000\r\n\r\n    const clonedEvent: CalendarEvent = {\r\n      ...sourceEvent,\r\n      id: `event-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,\r\n      _eid: undefined,\r\n      class: stripClassName(sourceEvent.class, editingDraftClassToken.value),\r\n      start: new Date(sourceStart.getTime() + shiftMs),\r\n      end: new Date(sourceEnd.getTime() + shiftMs),\r\n    }\r\n\r\n    const nextEvents = [...internalEvents.value, clonedEvent]\r\n    const normalizedClonedEvent = normalizeCalendarEvent(clonedEvent)\r\n    commitEvents(nextEvents)\r\n    emit('event-edit', {\r\n      raw: {\r\n        event: normalizedClonedEvent,\r\n        originalEvent: normalizeCalendarEvent(sourceEvent),\r\n        isCreate: true,\r\n      },\r\n      event: normalizedClonedEvent,\r\n      events: normalizeCalendarEvents(nextEvents),\r\n    })\r\n\r\n    return true\r\n  }\r\n\r\n  const handleDeleteEditEvent = () => {\r\n    if (props.readonly) {\r\n      return\r\n    }\r\n\r\n    const removed = removeEventWithMatcher((event) => isEditingTargetEvent(event))\r\n    if (!removed) {\r\n      closeEditPopover()\r\n      return\r\n    }\r\n\r\n    closeEditPopover()\r\n  }\r\n\r\n  const handleMaskClose = () => {\r\n    if (hasActiveTextSelection()) {\r\n      window.getSelection?.()?.removeAllRanges()\r\n      return\r\n    }\r\n\r\n    handleConfirmEdit()\r\n  }\r\n\r\n  const handleConfirmEdit = () => {\r\n    if (props.readonly) {\r\n      closeEditPopover()\r\n      return\r\n    }\r\n\r\n    if (!editPopoverOpen.value) {\r\n      return\r\n    }\r\n\r\n    const identifier = editingEventIdentifier.value\r\n    const draftToken = editingDraftClassToken.value\r\n\r\n    const [rangeStart, rangeEnd] = Array.isArray(editFormData.timeRange)\r\n      ? editFormData.timeRange\r\n      : []\r\n\r\n    const nextStart = toEditDate(rangeStart)\r\n    const nextEnd = toEditDate(rangeEnd)\r\n    const nextTitle = String(editFormData.title || '').trim() || defaultEventTitle\r\n\r\n    if (createDraftEventRef.value) {\r\n      const baseEvent = createDraftEventRef.value\r\n      const createdEvent: CalendarEvent = {\r\n        ...baseEvent,\r\n        id:\r\n          baseEvent.id ??\r\n          `event-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,\r\n        title: nextTitle,\r\n        start: nextStart || toDateValue(baseEvent.start) || new Date(),\r\n        end:\r\n          nextEnd ||\r\n          toDateValue(baseEvent.end) ||\r\n          new Date(\r\n            (nextStart || toDateValue(baseEvent.start) || new Date()).getTime() +\r\n              Math.max(slotStepMinutes.value, 30) * 60 * 1000,\r\n          ),\r\n      }\r\n\r\n      if (!canCreateAtRange(createdEvent.start, createdEvent.end)) {\r\n        return\r\n      }\r\n\r\n      applyEventTitle(createdEvent, nextTitle)\r\n      editableDisplayFields.value.forEach((field) => {\r\n        createdEvent[field.key] = editFormData[field.key]\r\n      })\r\n\r\n      const nextEvents = [...internalEvents.value, createdEvent]\r\n      const normalizedCreatedEvent = normalizeCalendarEvent(\r\n        nextEvents.find((e) => getEventIdentifier(e) === getEventIdentifier(createdEvent)) ??\r\n          createdEvent,\r\n      )\r\n      commitEvents(nextEvents)\r\n      emit('event-edit', {\r\n        raw: {\r\n          event: normalizedCreatedEvent,\r\n          isCreate: true,\r\n        },\r\n        event: normalizedCreatedEvent,\r\n        events: normalizeCalendarEvents(nextEvents),\r\n      })\r\n      closeEditPopover()\r\n      return\r\n    }\r\n\r\n    if (!identifier && !draftToken) {\r\n      closeEditPopover()\r\n      return\r\n    }\r\n\r\n    let hasMatchedTarget = false\r\n    let originalTargetEvent: CalendarEvent | undefined\r\n    let editedTargetEvent: CalendarEvent | undefined\r\n    const nextEvents = internalEvents.value.map((event) => {\r\n      if (!isEditingTargetEvent(event, identifier, draftToken)) {\r\n        return event\r\n      }\r\n      hasMatchedTarget = true\r\n      if (!originalTargetEvent) {\r\n        originalTargetEvent = normalizeCalendarEvent(event)\r\n      }\r\n\r\n      const nextEvent: CalendarEvent = {\r\n        ...event,\r\n        title: nextTitle,\r\n        class: stripClassName(event.class, editingDraftClassToken.value),\r\n      }\r\n      applyEventTitle(nextEvent, nextTitle)\r\n\r\n      if (nextStart) {\r\n        nextEvent.start = nextStart\r\n      }\r\n      if (nextEnd) {\r\n        nextEvent.end = nextEnd\r\n      }\r\n\r\n      editableDisplayFields.value.forEach((field) => {\r\n        nextEvent[field.key] = editFormData[field.key]\r\n      })\r\n\r\n      if (!editedTargetEvent) {\r\n        editedTargetEvent = normalizeCalendarEvent(nextEvent)\r\n      }\r\n\r\n      return nextEvent\r\n    })\r\n\r\n    if (!hasMatchedTarget) {\r\n      closeEditPopover()\r\n      return\r\n    }\r\n\r\n    commitEvents(nextEvents)\r\n    if (editedTargetEvent) {\r\n      emit('event-edit', {\r\n        raw: {\r\n          event: editedTargetEvent,\r\n          originalEvent: originalTargetEvent,\r\n          isCreate: false,\r\n        },\r\n        event: editedTargetEvent,\r\n        events: normalizeCalendarEvents(nextEvents),\r\n      })\r\n    }\r\n    closeEditPopover()\r\n  }\r\n\r\n  const handleConfirmAndAdd = () => {\r\n    if (!isCreatingEvent.value) {\r\n      handleConfirmEdit()\r\n      return\r\n    }\r\n\r\n    const [rangeStart, rangeEnd] = Array.isArray(editFormData.timeRange)\r\n      ? editFormData.timeRange\r\n      : []\r\n    const nextStart = toEditDate(rangeStart)\r\n    const nextEnd = toEditDate(rangeEnd)\r\n    const split = createDraftEventRef.value?.split\r\n\r\n    handleConfirmEdit()\r\n\r\n    openCreateEventDrawer({\r\n      start: nextStart || undefined,\r\n      end: nextEnd || undefined,\r\n      split,\r\n    })\r\n  }\r\n\r\n  const createDraftEventAndOpenEditor = (\r\n    baseEvent: CalendarEvent,\r\n    fallbackSplit?: string | number,\r\n  ) => {\r\n    if (props.readonly) {\r\n      return\r\n    }\r\n\r\n    if (!props.selectable) {\r\n      return\r\n    }\r\n\r\n    const start = toDateValue(baseEvent.start) || new Date()\r\n    const end =\r\n      toDateValue(baseEvent.end) ||\r\n      new Date(\r\n        start.getTime() + Math.max(slotStepMinutes.value, 30) * 60 * 1000,\r\n      )\r\n\r\n    const isMonthViewEvent =\r\n      start.getHours() === 0 &&\r\n      start.getMinutes() === 0 &&\r\n      start.getSeconds() === 0 &&\r\n      end.getHours() === 0 &&\r\n      end.getMinutes() === 0 &&\r\n      end.getSeconds() === 0\r\n\r\n    if (props.disableCreateInPast) {\r\n      if (isMonthViewEvent) {\r\n        const today = new Date()\r\n        today.setHours(0, 0, 0, 0)\r\n        if (start.getTime() < today.getTime()) {\r\n          return\r\n        }\r\n      } else if (!canCreateAtRange(start, end)) {\r\n        return\r\n      }\r\n    }\r\n\r\n    const draftClassToken = createDraftClassToken()\r\n    const baseTitle = applyEventTitle(baseEvent)\r\n    // 剥离 VueCal 内部字段（_, style, startMinutes, endMinutes 等），\r\n    // 避免拖拽创建时 VueCal 临时状态污染 draftEvent 及对外 select payload\r\n    const cleanBaseEvent = { ...baseEvent } as CalendarEvent\r\n    delete (cleanBaseEvent as any)._\r\n    delete (cleanBaseEvent as any).style\r\n    delete (cleanBaseEvent as any).startMinutes\r\n    delete (cleanBaseEvent as any).endMinutes\r\n    const draftEvent: CalendarEvent = {\r\n      ...cleanBaseEvent,\r\n      id:\r\n        cleanBaseEvent.id ??\r\n        `event-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,\r\n      title: baseTitle,\r\n      start,\r\n      end,\r\n      split: cleanBaseEvent.split ?? fallbackSplit,\r\n      class: mergeClassName(cleanBaseEvent.class, draftClassToken),\r\n    }\r\n    applyEventTitle(draftEvent, baseTitle)\r\n    newDraftEventIdRef.value = String(draftEvent.id ?? '')\r\n\r\n    if (editPopoverOpen.value) {\r\n      clearEditingDraftToken()\r\n      closeEditPopover()\r\n    }\r\n\r\n    const nextEvents = patchEvent(draftEvent, baseEvent)\r\n\r\n    commitEvents(nextEvents)\r\n\r\n    emit('select', {\r\n      raw: {\r\n        start,\r\n        end,\r\n        split: draftEvent.split,\r\n      },\r\n      // 对外暴露的事件数据中去掉内部实现类（draftClassToken），避免污染外部消费者数据\r\n      events: normalizeCalendarEvents(\r\n        nextEvents.map((e) => ({\r\n          ...e,\r\n          class: stripClassName(e.class, draftClassToken),\r\n        })),\r\n      ),\r\n    })\r\n\r\n    openEditPopover(draftEvent, draftClassToken)\r\n  }\r\n\r\n  const resolveCreatedEventFromPayload = (payload: any) => {\r\n    const candidate =\r\n      payload?.event && typeof payload.event === 'object'\r\n        ? payload.event\r\n        : payload\r\n\r\n    if (!candidate || typeof candidate !== 'object') {\r\n      return undefined\r\n    }\r\n\r\n    return candidate as CalendarEvent\r\n  }\r\n\r\n  const removeCreatedDraftEvent = (event?: CalendarEvent) => {\r\n    if (!event) {\r\n      return\r\n    }\r\n\r\n    if (typeof event.delete === 'function') {\r\n      event.delete(3)\r\n    }\r\n\r\n    const removeTask = () => {\r\n      const targetIdentifier = getEventIdentifier(event)\r\n      const targetStart = toDateValue(event.start)?.getTime()\r\n      const targetEnd = toDateValue(event.end)?.getTime()\r\n      let removed = false\r\n\r\n      const nextEvents = internalEvents.value.filter((item) => {\r\n        const matchedByIdentifier =\r\n          Boolean(targetIdentifier) &&\r\n          getEventIdentifier(item) === targetIdentifier\r\n\r\n        const itemStart = toDateValue(item.start)?.getTime()\r\n        const itemEnd = toDateValue(item.end)?.getTime()\r\n        const matchedByExactTime =\r\n          normalizeDateLikeValue(item.start) ===\r\n            normalizeDateLikeValue(event.start) &&\r\n          normalizeDateLikeValue(item.end) === normalizeDateLikeValue(event.end)\r\n\r\n        const matchedByNearTime =\r\n          targetStart !== undefined &&\r\n          itemStart !== undefined &&\r\n          Math.abs(itemStart - targetStart) <= 60 * 1000 &&\r\n          ((targetEnd !== undefined &&\r\n            itemEnd !== undefined &&\r\n            Math.abs(itemEnd - targetEnd) <= 60 * 1000) ||\r\n            (targetEnd === undefined && itemEnd === undefined))\r\n\r\n        const matched =\r\n          matchedByIdentifier || matchedByExactTime || matchedByNearTime\r\n\r\n        if (matched) {\r\n          removed = true\r\n        }\r\n\r\n        return !matched\r\n      })\r\n\r\n      if (removed) {\r\n        commitEvents(nextEvents)\r\n      }\r\n    }\r\n\r\n    removeTask()\r\n    void nextTick(() => {\r\n      requestAnimationFrame(() => {\r\n        removeTask()\r\n      })\r\n    })\r\n  }\r\n\r\n  const handleEventDragCreate = (payload: any) => {\r\n    if (props.readonly) {\r\n      return\r\n    }\r\n\r\n    const event = resolveCreatedEventFromPayload(payload)\r\n    if (!event) {\r\n      return\r\n    }\r\n\r\n    if (!canSelectCreate.value) {\r\n      removeCreatedDraftEvent(event)\r\n      return\r\n    }\r\n\r\n    if (!canCreateAtRange(event.start, event.end)) {\r\n      removeCreatedDraftEvent(event)\r\n      return\r\n    }\r\n\r\n    createDraftEventAndOpenEditor(event, event.split)\r\n  }\r\n\r\n  return {\r\n    editPanelRef,\r\n    editPopoverOpen,\r\n    editPresentationMode,\r\n    editPopoverPlacement,\r\n    createDraftEventRef,\r\n    contextMenuPanelRef,\r\n    contextMenuOpen,\r\n    contextMenuEvent,\r\n    contextMenuStyle,\r\n    editPopoverStyle,\r\n    editBoundaryStyle,\r\n    editFormData,\r\n    isCreatingEvent,\r\n    editingEventTitle,\r\n    applyEventTitle,\r\n    closeContextMenu,\r\n    openContextMenu,\r\n    openEditPopover,\r\n    newDraftEventIdRef,\r\n    clearEditingDraftToken,\r\n    closeEditPopover,\r\n    openCreateEventDrawer,\r\n    handleSwitchPresentation,\r\n    deleteEvent,\r\n    copyEvent,\r\n    handleDeleteEditEvent,\r\n    handleMaskClose,\r\n    handleConfirmEdit,\r\n    handleConfirmAndAdd,\r\n    createDraftEventAndOpenEditor,\r\n    resolveCreatedEventFromPayload,\r\n    removeCreatedDraftEvent,\r\n    handleEventDragCreate,\r\n  }\r\n}\r\n"],"names":["nextEvents"],"mappings":"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"}