{"version":3,"file":"DecadeLevel.cjs","names":["useDatesContext","getDecadeRange","Box","CalendarHeader","YearsList"],"sources":["../../../src/components/DecadeLevel/DecadeLevel.tsx"],"sourcesContent":["import dayjs from 'dayjs';\nimport {\n  Box,\n  BoxProps,\n  ElementProps,\n  factory,\n  Factory,\n  StylesApiProps,\n  useProps,\n} from '@mantine/core';\nimport { DateStringValue } from '../../types';\nimport {\n  CalendarHeader,\n  CalendarHeaderSettings,\n  CalendarHeaderStylesNames,\n} from '../CalendarHeader';\nimport { useDatesContext } from '../DatesProvider';\nimport { YearsList, YearsListSettings, YearsListStylesNames } from '../YearsList';\nimport { getDecadeRange } from './get-decade-range/get-decade-range';\n\nexport type DecadeLevelStylesNames = YearsListStylesNames | CalendarHeaderStylesNames;\n\nexport interface DecadeLevelBaseSettings extends YearsListSettings {\n  /** `dayjs` format for decade label or a function that returns decade label based on the date value @default \"YYYY\" */\n  decadeLabelFormat?:\n    | string\n    | ((startOfDecade: DateStringValue, endOfDecade: DateStringValue) => React.ReactNode);\n}\n\nexport interface DecadeLevelSettings\n  extends DecadeLevelBaseSettings, Omit<CalendarHeaderSettings, 'onLevelClick' | 'hasNextLevel'> {}\n\nexport interface DecadeLevelProps\n  extends\n    BoxProps,\n    DecadeLevelSettings,\n    Omit<StylesApiProps<DecadeLevelFactory>, 'classNames' | 'styles'>,\n    ElementProps<'div'> {\n  classNames?: Partial<Record<string, string>>;\n  styles?: Partial<Record<string, React.CSSProperties>>;\n  __staticSelector?: string;\n\n  /** Displayed decade */\n  decade: DateStringValue;\n\n  /** Level control `aria-label` */\n  levelControlAriaLabel?: string;\n\n  /** Determines whether the calendar should take the full width of its container @default false */\n  fullWidth?: boolean;\n}\n\nexport type DecadeLevelFactory = Factory<{\n  props: DecadeLevelProps;\n  ref: HTMLDivElement;\n  stylesNames: DecadeLevelStylesNames;\n}>;\n\nconst defaultProps = {\n  decadeLabelFormat: 'YYYY',\n} satisfies Partial<DecadeLevelProps>;\n\nexport const DecadeLevel = factory<DecadeLevelFactory>((_props) => {\n  const props = useProps('DecadeLevel', defaultProps, _props);\n  const {\n    // YearsList settings\n    decade,\n    locale,\n    minDate,\n    maxDate,\n    yearsListFormat,\n    getYearControlProps,\n    __getControlRef,\n    __onControlKeyDown,\n    __onControlClick,\n    __onControlMouseEnter,\n    withCellSpacing,\n\n    // CalendarHeader settings\n    __preventFocus,\n    nextIcon,\n    previousIcon,\n    nextLabel,\n    previousLabel,\n    onNext,\n    onPrevious,\n    nextDisabled,\n    previousDisabled,\n    levelControlAriaLabel,\n    withNext,\n    withPrevious,\n    headerControlsOrder,\n\n    // Other props\n    decadeLabelFormat,\n    classNames,\n    styles,\n    unstyled,\n    __staticSelector,\n    __stopPropagation,\n    size,\n    fullWidth,\n    attributes,\n    ...others\n  } = props;\n\n  const ctx = useDatesContext();\n  const [startOfDecade, endOfDecade] = getDecadeRange(decade);\n\n  const stylesApiProps = {\n    __staticSelector: __staticSelector || 'DecadeLevel',\n    classNames,\n    styles,\n    unstyled,\n    size,\n    attributes,\n  };\n\n  const _nextDisabled =\n    typeof nextDisabled === 'boolean'\n      ? nextDisabled\n      : maxDate\n        ? !dayjs(endOfDecade).endOf('year').isBefore(maxDate)\n        : false;\n\n  const _previousDisabled =\n    typeof previousDisabled === 'boolean'\n      ? previousDisabled\n      : minDate\n        ? !dayjs(startOfDecade).startOf('year').isAfter(minDate)\n        : false;\n\n  const formatDecade = (date: DateStringValue, format: string) =>\n    dayjs(date)\n      .locale(locale || ctx.locale)\n      .format(format);\n\n  return (\n    <Box data-decade-level size={size} {...others}>\n      <CalendarHeader\n        label={\n          typeof decadeLabelFormat === 'function'\n            ? decadeLabelFormat(startOfDecade, endOfDecade)\n            : `${formatDecade(startOfDecade, decadeLabelFormat)} – ${formatDecade(\n                endOfDecade,\n                decadeLabelFormat\n              )}`\n        }\n        __preventFocus={__preventFocus}\n        __stopPropagation={__stopPropagation}\n        nextIcon={nextIcon}\n        previousIcon={previousIcon}\n        nextLabel={nextLabel}\n        previousLabel={previousLabel}\n        onNext={onNext}\n        onPrevious={onPrevious}\n        nextDisabled={_nextDisabled}\n        previousDisabled={_previousDisabled}\n        hasNextLevel={false}\n        levelControlAriaLabel={levelControlAriaLabel}\n        withNext={withNext}\n        withPrevious={withPrevious}\n        headerControlsOrder={headerControlsOrder}\n        fullWidth={fullWidth}\n        {...stylesApiProps}\n      />\n\n      <YearsList\n        decade={decade}\n        locale={locale}\n        minDate={minDate}\n        maxDate={maxDate}\n        yearsListFormat={yearsListFormat}\n        getYearControlProps={getYearControlProps}\n        __getControlRef={__getControlRef}\n        __onControlKeyDown={__onControlKeyDown}\n        __onControlClick={__onControlClick}\n        __onControlMouseEnter={__onControlMouseEnter}\n        __preventFocus={__preventFocus}\n        __stopPropagation={__stopPropagation}\n        withCellSpacing={withCellSpacing}\n        fullWidth={fullWidth}\n        {...stylesApiProps}\n      />\n    </Box>\n  );\n});\n\nDecadeLevel.classes = { ...YearsList.classes, ...CalendarHeader.classes };\nDecadeLevel.displayName = '@mantine/dates/DecadeLevel';\n"],"mappings":";;;;;;;;;;;AA0DA,MAAM,eAAe,EACnB,mBAAmB,OACrB;AAEA,MAAa,eAAA,GAAA,cAAA,QAAA,EAA2C,WAAW;CAEjE,MAAM,EAEJ,QACA,QACA,SACA,SACA,iBACA,qBACA,iBACA,oBACA,kBACA,uBACA,iBAGA,gBACA,UACA,cACA,WACA,eACA,QACA,YACA,cACA,kBACA,uBACA,UACA,cACA,qBAGA,mBACA,YACA,QACA,UACA,kBACA,mBACA,MACA,WACA,YACA,GAAG,YAAA,GAAA,cAAA,SAAA,CAxCkB,eAAe,cAAc,MAyC5C;CAER,MAAM,MAAMA,0BAAAA,gBAAgB;CAC5B,MAAM,CAAC,eAAe,eAAeC,yBAAAA,eAAe,MAAM;CAE1D,MAAM,iBAAiB;EACrB,kBAAkB,oBAAoB;EACtC;EACA;EACA;EACA;EACA;CACF;CAEA,MAAM,gBACJ,OAAO,iBAAiB,YACpB,eACA,UACE,EAAA,GAAA,MAAA,QAAA,CAAO,WAAW,CAAC,CAAC,MAAM,MAAM,CAAC,CAAC,SAAS,OAAO,IAClD;CAER,MAAM,oBACJ,OAAO,qBAAqB,YACxB,mBACA,UACE,EAAA,GAAA,MAAA,QAAA,CAAO,aAAa,CAAC,CAAC,QAAQ,MAAM,CAAC,CAAC,QAAQ,OAAO,IACrD;CAER,MAAM,gBAAgB,MAAuB,YAAA,GAAA,MAAA,QAAA,CACrC,IAAI,CAAC,CACR,OAAO,UAAU,IAAI,MAAM,CAAC,CAC5B,OAAO,MAAM;CAElB,OACE,iBAAA,GAAA,kBAAA,KAAA,CAACC,cAAAA,KAAD;EAAK,qBAAA;EAAwB;EAAM,GAAI;YAAvC,CACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,uBAAAA,gBAAD;GACE,OACE,OAAO,sBAAsB,aACzB,kBAAkB,eAAe,WAAW,IAC5C,GAAG,aAAa,eAAe,iBAAiB,EAAE,KAAK,aACrD,aACA,iBACF;GAEU;GACG;GACT;GACI;GACH;GACI;GACP;GACI;GACZ,cAAc;GACd,kBAAkB;GAClB,cAAc;GACS;GACb;GACI;GACO;GACV;GACX,GAAI;EACL,CAAA,GAED,iBAAA,GAAA,kBAAA,IAAA,CAACC,kBAAAA,WAAD;GACU;GACA;GACC;GACA;GACQ;GACI;GACJ;GACG;GACF;GACK;GACP;GACG;GACF;GACN;GACX,GAAI;EACL,CAAA,CACE;;AAET,CAAC;AAED,YAAY,UAAU;CAAE,GAAGA,kBAAAA,UAAU;CAAS,GAAGD,uBAAAA,eAAe;AAAQ;AACxE,YAAY,cAAc"}