{"version":3,"file":"calendar.vue2.mjs","sources":["../../../../../../packages/components/calendar/src/calendar.vue"],"sourcesContent":["<script lang=\"ts\">\nconst DEFAULT_EVENT_TITLE = '未命名日程'\nconst MAX_HEADER_ROWS = 4\nconst MONTH_EVENT_ROW_HEIGHT = 24\nconst MONTH_MORE_BTN_HEIGHT = 20\nconst EVENT_LIST_PANEL_WIDTH = 260\nconst EVENT_LIST_PANEL_HEIGHT = 380\nconst EVENT_LIST_PANEL_MARGIN = 12\nconst EVENT_LIST_PANEL_GAP = 8\n</script>\n<template>\r\n  <div\r\n    ref=\"calendarContainerRef\"\r\n    :class=\"[bem.b(), editPopoverOpen ? bem.is('editing') : '']\"\r\n    :style=\"panelStyle\"\r\n    @click.capture=\"handleContainerClickCapture\"\r\n    @contextmenu.prevent\r\n    @mousedown.capture=\"handleContainerPointerDown\"\r\n    @touchstart.capture=\"handleContainerPointerDown\"\r\n  >\r\n    <VueCal\r\n      ref=\"calendarRef\"\r\n      v-bind=\"vueCalAttrs\"\r\n      :class=\"[\r\n        bem.e('panel'),\r\n        `ll-calendar__panel--text-${props.eventTextSize}`,\r\n        currentViewId === 'week' ? 'll-calendar__panel--view-week' : '',\r\n        isTransientScrollbarVisible ? 'll-calendar__panel--scrolling' : '',\r\n      ]\"\r\n      :view=\"currentViewId\"\r\n      :view-date=\"resolvedCurrentDate\"\r\n      :events=\"calendarEventsForView\"\r\n      :time-from=\"timeFromMinutes\"\r\n      :time-to=\"timeToMinutes\"\r\n      :time-step=\"slotStepMinutes\"\r\n      :time-cell-height=\"props.timeCellHeight\"\r\n      :start-week-on-sunday=\"weekStartsOnSunday\"\r\n      :event-create-min-drag=\"15\"\r\n      :editable-events=\"vueCalEditableEvents\"\r\n      @cell-click=\"handleCellClick\"\r\n      @event-click=\"handleNativeEventClick\"\r\n      @event-contextmenu=\"handleEventContextmenu\"\r\n      @event-resize-end=\"handleEventDurationChange\"\r\n      @event-dropped=\"handleEventDrop\"\r\n      @event-created=\"handleEventDragCreate\"\r\n      @view-change=\"handleViewChange\"\r\n      @ready=\"handleReady\"\r\n    >\r\n      <template #header=\"data\">\r\n        <slot name=\"toolbar\" :data=\"data\" />\r\n        <div :class=\"bem.m('header-spacer')\">\r\n          <a-space :size=\"16\" :class=\"bem.m('header-controls')\">\r\n            <ll-button size=\"small\" @click=\"() => handleGoToToday(data.view)\">\r\n              今日\r\n            </ll-button>\r\n            <ll-icon-base\r\n              :is-show-tooltip=\"false\"\r\n              icon-name=\"icon-left\"\r\n              @click=\"data.view.previous\"\r\n            />\r\n            <ll-icon-base\r\n              :is-show-tooltip=\"false\"\r\n              icon-name=\"icon-right\"\r\n              @click=\"data.view.next\"\r\n            />\r\n            <ll-date-picker\r\n              :class=\"bem.m('header-date-picker')\"\r\n              is-gray\r\n              :value=\"headerPickerValue\"\r\n              :picker=\"headerPickerType\"\r\n              :format=\"headerPickerFormat\"\r\n              :allow-clear=\"false\"\r\n              @update:value=\"handleHeaderDateChange\"\r\n            />\r\n          </a-space>\r\n\r\n          <ll-segmented\r\n            v-model:value=\"currentViewId\"\r\n            checked-style=\"while\"\r\n            :options=\"\r\n              Object.keys(data.availableViews).map((e) => ({\r\n                value: e,\r\n                title: titleEnum[e],\r\n              }))\r\n            \"\r\n            size=\"small\"\r\n            use-hover\r\n          />\r\n        </div>\r\n        <div\r\n          v-if=\"currentViewId === 'day'\"\r\n          class=\"ll-calendar__day-header-strip\"\r\n        >\r\n          <div\r\n            class=\"ll-calendar__day-header-timezone\"\r\n            :style=\"dayHeaderTimezoneStyle\"\r\n          >\r\n            {{ dayHeaderTimezoneLabel }}\r\n            <ll-icon-base\r\n              v-if=\"dayHeaderEvents.length > MAX_HEADER_ROWS\"\r\n              class=\"ll-calendar__header-expand-btn\"\r\n              :is-show-tooltip=\"false\"\r\n              :icon-name=\"\r\n                headerEventsExpanded\r\n                  ? 'icon-line-arrow-folding'\r\n                  : 'icon-line-arrow-down'\r\n              \"\r\n              @click.stop=\"headerEventsExpanded = !headerEventsExpanded\"\r\n            />\r\n          </div>\r\n\r\n          <div\r\n            class=\"ll-calendar__weekday-crossday-area ll-calendar__day-header-list\"\r\n            @click.stop=\"\r\n              !readonly &&\r\n              canQuickCreate &&\r\n              handleWeekHeadingCreateClick(\r\n                internalCurrentDate,\r\n                $event as MouseEvent,\r\n              )\r\n            \"\r\n          >\r\n            <div\r\n              v-for=\"(event, rowIdx) in headerEventsExpanded\r\n                ? dayHeaderEvents\r\n                : dayHeaderEvents.slice(0, MAX_HEADER_ROWS)\"\r\n              :key=\"`${getEventIdentifier(event)}-${rowIdx}`\"\r\n              :class=\"[\r\n                'll-calendar__weekday-crossday-row',\r\n                `ll-calendar__weekday-crossday-row--single`,\r\n                !readonly\r\n                  ? 'll-calendar__weekday-crossday-row--interactive'\r\n                  : '',\r\n                getEventIdentifier(event) === newDraftEventIdRef\r\n                  ? 'is-new'\r\n                  : '',\r\n              ]\"\r\n              :style=\"getCrossDayRowStyle(event, 'single')\"\r\n              @click.stop=\"\r\n                !readonly && openEditPopover(event, '', $event as MouseEvent)\r\n              \"\r\n              @contextmenu.prevent.stop=\"\r\n                !readonly && openContextMenu(event, $event as MouseEvent)\r\n              \"\r\n            >\r\n              <span class=\"ll-calendar__weekday-crossday-title\">\r\n                <span\r\n                  v-if=\"event.tag\"\r\n                  class=\"ll-calendar__event-tag\"\r\n                  :style=\"\r\n                    event.tagColor ? { backgroundColor: event.tagColor } : {}\r\n                  \"\r\n                  >{{ event.tag }}</span\r\n                >{{ getEventTitle(event) || '未命名日程' }}\r\n              </span>\r\n            </div>\r\n            <div\r\n              v-if=\"\r\n                dayHeaderEvents.length > MAX_HEADER_ROWS &&\r\n                !headerEventsExpanded\r\n              \"\r\n              class=\"ll-calendar__more-events\"\r\n              @click.stop=\"\r\n                openHeaderMoreEventsModal(\r\n                  internalCurrentDate,\r\n                  dayHeaderEvents,\r\n                  $event as MouseEvent,\r\n                )\r\n              \"\r\n            >\r\n              还有 {{ dayHeaderEvents.length - MAX_HEADER_ROWS }} 条记录\r\n            </div>\r\n          </div>\r\n          <div style=\"width: 30px\">\r\n            <ll-icon-base\r\n              class=\"ll-calendar__day-header-lunar\"\r\n              icon-name=\"icon-add\"\r\n              :is-show-tooltip=\"false\"\r\n              @click.stop=\"\r\n                !readonly &&\r\n                canQuickCreate &&\r\n                handleWeekHeadingCreateClick(\r\n                  internalCurrentDate,\r\n                  $event as MouseEvent,\r\n                )\r\n              \"\r\n            />\r\n          </div>\r\n        </div>\r\n      </template>\r\n\r\n      <template #weekday-heading=\"{ id, date }\">\r\n        <div class=\"ll-calendar__weekday-heading\">\r\n          <div\r\n            :class=\"[\r\n              'll-calendar__weekday-heading-title',\r\n              !readonly && canQuickCreate && currentViewId === 'week'\r\n                ? 'll-calendar__weekday-heading-title--clickable'\r\n                : '',\r\n            ]\"\r\n            @click.stop=\"\r\n              !readonly &&\r\n              canQuickCreate &&\r\n              currentViewId === 'week' &&\r\n              handleWeekHeadingCreateClick(date, $event as MouseEvent)\r\n            \"\r\n          >\r\n            <span class=\"vuecal__weekday-day\">{{ weekdayIdToLabel(id) }}</span>\r\n            <span v-if=\"currentViewId === 'week'\" class=\"vuecal__weekday-date\">\r\n              {{ formatWeekdayDate(date)\r\n              }}<span v-if=\"props.showLunar\" class=\"ll-calendar__lunar-date\">{{\r\n                getLunarDate(date)\r\n              }}</span>\r\n            </span>\r\n          </div>\r\n          <div\r\n            v-if=\"weekCrossDayLayout.totalRows > 0\"\r\n            class=\"ll-calendar__weekday-crossday-area\"\r\n          >\r\n            <div\r\n              v-for=\"(crossSlot, rowIdx) in getColumnCrossDayVisibleEvents(\r\n                date,\r\n              )\"\r\n              :key=\"rowIdx\"\r\n              :class=\"[\r\n                'll-calendar__weekday-crossday-row',\r\n                crossSlot\r\n                  ? `ll-calendar__weekday-crossday-row--${getWeekHeaderEventSegment(crossSlot, date)}`\r\n                  : 'll-calendar__weekday-crossday-row--empty',\r\n                crossSlot && !readonly\r\n                  ? 'll-calendar__weekday-crossday-row--interactive'\r\n                  : '',\r\n                isWeekCrossDayDropTarget(date)\r\n                  ? 'll-calendar__weekday-crossday-row--drop-target'\r\n                  : '',\r\n                crossSlot && isWeekCrossDayDragging(crossSlot.event)\r\n                  ? 'll-calendar__weekday-crossday-row--dragging'\r\n                  : '',\r\n                crossSlot &&\r\n                getEventIdentifier(crossSlot.event) === newDraftEventIdRef\r\n                  ? 'is-new'\r\n                  : '',\r\n              ]\"\r\n              :style=\"\r\n                crossSlot\r\n                  ? getCrossDayRowStyle(\r\n                      crossSlot.event,\r\n                      getWeekHeaderEventSegment(crossSlot, date) as any,\r\n                    )\r\n                  : {}\r\n              \"\r\n              :draggable=\"\r\n                Boolean(crossSlot && canDragWeekCrossDayEvent(crossSlot.event))\r\n              \"\r\n              @click.stop=\"\r\n                crossSlot &&\r\n                !readonly &&\r\n                !shouldSuppressWeekCrossDayClick() &&\r\n                openEditPopover(crossSlot.event, '', $event as MouseEvent)\r\n              \"\r\n              @contextmenu.prevent.stop=\"\r\n                crossSlot &&\r\n                !readonly &&\r\n                openContextMenu(crossSlot.event, $event as MouseEvent)\r\n              \"\r\n              @dragstart=\"\r\n                crossSlot &&\r\n                handleWeekCrossDayDragStart(\r\n                  crossSlot.event,\r\n                  date,\r\n                  $event as DragEvent,\r\n                )\r\n              \"\r\n              @dragover=\"handleWeekCrossDayDragOver(date, $event as DragEvent)\"\r\n              @drop=\"handleWeekCrossDayDrop(date, $event as DragEvent)\"\r\n              @dragend=\"handleWeekCrossDayDragEnd\"\r\n            >\r\n              <span\r\n                v-if=\"\r\n                  crossSlot &&\r\n                  (getWeekHeaderEventSegment(crossSlot, date) === 'start' ||\r\n                    getWeekHeaderEventSegment(crossSlot, date) === 'single')\r\n                \"\r\n                class=\"ll-calendar__weekday-crossday-title\"\r\n              >\r\n                <span\r\n                  v-if=\"crossSlot.event.tag\"\r\n                  class=\"ll-calendar__event-tag\"\r\n                  :style=\"\r\n                    crossSlot.event.tagColor\r\n                      ? { backgroundColor: crossSlot.event.tagColor }\r\n                      : {}\r\n                  \"\r\n                  >{{ crossSlot.event.tag }}</span\r\n                >{{ getEventTitle(crossSlot.event) || '未命名日程' }}\r\n              </span>\r\n            </div>\r\n            <!-- 当任意列有隐藏事件时，每列均渲染该 div以保持高度一致；无隐藏事件的列用 visibility:hidden 占位 -->\r\n            <div\r\n              v-if=\"weekCrossDayHasMore && !headerEventsExpanded\"\r\n              class=\"ll-calendar__more-events\"\r\n              :class=\"{\r\n                'll-calendar__more-events--placeholder':\r\n                  getColumnCrossDayHiddenCount(date) === 0,\r\n              }\"\r\n              @click.stop=\"\r\n                getColumnCrossDayHiddenCount(date) > 0 &&\r\n                openHeaderMoreEventsModal(\r\n                  date,\r\n                  getColumnCrossDayAllEvents(date),\r\n                  $event as MouseEvent,\r\n                )\r\n              \"\r\n            >\r\n              还有 {{ getColumnCrossDayHiddenCount(date) }} 条记录\r\n            </div>\r\n          </div>\r\n        </div>\r\n      </template>\r\n\r\n      <template v-if=\"currentViewId === 'month'\" #cell=\"{ cell }\">\r\n        <div\r\n          class=\"ll-calendar__month-cell-inner\"\r\n          :class=\"{\r\n            'll-calendar__month-cell-inner--dragover':\r\n              canDragMonthEvent &&\r\n              monthDragOverCellDate &&\r\n              isSameDayCell(monthDragOverCellDate, cell.start),\r\n          }\"\r\n          @dragenter=\"\r\n            canDragMonthEvent &&\r\n            handleMonthCellDragEnter(cell.start, $event as DragEvent)\r\n          \"\r\n          @dragover=\"\r\n            canDragMonthEvent &&\r\n            handleMonthCellDragOver(cell.start, $event as DragEvent)\r\n          \"\r\n          @dragleave=\"\r\n            canDragMonthEvent &&\r\n            handleMonthCellDragLeave(cell.start, $event as DragEvent)\r\n          \"\r\n          @drop=\"\r\n            canDragMonthEvent &&\r\n            handleMonthCellDrop(cell.start, $event as DragEvent)\r\n          \"\r\n        >\r\n          <ll-icon-base\r\n            v-if=\"!readonly && canQuickCreate && !isMonthCellInPast(cell.start)\"\r\n            class=\"ll-calendar__month-cell-add-btn\"\r\n            icon-name=\"icon-add\"\r\n            :is-show-tooltip=\"false\"\r\n            :on-click=\"(event) => handleMonthCellCreateClick(cell, event)\"\r\n          />\r\n          <div class=\"vuecal__cell-date\">\r\n            {{ formatMonthCellDate(cell.start)\r\n            }}<span v-if=\"props.showLunar\" class=\"ll-calendar__lunar-date\">{{\r\n              getLunarDate(cell.start)\r\n            }}</span>\r\n          </div>\r\n          <div class=\"vuecal__cell-events\">\r\n            <div\r\n              v-for=\"event in getMonthCellVisibleEvents(cell)\"\r\n              :key=\"getEventIdentifier(event)\"\r\n              :class=\"[\r\n                'vuecal__event',\r\n                getMonthCellEventClass(event, cell),\r\n                getEventIdentifier(event) === newDraftEventIdRef\r\n                  ? 'is-new'\r\n                  : '',\r\n                ,\r\n                canDragMonthEvent &&\r\n                monthDraggingEvent &&\r\n                getEventIdentifier(monthDraggingEvent) ===\r\n                  getEventIdentifier(event)\r\n                  ? 'll-calendar__month-event--dragging'\r\n                  : '',\r\n              ]\"\r\n              :style=\"getMonthEventStyle(event)\"\r\n              :draggable=\"canDragMonthEvent ? 'true' : 'false'\"\r\n              @click.stop=\"\r\n                handleNativeEventClick({ event, e: $event as MouseEvent })\r\n              \"\r\n              @contextmenu=\"\r\n                handleEventContextmenu({\r\n                  event,\r\n                  nativeEvent: $event as MouseEvent,\r\n                })\r\n              \"\r\n              @dragstart.stop=\"\r\n                canDragMonthEvent &&\r\n                handleMonthEventDragStart(event, $event as DragEvent)\r\n              \"\r\n              @dragend.stop=\"handleMonthEventDragEnd\"\r\n            >\r\n              <div\r\n                :class=\"[\r\n                  'll-calendar__event-content-week',\r\n                  { 'll-calendar__event-content-week--interactive': !readonly },\r\n                  event.class,\r\n                ]\"\r\n              >\r\n                <span\r\n                  v-if=\"event.tag\"\r\n                  class=\"ll-calendar__event-tag\"\r\n                  :style=\"\r\n                    event.tagColor ? { backgroundColor: event.tagColor } : {}\r\n                  \"\r\n                  >{{ event.tag }}</span\r\n                >{{ getEventTitle(event) || '未命名日程' }}\r\n              </div>\r\n            </div>\r\n            <div\r\n              v-if=\"getMonthCellHiddenEventCount(cell) > 0\"\r\n              class=\"ll-calendar__more-events\"\r\n              @click.stop=\"openMonthEventListModal(cell, $event)\"\r\n            >\r\n              还有 {{ getMonthCellHiddenEventCount(cell) }} 条记录\r\n            </div>\r\n          </div>\r\n        </div>\r\n      </template>\r\n      <template v-else #event=\"{ event }\">\r\n        <div\r\n          class=\"ll-calendar__event-skin\"\r\n          :style=\"getTimedEventSkinStyle(event)\"\r\n        />\r\n        <div\r\n          :class=\"[\r\n            getEventIdentifier(event) === newDraftEventIdRef ? 'is-new' : '',\r\n            ,\r\n            'll-calendar__event-content',\r\n          ]\"\r\n        >\r\n          <h6 class=\"ll-calendar__event-fixed-title\">\r\n            <span\r\n              v-if=\"event.tag\"\r\n              class=\"ll-calendar__event-tag\"\r\n              :style=\"event.tagColor ? { backgroundColor: event.tagColor } : {}\"\r\n              >{{ event.tag }}</span\r\n            >{{ getEventTitle(event) }}\r\n          </h6>\r\n          <p class=\"ll-calendar__event-fixed-time\">\r\n            {{ getEventTimeLabel(event) }}\r\n          </p>\r\n          <div class=\"ll-calendar__event-fields\">\r\n            <slot name=\"event\" :event=\"event\">\r\n              <template\r\n                v-for=\"(field, index) in resolvedEventDisplayFields\"\r\n                :key=\"`${field.type || 'text'}-${field.key || index}-${index}`\"\r\n              >\r\n                <div\r\n                  v-if=\"isRowDisplayField(field)\"\r\n                  class=\"ll-calendar__event-row\"\r\n                >\r\n                  <a-row\r\n                    class=\"ll-calendar__event-row-inner\"\r\n                    v-bind=\"getRowProps(field)\"\r\n                    :style=\"field.style\"\r\n                    v-on=\"field.on\"\r\n                  >\r\n                    <a-col\r\n                      v-for=\"(child, childIndex) in field.children || []\"\r\n                      :key=\"`${child.type || 'text'}-${child.key || childIndex}-${childIndex}`\"\r\n                      v-bind=\"getRowColProps(child)\"\r\n                    >\r\n                      <component\r\n                        :is=\"resolveFieldComponent(child)\"\r\n                        v-if=\"isComponentDisplayField(child)\"\r\n                        v-bind=\"getFieldProps(event, child)\"\r\n                        :style=\"child.style\"\r\n                        v-on=\"child.on\"\r\n                      />\r\n                      <span\r\n                        v-else\r\n                        class=\"ll-calendar__event-text\"\r\n                        :style=\"child.style\"\r\n                        v-on=\"child.on\"\r\n                      >\r\n                        {{ getEventFieldValue(event, child.key) }}\r\n                      </span>\r\n                    </a-col>\r\n                  </a-row>\r\n                </div>\r\n\r\n                <component\r\n                  :is=\"resolveFieldComponent(field)\"\r\n                  v-else-if=\"isComponentDisplayField(field)\"\r\n                  v-bind=\"getFieldProps(event, field)\"\r\n                  :style=\"field.style\"\r\n                  v-on=\"field.on\"\r\n                />\r\n\r\n                <span\r\n                  v-else\r\n                  class=\"ll-calendar__event-text\"\r\n                  :style=\"field.style\"\r\n                  v-on=\"field.on\"\r\n                >\r\n                  {{ getEventFieldValue(event, field.key) }}\r\n                </span>\r\n              </template>\r\n            </slot>\r\n          </div>\r\n        </div>\r\n      </template>\r\n    </VueCal>\r\n\r\n    <div\r\n      v-if=\"customNowLineVisible\"\r\n      class=\"ll-calendar__custom-now-line\"\r\n      :style=\"customNowLineStyle\"\r\n      aria-hidden=\"true\"\r\n    >\r\n      <span\r\n        v-show=\"!customNowLineTimeHidden\"\r\n        class=\"ll-calendar__custom-now-line-time\"\r\n        >{{ customNowLineTime }}</span\r\n      >\r\n    </div>\r\n    <div\r\n      v-if=\"currentViewId === 'week'\"\r\n      class=\"ll-calendar__week-header-timezone\"\r\n      :style=\"weekHeaderTimezoneStyle\"\r\n    >\r\n      {{ dayHeaderTimezoneLabel }}\r\n\r\n      <ll-icon-base\r\n        v-if=\"weekCrossDayHasMore\"\r\n        class=\"ll-calendar__header-expand-btn\"\r\n        :is-show-tooltip=\"false\"\r\n        :icon-name=\"\r\n          headerEventsExpanded\r\n            ? 'icon-line-arrow-folding'\r\n            : 'icon-line-arrow-down'\r\n        \"\r\n        @click.stop=\"headerEventsExpanded = !headerEventsExpanded\"\r\n      />\r\n    </div>\r\n\r\n    <div\r\n      v-if=\"customScrollbarVisible\"\r\n      ref=\"customScrollbarTrackRef\"\r\n      class=\"ll-calendar__custom-scrollbar\"\r\n      :class=\"{\r\n        'll-calendar__custom-scrollbar--visible': isTransientScrollbarVisible,\r\n      }\"\r\n      :style=\"customScrollbarTrackStyle\"\r\n      aria-hidden=\"true\"\r\n      @mousedown=\"handleScrollbarTrackMousedown\"\r\n    >\r\n      <div\r\n        class=\"ll-calendar__custom-scrollbar-thumb\"\r\n        :style=\"customScrollbarThumbStyle\"\r\n        @mousedown.stop=\"handleScrollbarThumbMousedown\"\r\n      />\r\n    </div>\r\n\r\n    <calendar-event-list-modal\r\n      v-model:open=\"eventListModalOpen\"\r\n      :title=\"eventListModalTitle\"\r\n      :events=\"selectedEventListEvents\"\r\n      :get-event-identifier=\"getEventIdentifier\"\r\n      :get-event-title=\"getEventTitle\"\r\n      :get-event-time-label=\"getEventTimeLabel\"\r\n      :on-select-event=\"handleEventListItemClick\"\r\n      :on-contextmenu-event=\"handleEventListItemContextmenu\"\r\n      :edit-popover-open=\"editPopoverOpen\"\r\n      :edit-presentation-mode=\"editPresentationMode\"\r\n      :edit-popover-placement=\"editPopoverPlacement\"\r\n      :context-menu-open=\"contextMenuOpen\"\r\n      :context-menu-event=\"contextMenuEvent\"\r\n      :context-menu-style=\"contextMenuStyle\"\r\n      :edit-popover-style=\"editPopoverStyle\"\r\n      :edit-boundary-style=\"editBoundaryStyle\"\r\n      :edit-form-data=\"editFormData\"\r\n      :edit-form-columns=\"editFormColumns\"\r\n      :is-creating-event=\"isCreatingEvent\"\r\n      :editing-event-title=\"editingEventTitle\"\r\n      :current-editable-event=\"currentEditableEvent\"\r\n      :close-context-menu=\"closeContextMenu\"\r\n      :handle-context-menu-edit=\"handleContextMenuEdit\"\r\n      :handle-context-menu-copy=\"handleContextMenuCopy\"\r\n      :handle-context-menu-delete=\"handleContextMenuDelete\"\r\n      :handle-mask-close=\"handleMaskClose\"\r\n      :handle-switch-presentation=\"handleSwitchPresentation\"\r\n      :handle-confirm-edit=\"handleConfirmEdit\"\r\n      :handle-confirm-and-add=\"handleConfirmAndAdd\"\r\n      :handle-delete-edit-event=\"handleDeleteEditEvent\"\r\n      :on-bind-edit-panel-ref=\"bindEditPanelRef\"\r\n      :on-bind-context-menu-panel-ref=\"bindContextMenuPanelRef\"\r\n      :panel-style=\"eventListPanelStyle\"\r\n    >\r\n      <template v-if=\"$slots['edit-form']\" #edit-form=\"{ data }\">\r\n        <slot name=\"edit-form\" :data=\"data\" />\r\n      </template>\r\n      <template #event-contextmenu=\"{ event, close, edit, copy, remove }\">\r\n        <slot\r\n          name=\"event-contextmenu\"\r\n          :event=\"event\"\r\n          :close=\"close\"\r\n          :edit=\"edit\"\r\n          :copy=\"copy\"\r\n          :remove=\"remove\"\r\n        />\r\n      </template>\r\n    </calendar-event-list-modal>\r\n  </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { VueCal } from 'vue-cal'\r\nimport 'vue-cal/style.css'\r\nimport { createNamespace } from '@ll-plus/utils'\r\nimport dayjs, { type Dayjs } from 'dayjs'\r\nimport {\r\n  computed,\r\n  nextTick,\r\n  onMounted,\r\n  onBeforeUnmount,\r\n  ref,\r\n  watch,\r\n  useAttrs,\r\n  toRaw,\r\n} from 'vue'\r\n\r\nimport {\r\n  calendarProps,\r\n  defaultCalendarFieldComponents,\r\n  normalizeCalendarEvent,\r\n  normalizeCalendarEvents,\r\n  titleEnum,\r\n  type CalendarDateGroup,\r\n  type CalendarEventDisplayField,\r\n  type CalendarDatesChangeRaw,\r\n  type CalendarEvent,\r\n  type CalendarEventClickRaw,\r\n  type CalendarView,\r\n} from './calendar'\r\nimport CalendarEventListModal from './calendar-event-list-modal.vue'\r\nimport {\r\n  buildDateGroupEvents,\r\n  foldDateGroupEvents,\r\n  formatEventDateTime,\r\n  formatEventTime,\r\n  getCrossDaySortMetrics,\r\n  getEnabledDateGroups,\r\n  getLunarDate,\r\n  isCrossDayEvent,\r\n  isEventOverlappingRange,\r\n  isSameEvents,\r\n  isToday,\r\n  normalizeDateLikeValue,\r\n  parseTimeToMinutes,\r\n  toCalendarEvent,\r\n  toCalendarEvents,\r\n  toDateValue,\r\n} from './calendar-utils'\r\nimport { useCalendarEditor } from './use-calendar-editor'\r\n\r\ndefineOptions({\r\n  name: 'LlCalendar',\r\n})\r\n\r\nconst props = defineProps(calendarProps)\r\nconst emit = defineEmits([\r\n  'update:modelValue',\r\n  'update:view',\r\n  'change',\r\n  'date-click',\r\n  'select',\r\n  'event-click',\r\n  'event-contextmenu',\r\n  'event-drop',\r\n  'event-resize',\r\n  'event-edit',\r\n  'event-delete',\r\n  'dates-change',\r\n])\r\nconst attrs = useAttrs()\r\nconst bem = createNamespace('calendar')\r\n\r\nconst calendarRef = ref<any>()\r\nconst calendarContainerRef = ref<HTMLElement>()\r\nconst eventListModalOpen = ref(false)\r\nconst selectedEventListDate = ref<Date | null>(null)\r\nconst selectedEventListEvents = ref<CalendarEvent[]>([])\r\nconst eventListPanelStyle = ref<Record<string, string>>({\r\n  position: 'fixed',\r\n  left: '-9999px',\r\n  top: '-9999px',\r\n})\r\nconst eventListModalTitle = computed(() => {\r\n  const date = selectedEventListDate.value\r\n  if (!date) {\r\n    return '日程列表'\r\n  }\r\n\r\n  const target = dayjs(date)\r\n  if (!target.isValid()) {\r\n    return '日程列表'\r\n  }\r\n\r\n  const weekLabels = ['周日', '周一', '周二', '周三', '周四', '周五', '周六']\r\n  return `${target.format('M月D日')} ${weekLabels[target.day()]}`\r\n})\r\nconst currentEditableEvent = computed(() => {\r\n  return {\r\n    drag: true,\r\n    resize: true,\r\n    delete: true,\r\n    create: true,\r\n    selectCreate: true,\r\n    ...props.editableEvents,\r\n  }\r\n})\r\n\r\nconst parseBooleanLike = (value: unknown, defaultValue = false) => {\r\n  if (value === '' || value === true) {\r\n    return true\r\n  }\r\n\r\n  if (value === false || value === null || value === undefined) {\r\n    return defaultValue\r\n  }\r\n\r\n  if (typeof value === 'string') {\r\n    const normalized = value.trim().toLowerCase()\r\n    if (normalized === 'true' || normalized === '1') {\r\n      return true\r\n    }\r\n    if (normalized === 'false' || normalized === '0') {\r\n      return false\r\n    }\r\n  }\r\n\r\n  return Boolean(value)\r\n}\r\n\r\nconst isWatchRealTimeEnabled = computed(() =>\r\n  parseBooleanLike(\r\n    (attrs as Record<string, unknown>)['watch-real-time'] ??\r\n      (attrs as Record<string, unknown>).watchRealTime,\r\n    false,\r\n  ),\r\n)\r\n\r\nconst vueCalAttrs = computed(() => {\r\n  const nextAttrs: Record<string, unknown> = {\r\n    ...(attrs as Record<string, unknown>),\r\n    // 显式转发 VueCal 需要的 LlCalendar props\r\n    'day-max-events': props.dayMaxEvents,\r\n    'all-day-slot': props.allDaySlot,\r\n    'events-on-month-view': props.eventsOnMonthView,\r\n  }\r\n\r\n  delete nextAttrs['watch-real-time']\r\n  delete nextAttrs.watchRealTime\r\n\r\n  return nextAttrs\r\n})\r\n\r\nconst customNowLineVisible = ref(false)\r\nconst customNowLineTime = ref('')\r\nconst customNowLineTimeHidden = ref(false)\r\nconst customNowLineStyle = ref<Record<string, string>>({\r\n  left: '-9999px',\r\n  top: '-9999px',\r\n  width: '0px',\r\n  '--ll-custom-now-dot-left': '-5px',\r\n})\r\nconst canQuickCreate = computed(\r\n  () =>\r\n    !props.readonly &&\r\n    props.selectable &&\r\n    currentEditableEvent.value.create !== false,\r\n)\r\nconst canSelectCreate = computed(\r\n  () =>\r\n    !props.readonly &&\r\n    props.selectable &&\r\n    currentEditableEvent.value.selectCreate !== false,\r\n)\r\nconst vueCalEditableEvents = computed(() => ({\r\n  drag: !props.readonly && currentEditableEvent.value.drag !== false,\r\n  resize: !props.readonly && currentEditableEvent.value.resize !== false,\r\n  delete: !props.readonly && currentEditableEvent.value.delete !== false,\r\n  // vue-cal 的 create 主要控制拖拽/框选创建；普通创建由 canQuickCreate 控制。\r\n  // 月视图使用自定义 #cell 插槽，事件创建通过 + 按钮或单元格点击触发；\r\n  // 禁用月视图的 create，避免 vue-cal 的单元格拖拽监听器拦截自定义事件拖拽\r\n  // 并误触发 @event-created（新增日程）。\r\n  create:\r\n    !props.readonly && canSelectCreate.value && currentViewId.value !== 'month',\r\n}))\r\n\r\n// ---- 日期组（dateGroups）展开 / 折叠 ----\r\n// 显示层与存储层分离：modelValue 保持「一条原始记录一行」的存储结构，\r\n// 内部 internalEvents 在启用日期组时按组展开为多条派生事件用于渲染与交互。\r\nconst enabledDateGroups = computed<CalendarDateGroup[]>(() =>\r\n  getEnabledDateGroups(props.dateGroups),\r\n)\r\nconst isDateGroupMode = computed(() => enabledDateGroups.value.length > 0)\r\n\r\n// 上一次的原始记录列表：用于折叠时保留未展示字段、判定记录删除。\r\nconst baseRecords = ref<CalendarEvent[]>(\r\n  (props.modelValue ?? []).map((record) => ({ ...record })),\r\n)\r\n\r\n// 将原始记录列表展开为显示层事件（未启用日期组时原样返回）。\r\nconst expandRecords = (records: CalendarEvent[]): CalendarEvent[] => {\r\n  if (!isDateGroupMode.value) {\r\n    return records ?? []\r\n  }\r\n  return buildDateGroupEvents(\r\n    records ?? [],\r\n    enabledDateGroups.value,\r\n    props.dateGroupTitleFormat,\r\n  )\r\n}\r\n\r\nconst internalEvents = ref<CalendarEvent[]>(\r\n  toCalendarEvents(expandRecords(props.modelValue)),\r\n)\r\n\r\n// 记录最近一次由组件内部 commitEvents 向外 emit 的 modelValue 快照。\r\n// modelValue 是 v-model：emit 后父级回写会同步触发下方 modelValue watch，\r\n// 若该回写正是我们自己刚 emit 的内容（启用日期组时 fold/expand 往返可能并非\r\n// 逐字节等价），需要直接跳过，避免 internalEvents 被反复重算而陷入递归更新。\r\nlet lastCommittedOutput: CalendarEvent[] | null = null\r\n\r\nconst normalizeCellEvents = (events: unknown): CalendarEvent[] => {\r\n  if (!events) {\r\n    return []\r\n  }\r\n\r\n  if (Array.isArray(events)) {\r\n    return events.filter(Boolean) as CalendarEvent[]\r\n  }\r\n\r\n  if (events instanceof Map) {\r\n    return Array.from(events.values()).filter(Boolean) as CalendarEvent[]\r\n  }\r\n\r\n  if (events instanceof Set) {\r\n    return Array.from(events).filter(Boolean) as CalendarEvent[]\r\n  }\r\n\r\n  if (typeof events === 'object') {\r\n    const rawEvents = toRaw(events as Record<PropertyKey, unknown>)\r\n\r\n    // 兼容 Ref<{ value: [] }> / Vue 响应式对象包装\r\n    if (Array.isArray((rawEvents as { value?: unknown }).value)) {\r\n      return ((rawEvents as { value: unknown[] }).value || []).filter(\r\n        Boolean,\r\n      ) as CalendarEvent[]\r\n    }\r\n\r\n    const iterator = (rawEvents as Record<PropertyKey, unknown>)[\r\n      Symbol.iterator\r\n    ]\r\n    if (typeof iterator === 'function') {\r\n      return Array.from(rawEvents as unknown as Iterable<unknown>).filter(\r\n        Boolean,\r\n      ) as CalendarEvent[]\r\n    }\r\n\r\n    return Object.values(rawEvents).filter(Boolean) as CalendarEvent[]\r\n  }\r\n\r\n  return []\r\n}\r\n\r\n// 跨日事件通用排序比较器（按跨度天数、时长、起始时间降/升序）。\r\nconst compareCrossDaySort = (left: CalendarEvent, right: CalendarEvent) => {\r\n  const leftMetrics = getCrossDaySortMetrics(left)\r\n  const rightMetrics = getCrossDaySortMetrics(right)\r\n  if (rightMetrics.spanDays !== leftMetrics.spanDays) {\r\n    return rightMetrics.spanDays - leftMetrics.spanDays\r\n  }\r\n  if (rightMetrics.durationMinutes !== leftMetrics.durationMinutes) {\r\n    return rightMetrics.durationMinutes - leftMetrics.durationMinutes\r\n  }\r\n  return leftMetrics.startAt - rightMetrics.startAt\r\n}\r\n\r\nconst sortMonthCellEvents = (left: CalendarEvent, right: CalendarEvent) => {\r\n  const result = compareCrossDaySort(left, right)\r\n  if (result !== 0) return result\r\n  return String(left.title || '').localeCompare(String(right.title || ''))\r\n}\r\n\r\nconst getSortedMonthCellEvents = (events: unknown) =>\r\n  [...normalizeCellEvents(events)].sort(sortMonthCellEvents)\r\n\r\n// 周/日视图顶部跨日事件最大显示行数，超出则显示「还有N条」\r\n\r\n// 周/日视图顶部跨日事件是否处于展开状态\r\nconst headerEventsExpanded = ref(false)\r\n\r\n// 月视图每行日程高度 = 20px height + 4px margin-bottom\r\n\r\n// \"还有N条\" 按钮占用的高度估算（font-size:12px，无固定高度）\r\n\r\n\r\nconst getMonthCellVisibleLimit = (totalEvents: number) => {\r\n  if (totalEvents <= 0) {\r\n    return 0\r\n  }\r\n\r\n  // 若 dayMaxEvents 为数值，直接以数值为上限\r\n  if (\r\n    typeof props.dayMaxEvents === 'number' &&\r\n    Number.isFinite(props.dayMaxEvents)\r\n  ) {\r\n    return Math.max(Math.floor(props.dayMaxEvents), 1)\r\n  }\r\n\r\n  // dayMaxEvents === false：不限制，全部显示\r\n  if (props.dayMaxEvents === false) {\r\n    return totalEvents\r\n  }\r\n\r\n  // dayMaxEvents === true（默认）：根据格子可用高度动态计算\r\n  const bodyHeight = monthCellBodyHeight.value\r\n  if (!bodyHeight) {\r\n    // 高度尚未测量到，暂不裁切\r\n    return totalEvents\r\n  }\r\n\r\n  // 总是预留\"更多\"按钮的高度，确保当有隐藏事件时不会layout抖动\r\n  return Math.max(\r\n    Math.floor((bodyHeight - MONTH_MORE_BTN_HEIGHT) / MONTH_EVENT_ROW_HEIGHT),\r\n    0,\r\n  )\r\n}\r\n\r\nconst getMonthCellVisibleEvents = (cell: { events?: unknown }) => {\r\n  const events = getSortedMonthCellEvents(cell?.events)\r\n  const limit = getMonthCellVisibleLimit(events.length)\r\n  if (limit >= events.length) {\r\n    return events\r\n  }\r\n  // 若新增草稿事件超出可见范围，强制将其保留在末尾可见位置，确保 querySelector('.is-new') 能找到 DOM 锚点\r\n  const newIdx = events.findIndex(\r\n    (e) => getEventIdentifier(e) === newDraftEventIdRef.value,\r\n  )\r\n  if (newIdx === -1 || newIdx < limit) {\r\n    return events.slice(0, limit)\r\n  }\r\n  return [...events.slice(0, limit - 1), events[newIdx]]\r\n}\r\n\r\nconst getMonthCellHiddenEventCount = (cell: { events?: unknown }) => {\r\n  const events = getSortedMonthCellEvents(cell?.events)\r\n  return Math.max(events.length - getMonthCellVisibleLimit(events.length), 0)\r\n}\r\n\r\n// 将 vue-cal 5 view payload 归一化为组件内部 dates-change 原始结构。\r\nconst mapViewToRaw = (view: any): CalendarDatesChangeRaw => ({\r\n  view: (view?.id ?? 'month') as 'month' | 'week' | 'day',\r\n  startDate: view?.start ?? new Date(),\r\n  endDate: view?.end ?? new Date(),\r\n  firstCellDate: view?.extendedStart,\r\n  lastCellDate: view?.extendedEnd,\r\n  events: normalizeCalendarEvents(view?.events),\r\n})\r\n\r\n// 事件识别优先级：id > _eid > 兜底字段组合，保证编辑/拖拽时能定位到同一条记录。\r\nconst getEventIdentifier = (event?: Partial<CalendarEvent>) => {\r\n  if (!event) {\r\n    return ''\r\n  }\r\n\r\n  if (event.id !== undefined && event.id !== null) {\r\n    return String(event.id)\r\n  }\r\n\r\n  if (event._eid) {\r\n    return event._eid\r\n  }\r\n\r\n  return `fallback:${String(event.title || '')}|${String(normalizeDateLikeValue(event.start) || '')}|${String(normalizeDateLikeValue(event.end) || '')}`\r\n}\r\n\r\nconst currentViewId = ref<'month' | 'week' | 'day'>(props.view)\r\nconst renderedViewId = ref<CalendarView>(props.view)\r\n\r\nconst internalCurrentDate = ref<Date>(\r\n  toDateValue(props.currentDate) || new Date(),\r\n)\r\n\r\n// 用户最后一次明确选中/操作的日期（单元格点击、事件点击、日期选择器、今日按钮、视图内导航）。\r\n// 切换视图模式时优先以此为锚点，无值时回退到 internalCurrentDate。\r\nconst selectedDate = ref<Date | null>(toDateValue(props.currentDate) || null)\r\n\r\nconst resolvedCurrentDate = computed(() => internalCurrentDate.value)\r\n\r\nconst headerPickerType = computed(() => {\r\n  if (currentViewId.value === 'month') {\r\n    return 'month'\r\n  }\r\n\r\n  if (currentViewId.value === 'week') {\r\n    return 'week'\r\n  }\r\n\r\n  return 'date'\r\n})\r\n\r\nconst headerPickerValue = computed(() => dayjs(internalCurrentDate.value))\r\n\r\nconst getWeekRangeByDate = (dateValue: Dayjs) => {\r\n  const base = dateValue.startOf('day')\r\n  const weekday = base.day()\r\n  const offset = resolvedWeekStartDay.value === 1 ? (weekday + 6) % 7 : weekday\r\n  const start = base.subtract(offset, 'day').startOf('day')\r\n  const end = start.add(6, 'day').endOf('day')\r\n\r\n  return { start, end }\r\n}\r\n\r\nconst getWeekYearAndNumber = (weekStart: Dayjs) => {\r\n  const resolveWeekYear = (targetWeekStart: Dayjs) => {\r\n    const currentYear = targetWeekStart.year()\r\n    const currentYearFirstWeekStart = getWeekRangeByDate(\r\n      dayjs(`${currentYear}-01-01`),\r\n    ).start\r\n    const nextYearFirstWeekStart = getWeekRangeByDate(\r\n      dayjs(`${currentYear + 1}-01-01`),\r\n    ).start\r\n\r\n    if (targetWeekStart.isBefore(currentYearFirstWeekStart)) {\r\n      return currentYear - 1\r\n    }\r\n\r\n    if (!targetWeekStart.isBefore(nextYearFirstWeekStart)) {\r\n      return currentYear + 1\r\n    }\r\n\r\n    return currentYear\r\n  }\r\n\r\n  const weekYear = resolveWeekYear(weekStart)\r\n  const firstWeekStart = getWeekRangeByDate(dayjs(`${weekYear}-01-01`)).start\r\n  const weekNo = Math.floor(weekStart.diff(firstWeekStart, 'day') / 7) + 1\r\n\r\n  return {\r\n    weekYear,\r\n    weekNo: Math.max(weekNo, 1),\r\n  }\r\n}\r\n\r\nconst formatWeekHeaderTitle = (\r\n  dateValue: Dayjs,\r\n  format: string = props.weekTitleFormat,\r\n) => {\r\n  if (!dateValue || !dateValue.isValid()) {\r\n    return ''\r\n  }\r\n\r\n  const weekRange = getWeekRangeByDate(dateValue)\r\n  const weekInfo = getWeekYearAndNumber(weekRange.start)\r\n  const start = weekRange.start\r\n  const end = weekRange.end\r\n\r\n  switch (format) {\r\n    case 'YYYY 第W周':\r\n      return `${weekInfo.weekYear} 第${weekInfo.weekNo}周`\r\n    case 'YYYY年 第W周':\r\n      return `${weekInfo.weekYear}年 第${weekInfo.weekNo}周`\r\n    case '第W周':\r\n      return `第${weekInfo.weekNo}周`\r\n    case 'W周':\r\n      return `${weekInfo.weekNo}周`\r\n    case 'YYYY/W':\r\n      return `${weekInfo.weekYear}/${weekInfo.weekNo}`\r\n    case 'W/YYYY':\r\n      return `${weekInfo.weekNo}/${weekInfo.weekYear}`\r\n    case 'MM/DD - MM/DD':\r\n      return `${start.format('MM/DD')} - ${end.format('MM/DD')}`\r\n    case 'YYYY/MM/DD - MM/DD':\r\n      return `${start.format('YYYY/MM/DD')} - ${end.format('MM/DD')}`\r\n    case 'YYYY年M月D日-D日':\r\n      return `${start.format('YYYY年M月D日')}-${end.format('D日')}`\r\n    case 'YYYY年M月D日 - M月D日':\r\n      return `${start.format('YYYY年M月D日')} - ${end.format('M月D日')}`\r\n    case 'Week W, YYYY':\r\n      return `Week ${weekInfo.weekNo}, ${weekInfo.weekYear}`\r\n    case 'YYYY-MM-DD / DD':\r\n      return `${start.format('YYYY-MM-DD')} / ${end.format('DD')}`\r\n    default:\r\n      return dateValue.format(format)\r\n  }\r\n}\r\n\r\nconst headerPickerFormat = computed(() => {\r\n  if (currentViewId.value === 'day') {\r\n    return props.dayTitleFormat\r\n  }\r\n\r\n  if (currentViewId.value === 'month') {\r\n    return props.monthTitleFormat\r\n  }\r\n\r\n  if (currentViewId.value === 'week') {\r\n    const currentWeekTitleFormat = props.weekTitleFormat\r\n    return (dateValue: Dayjs) =>\r\n      formatWeekHeaderTitle(dateValue, currentWeekTitleFormat)\r\n  }\r\n\r\n  return undefined\r\n})\r\n\r\nconst resolvedWeekStartDay = computed(() => {\r\n  const value = Number(props.weekStartDay)\r\n  if (value === 0 || value === 1) {\r\n    return value\r\n  }\r\n\r\n  return 0\r\n})\r\n\r\nconst weekStartsOnSunday = computed(() => {\r\n  if (currentViewId.value !== 'week' && currentViewId.value !== 'month') {\r\n    return false\r\n  }\r\n\r\n  // vue-cal 原生仅支持周日/周一起始。\r\n  return resolvedWeekStartDay.value === 0\r\n})\r\n\r\nconst resolvedHeight = computed(() => {\r\n  if (typeof props.height === 'number') {\r\n    return `${props.height}px`\r\n  }\r\n\r\n  if (typeof props.height === 'string' && /^\\d+$/.test(props.height)) {\r\n    return `${props.height}px`\r\n  }\r\n\r\n  return props.height\r\n})\r\n\r\nconst panelStyle = computed(() => {\r\n  const style: Record<string, string> = {\r\n    height: resolvedHeight.value,\r\n    position: 'relative',\r\n  }\r\n  if (currentViewId.value === 'week' && weekHeadingsHeight.value > 0) {\r\n    style['--ll-calendar-headings-height'] = `${weekHeadingsHeight.value}px`\r\n    style['--ll-calendar-scrollbar-start-offset'] =\r\n      `${weekHeadingsHeight.value}px`\r\n  } else if (scrollbarStartOffset.value > 0) {\r\n    style['--ll-calendar-scrollbar-start-offset'] =\r\n      `${scrollbarStartOffset.value}px`\r\n  }\r\n  return style\r\n})\r\n\r\nconst currentViewRange = ref<{ start: Date; end: Date }>({\r\n  start: new Date(internalCurrentDate.value),\r\n  end: new Date(internalCurrentDate.value),\r\n})\r\nconst preventOutOfMonthJumpPending = ref(false)\r\nconst monthAnchorBeforeOutOfMonthClick = ref<Date | null>(null)\r\nconst timeCellWidth = ref<number>()\r\nconst weekHeadingsHeight = ref(0)\r\nconst scrollbarStartOffset = ref(0)\r\nconst monthCellBodyHeight = ref(0)\r\nlet weekHeadingsObserver: ResizeObserver | null = null\r\nlet weekHeadingsMutationObserver: MutationObserver | null = null\r\nlet observedWeekHeadingsEl: HTMLElement | null = null\r\n\r\nconst timeFromMinutes = computed(() => parseTimeToMinutes(props.slotMinTime))\r\n\r\nconst timeToMinutes = computed(() => parseTimeToMinutes(props.slotMaxTime))\r\n\r\nconst slotStepMinutes = computed(() =>\r\n  Math.max(parseTimeToMinutes(props.slotDuration), 15),\r\n)\r\n\r\nconst isWeekOrDayView = computed(\r\n  () => currentViewId.value === 'week' || currentViewId.value === 'day',\r\n)\r\n\r\n// 返回当前视图对应可滚动容器的 CSS 选择器。\r\nconst getViewScrollableSelector = () =>\r\n  currentViewId.value === 'week'\r\n    ? '.vuecal__scrollable--week-view'\r\n    : '.vuecal__scrollable--day-view'\r\n\r\n// 事件列表弹出面板定位计算。\r\n\r\n\r\n\r\n\r\n\r\nconst calcEventListPanelPosition = (nativeEvent: MouseEvent) => {\r\n  const vw = window.innerWidth\r\n  const vh = window.innerHeight\r\n  let left = nativeEvent.clientX + EVENT_LIST_PANEL_GAP\r\n  let top = nativeEvent.clientY - EVENT_LIST_PANEL_HEIGHT / 2\r\n  if (left + EVENT_LIST_PANEL_WIDTH + EVENT_LIST_PANEL_MARGIN > vw) {\r\n    left = nativeEvent.clientX - EVENT_LIST_PANEL_WIDTH - EVENT_LIST_PANEL_GAP\r\n  }\r\n  left = Math.max(\r\n    EVENT_LIST_PANEL_MARGIN,\r\n    Math.min(left, vw - EVENT_LIST_PANEL_WIDTH - EVENT_LIST_PANEL_MARGIN),\r\n  )\r\n  top = Math.max(\r\n    EVENT_LIST_PANEL_MARGIN,\r\n    Math.min(top, vh - EVENT_LIST_PANEL_HEIGHT - EVENT_LIST_PANEL_MARGIN),\r\n  )\r\n  return { position: 'fixed', left: `${left}px`, top: `${top}px` }\r\n}\r\n\r\nconst calendarEventsForView = computed(() => {\r\n  if (!isWeekOrDayView.value) {\r\n    // 返回浅拷贝，隔离 vue-cal 对传入 events 数组的原地 splice，避免清空内部事件源数组\r\n    return [...internalEvents.value] as any[]\r\n  }\r\n\r\n  if (currentViewId.value === 'day') {\r\n    const currentDate = toDateValue(internalCurrentDate.value) || new Date()\r\n    const dayStart = dayjs(currentDate).startOf('day').toDate()\r\n    const dayEnd = dayjs(currentDate).endOf('day').toDate()\r\n\r\n    return internalEvents.value.filter(\r\n      (event) =>\r\n        isEventOverlappingRange(event, dayStart, dayEnd) &&\r\n        !isCrossDayEvent(event),\r\n    ) as any[]\r\n  }\r\n\r\n  return internalEvents.value.filter(\r\n    (event) => !isCrossDayEvent(event),\r\n  ) as any[]\r\n})\r\n\r\nconst crossDayReferenceEvents = computed(() => {\r\n  if (!isWeekOrDayView.value) {\r\n    return [] as CalendarEvent[]\r\n  }\r\n\r\n  const { start, end } = currentViewRange.value\r\n  const events = internalEvents.value.filter(\r\n    (event) =>\r\n      isCrossDayEvent(event) && isEventOverlappingRange(event, start, end),\r\n  )\r\n\r\n  return [...events].sort(compareCrossDaySort)\r\n})\r\n\r\nconst weekdayIdToLabel = (id: string) => {\r\n  const labelMaps: Record<string, Record<string, string>> = {\r\n    min: {\r\n      mon: '一',\r\n      tue: '二',\r\n      wed: '三',\r\n      thu: '四',\r\n      fri: '五',\r\n      sat: '六',\r\n      sun: '日',\r\n    },\r\n    short: {\r\n      mon: '周一',\r\n      tue: '周二',\r\n      wed: '周三',\r\n      thu: '周四',\r\n      fri: '周五',\r\n      sat: '周六',\r\n      sun: '周日',\r\n    },\r\n    long: {\r\n      mon: '星期一',\r\n      tue: '星期二',\r\n      wed: '星期三',\r\n      thu: '星期四',\r\n      fri: '星期五',\r\n      sat: '星期六',\r\n      sun: '星期日',\r\n    },\r\n  }\r\n\r\n  const weekdayId = String(id).toLowerCase()\r\n  const currentFormatMap = labelMaps[props.weekdayFormat] || labelMaps.long\r\n  return currentFormatMap[weekdayId] ?? id\r\n}\r\n\r\nconst formatWeekdayDate = (dateStr: string) => {\r\n  const target = dayjs(dateStr)\r\n  if (!target.isValid()) {\r\n    return ''\r\n  }\r\n\r\n  if (currentViewId.value !== 'week') {\r\n    if (target.date() === 1) {\r\n      return formatFirstDayLabel(target)\r\n    }\r\n\r\n    return target.format('D')\r\n  }\r\n\r\n  if (target.date() === 1) {\r\n    return formatFirstDayLabel(target)\r\n  }\r\n\r\n  return target.format(props.weekColumnDateFormat)\r\n}\r\n\r\nconst formatMonthCellDate = (dateValue: string | Date) => {\r\n  const target = dayjs(dateValue)\r\n  if (!target.isValid()) {\r\n    return ''\r\n  }\r\n\r\n  if (target.date() === 1) {\r\n    return formatFirstDayLabel(target)\r\n  }\r\n\r\n  return target.format('D')\r\n}\r\n\r\nconst formatFirstDayLabel = (target: Dayjs) => {\r\n  const month = target.month() + 1\r\n  const day = target.date()\r\n\r\n  switch (props.firstDayFormat) {\r\n    case 'monthDay':\r\n      return `${month}/${day}`\r\n    case 'dayMonth':\r\n      return `${day}/${month}`\r\n    case 'chineseDate':\r\n      return `${month}月${day}日`\r\n    default:\r\n      return target.format(props.firstDayFormat)\r\n  }\r\n}\r\n\r\nconst selectedDayPoint = computed(() =>\r\n  dayjs(toDateValue(internalCurrentDate.value) || new Date()).startOf('day'),\r\n)\r\n\r\nconst dayHeaderTimezoneLabel = computed(() => {\r\n  const offsetMinutes = -new Date().getTimezoneOffset()\r\n  const sign = offsetMinutes >= 0 ? '+' : '-'\r\n  const absoluteMinutes = Math.abs(offsetMinutes)\r\n  const hours = Math.floor(absoluteMinutes / 60)\r\n  const minutes = absoluteMinutes % 60\r\n\r\n  if (minutes === 0) {\r\n    return `GMT${sign}${hours}`\r\n  }\r\n\r\n  return `GMT${sign}${hours}:${String(minutes).padStart(2, '0')}`\r\n})\r\n\r\nconst weekHeaderTimezoneStyle = computed(() => {\r\n  if (!weekHeadingsHeight.value) {\r\n    return undefined\r\n  }\r\n\r\n  return {\r\n    top: scrollbarStartOffset.value + 'px',\r\n    height: weekHeadingsHeight.value - 10 + 'px',\r\n  }\r\n})\r\n\r\nconst dayHeaderTimezoneStyle = computed(() => {\r\n  if (!timeCellWidth.value) {\r\n    return undefined\r\n  }\r\n\r\n  const width = `${timeCellWidth.value}px`\r\n  return {\r\n    width,\r\n    minWidth: width,\r\n  }\r\n})\r\n\r\nconst syncTimeCellWidth = () => {\r\n  const hostEl = calendarContainerRef.value\r\n  if (!hostEl) {\r\n    return\r\n  }\r\n\r\n  const timeCellEl = hostEl.querySelector(\r\n    '.vuecal__time-column .vuecal__time-cell',\r\n  )\r\n  if (!(timeCellEl instanceof HTMLElement)) {\r\n    return\r\n  }\r\n\r\n  const nextWidth = Math.round(timeCellEl.getBoundingClientRect().width)\r\n  if (nextWidth > 0) {\r\n    timeCellWidth.value = nextWidth\r\n  }\r\n}\r\n\r\nconst scheduleTimeCellWidthSync = () => {\r\n  if (typeof window === 'undefined') {\r\n    return\r\n  }\r\n\r\n  window.requestAnimationFrame(() => {\r\n    syncTimeCellWidth()\r\n  })\r\n}\r\n\r\nconst cleanupWeekHeadingsObservers = () => {\r\n  weekHeadingsObserver?.disconnect()\r\n  weekHeadingsObserver = null\r\n  weekHeadingsMutationObserver?.disconnect()\r\n  weekHeadingsMutationObserver = null\r\n  observedWeekHeadingsEl = null\r\n}\r\n\r\n// ---- 月视图格子高度 Observer ----\r\n\r\nlet monthCellObserver: ResizeObserver | null = null\r\n\r\nconst measureMonthCellHeight = () => {\r\n  const hostEl = calendarContainerRef.value\r\n  if (!hostEl) {\r\n    return\r\n  }\r\n\r\n  const cellEl = hostEl.querySelector<HTMLElement>(\r\n    '.vuecal__scrollable--month-view .vuecal__cell',\r\n  )\r\n  if (!cellEl) {\r\n    return\r\n  }\r\n\r\n  const cellHeight = cellEl.clientHeight\r\n  if (cellHeight <= 0) {\r\n    return\r\n  }\r\n\r\n  const dateEl = cellEl.querySelector<HTMLElement>('.vuecal__cell-date')\r\n  const dateHeight = dateEl ? dateEl.offsetHeight : 24\r\n  const bodyHeight = Math.max(cellHeight - dateHeight, 0)\r\n  if (bodyHeight > 0) {\r\n    monthCellBodyHeight.value = bodyHeight\r\n  }\r\n}\r\n\r\nconst cleanupMonthCellObserver = () => {\r\n  monthCellObserver?.disconnect()\r\n  monthCellObserver = null\r\n}\r\n\r\nconst bindMonthCellObserver = () => {\r\n  cleanupMonthCellObserver()\r\n\r\n  if (typeof ResizeObserver === 'undefined') {\r\n    return\r\n  }\r\n\r\n  const hostEl = calendarContainerRef.value\r\n  if (!hostEl) {\r\n    return\r\n  }\r\n\r\n  const cellEl = hostEl.querySelector<HTMLElement>(\r\n    '.vuecal__scrollable--month-view .vuecal__cell',\r\n  )\r\n  if (!cellEl) {\r\n    return\r\n  }\r\n\r\n  measureMonthCellHeight()\r\n  monthCellObserver = new ResizeObserver(() => {\r\n    measureMonthCellHeight()\r\n  })\r\n  monthCellObserver.observe(cellEl)\r\n}\r\n\r\nconst syncMonthCellHeight = () => {\r\n  if (currentViewId.value !== 'month') {\r\n    cleanupMonthCellObserver()\r\n    return\r\n  }\r\n\r\n  // 双 rAF 确保 VueCal 已完成 DOM 渲染\r\n  window.requestAnimationFrame(() => {\r\n    window.requestAnimationFrame(() => {\r\n      if (currentViewId.value !== 'month') {\r\n        cleanupMonthCellObserver()\r\n        return\r\n      }\r\n\r\n      bindMonthCellObserver()\r\n    })\r\n  })\r\n}\r\n\r\nconst measureWeekHeadingsHeight = (headingsEl: HTMLElement) => {\r\n  const nextHeight = Math.round(headingsEl.getBoundingClientRect().height)\r\n  if (nextHeight > 0) {\r\n    weekHeadingsHeight.value = nextHeight\r\n  }\r\n}\r\n\r\nconst bindWeekHeadingsElement = (hostEl: HTMLElement) => {\r\n  const headingsEl = hostEl.querySelector('.vuecal__headings')\r\n  if (!(headingsEl instanceof HTMLElement)) {\r\n    return\r\n  }\r\n\r\n  if (observedWeekHeadingsEl === headingsEl) {\r\n    measureWeekHeadingsHeight(headingsEl)\r\n    return\r\n  }\r\n\r\n  weekHeadingsObserver?.disconnect()\r\n  observedWeekHeadingsEl = headingsEl\r\n  measureWeekHeadingsHeight(headingsEl)\r\n\r\n  weekHeadingsObserver = new ResizeObserver(() => {\r\n    if (observedWeekHeadingsEl) {\r\n      measureWeekHeadingsHeight(observedWeekHeadingsEl)\r\n    }\r\n  })\r\n  weekHeadingsObserver.observe(headingsEl)\r\n}\r\n\r\nconst syncWeekHeadingsHeight = () => {\r\n  cleanupWeekHeadingsObservers()\r\n\r\n  if (currentViewId.value !== 'week') {\r\n    return\r\n  }\r\n\r\n  if (\r\n    typeof ResizeObserver === 'undefined' ||\r\n    typeof MutationObserver === 'undefined'\r\n  ) {\r\n    return\r\n  }\r\n\r\n  const hostEl = calendarContainerRef.value\r\n  if (!hostEl) {\r\n    return\r\n  }\r\n\r\n  window.requestAnimationFrame(() => {\r\n    window.requestAnimationFrame(() => {\r\n      if (currentViewId.value !== 'week') {\r\n        return\r\n      }\r\n\r\n      bindWeekHeadingsElement(hostEl)\r\n\r\n      weekHeadingsMutationObserver = new MutationObserver(() => {\r\n        if (currentViewId.value !== 'week') {\r\n          return\r\n        }\r\n\r\n        bindWeekHeadingsElement(hostEl)\r\n      })\r\n      weekHeadingsMutationObserver.observe(hostEl, {\r\n        childList: true,\r\n        subtree: true,\r\n      })\r\n    })\r\n  })\r\n}\r\n\r\nconst scheduleWeekHeadingsHeightSync = () => {\r\n  syncWeekHeadingsHeight()\r\n}\r\n\r\nconst shouldShowCustomNowLine = computed(\r\n  () =>\r\n    props.nowIndicator &&\r\n    (currentViewId.value === 'week' || currentViewId.value === 'day'),\r\n)\r\n\r\nconst isTransientScrollbarVisible = ref(false)\r\nconst customScrollbarTrackRef = ref<HTMLElement>()\r\nconst customScrollbarThumbTopPx = ref(0)\r\nconst customScrollbarThumbHeightPx = ref(0)\r\n\r\nconst customScrollbarVisible = computed(\r\n  () => currentViewId.value === 'week' || currentViewId.value === 'day',\r\n)\r\n\r\nconst customScrollbarTrackStyle = computed(() => {\r\n  // scrollbarStartOffset = vuecal__header 高度（scrollable 容器相对组件顶部的偏移）\r\n  // weekHeadingsHeight = sticky 表头（日期列）的高度\r\n  // 两者之和 = 时间轴起始位置\r\n  const headingsHeight =\r\n    currentViewId.value === 'week' && weekHeadingsHeight.value > 0\r\n      ? weekHeadingsHeight.value\r\n      : 0\r\n  const top = scrollbarStartOffset.value + headingsHeight\r\n  return {\r\n    top: `${top}px`,\r\n    bottom: '4px',\r\n    right: '6px',\r\n  }\r\n})\r\n\r\nconst customScrollbarThumbStyle = computed(() => ({\r\n  top: `${customScrollbarThumbTopPx.value}px`,\r\n  height: `${customScrollbarThumbHeightPx.value}px`,\r\n}))\r\n\r\nconst updateCustomScrollbarThumb = () => {\r\n  const el = transientScrollbarScrollableEl\r\n  const trackEl = customScrollbarTrackRef.value\r\n  if (!el || !trackEl) return\r\n  const { scrollTop, scrollHeight, clientHeight } = el\r\n  const trackH = trackEl.clientHeight\r\n  if (scrollHeight <= clientHeight || trackH <= 0) {\r\n    customScrollbarThumbHeightPx.value = trackH\r\n    customScrollbarThumbTopPx.value = 0\r\n    return\r\n  }\r\n  const thumbH = Math.max((clientHeight / scrollHeight) * trackH, 24)\r\n  const thumbT = (scrollTop / (scrollHeight - clientHeight)) * (trackH - thumbH)\r\n  customScrollbarThumbHeightPx.value = thumbH\r\n  customScrollbarThumbTopPx.value = thumbT\r\n}\r\n\r\nconst handleScrollbarThumbMousedown = (e: MouseEvent) => {\r\n  e.preventDefault()\r\n  const el = transientScrollbarScrollableEl\r\n  const trackEl = customScrollbarTrackRef.value\r\n  if (!el || !trackEl) return\r\n  const startY = e.clientY\r\n  const startScrollTop = el.scrollTop\r\n  const { scrollHeight, clientHeight } = el\r\n  const trackH = trackEl.clientHeight\r\n  const thumbH = customScrollbarThumbHeightPx.value\r\n  const onMousemove = (moveEvent: MouseEvent) => {\r\n    const dy = moveEvent.clientY - startY\r\n    const scrollRange = scrollHeight - clientHeight\r\n    const thumbRange = trackH - thumbH\r\n    if (thumbRange <= 0) return\r\n    el.scrollTop = startScrollTop + (dy / thumbRange) * scrollRange\r\n    showTransientScrollbar()\r\n  }\r\n  const onMouseup = () => {\r\n    document.removeEventListener('mousemove', onMousemove)\r\n    document.removeEventListener('mouseup', onMouseup)\r\n  }\r\n  document.addEventListener('mousemove', onMousemove)\r\n  document.addEventListener('mouseup', onMouseup)\r\n}\r\n\r\nconst handleScrollbarTrackMousedown = (e: MouseEvent) => {\r\n  const el = transientScrollbarScrollableEl\r\n  const trackEl = customScrollbarTrackRef.value\r\n  if (!el || !trackEl) return\r\n  const trackRect = trackEl.getBoundingClientRect()\r\n  const clickY = e.clientY - trackRect.top\r\n  const { scrollHeight, clientHeight } = el\r\n  const trackH = trackEl.clientHeight\r\n  const thumbH = customScrollbarThumbHeightPx.value\r\n  const thumbRange = trackH - thumbH\r\n  const scrollRange = scrollHeight - clientHeight\r\n  if (thumbRange <= 0) return\r\n  el.scrollTop = ((clickY - thumbH / 2) / thumbRange) * scrollRange\r\n  showTransientScrollbar()\r\n}\r\n\r\nlet customNowLineAlignTimeoutId = 0\r\nlet customNowLineIntervalId = 0\r\nlet customNowLineScrollableEl: HTMLElement | null = null\r\nlet customNowLineHighlightedScaleCellEl: HTMLElement | null = null\r\nlet customNowLineHighlightedScaleCellColor = ''\r\nlet transientScrollbarTimeoutId = 0\r\nlet transientScrollbarScrollableEl: HTMLElement | null = null\r\n\r\nconst clearCustomNowLineScaleHighlight = () => {\r\n  if (customNowLineHighlightedScaleCellEl) {\r\n    if (customNowLineHighlightedScaleCellColor) {\r\n      customNowLineHighlightedScaleCellEl.style.color =\r\n        customNowLineHighlightedScaleCellColor\r\n    } else {\r\n      customNowLineHighlightedScaleCellEl.style.removeProperty('color')\r\n    }\r\n  }\r\n\r\n  customNowLineHighlightedScaleCellEl = null\r\n  customNowLineHighlightedScaleCellColor = ''\r\n  customNowLineTimeHidden.value = false\r\n}\r\n\r\nconst clearCustomNowLineTimer = () => {\r\n  if (customNowLineAlignTimeoutId) {\r\n    window.clearTimeout(customNowLineAlignTimeoutId)\r\n    customNowLineAlignTimeoutId = 0\r\n  }\r\n\r\n  if (customNowLineIntervalId) {\r\n    window.clearInterval(customNowLineIntervalId)\r\n    customNowLineIntervalId = 0\r\n  }\r\n}\r\n\r\nconst clearTransientScrollbarTimer = () => {\r\n  if (transientScrollbarTimeoutId) {\r\n    window.clearTimeout(transientScrollbarTimeoutId)\r\n    transientScrollbarTimeoutId = 0\r\n  }\r\n}\r\n\r\nconst syncScrollbarStartOffset = () => {\r\n  const hostEl = calendarContainerRef.value\r\n  if (!hostEl) {\r\n    scrollbarStartOffset.value = 0\r\n    return\r\n  }\r\n\r\n  if (currentViewId.value !== 'week' && currentViewId.value !== 'day') {\r\n    scrollbarStartOffset.value = 0\r\n    return\r\n  }\r\n\r\n  const containerRect = hostEl.getBoundingClientRect()\r\n  const scrollableEl = hostEl.querySelector(getViewScrollableSelector())\r\n\r\n  let nextOffset = 0\r\n  if (scrollableEl instanceof HTMLElement) {\r\n    const scrollableRect = scrollableEl.getBoundingClientRect()\r\n    nextOffset = Math.max(Math.round(scrollableRect.top - containerRect.top), 0)\r\n  }\r\n\r\n  if (scrollbarStartOffset.value !== nextOffset) {\r\n    scrollbarStartOffset.value = nextOffset\r\n  }\r\n}\r\n\r\nconst showTransientScrollbar = () => {\r\n  isTransientScrollbarVisible.value = true\r\n  clearTransientScrollbarTimer()\r\n  transientScrollbarTimeoutId = window.setTimeout(() => {\r\n    isTransientScrollbarVisible.value = false\r\n    transientScrollbarTimeoutId = 0\r\n  }, 900)\r\n}\r\n\r\nconst handleTransientScrollbarScroll = () => {\r\n  showTransientScrollbar()\r\n  updateCustomScrollbarThumb()\r\n}\r\n\r\nconst bindTransientScrollbarListener = () => {\r\n  const hostEl = calendarContainerRef.value\r\n  if (!hostEl) {\r\n    return\r\n  }\r\n\r\n  if (currentViewId.value !== 'week' && currentViewId.value !== 'day') {\r\n    if (transientScrollbarScrollableEl) {\r\n      transientScrollbarScrollableEl.removeEventListener(\r\n        'scroll',\r\n        handleTransientScrollbarScroll,\r\n      )\r\n      transientScrollbarScrollableEl = null\r\n    }\r\n    isTransientScrollbarVisible.value = false\r\n    clearTransientScrollbarTimer()\r\n    return\r\n  }\r\n\r\n  const scrollableEl = hostEl.querySelector(getViewScrollableSelector())\r\n\r\n  if (!(scrollableEl instanceof HTMLElement)) {\r\n    if (transientScrollbarScrollableEl) {\r\n      transientScrollbarScrollableEl.removeEventListener(\r\n        'scroll',\r\n        handleTransientScrollbarScroll,\r\n      )\r\n      transientScrollbarScrollableEl = null\r\n    }\r\n    return\r\n  }\r\n\r\n  if (transientScrollbarScrollableEl === scrollableEl) {\r\n    return\r\n  }\r\n\r\n  if (transientScrollbarScrollableEl) {\r\n    transientScrollbarScrollableEl.removeEventListener(\r\n      'scroll',\r\n      handleTransientScrollbarScroll,\r\n    )\r\n  }\r\n\r\n  transientScrollbarScrollableEl = scrollableEl\r\n  transientScrollbarScrollableEl.addEventListener(\r\n    'scroll',\r\n    handleTransientScrollbarScroll,\r\n  )\r\n  updateCustomScrollbarThumb()\r\n}\r\n\r\nconst scheduleTransientScrollbarListenerSync = () => {\r\n  if (typeof window === 'undefined') {\r\n    return\r\n  }\r\n\r\n  const runSync = () => {\r\n    syncScrollbarStartOffset()\r\n    bindTransientScrollbarListener()\r\n    updateCustomScrollbarThumb()\r\n  }\r\n\r\n  nextTick(() => {\r\n    runSync()\r\n    window.requestAnimationFrame(() => {\r\n      runSync()\r\n      window.requestAnimationFrame(runSync)\r\n    })\r\n    window.setTimeout(runSync, 80)\r\n  })\r\n}\r\n\r\nconst bindCustomNowLineScrollListener = () => {\r\n  const hostEl = calendarContainerRef.value\r\n  if (!hostEl) {\r\n    return\r\n  }\r\n\r\n  const scrollableEl = hostEl.querySelector(getViewScrollableSelector())\r\n\r\n  if (!(scrollableEl instanceof HTMLElement)) {\r\n    if (customNowLineScrollableEl) {\r\n      customNowLineScrollableEl.removeEventListener(\r\n        'scroll',\r\n        updateCustomNowLinePosition,\r\n      )\r\n      customNowLineScrollableEl = null\r\n    }\r\n    return\r\n  }\r\n\r\n  if (customNowLineScrollableEl === scrollableEl) {\r\n    return\r\n  }\r\n\r\n  if (customNowLineScrollableEl) {\r\n    customNowLineScrollableEl.removeEventListener(\r\n      'scroll',\r\n      updateCustomNowLinePosition,\r\n    )\r\n  }\r\n\r\n  customNowLineScrollableEl = scrollableEl\r\n  customNowLineScrollableEl.addEventListener(\r\n    'scroll',\r\n    updateCustomNowLinePosition,\r\n  )\r\n}\r\n\r\nfunction updateCustomNowLinePosition() {\r\n  clearCustomNowLineScaleHighlight()\r\n\r\n  if (!shouldShowCustomNowLine.value) {\r\n    customNowLineVisible.value = false\r\n    return\r\n  }\r\n\r\n  const hostEl = calendarContainerRef.value\r\n  if (!hostEl) {\r\n    customNowLineVisible.value = false\r\n    return\r\n  }\r\n\r\n  const bodyEl = hostEl.querySelector('.vuecal__body')\r\n  if (!(bodyEl instanceof HTMLElement)) {\r\n    customNowLineVisible.value = false\r\n    return\r\n  }\r\n\r\n  const scrollableEl =\r\n    customNowLineScrollableEl ||\r\n    hostEl.querySelector(getViewScrollableSelector())\r\n  if (!(scrollableEl instanceof HTMLElement)) {\r\n    customNowLineVisible.value = false\r\n    return\r\n  }\r\n\r\n  const now = new Date()\r\n  const minutesNow =\r\n    now.getHours() * 60 + now.getMinutes() + now.getSeconds() / 60\r\n  const from = timeFromMinutes.value\r\n  const to = timeToMinutes.value\r\n\r\n  if (minutesNow < from || minutesNow > to || slotStepMinutes.value <= 0) {\r\n    customNowLineVisible.value = false\r\n    return\r\n  }\r\n\r\n  const containerRect = hostEl.getBoundingClientRect()\r\n  const bodyRect = bodyEl.getBoundingClientRect()\r\n  const rawLineTop =\r\n    bodyRect.top -\r\n    containerRect.top +\r\n    ((minutesNow - from) / slotStepMinutes.value) * props.timeCellHeight\r\n  const lineTop = rawLineTop\r\n\r\n  const scrollableRect = scrollableEl.getBoundingClientRect()\r\n  const visibleTop = scrollableRect.top - containerRect.top\r\n  const visibleBottom = scrollableRect.bottom - containerRect.top\r\n\r\n  // 计算时间线相对于 scrollable 可见顶部的距离\r\n  const lineTopRelativeToScrollable = lineTop - visibleTop\r\n\r\n  if (lineTop < visibleTop || lineTop > visibleBottom) {\r\n    customNowLineVisible.value = false\r\n    return\r\n  }\r\n\r\n  // 当时间线滚动到头部附近时隐藏（距离 sticky 表头底部太近）\r\n  const headHideThreshold = weekHeadingsHeight.value + 3\r\n  if (lineTopRelativeToScrollable < headHideThreshold) {\r\n    customNowLineVisible.value = false\r\n    return\r\n  }\r\n\r\n  let dotLeft = -5\r\n  if (currentViewId.value === 'week') {\r\n    const todayCellEl = hostEl.querySelector(\r\n      '.vuecal__scrollable--week-view .vuecal__body .vuecal__cell--today',\r\n    )\r\n\r\n    if (todayCellEl instanceof HTMLElement) {\r\n      const todayRect = todayCellEl.getBoundingClientRect()\r\n      dotLeft = Math.round(todayRect.left - bodyRect.left - 4)\r\n    }\r\n  }\r\n\r\n  customNowLineStyle.value = {\r\n    left: `${Math.round(bodyRect.left - containerRect.left)}px`,\r\n    top: `${Math.round(lineTop)}px`,\r\n    width: `${Math.round(bodyRect.width)}px`,\r\n    '--ll-custom-now-dot-left': `${dotLeft}px`,\r\n  }\r\n\r\n  const lineTopInViewport = containerRect.top + lineTop\r\n  const timeCells = Array.from(\r\n    hostEl.querySelectorAll('.vuecal__time-column .vuecal__time-cell'),\r\n  ).filter((node): node is HTMLElement => node instanceof HTMLElement)\r\n\r\n  let nearestCell: HTMLElement | null = null\r\n  let nearestDelta = Number.POSITIVE_INFINITY\r\n  for (const cell of timeCells) {\r\n    const delta = Math.abs(cell.getBoundingClientRect().top - lineTopInViewport)\r\n    if (delta < nearestDelta) {\r\n      nearestDelta = delta\r\n      nearestCell = cell\r\n    }\r\n  }\r\n\r\n  // 与时间刻度线重合时，隐藏时间线时间并高亮刻度时间。\r\n  // 使用较宽容差，避免缩放或字体渲染导致看起来重合却像素不完全一致。\r\n  if (nearestCell && nearestDelta <= 6) {\r\n    customNowLineHighlightedScaleCellEl = nearestCell\r\n    customNowLineHighlightedScaleCellColor = nearestCell.style.color\r\n    nearestCell.style.color = '#ff4d4f'\r\n    customNowLineTimeHidden.value = true\r\n  }\r\n\r\n  customNowLineTime.value = dayjs(now).format(props.timeSlotFormat || 'HH:mm')\r\n  customNowLineVisible.value = true\r\n}\r\n\r\nconst scheduleCustomNowLinePositionSync = (hideFirst = false) => {\r\n  if (typeof window === 'undefined') {\r\n    return\r\n  }\r\n\r\n  if (hideFirst) {\r\n    customNowLineVisible.value = false\r\n  }\r\n\r\n  const runSync = () => {\r\n    bindCustomNowLineScrollListener()\r\n    updateCustomNowLinePosition()\r\n  }\r\n\r\n  const retryCount = hideFirst ? 3 : 2\r\n  let attempt = 0\r\n\r\n  const attemptSync = () => {\r\n    attempt++\r\n    runSync()\r\n\r\n    // 如果还未显示且未达到最大重试次数，继续重试\r\n    if (!customNowLineVisible.value && attempt < retryCount) {\r\n      const delay = hideFirst\r\n        ? attempt === 1\r\n          ? 0\r\n          : attempt === 2\r\n            ? 100\r\n            : 200\r\n        : 0\r\n      if (delay > 0) {\r\n        window.setTimeout(\r\n          () => window.requestAnimationFrame(attemptSync),\r\n          delay,\r\n        )\r\n      } else {\r\n        window.requestAnimationFrame(attemptSync)\r\n      }\r\n    }\r\n  }\r\n\r\n  nextTick(() => {\r\n    window.requestAnimationFrame(attemptSync)\r\n  })\r\n}\r\n\r\nconst startCustomNowLineTicker = () => {\r\n  clearCustomNowLineTimer()\r\n\r\n  if (!shouldShowCustomNowLine.value) {\r\n    customNowLineVisible.value = false\r\n    return\r\n  }\r\n\r\n  scheduleCustomNowLinePositionSync()\r\n\r\n  const now = new Date()\r\n  const delay = (60 - now.getSeconds()) * 1000 - now.getMilliseconds()\r\n\r\n  customNowLineAlignTimeoutId = window.setTimeout(\r\n    () => {\r\n      scheduleCustomNowLinePositionSync()\r\n      customNowLineIntervalId = window.setInterval(() => {\r\n        scheduleCustomNowLinePositionSync()\r\n      }, 60 * 1000)\r\n    },\r\n    Math.max(delay, 0),\r\n  )\r\n}\r\n\r\nconst stopCustomNowLineTicker = () => {\r\n  clearCustomNowLineTimer()\r\n  clearCustomNowLineScaleHighlight()\r\n  if (customNowLineScrollableEl) {\r\n    customNowLineScrollableEl.removeEventListener(\r\n      'scroll',\r\n      updateCustomNowLinePosition,\r\n    )\r\n    customNowLineScrollableEl = null\r\n  }\r\n  customNowLineVisible.value = false\r\n}\r\n\r\nconst dayHeaderEvents = computed(() => {\r\n  if (currentViewId.value !== 'day') {\r\n    return [] as CalendarEvent[]\r\n  }\r\n\r\n  const dayStart = selectedDayPoint.value.toDate()\r\n  const dayEnd = selectedDayPoint.value.endOf('day').toDate()\r\n  const events = internalEvents.value.filter(\r\n    (event) =>\r\n      isCrossDayEvent(event) &&\r\n      isEventOverlappingRange(event, dayStart, dayEnd),\r\n  )\r\n\r\n  return [...events].sort(compareCrossDaySort)\r\n})\r\n\r\n// 为当前视图范围内的跨日事件计算不重叠的行号，保证各列同一事件显示在同一行。\r\nconst weekCrossDayLayout = computed(() => {\r\n  if (!isWeekOrDayView.value) {\r\n    return { rowMap: new Map<string, number>(), totalRows: 0 }\r\n  }\r\n\r\n  const events = [...crossDayReferenceEvents.value].sort((left, right) => {\r\n    const leftStart = dayjs(toDateValue(left.start) || 0)\r\n      .startOf('day')\r\n      .valueOf()\r\n    const rightStart = dayjs(toDateValue(right.start) || 0)\r\n      .startOf('day')\r\n      .valueOf()\r\n    if (leftStart !== rightStart) {\r\n      return leftStart - rightStart\r\n    }\r\n\r\n    const leftEnd = dayjs(toDateValue(left.end) || toDateValue(left.start) || 0)\r\n      .startOf('day')\r\n      .valueOf()\r\n    const rightEnd = dayjs(\r\n      toDateValue(right.end) || toDateValue(right.start) || 0,\r\n    )\r\n      .startOf('day')\r\n      .valueOf()\r\n    if (leftEnd !== rightEnd) {\r\n      // 相同开始日时，较长事件优先占位，减少后续覆盖抖动。\r\n      return rightEnd - leftEnd\r\n    }\r\n\r\n    return getEventIdentifier(left).localeCompare(getEventIdentifier(right))\r\n  })\r\n  const rowMap = new Map<string, number>()\r\n  // 每行已占用的最晚结束日（startOf('day') 时间戳）\r\n  const rowLastEndDay: number[] = []\r\n\r\n  for (const event of events) {\r\n    const start = toDateValue(event.start)\r\n    const end = toDateValue(event.end) || start\r\n    if (!start || !end) continue\r\n\r\n    const effectiveEnd = new Date(Math.max(end.getTime() - 1, start.getTime()))\r\n    const eventStartDay = dayjs(start).startOf('day').valueOf()\r\n    const eventEndDay = dayjs(effectiveEnd).startOf('day').valueOf()\r\n    const key = getEventIdentifier(event)\r\n\r\n    const row = rowLastEndDay.findIndex((lastEnd) => lastEnd < eventStartDay)\r\n    const assignedRow = row === -1 ? rowLastEndDay.length : row\r\n    rowLastEndDay[assignedRow] = eventEndDay\r\n    rowMap.set(key, assignedRow)\r\n  }\r\n\r\n  return { rowMap, totalRows: rowLastEndDay.length }\r\n})\r\n\r\n// 任意列是否存在超出限制的跨日事件（用于控制展开按钮的显示）\r\nconst weekCrossDayHasMore = computed(\r\n  () => weekCrossDayLayout.value.totalRows > MAX_HEADER_ROWS,\r\n)\r\n\r\ntype CrossDaySlot = {\r\n  event: CalendarEvent\r\n  segment: 'start' | 'middle' | 'end' | 'single'\r\n} | null\r\n\r\nconst getWeekHeaderEventSegment = (\r\n  crossSlot: Exclude<CrossDaySlot, null>,\r\n  dateStr: string,\r\n): 'start' | 'middle' | 'end' | 'single' => {\r\n  const colDay = dayjs(new Date(dateStr)).startOf('day')\r\n  const weekFirstDay = dayjs(currentViewRange.value.start).startOf('day')\r\n\r\n  if (!colDay.isSame(weekFirstDay)) {\r\n    return crossSlot.segment\r\n  }\r\n\r\n  const start = toDateValue(crossSlot.event.start)\r\n  const end = toDateValue(crossSlot.event.end) || start\r\n  if (!start || !end) {\r\n    return crossSlot.segment\r\n  }\r\n\r\n  const effectiveEnd = new Date(Math.max(end.getTime() - 1, start.getTime()))\r\n  const eventStartDay = dayjs(start).startOf('day')\r\n  const eventEndDay = dayjs(effectiveEnd).startOf('day')\r\n  const isCrossDay = eventEndDay.isAfter(eventStartDay)\r\n\r\n  if (!isCrossDay) {\r\n    return crossSlot.segment\r\n  }\r\n\r\n  return colDay.isSame(eventEndDay) ? 'single' : 'start'\r\n}\r\n\r\n// 为指定日期列返回每行的跨日事件片段（null 表示该行在本列无事件）。\r\nconst getColumnCrossDayEvents = (dateStr: string): CrossDaySlot[] => {\r\n  const { rowMap, totalRows } = weekCrossDayLayout.value\r\n  if (totalRows === 0) return []\r\n\r\n  const colDay = dayjs(new Date(dateStr)).startOf('day')\r\n  const slots: CrossDaySlot[] = Array(totalRows).fill(null)\r\n\r\n  for (const event of crossDayReferenceEvents.value) {\r\n    const start = toDateValue(event.start)\r\n    const end = toDateValue(event.end) || start\r\n    if (!start || !end) continue\r\n\r\n    const effectiveEnd = new Date(Math.max(end.getTime() - 1, start.getTime()))\r\n    const eventStartDay = dayjs(start).startOf('day')\r\n    const eventEndDay = dayjs(effectiveEnd).startOf('day')\r\n\r\n    if (colDay.isBefore(eventStartDay) || colDay.isAfter(eventEndDay)) continue\r\n\r\n    const key = getEventIdentifier(event)\r\n    const row = rowMap.get(key)\r\n    if (row === undefined) continue\r\n\r\n    let segment: 'start' | 'middle' | 'end' | 'single'\r\n    if (colDay.isSame(eventStartDay) && colDay.isSame(eventEndDay)) {\r\n      segment = 'single'\r\n    } else if (colDay.isSame(eventStartDay)) segment = 'start'\r\n    else if (colDay.isSame(eventEndDay)) segment = 'end'\r\n    else segment = 'middle'\r\n\r\n    slots[row] = { event, segment }\r\n  }\r\n\r\n  return slots\r\n}\r\n\r\nconst getColumnCrossDayVisibleEvents = (dateStr: string): CrossDaySlot[] =>\r\n  headerEventsExpanded.value\r\n    ? getColumnCrossDayEvents(dateStr)\r\n    : getColumnCrossDayEvents(dateStr).slice(0, MAX_HEADER_ROWS)\r\n\r\nconst getColumnCrossDayHiddenCount = (dateStr: string): number =>\r\n  headerEventsExpanded.value\r\n    ? 0\r\n    : getColumnCrossDayEvents(dateStr).slice(MAX_HEADER_ROWS).filter(Boolean)\r\n        .length\r\n\r\nconst getColumnCrossDayAllEvents = (dateStr: string): CalendarEvent[] =>\r\n  getColumnCrossDayEvents(dateStr)\r\n    .filter((slot): slot is Exclude<CrossDaySlot, null> => slot !== null)\r\n    .map((slot) => slot.event)\r\n\r\ntype WeekCrossDayDragState = {\r\n  event: CalendarEvent\r\n  sourceDay: string\r\n}\r\n\r\nconst weekCrossDayDragState = ref<WeekCrossDayDragState | null>(null)\r\nconst weekCrossDayDropDay = ref('')\r\nlet suppressWeekCrossDayClickUntil = 0\r\n\r\nconst formatCrossDayColumnKey = (dateValue: string | Date) => {\r\n  const target = dayjs(dateValue).startOf('day')\r\n  return target.isValid() ? target.format('YYYY-MM-DD') : ''\r\n}\r\n\r\nconst canDragWeekCrossDayEvent = (event?: CalendarEvent | null) =>\r\n  Boolean(\r\n    event &&\r\n    currentViewId.value === 'week' &&\r\n    !props.readonly &&\r\n    currentEditableEvent.value.drag !== false,\r\n  )\r\n\r\nconst isWeekCrossDayDragging = (event?: CalendarEvent | null) => {\r\n  if (!event || !weekCrossDayDragState.value) {\r\n    return false\r\n  }\r\n\r\n  return (\r\n    getEventIdentifier(event) ===\r\n    getEventIdentifier(weekCrossDayDragState.value.event)\r\n  )\r\n}\r\n\r\nconst isWeekCrossDayDropTarget = (dateValue: string | Date) => {\r\n  const dayKey = formatCrossDayColumnKey(dateValue)\r\n  return Boolean(dayKey && dayKey === weekCrossDayDropDay.value)\r\n}\r\n\r\nconst shouldSuppressWeekCrossDayClick = () =>\r\n  suppressWeekCrossDayClickUntil > Date.now()\r\n\r\nconst clearWeekCrossDayDragState = () => {\r\n  weekCrossDayDragState.value = null\r\n  weekCrossDayDropDay.value = ''\r\n}\r\n\r\nconst handleWeekCrossDayDragStart = (\r\n  event: CalendarEvent,\r\n  sourceDate: string,\r\n  dragEvent: DragEvent,\r\n) => {\r\n  if (!canDragWeekCrossDayEvent(event)) {\r\n    dragEvent.preventDefault()\r\n    return\r\n  }\r\n\r\n  const sourceDay = formatCrossDayColumnKey(sourceDate)\r\n  if (!sourceDay) {\r\n    dragEvent.preventDefault()\r\n    return\r\n  }\r\n\r\n  weekCrossDayDragState.value = {\r\n    event: normalizeCalendarEvent(event),\r\n    sourceDay,\r\n  }\r\n  weekCrossDayDropDay.value = sourceDay\r\n\r\n  if (dragEvent.dataTransfer) {\r\n    dragEvent.dataTransfer.effectAllowed = 'move'\r\n    dragEvent.dataTransfer.dropEffect = 'move'\r\n    dragEvent.dataTransfer.setData('text/plain', getEventIdentifier(event))\r\n  }\r\n}\r\n\r\nconst handleWeekCrossDayDragOver = (\r\n  dateValue: string,\r\n  dragEvent: DragEvent,\r\n) => {\r\n  if (!weekCrossDayDragState.value) {\r\n    return\r\n  }\r\n\r\n  const targetDay = formatCrossDayColumnKey(dateValue)\r\n  if (!targetDay) {\r\n    return\r\n  }\r\n\r\n  dragEvent.preventDefault()\r\n  weekCrossDayDropDay.value = targetDay\r\n\r\n  if (dragEvent.dataTransfer) {\r\n    dragEvent.dataTransfer.dropEffect = 'move'\r\n  }\r\n}\r\n\r\nconst moveWeekCrossDayEvent = (\r\n  targetDay: string,\r\n  dragState: WeekCrossDayDragState,\r\n) => {\r\n  const start = toDateValue(dragState.event.start)\r\n  const end = toDateValue(dragState.event.end) || start\r\n  if (!start || !end) {\r\n    clearWeekCrossDayDragState()\r\n    return\r\n  }\r\n\r\n  const sourceDay = dayjs(dragState.sourceDay)\r\n  const nextTargetDay = dayjs(targetDay)\r\n  if (!sourceDay.isValid() || !nextTargetDay.isValid()) {\r\n    clearWeekCrossDayDragState()\r\n    return\r\n  }\r\n\r\n  const diffDays = nextTargetDay.diff(sourceDay, 'day')\r\n  if (diffDays === 0) {\r\n    clearWeekCrossDayDragState()\r\n    return\r\n  }\r\n\r\n  const newStart = dayjs(start).add(diffDays, 'day').toDate()\r\n\r\n  // 禁止拖拽到过去日期\r\n  if (props.disableCreateInPast && newStart.getTime() < Date.now()) {\r\n    clearWeekCrossDayDragState()\r\n    return\r\n  }\r\n\r\n  const normalizedEvent = normalizeCalendarEvent({\r\n    ...dragState.event,\r\n    start: newStart,\r\n    end: dayjs(end).add(diffDays, 'day').toDate(),\r\n  })\r\n  const originalEvent = normalizeCalendarEvent(dragState.event)\r\n  const nextEvents = patchEvent(normalizedEvent, originalEvent)\r\n\r\n  scheduleInteractionCommit(() => {\r\n    commitEvents(nextEvents)\r\n\r\n    emit('event-drop', {\r\n      raw: {\r\n        event: normalizedEvent,\r\n        originalEvent,\r\n        external: false,\r\n      },\r\n      event: normalizedEvent,\r\n      events: normalizeCalendarEvents(nextEvents),\r\n    })\r\n  })\r\n\r\n  suppressWeekCrossDayClickUntil = Date.now() + 250\r\n  clearWeekCrossDayDragState()\r\n}\r\n\r\nconst handleWeekCrossDayDrop = (dateValue: string, dragEvent: DragEvent) => {\r\n  if (!weekCrossDayDragState.value) {\r\n    return\r\n  }\r\n\r\n  dragEvent.preventDefault()\r\n  const targetDay = formatCrossDayColumnKey(dateValue)\r\n  if (!targetDay) {\r\n    clearWeekCrossDayDragState()\r\n    return\r\n  }\r\n\r\n  moveWeekCrossDayEvent(targetDay, weekCrossDayDragState.value)\r\n}\r\n\r\nconst handleWeekCrossDayDragEnd = () => {\r\n  clearWeekCrossDayDragState()\r\n}\r\n\r\nconst resolvedEventDisplayFields = computed(() => {\r\n  if (props.eventDisplayFields.length) {\r\n    return props.eventDisplayFields\r\n  }\r\n\r\n  if (props.eventMetaFields.length) {\r\n    return props.eventMetaFields.slice(0, props.eventMaxMetaCount)\r\n  }\r\n\r\n  return []\r\n})\r\n\r\nconst mergedFieldComponents = computed(() => ({\r\n  ...defaultCalendarFieldComponents,\r\n  ...props.components,\r\n}))\r\n\r\nconst isRowDisplayField = (field: CalendarEventDisplayField) =>\r\n  field.type === 'row'\r\n\r\nconst isComponentDisplayField = (field: CalendarEventDisplayField) =>\r\n  Boolean(field.type && field.type !== 'text' && field.type !== 'row')\r\n\r\nconst resolveFieldComponent = (field: CalendarEventDisplayField) => {\r\n  const type = field.type\r\n  if (!type || type === 'text' || type === 'row') {\r\n    return type\r\n  }\r\n\r\n  return mergedFieldComponents.value[type] || type\r\n}\r\n\r\nconst getFieldProps = (\r\n  event: CalendarEvent,\r\n  field: CalendarEventDisplayField,\r\n) => {\r\n  const fieldProps = {\r\n    ...(field.props || {}),\r\n  } as Record<string, unknown>\r\n\r\n  if (field.key) {\r\n    const value = getEventFieldValue(event, field.key)\r\n\r\n    if (fieldProps.value === undefined) {\r\n      fieldProps.value = value\r\n    }\r\n\r\n    if (fieldProps.modelValue === undefined) {\r\n      fieldProps.modelValue = value\r\n    }\r\n  }\r\n\r\n  if (fieldProps.event === undefined) {\r\n    fieldProps.event = event\r\n  }\r\n\r\n  return fieldProps\r\n}\r\n\r\nconst getRowProps = (field: CalendarEventDisplayField) => ({\r\n  ...(field.props || {}),\r\n})\r\n\r\nconst getRowColProps = (field: CalendarEventDisplayField) => ({\r\n  span: 24,\r\n  ...(field.colProps || {}),\r\n})\r\n\r\nconst editableDisplayFields = computed(() =>\r\n  resolvedEventDisplayFields.value.filter(\r\n    (field) => Boolean(field.key) && Boolean(field.editComponent),\r\n  ),\r\n)\r\n\r\nconst editFormColumns = computed(() => {\r\n  const fixedColumns = [\r\n    {\r\n      key: 'title',\r\n      label: '日程名称',\r\n      type: 'input',\r\n      spanCol: 24,\r\n      placeholder: '请输入日程名称',\r\n      allowClear: true,\r\n    },\r\n    {\r\n      key: 'timeRange',\r\n      label: '时间',\r\n      type: 'date-range',\r\n      spanCol: 24,\r\n      showTime: true,\r\n      allowClear: false,\r\n      valueFormat: 'YYYY-MM-DD HH:mm:ss',\r\n    },\r\n  ]\r\n\r\n  const dynamicColumns = editableDisplayFields.value.map((field) => {\r\n    const editComponent = field.editComponent || {}\r\n\r\n    return {\r\n      key: field.key,\r\n      label: editComponent.label || field.label || field.key,\r\n      type: editComponent.type || 'input',\r\n      spanCol: editComponent.spanCol || 24,\r\n      ...(editComponent.props || {}),\r\n      colOptions: editComponent.colProps,\r\n    }\r\n  })\r\n\r\n  return [...fixedColumns, ...dynamicColumns]\r\n})\r\n\r\n// 展示字段读取器：兼容数组/日期/字符串日期，减少模板层分支判断。\r\nconst getEventFieldValue = (event: CalendarEvent, key?: string) => {\r\n  if (!key || !event) {\r\n    return ''\r\n  }\r\n\r\n  const value = event[key]\r\n\r\n  if (value === undefined || value === null || value === '') {\r\n    return ''\r\n  }\r\n\r\n  if (Array.isArray(value)) {\r\n    return value.map((item) => String(item)).join(' / ')\r\n  }\r\n\r\n  if (value instanceof Date) {\r\n    return formatEventDateTime(value)\r\n  }\r\n\r\n  if (typeof value === 'string') {\r\n    const date = toDateValue(value)\r\n    if (\r\n      date &&\r\n      !Number.isNaN(date.getTime()) &&\r\n      /\\d{4}-\\d{2}-\\d{2}/.test(value)\r\n    ) {\r\n      return formatEventDateTime(date)\r\n    }\r\n  }\r\n\r\n  return String(value)\r\n}\r\n\r\nconst getEventTitle = (event?: CalendarEvent | null) => {\r\n  if (!event) {\r\n    return ''\r\n  }\r\n\r\n  return (\r\n    getEventFieldValue(event, props.eventTitleKey) || String(event.title || '')\r\n  )\r\n}\r\n\r\n/**\r\n * 将 hex 颜色转换为带透明度的 rgba 字符串\r\n * 不支持的格式原样返回（兜底）\r\n */\r\nconst hexToAlphaColor = (color: string, alpha: number): string => {\r\n  if (!color) return color\r\n  let hex = color.trim()\r\n  if (hex.startsWith('#')) {\r\n    hex = hex.slice(1)\r\n    if (hex.length === 3)\r\n      hex = hex\r\n        .split('')\r\n        .map((c) => c + c)\r\n        .join('')\r\n    if (hex.length === 6) {\r\n      const r = parseInt(hex.slice(0, 2), 16)\r\n      const g = parseInt(hex.slice(2, 4), 16)\r\n      const b = parseInt(hex.slice(4, 6), 16)\r\n      if (!Number.isNaN(r) && !Number.isNaN(g) && !Number.isNaN(b)) {\r\n        return `rgba(${r}, ${g}, ${b}, ${alpha})`\r\n      }\r\n    }\r\n  }\r\n  return color\r\n}\r\n\r\n/** 计算日程左边框颜色（borderColor > eventColor > 默认） */\r\nconst getEventBorderLeftColor = (event: CalendarEvent): string | undefined => {\r\n  return event.borderColor || event.eventColor || undefined\r\n}\r\n\r\n/** 计算日程背景色（backgroundColor > eventColor浅色 > 默认） */\r\nconst getEventBgColor = (event: CalendarEvent): string | undefined => {\r\n  if (event.backgroundColor) return event.backgroundColor\r\n  if (event.eventColor) return hexToAlphaColor(event.eventColor, 0.12)\r\n  return undefined\r\n}\r\n\r\n/**\r\n * 月视图事件：计算 CSS 自定义属性内联样式（作用于外层 .vuecal__event 元素）\r\n * 通过 CSS var 覆盖 SCSS 中的默认颜色\r\n */\r\nconst getMonthEventStyle = (event: CalendarEvent): Record<string, string> => {\r\n  const style: Record<string, string> = {}\r\n  const borderColor = getEventBorderLeftColor(event)\r\n  const bgColor = getEventBgColor(event)\r\n  if (borderColor) style['--ll-event-left-color'] = borderColor\r\n  if (bgColor) style['--ll-event-bg-color'] = bgColor\r\n  if (event.color) style['color'] = event.color\r\n  return style\r\n}\r\n\r\n/**\r\n * 跨天行（周/日视图标题区域）的自定义样式\r\n * 仅作用于 start / single 段（有左边框的段）\r\n */\r\nconst getCrossDayRowStyle = (\r\n  event: CalendarEvent,\r\n  segment: 'start' | 'middle' | 'end' | 'single' | 'empty',\r\n): Record<string, string> => {\r\n  const style: Record<string, string> = {}\r\n  const borderColor = getEventBorderLeftColor(event)\r\n  const bgColor = getEventBgColor(event)\r\n  if (bgColor) style['backgroundColor'] = bgColor\r\n  if (borderColor && (segment === 'start' || segment === 'single')) {\r\n    style['borderLeftColor'] = borderColor\r\n  }\r\n  if (event.color) style['color'] = event.color\r\n  return style\r\n}\r\nconst getTimedEventSkinStyle = (\r\n  event: CalendarEvent,\r\n): Record<string, string> => {\r\n  const style: Record<string, string> = {}\r\n  const borderColor = getEventBorderLeftColor(event)\r\n  const bgColor = getEventBgColor(event)\r\n  if (borderColor) style['borderLeftColor'] = borderColor\r\n  if (bgColor) style['backgroundColor'] = bgColor\r\n  return style\r\n}\r\n\r\nconst getMonthCellEventClass = (event: CalendarEvent, cell: any) => {\r\n  const cellDate = toDateValue(cell?.start)\r\n  const eventStart = toDateValue(event.start)\r\n  const eventEnd = toDateValue(event.end) || eventStart\r\n\r\n  if (!cellDate || !eventStart || !eventEnd) {\r\n    return ['ll-calendar__event-multiday-single']\r\n  }\r\n\r\n  const cellDay = dayjs(cellDate).startOf('day')\r\n  const startDay = dayjs(eventStart).startOf('day')\r\n  // 结束时间按开区间处理，避免 00:00 落到下一天导致段位判断偏移。\r\n  const effectiveEnd = new Date(\r\n    Math.max(eventEnd.getTime() - 1, eventStart.getTime()),\r\n  )\r\n  const endDay = dayjs(effectiveEnd).startOf('day')\r\n  const isCrossDay = endDay.isAfter(startDay)\r\n\r\n  if (!isCrossDay) {\r\n    return ['ll-calendar__event-multiday-single']\r\n  }\r\n\r\n  const classes: string[] = []\r\n  const firstColumnWeekday = props.weekStartDay === 1 ? 1 : 0\r\n\r\n  if (cellDay.isSame(startDay)) {\r\n    classes.push('ll-calendar__event-multiday-start')\r\n    return classes\r\n  }\r\n\r\n  if (cellDay.isSame(endDay)) {\r\n    classes.push('ll-calendar__event-multiday-end')\r\n    if (cellDay.day() === firstColumnWeekday) {\r\n      classes.push('ll-calendar__event-first-column-title')\r\n    }\r\n    return classes\r\n  }\r\n\r\n  classes.push('ll-calendar__event-multiday-middle')\r\n  if (cellDay.day() === firstColumnWeekday) {\r\n    classes.push('ll-calendar__event-first-column-title')\r\n  }\r\n  return classes\r\n}\r\n\r\nconst getEventTimeLabel = (event: CalendarEvent) => {\r\n  const startDate = toDateValue(event.start)\r\n  if (!startDate || Number.isNaN(startDate.getTime())) {\r\n    return ''\r\n  }\r\n\r\n  const endDate = toDateValue(event.end)\r\n  const startLabel = formatEventTime(startDate)\r\n  if (!endDate || Number.isNaN(endDate.getTime())) {\r\n    return startLabel\r\n  }\r\n\r\n  return `${startLabel} - ${formatEventTime(endDate)}`\r\n}\r\n\r\nconst canCreateAtRange = (\r\n  startValue: string | Date | undefined,\r\n  endValue?: string | Date,\r\n) => {\r\n  if (!props.disableCreateInPast) {\r\n    return true\r\n  }\r\n\r\n  const start = toDateValue(startValue)\r\n  const end = toDateValue(endValue)\r\n  const nowTime = Date.now()\r\n\r\n  if (start && !Number.isNaN(start.getTime()) && start.getTime() < nowTime) {\r\n    return false\r\n  }\r\n\r\n  if (end && !Number.isNaN(end.getTime()) && end.getTime() < nowTime) {\r\n    return false\r\n  }\r\n\r\n  return true\r\n}\r\n\r\n// 编辑面板与事件增删改逻辑拆分到 composable。\r\n\r\n// 提交事件时只在“真实变化”时回写，避免无意义 update:modelValue 触发链路。\r\nconst getCommittedEvents = () => normalizeCalendarEvents(internalEvents.value)\r\n\r\nconst commitEvents = (events: CalendarEvent[]) => {\r\n  const normalizedEvents = normalizeCalendarEvents(events)\r\n  const nextInternalEvents = toCalendarEvents(normalizedEvents)\r\n  if (!isSameEvents(internalEvents.value, nextInternalEvents)) {\r\n    internalEvents.value = nextInternalEvents\r\n  }\r\n\r\n  // 启用日期组时，回写前先把派生事件折叠回原始记录结构，\r\n  // 保证 modelValue 始终维持「一条记录一行」的存储形态。\r\n  const outputEvents = isDateGroupMode.value\r\n    ? foldDateGroupEvents(\r\n        normalizedEvents,\r\n        baseRecords.value,\r\n        enabledDateGroups.value,\r\n      )\r\n    : normalizedEvents\r\n\r\n  if (isDateGroupMode.value) {\r\n    baseRecords.value = outputEvents.map((record) => ({ ...record }))\r\n  }\r\n\r\n  if (isSameEvents(props.modelValue, outputEvents)) {\r\n    return\r\n  }\r\n\r\n  // 标记本次对外 emit 的内容，供 modelValue watch 识别并跳过自身回写\r\n  lastCommittedOutput = outputEvents\r\n  emit('update:modelValue', outputEvents)\r\n  emit('change', outputEvents)\r\n}\r\n\r\n// 将拖拽/缩放后的单条事件补丁写回 internalEvents。\r\nconst patchEvent = (\r\n  nextEvent: CalendarEvent,\r\n  previousEvent?: CalendarEvent,\r\n) => {\r\n  const normalizedNextEvent = toCalendarEvent(nextEvent)\r\n  const identifiers = new Set(\r\n    [\r\n      getEventIdentifier(previousEvent),\r\n      getEventIdentifier(normalizedNextEvent),\r\n    ].filter(Boolean),\r\n  )\r\n\r\n  let replaced = false\r\n\r\n  const nextEvents = internalEvents.value.map((event) => {\r\n    if (identifiers.has(getEventIdentifier(event))) {\r\n      replaced = true\r\n      return {\r\n        ...event,\r\n        ...normalizedNextEvent,\r\n      }\r\n    }\r\n\r\n    return event\r\n  })\r\n\r\n  return replaced ? nextEvents : [...nextEvents, normalizedNextEvent]\r\n}\r\n\r\nconst {\r\n  editPanelRef,\r\n  editPopoverOpen,\r\n  editPresentationMode,\r\n  editPopoverPlacement,\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  closeContextMenu,\r\n  openContextMenu,\r\n  openEditPopover,\r\n  createDraftEventAndOpenEditor,\r\n  openCreateEventDrawer,\r\n  handleSwitchPresentation,\r\n  handleEventDragCreate,\r\n  deleteEvent,\r\n  copyEvent,\r\n  handleDeleteEditEvent,\r\n  handleMaskClose,\r\n  handleConfirmEdit,\r\n  handleConfirmAndAdd,\r\n  newDraftEventIdRef,\r\n} = useCalendarEditor({\r\n  props,\r\n  emit: emit as any,\r\n  defaultEventTitle: DEFAULT_EVENT_TITLE,\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})\r\n\r\nconst bindEditPanelRef = (instance: unknown) => {\r\n  editPanelRef.value = instance as typeof editPanelRef.value\r\n}\r\n\r\nconst bindContextMenuPanelRef = (instance: unknown) => {\r\n  contextMenuPanelRef.value = instance as typeof contextMenuPanelRef.value\r\n}\r\n\r\nconst openMonthEventListModal = (\r\n  cell: { start?: unknown; events?: unknown },\r\n  nativeEvent: MouseEvent,\r\n) => {\r\n  selectedEventListDate.value =\r\n    toDateValue(cell?.start as string | Date | undefined) || new Date()\r\n  selectedEventListEvents.value = getSortedMonthCellEvents(cell?.events)\r\n  eventListPanelStyle.value = calcEventListPanelPosition(nativeEvent)\r\n  eventListModalOpen.value = true\r\n}\r\n\r\nconst openHeaderMoreEventsModal = (\r\n  dateValue: string | Date,\r\n  events: CalendarEvent[],\r\n  nativeEvent: MouseEvent,\r\n) => {\r\n  selectedEventListDate.value =\r\n    toDateValue(dateValue as string | Date | undefined) || new Date()\r\n  selectedEventListEvents.value = [...events]\r\n  eventListPanelStyle.value = calcEventListPanelPosition(nativeEvent)\r\n  eventListModalOpen.value = true\r\n}\r\n\r\nconst handleEventListItemClick = (payload: {\r\n  event: CalendarEvent\r\n  nativeEvent: MouseEvent\r\n}) => {\r\n  handleNativeEventClick({\r\n    event: payload.event,\r\n    e: payload.nativeEvent,\r\n  })\r\n}\r\n\r\nconst handleEventListItemContextmenu = (payload: {\r\n  event: CalendarEvent\r\n  nativeEvent: MouseEvent\r\n}) => {\r\n  handleEventContextmenu({\r\n    event: payload.event,\r\n    nativeEvent: payload.nativeEvent,\r\n  })\r\n}\r\n\r\nconst isGoingToToday = ref(false)\r\nconst suppressViewDateSync = ref(false)\r\n\r\n// 定位到当前时间（仅在 day/week 视图有效）\r\nconst scrollToNow = async () => {\r\n  await nextTick()\r\n  const calendar = calendarRef.value\r\n  if (!calendar) {\r\n    return\r\n  }\r\n\r\n  const now = new Date()\r\n  const minutesNow =\r\n    now.getHours() * 60 + now.getMinutes() + now.getSeconds() / 60\r\n  if (minutesNow <= timeFromMinutes.value + 1) {\r\n    const hostEl = calendarContainerRef.value\r\n    const scrollableEl = hostEl?.querySelector(getViewScrollableSelector())\r\n\r\n    if (scrollableEl instanceof HTMLElement) {\r\n      scrollableEl.scrollTop = 0\r\n      return\r\n    }\r\n  }\r\n\r\n  // VueCal 提供 scrollToNow 方法来定位到当前时间\r\n  calendar.scrollToNow?.()\r\n}\r\n\r\nconst handleGoToToday = (viewNavigator: any) => {\r\n  const today = new Date()\r\n  internalCurrentDate.value = today\r\n  selectedDate.value = today\r\n  isGoingToToday.value = true\r\n  viewNavigator?.goToToday?.()\r\n}\r\n\r\nconst handleHeaderDateChange = (value: Dayjs | string | null) => {\r\n  if (!value) {\r\n    return\r\n  }\r\n\r\n  const nextDate = typeof value === 'string' ? new Date(value) : value.toDate()\r\n\r\n  if (Number.isNaN(nextDate.getTime())) {\r\n    return\r\n  }\r\n\r\n  internalCurrentDate.value = nextDate\r\n  selectedDate.value = nextDate\r\n}\r\n\r\nconst getViewAnchorDate = (view: any) => {\r\n  const candidate =\r\n    view?.date ?? view?.viewDate ?? view?.start ?? view?.extendedStart\r\n  const parsedDate = toDateValue(candidate)\r\n\r\n  return parsedDate && !Number.isNaN(parsedDate.getTime())\r\n    ? parsedDate\r\n    : new Date()\r\n}\r\n\r\n// 点击空白单元格：对外抛出 date-click，让业务侧决定是否创建事件。\r\nconst handleCellClick = (raw: any) => {\r\n  if (props.readonly) {\r\n    return\r\n  }\r\n\r\n  const date = raw?.cell?.start ?? raw?.cursor?.date ?? new Date()\r\n\r\n  // 记录用户明确点击的日期，供视图模式切换时用作锚点\r\n  const clickedDate = toDateValue(date)\r\n  if (clickedDate && !Number.isNaN(clickedDate.getTime())) {\r\n    selectedDate.value = clickedDate\r\n  }\r\n\r\n  emit('date-click', {\r\n    raw: { date },\r\n    events: getCommittedEvents(),\r\n  })\r\n\r\n  // 月视图单击可快速创建事件；周/日视图仍保持原交互（拖拽创建）。\r\n  if (currentViewId.value !== 'month' || !canQuickCreate.value) {\r\n    return\r\n  }\r\n\r\n  tryCreateFromMonthCellDate(\r\n    toDateValue(date) || new Date(),\r\n    raw?.cell?.schedule,\r\n  )\r\n}\r\n\r\nconst tryCreateFromMonthCellDate = (\r\n  baseDate: Date,\r\n  schedule?: string | number,\r\n) => {\r\n  // 月视图：默认从当日 00:00 到次日 00:00，视觉上恰好占一格\r\n  const start = new Date(baseDate)\r\n  start.setHours(0, 0, 0, 0)\r\n  const end = new Date(start)\r\n  end.setDate(end.getDate() + 1)\r\n\r\n  // 月视图仅检查日期部分是否早于当日（不考虑时间）\r\n  if (props.disableCreateInPast) {\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  }\r\n\r\n  const createdEvent: CalendarEvent = {\r\n    start,\r\n    end,\r\n    split: schedule,\r\n  }\r\n\r\n  createDraftEventAndOpenEditor(createdEvent, schedule)\r\n}\r\n\r\nconst isMonthCellInPast = (cellStart: unknown) => {\r\n  if (!props.disableCreateInPast) return false\r\n  const cellDate = toDateValue(cellStart as string | Date | undefined)\r\n  if (!cellDate) return false\r\n  const today = new Date()\r\n  today.setHours(0, 0, 0, 0)\r\n  const cellDay = new Date(cellDate)\r\n  cellDay.setHours(0, 0, 0, 0)\r\n  return cellDay.getTime() < today.getTime()\r\n}\r\n\r\nconst handleWeekHeadingCreateClick = (date: Date, mouseEvent: MouseEvent) => {\r\n  mouseEvent.preventDefault()\r\n  mouseEvent.stopPropagation()\r\n\r\n  if (props.readonly || !canQuickCreate.value) {\r\n    return\r\n  }\r\n\r\n  tryCreateFromMonthCellDate(date)\r\n}\r\n\r\nconst handleMonthCellCreateClick = (\r\n  cell: { start?: unknown; schedule?: string | number },\r\n  mouseEvent: Event,\r\n) => {\r\n  if (mouseEvent instanceof MouseEvent) {\r\n    mouseEvent.preventDefault()\r\n    mouseEvent.stopPropagation()\r\n  }\r\n\r\n  if (props.readonly || !canQuickCreate.value) {\r\n    return\r\n  }\r\n\r\n  const nextDate =\r\n    toDateValue(cell?.start as string | Date | undefined) || new Date()\r\n  tryCreateFromMonthCellDate(nextDate, cell?.schedule)\r\n}\r\n\r\nconst handleContainerClickCapture = (event: MouseEvent) => {\r\n  if (\r\n    props.clickOutOfMonthJump ||\r\n    currentViewId.value !== 'month' ||\r\n    props.readonly\r\n  ) {\r\n    return\r\n  }\r\n\r\n  const target = event.target as HTMLElement | null\r\n  if (target?.closest('.ll-calendar__month-cell-add-btn')) {\r\n    return\r\n  }\r\n  const outOfRangeCell = target?.closest('.vuecal__cell--out-of-range')\r\n  if (!outOfRangeCell) {\r\n    return\r\n  }\r\n\r\n  const cellEl = outOfRangeCell as HTMLElement\r\n  const startTimestamp = Number(cellEl.dataset.start)\r\n  const clickedDate = Number.isFinite(startTimestamp)\r\n    ? new Date(startTimestamp)\r\n    : new Date()\r\n  const scheduleValue = cellEl.dataset.schedule\r\n\r\n  event.preventDefault()\r\n  event.stopPropagation()\r\n\r\n  preventOutOfMonthJumpPending.value = false\r\n  monthAnchorBeforeOutOfMonthClick.value = null\r\n\r\n  emit('date-click', {\r\n    raw: { date: clickedDate },\r\n    events: getCommittedEvents(),\r\n  })\r\n\r\n  if (!canQuickCreate.value) {\r\n    return\r\n  }\r\n\r\n  tryCreateFromMonthCellDate(clickedDate, scheduleValue)\r\n}\r\n\r\nconst handleContainerPointerDown = (event: Event) => {\r\n  // 当 disableCreateInPast 开启时，阻止在周/日视图过去时间区域发起拖拽创建。\r\n  // 通过在 capture 阶段拦截 mousedown 来阻止 vue-cal 内部的拖拽追踪逻辑启动，\r\n  // 从而彻底消除拖拽视觉反馈（而非等 @event-created 后再删除事件）。\r\n  // 仅处理 MouseEvent；touch 场景保留现有的 handleEventDragCreate 兜底逻辑。\r\n  if (\r\n    event instanceof MouseEvent &&\r\n    props.disableCreateInPast &&\r\n    canSelectCreate.value &&\r\n    currentViewId.value !== 'month'\r\n  ) {\r\n    const target = event.target as HTMLElement | null\r\n    // 点击已有事件时不阻止（允许打开编辑过去事件）\r\n    if (!target?.closest('.vuecal__event')) {\r\n      const cellEl = target?.closest<HTMLElement>('.vuecal__cell')\r\n      if (cellEl) {\r\n        const cellStartMs = parseInt(\r\n          cellEl.getAttribute('data-start') ?? '',\r\n          10,\r\n        )\r\n        if (!Number.isNaN(cellStartMs)) {\r\n          const hostEl = calendarContainerRef.value\r\n          const bodyEl = hostEl?.querySelector<HTMLElement>('.vuecal__body')\r\n          if (bodyEl) {\r\n            const bodyRect = bodyEl.getBoundingClientRect()\r\n            const relativeToGridTop = event.clientY - bodyRect.top\r\n            if (relativeToGridTop >= 0) {\r\n              // 与 now-line 公式相同：像素位置 → 从午夜起算的分钟数\r\n              const clickedMinutes =\r\n                timeFromMinutes.value +\r\n                (relativeToGridTop / props.timeCellHeight) *\r\n                  slotStepMinutes.value\r\n              // cellStartMs 是该天午夜的 epoch ms\r\n              const clickedMs = cellStartMs + clickedMinutes * 60 * 1000\r\n              if (clickedMs < Date.now()) {\r\n                event.stopPropagation()\r\n                return\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  if (props.clickOutOfMonthJump || currentViewId.value !== 'month') {\r\n    preventOutOfMonthJumpPending.value = false\r\n    monthAnchorBeforeOutOfMonthClick.value = null\r\n    return\r\n  }\r\n\r\n  const target = event.target as HTMLElement | null\r\n  if (target?.closest('.ll-calendar__month-cell-add-btn')) {\r\n    preventOutOfMonthJumpPending.value = false\r\n    monthAnchorBeforeOutOfMonthClick.value = null\r\n    return\r\n  }\r\n  const outOfRangeCell = target?.closest('.vuecal__cell--out-of-range')\r\n\r\n  if (!outOfRangeCell) {\r\n    preventOutOfMonthJumpPending.value = false\r\n    monthAnchorBeforeOutOfMonthClick.value = null\r\n    return\r\n  }\r\n\r\n  preventOutOfMonthJumpPending.value = true\r\n  monthAnchorBeforeOutOfMonthClick.value = new Date(internalCurrentDate.value)\r\n}\r\n\r\n// 事件点击与右键上下文菜单分离，便于业务层做不同交互。\r\nconst handleNativeEventClick = (payload: {\r\n  event: CalendarEvent\r\n  e?: Event\r\n}) => {\r\n  if (props.readonly) {\r\n    return\r\n  }\r\n\r\n  const nativeMouseEvent = payload.e as MouseEvent | undefined\r\n  if (nativeMouseEvent?.button === 2) {\r\n    return\r\n  }\r\n\r\n  const normalizedEvent = normalizeCalendarEvent(payload.event)\r\n\r\n  // 记录事件所在日期，供视图模式切换时用作锚点\r\n  const eventDate = toDateValue(normalizedEvent.start)\r\n  if (eventDate && !Number.isNaN(eventDate.getTime())) {\r\n    selectedDate.value = eventDate\r\n  }\r\n\r\n  const rawClick: CalendarEventClickRaw = {\r\n    event: normalizedEvent,\r\n    nativeEvent: payload.e,\r\n  }\r\n\r\n  emit('event-click', {\r\n    raw: rawClick,\r\n    event: normalizedEvent,\r\n    events: getCommittedEvents(),\r\n  })\r\n\r\n  openEditPopover(payload.event, '', nativeMouseEvent)\r\n}\r\n\r\nconst handleEventContextmenu = (payload: {\r\n  event: CalendarEvent\r\n  e?: Event\r\n  nativeEvent?: MouseEvent\r\n}) => {\r\n  if (props.readonly) {\r\n    return\r\n  }\r\n\r\n  const nativeEvent =\r\n    payload.nativeEvent ||\r\n    ((payload.e as MouseEvent | undefined) instanceof MouseEvent\r\n      ? (payload.e as MouseEvent)\r\n      : undefined)\r\n\r\n  if (!nativeEvent) {\r\n    return\r\n  }\r\n\r\n  nativeEvent.preventDefault()\r\n  nativeEvent.stopPropagation()\r\n\r\n  const normalizedEvent = normalizeCalendarEvent(payload.event)\r\n  emit('event-contextmenu', {\r\n    raw: {\r\n      event: normalizedEvent,\r\n      nativeEvent,\r\n    },\r\n    event: normalizedEvent,\r\n    events: getCommittedEvents(),\r\n  })\r\n\r\n  openContextMenu(payload.event, nativeEvent)\r\n}\r\n\r\nconst handleContextMenuEdit = () => {\r\n  if (props.readonly) {\r\n    return\r\n  }\r\n\r\n  const targetEvent = contextMenuEvent.value\r\n  closeContextMenu()\r\n  if (!targetEvent) {\r\n    return\r\n  }\r\n\r\n  const contextLeft = Number.parseFloat(contextMenuStyle.value.left || '')\r\n  const contextTop = Number.parseFloat(contextMenuStyle.value.top || '')\r\n  const anchorPoint =\r\n    Number.isFinite(contextLeft) && Number.isFinite(contextTop)\r\n      ? { x: contextLeft, y: contextTop }\r\n      : undefined\r\n\r\n  openEditPopover(targetEvent, '', anchorPoint)\r\n}\r\n\r\nconst handleContextMenuCopy = () => {\r\n  if (props.readonly) {\r\n    return\r\n  }\r\n\r\n  const targetEvent = contextMenuEvent.value\r\n  closeContextMenu()\r\n  if (!targetEvent) {\r\n    return\r\n  }\r\n\r\n  copyEvent(targetEvent)\r\n}\r\n\r\nconst handleContextMenuDelete = () => {\r\n  if (props.readonly) {\r\n    return\r\n  }\r\n\r\n  const targetEvent = contextMenuEvent.value\r\n  closeContextMenu()\r\n  if (!targetEvent) {\r\n    return\r\n  }\r\n\r\n  deleteEvent(targetEvent)\r\n}\r\n\r\nconst scheduleInteractionCommit = (task: () => void) => {\r\n  if (\r\n    typeof window === 'undefined' ||\r\n    typeof window.requestAnimationFrame !== 'function'\r\n  ) {\r\n    task()\r\n    return\r\n  }\r\n\r\n  // 等待 vue-cal 在当前交互帧内完成内部状态清理，再回写外部 events。\r\n  window.requestAnimationFrame(() => {\r\n    window.requestAnimationFrame(() => {\r\n      task()\r\n    })\r\n  })\r\n}\r\n\r\n// ── 月视图自定义拖拽 ──────────────────────────────────────────────────────────\r\n// 月视图使用自定义 #cell 插槽渲染日程，无法依赖 vue-cal 原生拖拽，\r\n// 通过 HTML5 DragEvent 自行实现日程在日期格之间的移动。\r\n\r\nconst monthDraggingEvent = ref<CalendarEvent | null>(null)\r\nconst monthDragOverCellDate = ref<Date | null>(null)\r\n\r\nconst canDragMonthEvent = computed(\r\n  () => !props.readonly && currentEditableEvent.value.drag !== false,\r\n)\r\n\r\nconst isSameDayCell = (a: Date, b: Date) => dayjs(a).isSame(dayjs(b), 'day')\r\n\r\nconst handleMonthEventDragStart = (event: CalendarEvent, e: DragEvent) => {\r\n  monthDraggingEvent.value = event\r\n  if (e.dataTransfer) {\r\n    e.dataTransfer.effectAllowed = 'move'\r\n    e.dataTransfer.setData('text/plain', getEventIdentifier(event))\r\n  }\r\n}\r\n\r\nconst handleMonthEventDragEnd = () => {\r\n  monthDraggingEvent.value = null\r\n  monthDragOverCellDate.value = null\r\n}\r\n\r\n// handleMonthCellDragEnter：拦截冒泡（阻止 vue-cal 的 2 秒视图切换 timer），\r\n// 并更新悬停高亮格。\r\nconst handleMonthCellDragEnter = (cellDate: Date, e: DragEvent) => {\r\n  if (!monthDraggingEvent.value) return\r\n  // 阻止冒泡到 vue-cal 的 cellDragEnter（内含 2s 切换视图 timer）\r\n  e.stopPropagation()\r\n  if (e.dataTransfer) {\r\n    e.dataTransfer.dropEffect = 'move'\r\n  }\r\n  monthDragOverCellDate.value = cellDate\r\n}\r\n\r\nconst handleMonthCellDragOver = (cellDate: Date, e: DragEvent) => {\r\n  if (!monthDraggingEvent.value) return\r\n  // preventDefault 告知浏览器允许 drop；stopPropagation 阻止 vue-cal 的 cellDragOver\r\n  e.preventDefault()\r\n  e.stopPropagation()\r\n  if (e.dataTransfer) {\r\n    e.dataTransfer.dropEffect = 'move'\r\n  }\r\n  if (\r\n    !monthDragOverCellDate.value ||\r\n    !isSameDayCell(monthDragOverCellDate.value, cellDate)\r\n  ) {\r\n    monthDragOverCellDate.value = cellDate\r\n  }\r\n}\r\n\r\nconst handleMonthCellDragLeave = (cellDate: Date, e: DragEvent) => {\r\n  if (!monthDraggingEvent.value) return\r\n  e.stopPropagation()\r\n  // 仅当鼠标离开包裹层（不是进入子元素）时才清除高亮\r\n  const wrapper = e.currentTarget as Element | null\r\n  const relatedTarget = e.relatedTarget as Node | null\r\n  if (wrapper && wrapper.contains(relatedTarget)) return\r\n  if (\r\n    monthDragOverCellDate.value &&\r\n    isSameDayCell(monthDragOverCellDate.value, cellDate)\r\n  ) {\r\n    monthDragOverCellDate.value = null\r\n  }\r\n}\r\n\r\nconst handleMonthCellDrop = (cellDate: Date, e: DragEvent) => {\r\n  // 不是我们自己发起的月视图拖拽，让事件继续冒泡给 vue-cal 处理（外部拖拽等）\r\n  if (!monthDraggingEvent.value) return\r\n  // 阻止冒泡到 vue-cal 的 cellDragDrop（会把自定义拖拽误判为外部事件新建日程）\r\n  e.preventDefault()\r\n  e.stopPropagation()\r\n\r\n  const draggedEvent = monthDraggingEvent.value\r\n  monthDraggingEvent.value = null\r\n  monthDragOverCellDate.value = null\r\n\r\n  if (props.readonly) return\r\n\r\n  // 拖到同一天无需处理\r\n  if (isSameDayCell(dayjs(draggedEvent.start).toDate(), cellDate)) return\r\n\r\n  const originalEvent = { ...draggedEvent }\r\n  const startDayjs = dayjs(draggedEvent.start)\r\n  const endDayjs = draggedEvent.end\r\n    ? dayjs(draggedEvent.end)\r\n    : startDayjs.add(1, 'hour')\r\n  const durationMs = endDayjs.diff(startDayjs)\r\n\r\n  const targetDay = dayjs(cellDate).startOf('day')\r\n\r\n  // 禁止拖拽到过去日期\r\n  if (isMonthCellInPast(targetDay.toDate())) return\r\n\r\n  const newStart = targetDay\r\n    .hour(startDayjs.hour())\r\n    .minute(startDayjs.minute())\r\n    .second(startDayjs.second())\r\n    .millisecond(0)\r\n  const newEnd = newStart.add(durationMs, 'millisecond')\r\n\r\n  const updatedEvent: CalendarEvent = {\r\n    ...draggedEvent,\r\n    start: newStart.toDate(),\r\n    end: newEnd.toDate(),\r\n  }\r\n\r\n  const normalizedEvent = normalizeCalendarEvent(updatedEvent)\r\n  const nextEvents = patchEvent(normalizedEvent, originalEvent)\r\n\r\n  // 月视图不经过 vue-cal 内部拖拽流程，无需等待帧清理，直接同步提交\r\n  // 避免双 RAF 延迟导致事件短暂闪回原位。\r\n  commitEvents(nextEvents)\r\n\r\n  emit('event-drop', {\r\n    raw: {\r\n      event: normalizedEvent,\r\n      originalEvent: normalizeCalendarEvent(originalEvent),\r\n      external: false,\r\n    },\r\n    event: normalizedEvent,\r\n    events: normalizeCalendarEvents(nextEvents),\r\n  })\r\n}\r\n\r\nconst handleEventDrop = (raw: {\r\n  event: CalendarEvent\r\n  originalEvent?: CalendarEvent\r\n  external?: boolean\r\n}) => {\r\n  if (props.readonly) {\r\n    return\r\n  }\r\n\r\n  const normalizedEvent = normalizeCalendarEvent(raw.event)\r\n\r\n  // 禁止拖拽到过去时间：强制回滚到原始位置\r\n  if (!canCreateAtRange(normalizedEvent.start, normalizedEvent.end)) {\r\n    scheduleInteractionCommit(() => {\r\n      internalEvents.value = [...internalEvents.value]\r\n    })\r\n    return\r\n  }\r\n\r\n  const nextEvents = patchEvent(normalizedEvent, raw.originalEvent)\r\n  scheduleInteractionCommit(() => {\r\n    commitEvents(nextEvents)\r\n\r\n    emit('event-drop', {\r\n      raw: {\r\n        event: normalizedEvent,\r\n        originalEvent: raw.originalEvent\r\n          ? normalizeCalendarEvent(raw.originalEvent)\r\n          : undefined,\r\n        external: raw.external,\r\n      },\r\n      event: normalizedEvent,\r\n      events: normalizeCalendarEvents(nextEvents),\r\n    })\r\n  })\r\n}\r\n\r\n// 调整时长与拖拽移动都走同一套 patch + commit 流程，保持回写行为一致。\r\nconst handleEventDurationChange = (raw: {\r\n  event: CalendarEvent\r\n  original?: CalendarEvent\r\n}) => {\r\n  if (props.readonly) {\r\n    return\r\n  }\r\n\r\n  const normalizedEvent = normalizeCalendarEvent(raw.event)\r\n\r\n  // 禁止调整到过去时间：强制回滚到原始位置\r\n  if (!canCreateAtRange(normalizedEvent.start, normalizedEvent.end)) {\r\n    scheduleInteractionCommit(() => {\r\n      internalEvents.value = [...internalEvents.value]\r\n    })\r\n    return\r\n  }\r\n\r\n  const nextEvents = patchEvent(normalizedEvent, raw.original)\r\n  scheduleInteractionCommit(() => {\r\n    commitEvents(nextEvents)\r\n\r\n    emit('event-resize', {\r\n      raw: {\r\n        event: normalizedEvent,\r\n        originalEvent: raw.original\r\n          ? normalizeCalendarEvent(raw.original)\r\n          : undefined,\r\n      },\r\n      event: normalizedEvent,\r\n      events: normalizeCalendarEvents(nextEvents),\r\n    })\r\n  })\r\n}\r\n\r\n// vue-cal 的 view-change/ready 都统一转换成 dates-change，确保对外事件模型一致。\r\nconst emitDatesChange = (raw: CalendarDatesChangeRaw) => {\r\n  currentViewRange.value = {\r\n    start: toDateValue(raw.startDate) || new Date(),\r\n    end: toDateValue(raw.endDate) || new Date(),\r\n  }\r\n  currentViewId.value = raw.view\r\n  renderedViewId.value = raw.view\r\n  emit('update:view', raw.view)\r\n  emit('dates-change', {\r\n    raw,\r\n    events: normalizeCalendarEvents(raw.events),\r\n  })\r\n}\r\n\r\nconst handleViewChange = async (view: any) => {\r\n  const nextViewId = (view?.id ?? currentViewId.value) as CalendarView\r\n\r\n  if (\r\n    nextViewId === 'month' &&\r\n    !props.clickOutOfMonthJump &&\r\n    preventOutOfMonthJumpPending.value\r\n  ) {\r\n    const anchor = monthAnchorBeforeOutOfMonthClick.value\r\n    preventOutOfMonthJumpPending.value = false\r\n    monthAnchorBeforeOutOfMonthClick.value = null\r\n\r\n    if (anchor && !Number.isNaN(anchor.getTime())) {\r\n      internalCurrentDate.value = new Date(anchor)\r\n      return\r\n    }\r\n  }\r\n\r\n  preventOutOfMonthJumpPending.value = false\r\n  monthAnchorBeforeOutOfMonthClick.value = null\r\n\r\n  const isSwitchingViewMode = nextViewId !== renderedViewId.value\r\n  const explicitViewDate = toDateValue(view?.date ?? view?.viewDate)\r\n\r\n  if (isGoingToToday.value) {\r\n    isGoingToToday.value = false\r\n    // goToToday 触发的 view-change 不覆盖已设置好的今日日期\r\n  } else if (isSwitchingViewMode) {\r\n    // 切换视图模式时，优先以用户最后选中的日期为锚点。\r\n    // selectedDate 会在单元格点击、事件点击、日期选择器及同视图翻页时更新，\r\n    // 保证 月→周/日、周→日 等任意方向切换都能\"定位到上次选中的位置\"。\r\n    headerEventsExpanded.value = false\r\n    const anchorForSwitch = selectedDate.value || internalCurrentDate.value\r\n    internalCurrentDate.value = anchorForSwitch\r\n    suppressViewDateSync.value = true\r\n    requestAnimationFrame(() => {\r\n      suppressViewDateSync.value = false\r\n    })\r\n  } else if (suppressViewDateSync.value) {\r\n    // 忽略视图切换后紧跟的内部同步事件，防止日期连续回退。\r\n  } else if (explicitViewDate && !Number.isNaN(explicitViewDate.getTime())) {\r\n    // 优先使用 vue-cal 提供的显式焦点日期。\r\n    internalCurrentDate.value = explicitViewDate\r\n    selectedDate.value = explicitViewDate\r\n  } else {\r\n    // 同一视图内翻页时，允许使用区间锚点更新当前日期。\r\n    const anchorDate = getViewAnchorDate(view)\r\n    internalCurrentDate.value = anchorDate\r\n    selectedDate.value = anchorDate\r\n  }\r\n  emitDatesChange(mapViewToRaw(view))\r\n\r\n  // 切换到 day/week 视图时，如果当前日期是今天，自动定位到当前时间\r\n  if (\r\n    (nextViewId === 'day' || nextViewId === 'week') &&\r\n    isToday(internalCurrentDate.value)\r\n  ) {\r\n    await scrollToNow()\r\n  }\r\n\r\n  scheduleTimeCellWidthSync()\r\n  scheduleWeekHeadingsHeightSync()\r\n  scheduleTransientScrollbarListenerSync()\r\n  syncMonthCellHeight()\r\n\r\n  // 视图切换后再更新时间线，给 DOM 更多时间完全就绪\r\n  if (nextViewId === 'day' || nextViewId === 'week') {\r\n    await new Promise((resolve) => setTimeout(resolve, 300))\r\n    customNowLineVisible.value = false\r\n    if (customNowLineScrollableEl) {\r\n      customNowLineScrollableEl.removeEventListener(\r\n        'scroll',\r\n        updateCustomNowLinePosition,\r\n      )\r\n      customNowLineScrollableEl = null\r\n    }\r\n    scheduleCustomNowLinePositionSync(true)\r\n  }\r\n}\r\n\r\nconst handleReady = ({ view }: { config: any; view: any }) => {\r\n  const anchorDate = getViewAnchorDate(view)\r\n  internalCurrentDate.value = anchorDate\r\n  // 初始时若外部传入了 currentDate，selectedDate 已在声明时初始化；\r\n  // 否则以 VueCal 提供的锚点（通常为今天）作为默认选中日期。\r\n  if (!selectedDate.value) {\r\n    selectedDate.value = anchorDate\r\n  }\r\n  emitDatesChange(mapViewToRaw(view))\r\n\r\n  // 初始加载时，如果视图是 day/week 且当前日期是今天，自动定位到当前时间\r\n  const viewId = (view?.id ?? props.view) as CalendarView\r\n  if (\r\n    (viewId === 'day' || viewId === 'week') &&\r\n    isToday(internalCurrentDate.value)\r\n  ) {\r\n    scrollToNow()\r\n  }\r\n\r\n  scheduleTimeCellWidthSync()\r\n  scheduleWeekHeadingsHeightSync()\r\n  scheduleCustomNowLinePositionSync()\r\n  scheduleTransientScrollbarListenerSync()\r\n  syncMonthCellHeight()\r\n}\r\n\r\n// 用于 addEventListener/removeEventListener 的包装函数\r\nconst handleResizeForCustomNowLine = () => scheduleCustomNowLinePositionSync()\r\n\r\nonMounted(() => {\r\n  window.addEventListener('resize', scheduleTimeCellWidthSync)\r\n  window.addEventListener('resize', scheduleWeekHeadingsHeightSync)\r\n  window.addEventListener('resize', handleResizeForCustomNowLine)\r\n  window.addEventListener('resize', scheduleTransientScrollbarListenerSync)\r\n  scheduleTimeCellWidthSync()\r\n  scheduleWeekHeadingsHeightSync()\r\n\r\n  // VueCal 的 watch-real-time 已自动更新 now 状态（对齐整分钟），此处只做初始滚动定位\r\n  scrollToNow()\r\n  startCustomNowLineTicker()\r\n  scheduleTransientScrollbarListenerSync()\r\n  syncMonthCellHeight()\r\n})\r\n\r\nwatch(\r\n  () => props.view,\r\n  (value) => {\r\n    // 仅在 watch 中更新 currentViewId，其他逻辑由 handleViewChange 处理\r\n    currentViewId.value = value\r\n    headerEventsExpanded.value = false\r\n    scheduleWeekHeadingsHeightSync()\r\n    startCustomNowLineTicker()\r\n  },\r\n)\r\n\r\nwatch(\r\n  () => weekCrossDayLayout.value.totalRows,\r\n  () => {\r\n    scheduleTransientScrollbarListenerSync()\r\n  },\r\n)\r\n\r\nwatch(\r\n  () => props.currentDate,\r\n  (value) => {\r\n    const nextDate = toDateValue(value)\r\n\r\n    if (!nextDate || Number.isNaN(nextDate.getTime())) {\r\n      return\r\n    }\r\n\r\n    internalCurrentDate.value = nextDate\r\n    selectedDate.value = nextDate\r\n  },\r\n)\r\n\r\nwatch(\r\n  () => props.modelValue,\r\n  (value) => {\r\n    // 跳过组件自身 commitEvents 刚刚 emit 出去、又被父级 v-model 同步回写的内容：\r\n    // 此时 internalEvents 已是最新，无需再次按日期组展开（fold/expand 往返不保证\r\n    // 逐字节一致，重复展开会导致 internalEvents ⇄ modelValue 反复改写而递归更新）。\r\n    if (lastCommittedOutput && isSameEvents(value ?? [], lastCommittedOutput)) {\r\n      lastCommittedOutput = null\r\n      return\r\n    }\r\n    lastCommittedOutput = null\r\n\r\n    // 外部 v-model 变化时同步到内部；启用日期组时先按组展开。\r\n    baseRecords.value = (value ?? []).map((record) => ({ ...record }))\r\n    const normalizedValue = toCalendarEvents(expandRecords(value ?? []))\r\n\r\n    if (isSameEvents(internalEvents.value, normalizedValue)) {\r\n      return\r\n    }\r\n\r\n    internalEvents.value = normalizedValue\r\n    scheduleWeekHeadingsHeightSync()\r\n  },\r\n  { deep: true },\r\n)\r\n\r\n// 日期组配置变化时（含启用/禁用、字段调整、标题模板），重新展开显示层事件。\r\nwatch(\r\n  () => [props.dateGroups, props.dateGroupTitleFormat],\r\n  () => {\r\n    baseRecords.value = (props.modelValue ?? []).map((record) => ({\r\n      ...record,\r\n    }))\r\n    const normalizedValue = toCalendarEvents(expandRecords(props.modelValue ?? []))\r\n    if (isSameEvents(internalEvents.value, normalizedValue)) {\r\n      return\r\n    }\r\n    internalEvents.value = normalizedValue\r\n    scheduleWeekHeadingsHeightSync()\r\n  },\r\n  { deep: true },\r\n)\r\n\r\n\r\nwatch(\r\n  () => [\r\n    shouldShowCustomNowLine.value,\r\n    isWatchRealTimeEnabled.value,\r\n    props.timeCellHeight,\r\n    timeFromMinutes.value,\r\n    timeToMinutes.value,\r\n    slotStepMinutes.value,\r\n  ],\r\n  () => {\r\n    startCustomNowLineTicker()\r\n  },\r\n)\r\n\r\nwatch(\r\n  () => editPopoverOpen.value,\r\n  (open) => {\r\n    document.body.style.overflow = open ? 'hidden' : ''\r\n  },\r\n)\r\n\r\nonBeforeUnmount(() => {\r\n  document.body.style.overflow = ''\r\n  window.removeEventListener('resize', scheduleTimeCellWidthSync)\r\n  window.removeEventListener('resize', scheduleWeekHeadingsHeightSync)\r\n  window.removeEventListener('resize', handleResizeForCustomNowLine)\r\n  window.removeEventListener('resize', scheduleTransientScrollbarListenerSync)\r\n  cleanupWeekHeadingsObservers()\r\n  cleanupMonthCellObserver()\r\n  stopCustomNowLineTicker()\r\n\r\n  clearTransientScrollbarTimer()\r\n  if (transientScrollbarScrollableEl) {\r\n    transientScrollbarScrollableEl.removeEventListener(\r\n      'scroll',\r\n      handleTransientScrollbarScroll,\r\n    )\r\n    transientScrollbarScrollableEl = null\r\n  }\r\n})\r\n\r\ndefineExpose({\r\n  getCalendar: () => calendarRef.value,\r\n  addEvent: openCreateEventDrawer,\r\n  openSidebar: openCreateEventDrawer,\r\n  editEvent: openEditPopover,\r\n  deleteEvent,\r\n  copyEvent,\r\n})\r\n</script>\r\n"],"names":["target","_createElementBlock","_normalizeClass","_unref","_createVNode","_mergeProps","_withCtx","_renderSlot","_createElementVNode","_openBlock","_createTextVNode","_toDisplayString","_createBlock","_withModifiers","readonly","_Fragment","_normalizeStyle","_createCommentVNode","_renderList","_toHandlers","_resolveDynamicComponent","_withDirectives","CalendarEventListModal","$slots"],"mappings":"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"}