{"version":3,"file":"Header.mjs","sources":["../../../../../../packages/components/calendar/src/Header.tsx"],"sourcesContent":["import type { CalendarHeaderProps, ModeSwitchProps, SharedProps } from './interface';\nimport { defineComponent, ref } from 'vue';\nimport { FormItemInputContext } from '../../form/src/FormItemContext';\nimport { RadioButton, RadioGroup } from '../../radio';\nimport Select from '../../select';\n\nconst YearSelectOffset = 10;\nconst YearSelectTotal = 20;\n\nfunction YearSelect<DateType>(props: SharedProps<DateType>) {\n  const { fullscreen, validRange, generateConfig, locale, prefixCls, value, onChange, divRef }\n    = props;\n\n  const year = generateConfig.getYear(value || generateConfig.getNow());\n\n  let start = year - YearSelectOffset;\n  let end = start + YearSelectTotal;\n\n  if (validRange) {\n    start = generateConfig.getYear(validRange[0]);\n    end = generateConfig.getYear(validRange[1]) + 1;\n  }\n\n  const suffix = locale && locale.year === '年' ? '年' : '';\n  const options: Array<{ label: string, value: number }> = [];\n  for (let index = start; index < end; index++)\n    options.push({ label: `${index}${suffix}`, value: index });\n\n  return (\n    <Select\n      size={fullscreen ? undefined : 'small'}\n      options={options}\n      value={year}\n      class={`${prefixCls}-year-select`}\n      onChange={(numYear: number) => {\n        let newDate = generateConfig.setYear(value, numYear);\n\n        if (validRange) {\n          const [startDate, endDate] = validRange;\n          const newYear = generateConfig.getYear(newDate);\n          const newMonth = generateConfig.getMonth(newDate);\n          if (\n            newYear === generateConfig.getYear(endDate)\n            && newMonth > generateConfig.getMonth(endDate)\n          ) {\n            newDate = generateConfig.setMonth(newDate, generateConfig.getMonth(endDate));\n          }\n\n          if (\n            newYear === generateConfig.getYear(startDate)\n            && newMonth < generateConfig.getMonth(startDate)\n          ) {\n            newDate = generateConfig.setMonth(newDate, generateConfig.getMonth(startDate));\n          }\n        }\n\n        onChange(newDate);\n      }}\n      getPopupContainer={() => divRef!.value!}\n    />\n  );\n}\nYearSelect.inheritAttrs = false;\n\nfunction MonthSelect<DateType>(props: SharedProps<DateType>) {\n  const { prefixCls, fullscreen, validRange, value, generateConfig, locale, onChange, divRef }\n    = props;\n  const month = generateConfig.getMonth(value || generateConfig.getNow());\n\n  let start = 0;\n  let end = 11;\n\n  if (validRange) {\n    const [rangeStart, rangeEnd] = validRange;\n    const currentYear = generateConfig.getYear(value);\n    if (generateConfig.getYear(rangeEnd) === currentYear)\n      end = generateConfig.getMonth(rangeEnd);\n\n    if (generateConfig.getYear(rangeStart) === currentYear)\n      start = generateConfig.getMonth(rangeStart);\n  }\n\n  const months = locale.shortMonths || generateConfig.locale.getShortMonths!(locale.locale);\n  const options: Array<{ label: string, value: number }> = [];\n  for (let index = start; index <= end; index += 1) {\n    options.push({\n      label: months[index],\n      value: index,\n    });\n  }\n\n  return (\n    <Select\n      size={fullscreen ? undefined : 'small'}\n      class={`${prefixCls}-month-select`}\n      value={month}\n      options={options}\n      onChange={(newMonth: number) => {\n        onChange(generateConfig.setMonth(value, newMonth));\n      }}\n      getPopupContainer={() => divRef!.value!}\n    />\n  );\n}\n\nMonthSelect.inheritAttrs = false;\n\nfunction ModeSwitch<DateType>(props: ModeSwitchProps<DateType>) {\n  const { prefixCls, locale, mode, fullscreen, onModeChange } = props;\n  return (\n    <RadioGroup\n      onChange={({ target: { value } }) => {\n        onModeChange(value);\n      }}\n      value={mode}\n      size={fullscreen ? undefined : 'small'}\n      class={`${prefixCls}-mode-switch`}\n    >\n      <RadioButton value=\"month\">{locale.month}</RadioButton>\n      <RadioButton value=\"year\">{locale.year}</RadioButton>\n    </RadioGroup>\n  );\n}\n\nModeSwitch.inheritAttrs = false;\n\nexport default defineComponent<CalendarHeaderProps<any>>({\n  name: 'CalendarHeader',\n  inheritAttrs: false,\n  props: [\n    'mode',\n    'prefixCls',\n    'value',\n    'validRange',\n    'generateConfig',\n    'locale',\n    'mode',\n    'fullscreen',\n  ] as any,\n  setup(_props, { attrs }) {\n    const divRef = ref<HTMLDivElement>(null);\n    const formItemInputContext = FormItemInputContext.useInject();\n    FormItemInputContext.useProvide(formItemInputContext, { isFormItemInput: false });\n\n    return () => {\n      const props = { ..._props, ...attrs };\n      const { prefixCls, fullscreen, mode, onChange, onModeChange } = props;\n      const sharedProps = {\n        ...props,\n        fullscreen,\n        divRef,\n      } as any;\n\n      return (\n        <div class={`${prefixCls}-header`} ref={divRef}>\n          <YearSelect\n            {...sharedProps}\n            onChange={(v) => {\n              onChange(v, 'year');\n            }}\n          />\n          {mode === 'month' && (\n            <MonthSelect\n              {...sharedProps}\n              onChange={(v) => {\n                onChange(v, 'month');\n              }}\n            />\n          )}\n          <ModeSwitch {...sharedProps} onModeChange={onModeChange} />\n        </div>\n      );\n    };\n  },\n});\n"],"names":["YearSelectOffset","YearSelectTotal","YearSelect","props","fullscreen","validRange","generateConfig","locale","prefixCls","value","onChange","divRef","year","getYear","getNow","start","end","suffix","options","index","push","label","_createVNode","Select","undefined","numYear","newDate","setYear","startDate","endDate","newYear","newMonth","getMonth","setMonth","getPopupContainer","inheritAttrs","MonthSelect","month","rangeStart","rangeEnd","currentYear","months","shortMonths","getShortMonths","ModeSwitch","mode","onModeChange","RadioGroup","target","default","RadioButton","name","setup","_props","attrs","ref","formItemInputContext","FormItemInputContext","useInject","useProvide","isFormItemInput","sharedProps","v"],"mappings":"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"}