{"version":3,"file":"Table.mjs","sources":["../../../src/date-picker/base/Table.tsx"],"sourcesContent":["import { defineComponent, PropType, computed } from 'vue';\nimport TDatePickerCell from './Cell';\nimport { useConfig, usePrefixClass } from '../../hooks/useConfig';\nimport type { TdDatePickerProps } from '../type';\nimport { parseToDayjs } from '../../_common/js/date-picker/format';\nimport isArray from 'lodash/isArray';\n\nexport default defineComponent({\n  name: 'XDatePickerTable',\n  props: {\n    mode: {\n      type: String as PropType<TdDatePickerProps['mode']>,\n      default: 'date',\n    },\n    value: [String, Number, Array, Date],\n    format: String,\n    firstDayOfWeek: Number,\n    data: Array,\n    time: String,\n    onCellClick: Function,\n    onCellMouseEnter: Function,\n    onCellMouseLeave: Function,\n  },\n  setup(props) {\n    const COMPONENT_NAME = usePrefixClass('date-picker__table');\n    const { globalConfig } = useConfig('datePicker');\n    const { weekdays, weekAbbreviation, dayjsLocale } = globalConfig.value;\n\n    const weekArr = computed(() => {\n      const _weekArr = [];\n      let wi = props.firstDayOfWeek - 1;\n      const len = weekdays.length;\n      while (_weekArr.length < len) {\n        _weekArr.push(weekdays[wi]);\n        wi = (wi + len + 1) % len;\n      }\n\n      if (props.mode === 'week') _weekArr.unshift(weekAbbreviation);\n\n      return _weekArr;\n    });\n\n    const showThead = computed(() => props.mode === 'date' || props.mode === 'week');\n\n    // 高亮周区间\n    const weekRowClass = (value: any, format: string, targetValue: Date) => {\n      if (props.mode !== 'week' || !value) return {};\n\n      if (isArray(value)) {\n        if (!value.length) return {};\n        const [startObj, endObj] = value.map((v) => v && parseToDayjs(v, format));\n        const startYear = startObj && startObj.year();\n        const startWeek = startObj?.locale?.(dayjsLocale)?.week?.();\n        const endYear = endObj && endObj.year();\n        const endWeek = endObj?.locale?.(dayjsLocale)?.week?.();\n\n        const targetObj = parseToDayjs(targetValue, format);\n        const targetYear = targetObj.year();\n        const targetWeek = targetObj.week();\n        const isActive =\n          (targetYear === startYear && targetWeek === startWeek) || (targetYear === endYear && targetWeek === endWeek);\n        const isRange =\n          targetYear >= startYear && targetYear <= endYear && targetWeek > startWeek && targetWeek < endWeek;\n        return {\n          // 同年同周\n          [`${COMPONENT_NAME.value}-${props.mode}-row--active`]: isActive,\n          [`${COMPONENT_NAME.value}-${props.mode}-row--range`]: isRange,\n        };\n      }\n\n      return {\n        [`${COMPONENT_NAME.value}-${props.mode}-row--active`]:\n          parseToDayjs(value, format).locale(dayjsLocale).week() ===\n          parseToDayjs(targetValue, format).locale(dayjsLocale).week(),\n      };\n    };\n\n    return () => (\n      <div class={COMPONENT_NAME.value} onMouseleave={(e: MouseEvent) => props.onCellMouseLeave?.({ e })}>\n        <table>\n          {showThead.value && (\n            <thead>\n              <tr>\n                {weekArr.value.map((value: string, i: number) => (\n                  <th key={i}>{value}</th>\n                ))}\n              </tr>\n            </thead>\n          )}\n          <tbody>\n            {props.data.map((row: Array<any>, i: number) => (\n              <tr\n                key={i}\n                class={{\n                  [`${COMPONENT_NAME.value}-${props.mode}-row`]: true,\n                  ...weekRowClass(props.value, props.format, row[0].value),\n                }}\n              >\n                {row.map((col: any, j: number) => (\n                  <TDatePickerCell\n                    {...col}\n                    key={j}\n                    time={props.time}\n                    onClick={props.onCellClick}\n                    onMouseEnter={props.onCellMouseEnter}\n                  />\n                ))}\n              </tr>\n            ))}\n          </tbody>\n        </table>\n      </div>\n    );\n  },\n});\n"],"names":["name","props","mode","type","format","firstDayOfWeek","data","time","onCellClick","onCellMouseEnter","onCellMouseLeave","_weekArr","isArray","startObj","endObj","_createVNode","e"],"mappings":"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"}