{"version":3,"file":"calendar-month.mjs","sources":["../../../../../../../packages/components/calendar/src/calendar-month.tsx"],"sourcesContent":["import {\n  type ExtractPropTypes,\n  type PropType,\n  computed,\n  defineComponent,\n  ref,\n} from 'vue'\n\n// Utils\nimport {\n  addUnit,\n  createNamespace,\n  makeRequiredProp,\n  numericProp,\n  pick,\n  setScrollTop,\n} from '@xzx-design/utils'\nimport { useExpose, useHeight, useRect, useToggle } from '@xzx-design/hooks'\nimport { getMonthEndDay } from '../../date-select/src/utils'\nimport {\n  bem,\n  compareDay,\n  formatMonthTitle,\n  getNextDay,\n  getPrevDay,\n  t,\n} from './utils'\n\n// Composables\n\n// Components\nimport CalendarDay from './calendar-day'\n\n// Types\nimport type { CalendarDayItem, CalendarDayType, CalendarType } from './types'\n\nconst [name] = createNamespace('calendar-month')\n\nconst calendarMonthProps = {\n  date: makeRequiredProp(Date),\n  today: makeRequiredProp(Date),\n  type: String as PropType<CalendarType>,\n  color: String,\n  minDate: Date,\n  maxDate: Date,\n  showMark: Boolean,\n  rowHeight: numericProp,\n  formatter: Function as PropType<(item: CalendarDayItem) => CalendarDayItem>,\n  lazyRender: Boolean,\n  currentDate: [Date, Array] as PropType<Date | Date[] | null>,\n  allowSameDay: Boolean,\n  showSubtitle: Boolean,\n  showMonthTitle: Boolean,\n  firstDayOfWeek: Number,\n}\n\nexport type CalendarMonthProps = ExtractPropTypes<typeof calendarMonthProps>\n\nexport default defineComponent({\n  name,\n\n  props: calendarMonthProps,\n\n  emits: ['click', 'clickDisabledDate'],\n\n  setup(props, { emit, slots }) {\n    const [visible, setVisible] = useToggle()\n    const daysRef = ref<HTMLElement>()\n    const monthRef = ref<HTMLElement>()\n    const height = useHeight(monthRef)\n\n    const title = computed(() => formatMonthTitle(props.date))\n    const rowHeight = computed(() => addUnit(props.rowHeight))\n    const offset = computed(() => {\n      const date = props.date.getDate()\n      const day = props.date.getDay()\n      const realDay = (day - (date % 7) + 8) % 7\n\n      if (props.firstDayOfWeek) {\n        return (realDay + 7 - props.firstDayOfWeek) % 7\n      }\n\n      return realDay\n    })\n\n    const totalDay = computed(() =>\n      getMonthEndDay(props.date.getFullYear(), props.date.getMonth() + 1)\n    )\n\n    const shouldRender = computed(() => visible.value || !props.lazyRender)\n\n    const getTitle = () => title.value\n\n    const getMultipleDayType = (day: Date) => {\n      const isSelected = (date: Date) =>\n        (props.currentDate as Date[]).some(\n          (item) => compareDay(item, date) === 0\n        )\n\n      if (isSelected(day)) {\n        const prevDay = getPrevDay(day)\n        const nextDay = getNextDay(day)\n        const prevSelected = isSelected(prevDay)\n        const nextSelected = isSelected(nextDay)\n\n        if (prevSelected && nextSelected) {\n          return 'multiple-middle'\n        }\n        if (prevSelected) {\n          return 'end'\n        }\n        if (nextSelected) {\n          return 'start'\n        }\n        return 'multiple-selected'\n      }\n\n      return ''\n    }\n\n    const getRangeDayType = (day: Date) => {\n      const [startDay, endDay] = props.currentDate as Date[]\n\n      if (!startDay) {\n        return ''\n      }\n\n      const compareToStart = compareDay(day, startDay)\n\n      if (!endDay) {\n        return compareToStart === 0 ? 'start' : ''\n      }\n\n      const compareToEnd = compareDay(day, endDay)\n\n      if (props.allowSameDay && compareToStart === 0 && compareToEnd === 0) {\n        return 'start-end'\n      }\n      if (compareToStart === 0) {\n        return 'start'\n      }\n      if (compareToEnd === 0) {\n        return 'end'\n      }\n      if (compareToStart > 0 && compareToEnd < 0) {\n        return 'middle'\n      }\n\n      return ''\n    }\n\n    const getDayType = (day: Date): CalendarDayType => {\n      const { type, minDate, maxDate, currentDate } = props\n\n      if (\n        (minDate && compareDay(day, minDate) < 0) ||\n        (maxDate && compareDay(day, maxDate) > 0)\n      ) {\n        return 'disabled'\n      }\n\n      if (currentDate === null) {\n        return ''\n      }\n\n      if (Array.isArray(currentDate)) {\n        if (type === 'multiple') {\n          return getMultipleDayType(day)\n        }\n        if (type === 'range') {\n          return getRangeDayType(day)\n        }\n      } else if (type === 'single') {\n        return compareDay(day, currentDate as Date) === 0 ? 'selected' : ''\n      }\n\n      return ''\n    }\n\n    const getBottomInfo = (dayType: CalendarDayType) => {\n      if (props.type === 'range') {\n        if (dayType === 'start' || dayType === 'end') {\n          return t(dayType)\n        }\n        if (dayType === 'start-end') {\n          return `${t('start')}/${t('end')}`\n        }\n      }\n    }\n\n    const renderTitle = () => {\n      if (props.showMonthTitle) {\n        return (\n          <div class={bem('month-title')}>\n            {slots['month-title']\n              ? slots['month-title']({\n                  date: props.date,\n                  text: title.value,\n                })\n              : title.value}\n          </div>\n        )\n      }\n    }\n\n    // const renderMark = () => {\n    //   if (props.showMark && shouldRender.value) {\n    //     return <div class={bem('month-mark')}>{props.date.getMonth() + 1}</div>\n    //   }\n    // }\n\n    const placeholders = computed<CalendarDayItem[]>(() => {\n      const count = Math.ceil((totalDay.value + offset.value) / 7)\n      return Array.from({ length: count }, () => ({ type: 'placeholder' }))\n    })\n\n    const days = computed(() => {\n      const days: CalendarDayItem[] = []\n      const year = props.date.getFullYear()\n      const month = props.date.getMonth()\n\n      for (let day = 1; day <= totalDay.value; day++) {\n        const date = new Date(year, month, day)\n        const type = getDayType(date)\n\n        let config: CalendarDayItem = {\n          date,\n          type,\n          text: day,\n          bottomInfo: getBottomInfo(type),\n        }\n\n        if (props.formatter) {\n          config = props.formatter(config)\n        }\n\n        days.push(config)\n      }\n\n      return days\n    })\n\n    const disabledDays = computed(() =>\n      days.value.filter((day) => day.type === 'disabled')\n    )\n\n    const scrollToDate = (body: Element, targetDate: Date) => {\n      if (daysRef.value) {\n        const daysRect = useRect(daysRef.value)\n        const totalRows = placeholders.value.length\n        const currentRow = Math.ceil((targetDate.getDate() + offset.value) / 7)\n        const rowOffset = ((currentRow - 1) * daysRect.height) / totalRows\n\n        setScrollTop(\n          body,\n          daysRect.top + rowOffset + body.scrollTop - useRect(body).top\n        )\n      }\n    }\n\n    const renderDay = (item: CalendarDayItem, index: number) => {\n      const isToday =\n        new Date(item.date as Date).getTime() ===\n        new Date(props.today).getTime()\n      return (\n        <CalendarDay\n          v-slots={pick(slots, ['top-info', 'bottom-info', 'text'])}\n          isToday={isToday}\n          item={item}\n          index={index}\n          color={props.color}\n          offset={offset.value}\n          rowHeight={rowHeight.value}\n          onClick={(item: Date | Date[]) => emit('click', item)}\n          onClickDisabledDate={(item: Date | Date[]) =>\n            emit('clickDisabledDate', item)\n          }\n        />\n      )\n    }\n\n    const renderDays = () => (\n      <div ref={daysRef} role=\"grid\" class={bem('days')}>\n        {/*{renderMark()}*/}\n        {(shouldRender.value ? days : placeholders).value.map(renderDay)}\n      </div>\n    )\n\n    useExpose({\n      getTitle,\n      getHeight: () => height.value,\n      setVisible,\n      scrollToDate,\n      disabledDays,\n    })\n\n    return () => (\n      <div class={bem('month')} ref={monthRef}>\n        {renderTitle()}\n        {renderDays()}\n      </div>\n    )\n  },\n})\n"],"names":["name","createNamespace","calendarMonthProps","date","makeRequiredProp","Date","today","type","String","color","minDate","maxDate","showMark","Boolean","rowHeight","numericProp","formatter","Function","lazyRender","currentDate","Array","allowSameDay","showSubtitle","showMonthTitle","firstDayOfWeek","Number","defineComponent","props","emits","setup","emit","slots","visible","setVisible","useToggle","daysRef","ref","monthRef","height","useHeight","title","computed","formatMonthTitle","addUnit","offset","getDate","day","getDay","realDay","totalDay","getMonthEndDay","getFullYear","getMonth","shouldRender","value","getTitle","getMultipleDayType","isSelected","some","item","compareDay","prevDay","getPrevDay","nextDay","getNextDay","prevSelected","nextSelected","getRangeDayType","startDay","endDay","compareToStart","compareToEnd","getDayType","isArray","getBottomInfo","dayType","t","renderTitle","_createVNode","bem","text","placeholders","count","Math","ceil","from","length","days","year","month","config","bottomInfo","push","disabledDays","filter","scrollToDate","body","targetDate","daysRect","useRect","totalRows","currentRow","rowOffset","setScrollTop","top","scrollTop","renderDay","index","isToday","getTime","CalendarDay","pick","renderDays","map","useExpose","getHeight"],"mappings":"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"}