{"version":3,"file":"PanelBody.mjs","sources":["../../../../../../../packages/vue-components/vc-picker/src/panels/PanelBody.tsx"],"sourcesContent":["import type { VueNode } from '@antdv/types';\nimport type { GenerateConfig } from '../generate';\nimport type { PanelMode } from '../interface';\nimport { classNames } from '@antdv/utils';\nimport useMergeProps from '../hooks/useMergeProps';\nimport { useInjectPanel } from '../PanelContext';\nimport { getCellDateDisabled } from '../utils/dateUtil';\nimport { getLastDay } from '../utils/timeUtil';\n\nexport interface PanelBodyProps<DateType> {\n  prefixCls: string;\n  disabledDate?: (date: DateType) => boolean;\n  onSelect: (value: DateType) => void;\n  picker?: PanelMode;\n\n  // By panel\n  headerCells?: VueNode[];\n  rowNum: number;\n  colNum: number;\n  baseDate: DateType;\n  getCellClassName: (date: DateType) => Record<string, boolean | undefined>;\n  getCellDate: (date: DateType, offset: number) => DateType;\n  getCellText: (date: DateType) => VueNode;\n  getCellNode?: (date: DateType) => VueNode;\n  titleCell?: (date: DateType) => string;\n  generateConfig: GenerateConfig<DateType>;\n\n  // Used for week panel\n  prefixColumn?: (date: DateType) => VueNode;\n  rowClassName?: (date: DateType) => string;\n}\n\nfunction PanelBody<DateType>(_props: PanelBodyProps<DateType>) {\n  const {\n    prefixCls,\n    disabledDate,\n    onSelect,\n    picker,\n    rowNum,\n    colNum,\n    prefixColumn,\n    rowClassName,\n    baseDate,\n    getCellClassName,\n    getCellText,\n    getCellNode,\n    getCellDate,\n    generateConfig,\n    titleCell,\n    headerCells,\n  } = useMergeProps(_props);\n  const { onDateMouseenter, onDateMouseleave, mode } = useInjectPanel();\n\n  const cellPrefixCls = `${prefixCls}-cell`;\n\n  // =============================== Body ===============================\n  const rows: VueNode[] = [];\n\n  for (let i = 0; i < rowNum; i += 1) {\n    const row: VueNode[] = [];\n    let rowStartDate: DateType;\n\n    for (let j = 0; j < colNum; j += 1) {\n      const offset = i * colNum + j;\n      const currentDate = getCellDate(baseDate, offset);\n      const disabled = getCellDateDisabled({\n        cellDate: currentDate,\n        mode: mode.value,\n        disabledDate,\n        generateConfig,\n      });\n\n      if (j === 0) {\n        rowStartDate = currentDate;\n\n        if (prefixColumn)\n          row.push(prefixColumn(rowStartDate));\n      }\n\n      const title = titleCell && titleCell(currentDate);\n\n      row.push(\n        <td\n          key={j}\n          title={title}\n          class={classNames(cellPrefixCls, {\n            [`${cellPrefixCls}-disabled`]: disabled,\n            [`${cellPrefixCls}-start`]:\n              getCellText(currentDate) === 1 || (picker === 'year' && Number(title) % 10 === 0),\n            [`${cellPrefixCls}-end`]:\n              title === getLastDay(generateConfig, currentDate)\n              || (picker === 'year' && Number(title) % 10 === 9),\n            ...getCellClassName(currentDate),\n          })}\n          onClick={(e) => {\n            e.stopPropagation();\n            if (!disabled)\n              onSelect(currentDate);\n          }}\n          onMouseenter={() => {\n            if (!disabled && onDateMouseenter)\n              onDateMouseenter(currentDate);\n          }}\n          onMouseleave={() => {\n            if (!disabled && onDateMouseleave)\n              onDateMouseleave(currentDate);\n          }}\n        >\n          {getCellNode\n            ? (\n                getCellNode(currentDate)\n              )\n            : (\n                <div class={`${cellPrefixCls}-inner`}>{getCellText(currentDate)}</div>\n              )}\n        </td>,\n      );\n    }\n\n    rows.push(\n      <tr key={i} class={rowClassName && rowClassName(rowStartDate!)}>\n        {row}\n      </tr>,\n    );\n  }\n\n  return (\n    <div class={`${prefixCls}-body`}>\n      <table class={`${prefixCls}-content`}>\n        {headerCells && (\n          <thead>\n            <tr>{headerCells}</tr>\n          </thead>\n        )}\n        <tbody>{rows}</tbody>\n      </table>\n    </div>\n  );\n}\n\nPanelBody.displayName = 'PanelBody';\nPanelBody.inheritAttrs = false;\n\nexport default PanelBody;\n"],"names":["PanelBody","_props","prefixCls","disabledDate","onSelect","picker","rowNum","colNum","prefixColumn","rowClassName","baseDate","getCellClassName","getCellText","getCellNode","getCellDate","generateConfig","titleCell","headerCells","useMergeProps","onDateMouseenter","onDateMouseleave","mode","useInjectPanel","cellPrefixCls","rows","i","row","rowStartDate","j","offset","currentDate","disabled","getCellDateDisabled","cellDate","value","push","title","_createVNode","classNames","Number","getLastDay","e","stopPropagation","onMouseenter","onMouseleave","displayName","inheritAttrs"],"mappings":"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"}