{"version":3,"file":"YearsList.mjs","names":["classes"],"sources":["../../../src/components/YearsList/YearsList.tsx"],"sourcesContent":["import dayjs from 'dayjs';\nimport {\n  Box,\n  BoxProps,\n  DataAttributes,\n  ElementProps,\n  factory,\n  Factory,\n  MantineSize,\n  StylesApiProps,\n  useProps,\n  useStyles,\n} from '@mantine/core';\nimport { ControlsGroupSettings, DateStringValue } from '../../types';\nimport { useDatesContext } from '../DatesProvider';\nimport { PickerControl, PickerControlProps } from '../PickerControl';\nimport { getYearInTabOrder } from './get-year-in-tab-order/get-year-in-tab-order';\nimport { getYearsData } from './get-years-data/get-years-data';\nimport { isYearDisabled } from './is-year-disabled/is-year-disabled';\nimport classes from './YearsList.module.css';\n\nexport type YearsListStylesNames =\n  | 'yearsListControl'\n  | 'yearsList'\n  | 'yearsListCell'\n  | 'yearsListRow';\n\nexport interface YearsListSettings extends ControlsGroupSettings {\n  /** Prevents focus shift when buttons are clicked */\n  __preventFocus?: boolean;\n\n  /** Determines whether propagation for Escape key should be stopped */\n  __stopPropagation?: boolean;\n\n  /** dayjs format for years list @default 'YYYY' */\n  yearsListFormat?: string;\n\n  /** Passes props down to year picker control based on date */\n  getYearControlProps?: (date: DateStringValue) => Partial<PickerControlProps> & DataAttributes;\n\n  /** Component size */\n  size?: MantineSize;\n\n  /** Determines whether controls should be separated @default true */\n  withCellSpacing?: boolean;\n\n  /** Determines whether the list should take the full width of its container @default false */\n  fullWidth?: boolean;\n}\n\nexport interface YearsListProps\n  extends BoxProps, YearsListSettings, StylesApiProps<YearsListFactory>, ElementProps<'table'> {\n  __staticSelector?: string;\n\n  /** Decade value to display */\n  decade: DateStringValue;\n}\n\nexport type YearsListFactory = Factory<{\n  props: YearsListProps;\n  ref: HTMLTableElement;\n  stylesNames: YearsListStylesNames;\n}>;\n\nconst defaultProps = {\n  yearsListFormat: 'YYYY',\n  withCellSpacing: true,\n} satisfies Partial<YearsListProps>;\n\nexport const YearsList = factory<YearsListFactory>((_props) => {\n  const props = useProps('YearsList', defaultProps, _props);\n  const {\n    classNames,\n    className,\n    style,\n    styles,\n    unstyled,\n    vars,\n    decade,\n    yearsListFormat,\n    locale,\n    minDate,\n    maxDate,\n    getYearControlProps,\n    __staticSelector,\n    __getControlRef,\n    __onControlKeyDown,\n    __onControlClick,\n    __onControlMouseEnter,\n    __preventFocus,\n    __stopPropagation,\n    withCellSpacing,\n    fullWidth,\n    size,\n    attributes,\n    ...others\n  } = props;\n\n  const getStyles = useStyles<YearsListFactory>({\n    name: __staticSelector || 'YearsList',\n    classes,\n    props,\n    className,\n    style,\n    classNames,\n    styles,\n    unstyled,\n    attributes,\n    vars,\n    rootSelector: 'yearsList',\n  });\n\n  const ctx = useDatesContext();\n\n  const years = getYearsData(decade);\n\n  const yearInTabOrder = getYearInTabOrder({\n    years,\n    minDate,\n    maxDate,\n    getYearControlProps,\n  });\n\n  const rows = years.map((yearsRow, rowIndex) => {\n    const cells = yearsRow.map((year, cellIndex) => {\n      const controlProps = getYearControlProps?.(year);\n      const isYearInTabOrder = dayjs(year).isSame(yearInTabOrder, 'year');\n      return (\n        <td\n          key={cellIndex}\n          {...getStyles('yearsListCell')}\n          data-with-spacing={withCellSpacing || undefined}\n        >\n          <PickerControl\n            {...getStyles('yearsListControl')}\n            size={size}\n            unstyled={unstyled}\n            fullWidth={fullWidth}\n            data-mantine-stop-propagation={__stopPropagation || undefined}\n            disabled={isYearDisabled({ year, minDate, maxDate })}\n            ref={(node) => {\n              if (node) {\n                __getControlRef?.(rowIndex, cellIndex, node);\n              }\n            }}\n            {...controlProps}\n            onKeyDown={(event) => {\n              controlProps?.onKeyDown?.(event);\n              __onControlKeyDown?.(event, { rowIndex, cellIndex, date: year });\n            }}\n            onClick={(event) => {\n              controlProps?.onClick?.(event);\n              __onControlClick?.(event, year);\n            }}\n            onMouseEnter={(event) => {\n              controlProps?.onMouseEnter?.(event);\n              __onControlMouseEnter?.(event, year);\n            }}\n            onMouseDown={(event) => {\n              controlProps?.onMouseDown?.(event);\n              __preventFocus && event.preventDefault();\n            }}\n            tabIndex={__preventFocus || !isYearInTabOrder ? -1 : 0}\n          >\n            {controlProps?.children ??\n              dayjs(year).locale(ctx.getLocale(locale)).format(yearsListFormat)}\n          </PickerControl>\n        </td>\n      );\n    });\n\n    return (\n      <tr key={rowIndex} {...getStyles('yearsListRow')}>\n        {cells}\n      </tr>\n    );\n  });\n\n  return (\n    <Box\n      component=\"table\"\n      size={size}\n      {...getStyles('yearsList')}\n      data-full-width={fullWidth || undefined}\n      {...others}\n    >\n      <tbody>{rows}</tbody>\n    </Box>\n  );\n});\n\nYearsList.classes = classes;\nYearsList.displayName = '@mantine/dates/YearsList';\n"],"mappings":";;;;;;;;;;;AAgEA,MAAM,eAAe;CACnB,iBAAiB;CACjB,iBAAiB;AACnB;AAEA,MAAa,YAAY,SAA2B,WAAW;CAC7D,MAAM,QAAQ,SAAS,aAAa,cAAc,MAAM;CACxD,MAAM,EACJ,YACA,WACA,OACA,QACA,UACA,MACA,QACA,iBACA,QACA,SACA,SACA,qBACA,kBACA,iBACA,oBACA,kBACA,uBACA,gBACA,mBACA,iBACA,WACA,MACA,YACA,GAAG,WACD;CAEJ,MAAM,YAAY,UAA4B;EAC5C,MAAM,oBAAoB;EAC1B,SAAA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,cAAc;CAChB,CAAC;CAED,MAAM,MAAM,gBAAgB;CAE5B,MAAM,QAAQ,aAAa,MAAM;CAEjC,MAAM,iBAAiB,kBAAkB;EACvC;EACA;EACA;EACA;CACF,CAAC;CAED,MAAM,OAAO,MAAM,KAAK,UAAU,aAAa;EAC7C,MAAM,QAAQ,SAAS,KAAK,MAAM,cAAc;GAC9C,MAAM,eAAe,sBAAsB,IAAI;GAC/C,MAAM,mBAAmB,MAAM,IAAI,CAAC,CAAC,OAAO,gBAAgB,MAAM;GAClE,OACE,oBAAC,MAAD;IAEE,GAAI,UAAU,eAAe;IAC7B,qBAAmB,mBAAmB,KAAA;cAEtC,oBAAC,eAAD;KACE,GAAI,UAAU,kBAAkB;KAC1B;KACI;KACC;KACX,iCAA+B,qBAAqB,KAAA;KACpD,UAAU,eAAe;MAAE;MAAM;MAAS;KAAQ,CAAC;KACnD,MAAM,SAAS;MACb,IAAI,MACF,kBAAkB,UAAU,WAAW,IAAI;KAE/C;KACA,GAAI;KACJ,YAAY,UAAU;MACpB,cAAc,YAAY,KAAK;MAC/B,qBAAqB,OAAO;OAAE;OAAU;OAAW,MAAM;MAAK,CAAC;KACjE;KACA,UAAU,UAAU;MAClB,cAAc,UAAU,KAAK;MAC7B,mBAAmB,OAAO,IAAI;KAChC;KACA,eAAe,UAAU;MACvB,cAAc,eAAe,KAAK;MAClC,wBAAwB,OAAO,IAAI;KACrC;KACA,cAAc,UAAU;MACtB,cAAc,cAAc,KAAK;MACjC,kBAAkB,MAAM,eAAe;KACzC;KACA,UAAU,kBAAkB,CAAC,mBAAmB,KAAK;eAEpD,cAAc,YACb,MAAM,IAAI,CAAC,CAAC,OAAO,IAAI,UAAU,MAAM,CAAC,CAAC,CAAC,OAAO,eAAe;IACrD,CAAA;GACb,GAtCG,SAsCH;EAER,CAAC;EAED,OACE,oBAAC,MAAD;GAAmB,GAAI,UAAU,cAAc;aAC5C;EACC,GAFK,QAEL;CAER,CAAC;CAED,OACE,oBAAC,KAAD;EACE,WAAU;EACJ;EACN,GAAI,UAAU,WAAW;EACzB,mBAAiB,aAAa,KAAA;EAC9B,GAAI;YAEJ,oBAAC,SAAD,EAAA,UAAQ,KAAY,CAAA;CACjB,CAAA;AAET,CAAC;AAED,UAAU,UAAUA;AACpB,UAAU,cAAc"}