UNPKG

@mantine/dates

Version:

Calendars, date and time pickers based on Mantine components

1 lines 7.12 kB
{"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"}