{"version":3,"file":"YearPicker.cjs","sources":["../../../src/components/Calendar/YearPicker.tsx"],"sourcesContent":["import {\n  type ComponentProps,\n  type FC,\n  type MouseEvent,\n  type RefObject,\n  memo,\n  useEffect,\n  useMemo,\n  useRef,\n} from 'react'\nimport { tv } from 'tailwind-variants'\n\nimport { useIntl } from '../../intl'\nimport { UnstyledButton } from '../Button'\nimport { Scroller } from '../Scroller'\n\ntype AbstractProps = {\n  /** 選択された年 */\n  selectedYear?: number\n  /** 選択可能な開始年 */\n  fromYear: number\n  /** 選択可能な終了年 */\n  toYear: number\n  /** トリガのセレクトイベントを処理するハンドラ */\n  onSelectYear: (e: MouseEvent<HTMLButtonElement>) => void\n  /** 表示フラグ */\n  isDisplayed: boolean\n  /** HTMLのid属性 */\n  id: string\n}\ntype Props = AbstractProps & Omit<ComponentProps<'div'>, keyof AbstractProps>\ntype ActualProps = Omit<Props, 'isDisplayed'>\n\nconst classNameGenerator = tv({\n  slots: {\n    overlay: 'smarthr-ui-YearPicker shr-absolute shr-inset-0 shr-bg-white',\n    container:\n      'shr-box-border shr-flex shr-h-full shr-w-full shr-flex-wrap shr-items-start shr-px-0.25 shr-py-0.5',\n    yearButton:\n      'smarthr-ui-YearPicker-selectYear shr-group shr-flex shr-w-1/4 shr-items-center shr-justify-center shr-px-0 shr-py-0.5 shr-leading-none',\n    yearWrapper: [\n      'shr-box-border shr-inline-block shr-rounded-full shr-px-0.75 shr-py-0.5 shr-text-base shr-leading-none group-hover:shr-bg-base-grey group-hover:shr-text-black',\n      '[[data-this-year=\"true\"]>&]:shr-border-shorthand',\n      '[[aria-pressed=\"true\"]>&]:shr-bg-main [[aria-pressed=\"true\"]>&]:shr-text-white',\n    ],\n  },\n})\n\nexport const YearPicker: FC<Props> = ({ isDisplayed, ...rest }) =>\n  isDisplayed ? <ActualYearPicker {...rest} /> : null\n\nconst ActualYearPicker: FC<ActualProps> = ({\n  selectedYear,\n  fromYear,\n  toYear,\n  onSelectYear,\n  id,\n  ...rest\n}) => {\n  const classNames = useMemo(() => {\n    const { overlay, container, yearButton, yearWrapper } = classNameGenerator()\n\n    return {\n      overlay: overlay(),\n      container: container(),\n      yearButton: yearButton(),\n      yearWrapper: yearWrapper(),\n    }\n  }, [])\n  const focusingRef = useRef<HTMLButtonElement>(null)\n\n  const thisYear = useMemo(() => new Date().getFullYear(), [])\n  const yearArray = useMemo(() => {\n    const length = Math.max(Math.min(toYear, 9999) - fromYear + 1, 0)\n    const result: number[] = []\n\n    for (let i = 0; i < length; i++) {\n      result[i] = fromYear + i\n    }\n\n    return result\n  }, [toYear, fromYear])\n\n  useEffect(() => {\n    if (focusingRef.current) {\n      // HINT: 現在の年に一度focusを当てることでtab移動をしやすくする\n      // focusを当てたままでは違和感があるため、blurで解除している\n      focusingRef.current.focus()\n      focusingRef.current.blur()\n    }\n  }, [])\n\n  return (\n    <div {...rest} id={id} className={classNames.overlay}>\n      <Scroller className={classNames.container}>\n        {yearArray.map((year) => (\n          <YearButton\n            key={year}\n            year={year}\n            thisYear={thisYear}\n            selected={selectedYear === year}\n            focusingRef={focusingRef}\n            className={classNames.yearButton}\n            childrenStyle={classNames.yearWrapper}\n            onClick={onSelectYear}\n          />\n        ))}\n      </Scroller>\n    </div>\n  )\n}\n\nconst YearButton = memo<{\n  year: number\n  thisYear: number\n  selected: boolean\n  focusingRef: RefObject<HTMLButtonElement>\n  className: string\n  childrenStyle: string\n  onClick: (e: MouseEvent<HTMLButtonElement>) => void\n}>(({ year, thisYear, selected, focusingRef, onClick, className, childrenStyle }) => {\n  const { localize } = useIntl()\n  const isThisYear = thisYear === year\n\n  return (\n    <UnstyledButton\n      ref={isThisYear ? focusingRef : null}\n      value={year}\n      aria-pressed={selected}\n      onClick={onClick}\n      className={className}\n      data-this-year={isThisYear}\n      aria-label={\n        isThisYear\n          ? localize({\n              id: 'smarthr-ui/Calendar/currentYear',\n              defaultText: '現在の年',\n            })\n          : undefined\n      }\n    >\n      <span className={childrenStyle}>{year}</span>\n    </UnstyledButton>\n  )\n})\n"],"names":["tv","_jsx","useMemo","useRef","useEffect","Scroller","memo","useIntl","UnstyledButton"],"mappings":"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"}