@mantine/dates 9.0.0-alpha.7 → 9.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/cjs/components/Calendar/Calendar.cjs.map +1 -1
  2. package/cjs/components/CalendarHeader/CalendarHeader.cjs.map +1 -1
  3. package/cjs/components/DateInput/DateInput.cjs.map +1 -1
  4. package/cjs/components/DatePicker/DatePicker.cjs.map +1 -1
  5. package/cjs/components/DatePickerInput/DatePickerInput.cjs +1 -0
  6. package/cjs/components/DatePickerInput/DatePickerInput.cjs.map +1 -1
  7. package/cjs/components/DateTimePicker/DateTimePicker.cjs.map +1 -1
  8. package/cjs/components/DatesProvider/DatesProvider.cjs.map +1 -1
  9. package/cjs/components/Day/Day.cjs.map +1 -1
  10. package/cjs/components/MiniCalendar/MiniCalendar.cjs.map +1 -1
  11. package/cjs/components/Month/Month.cjs.map +1 -1
  12. package/cjs/components/MonthPicker/MonthPicker.cjs.map +1 -1
  13. package/cjs/components/MonthPickerInput/MonthPickerInput.cjs +1 -0
  14. package/cjs/components/MonthPickerInput/MonthPickerInput.cjs.map +1 -1
  15. package/cjs/components/TimeGrid/TimeGrid.cjs.map +1 -1
  16. package/cjs/components/TimeInput/TimeInput.cjs +1 -1
  17. package/cjs/components/TimeInput/TimeInput.cjs.map +1 -1
  18. package/cjs/components/TimePicker/TimePicker.cjs.map +1 -1
  19. package/cjs/components/YearPicker/YearPicker.cjs.map +1 -1
  20. package/cjs/components/YearPickerInput/YearPickerInput.cjs +1 -0
  21. package/cjs/components/YearPickerInput/YearPickerInput.cjs.map +1 -1
  22. package/esm/components/Calendar/Calendar.mjs.map +1 -1
  23. package/esm/components/CalendarHeader/CalendarHeader.mjs.map +1 -1
  24. package/esm/components/DateInput/DateInput.mjs.map +1 -1
  25. package/esm/components/DatePicker/DatePicker.mjs.map +1 -1
  26. package/esm/components/DatePickerInput/DatePickerInput.mjs +1 -0
  27. package/esm/components/DatePickerInput/DatePickerInput.mjs.map +1 -1
  28. package/esm/components/DateTimePicker/DateTimePicker.mjs.map +1 -1
  29. package/esm/components/DatesProvider/DatesProvider.mjs.map +1 -1
  30. package/esm/components/Day/Day.mjs.map +1 -1
  31. package/esm/components/MiniCalendar/MiniCalendar.mjs.map +1 -1
  32. package/esm/components/Month/Month.mjs.map +1 -1
  33. package/esm/components/MonthPicker/MonthPicker.mjs.map +1 -1
  34. package/esm/components/MonthPickerInput/MonthPickerInput.mjs +1 -0
  35. package/esm/components/MonthPickerInput/MonthPickerInput.mjs.map +1 -1
  36. package/esm/components/TimeGrid/TimeGrid.mjs.map +1 -1
  37. package/esm/components/TimeInput/TimeInput.mjs +1 -1
  38. package/esm/components/TimeInput/TimeInput.mjs.map +1 -1
  39. package/esm/components/TimePicker/TimePicker.mjs.map +1 -1
  40. package/esm/components/YearPicker/YearPicker.mjs.map +1 -1
  41. package/esm/components/YearPickerInput/YearPickerInput.mjs +1 -0
  42. package/esm/components/YearPickerInput/YearPickerInput.mjs.map +1 -1
  43. package/lib/components/Calendar/Calendar.d.ts +8 -0
  44. package/lib/components/Calendar/index.d.ts +0 -8
  45. package/lib/components/CalendarHeader/CalendarHeader.d.ts +7 -0
  46. package/lib/components/CalendarHeader/index.d.ts +0 -7
  47. package/lib/components/DateInput/DateInput.d.ts +5 -0
  48. package/lib/components/DateInput/index.d.ts +0 -5
  49. package/lib/components/DatePicker/DatePicker.d.ts +8 -0
  50. package/lib/components/DatePicker/index.d.ts +0 -9
  51. package/lib/components/DatePickerInput/DatePickerInput.d.ts +5 -0
  52. package/lib/components/DatePickerInput/index.d.ts +0 -5
  53. package/lib/components/DateTimePicker/DateTimePicker.d.ts +5 -0
  54. package/lib/components/DateTimePicker/index.d.ts +0 -5
  55. package/lib/components/DatesProvider/DatesProvider.d.ts +4 -0
  56. package/lib/components/DatesProvider/index.d.ts +0 -4
  57. package/lib/components/Day/Day.d.ts +6 -0
  58. package/lib/components/Day/index.d.ts +0 -6
  59. package/lib/components/MiniCalendar/MiniCalendar.d.ts +6 -0
  60. package/lib/components/MiniCalendar/index.d.ts +0 -6
  61. package/lib/components/Month/Month.d.ts +6 -0
  62. package/lib/components/Month/index.d.ts +0 -6
  63. package/lib/components/MonthPicker/MonthPicker.d.ts +5 -0
  64. package/lib/components/MonthPicker/index.d.ts +0 -6
  65. package/lib/components/MonthPickerInput/MonthPickerInput.d.ts +5 -0
  66. package/lib/components/MonthPickerInput/index.d.ts +0 -6
  67. package/lib/components/TimeGrid/TimeGrid.d.ts +6 -0
  68. package/lib/components/TimeGrid/index.d.ts +0 -6
  69. package/lib/components/TimeInput/TimeInput.d.ts +4 -0
  70. package/lib/components/TimeInput/index.d.ts +0 -4
  71. package/lib/components/TimePicker/TimePicker.d.ts +10 -0
  72. package/lib/components/TimePicker/index.d.ts +0 -10
  73. package/lib/components/YearPicker/YearPicker.d.ts +6 -0
  74. package/lib/components/YearPicker/index.d.ts +0 -7
  75. package/lib/components/YearPickerInput/YearPickerInput.d.ts +5 -0
  76. package/lib/components/YearPickerInput/index.d.ts +0 -6
  77. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"MonthPicker.cjs","names":["useDatesState","Calendar"],"sources":["../../../src/components/MonthPicker/MonthPicker.tsx"],"sourcesContent":["import {\n BoxProps,\n ElementProps,\n factory,\n Factory,\n MantineComponentStaticProperties,\n StylesApiProps,\n useProps,\n useResolvedStylesApi,\n} from '@mantine/core';\nimport { useDatesState } from '../../hooks';\nimport { CalendarLevel, DatePickerType, DateStringValue, PickerBaseProps } from '../../types';\nimport { Calendar, CalendarBaseProps } from '../Calendar';\nimport { DecadeLevelBaseSettings } from '../DecadeLevel';\nimport { DecadeLevelGroupStylesNames } from '../DecadeLevelGroup';\nimport { YearLevelBaseSettings } from '../YearLevel';\nimport { YearLevelGroupStylesNames } from '../YearLevelGroup';\n\nexport type MonthPickerStylesNames = DecadeLevelGroupStylesNames | YearLevelGroupStylesNames;\n\ntype MonthPickerLevel = Exclude<CalendarLevel, 'month'>;\n\nexport interface MonthPickerBaseProps<Type extends DatePickerType = 'default'>\n extends\n PickerBaseProps<Type>,\n DecadeLevelBaseSettings,\n YearLevelBaseSettings,\n Omit<CalendarBaseProps, 'onNextMonth' | 'onPreviousMonth' | 'hasNextLevel'> {\n /** Max level that user can go up to @default 'decade' */\n maxLevel?: CalendarLevel;\n\n /** Initial displayed level (uncontrolled) */\n defaultLevel?: CalendarLevel;\n\n /** Current displayed level (controlled) */\n level?: CalendarLevel;\n\n /** Called when level changes */\n onLevelChange?: (level: MonthPickerLevel) => void;\n}\n\nexport interface MonthPickerProps<Type extends DatePickerType = 'default'>\n extends\n BoxProps,\n MonthPickerBaseProps<Type>,\n StylesApiProps<MonthPickerFactory>,\n ElementProps<'div', 'onChange' | 'value' | 'defaultValue'> {\n /** Called when month is selected */\n onMonthSelect?: (date: DateStringValue) => void;\n}\n\nexport type MonthPickerFactory = Factory<{\n props: MonthPickerProps;\n ref: HTMLDivElement;\n stylesNames: MonthPickerStylesNames;\n}>;\n\nconst defaultProps = {\n type: 'default',\n} satisfies Partial<MonthPickerProps>;\n\ntype MonthPickerComponent = (<Type extends DatePickerType = 'default'>(\n props: MonthPickerProps<Type> & { ref?: React.Ref<HTMLDivElement> }\n) => React.JSX.Element) & {\n displayName?: string;\n} & MantineComponentStaticProperties<MonthPickerFactory>;\n\nexport const MonthPicker: MonthPickerComponent = factory<MonthPickerFactory>((_props) => {\n const props = useProps('MonthPicker', defaultProps, _props);\n const {\n classNames,\n styles,\n vars,\n type,\n defaultValue,\n value,\n onChange,\n __staticSelector,\n getMonthControlProps,\n allowSingleDateInRange,\n allowDeselect,\n onMouseLeave,\n onMonthSelect,\n __updateDateOnMonthSelect,\n onLevelChange,\n ...others\n } = props;\n\n const { onDateChange, onRootMouseLeave, onHoveredDateChange, getControlProps } = useDatesState({\n type: type as any,\n level: 'month',\n allowDeselect,\n allowSingleDateInRange,\n value,\n defaultValue,\n onChange: onChange as any,\n onMouseLeave,\n });\n\n const { resolvedClassNames, resolvedStyles } = useResolvedStylesApi<MonthPickerFactory>({\n classNames,\n styles,\n props,\n });\n\n return (\n <Calendar\n minLevel=\"year\"\n __updateDateOnMonthSelect={__updateDateOnMonthSelect ?? false}\n __staticSelector={__staticSelector || 'MonthPicker'}\n onMouseLeave={onRootMouseLeave}\n onMonthMouseEnter={(_event, date) => onHoveredDateChange(date)}\n onMonthSelect={(date) => {\n onDateChange(date);\n onMonthSelect?.(date);\n }}\n getMonthControlProps={(date) => ({\n ...getControlProps(date),\n ...getMonthControlProps?.(date),\n })}\n classNames={resolvedClassNames}\n styles={resolvedStyles}\n onLevelChange={onLevelChange as any}\n {...others}\n />\n );\n}) as any;\n\nMonthPicker.classes = Calendar.classes;\nMonthPicker.displayName = '@mantine/dates/MonthPicker';\n"],"mappings":";;;;;;;AAyDA,MAAM,eAAe,EACnB,MAAM,WACP;AAQD,MAAa,eAAA,GAAA,cAAA,UAAiE,WAAW;CACvF,MAAM,SAAA,GAAA,cAAA,UAAiB,eAAe,cAAc,OAAO;CAC3D,MAAM,EACJ,YACA,QACA,MACA,MACA,cACA,OACA,UACA,kBACA,sBACA,wBACA,eACA,cACA,eACA,2BACA,eACA,GAAG,WACD;CAEJ,MAAM,EAAE,cAAc,kBAAkB,qBAAqB,oBAAoBA,wBAAAA,cAAc;EACvF;EACN,OAAO;EACP;EACA;EACA;EACA;EACU;EACV;EACD,CAAC;CAEF,MAAM,EAAE,oBAAoB,oBAAA,GAAA,cAAA,sBAA4D;EACtF;EACA;EACA;EACD,CAAC;AAEF,QACE,iBAAA,GAAA,kBAAA,KAACC,iBAAAA,UAAD;EACE,UAAS;EACT,2BAA2B,6BAA6B;EACxD,kBAAkB,oBAAoB;EACtC,cAAc;EACd,oBAAoB,QAAQ,SAAS,oBAAoB,KAAK;EAC9D,gBAAgB,SAAS;AACvB,gBAAa,KAAK;AAClB,mBAAgB,KAAK;;EAEvB,uBAAuB,UAAU;GAC/B,GAAG,gBAAgB,KAAK;GACxB,GAAG,uBAAuB,KAAK;GAChC;EACD,YAAY;EACZ,QAAQ;EACO;EACf,GAAI;EACJ,CAAA;EAEJ;AAEF,YAAY,UAAUA,iBAAAA,SAAS;AAC/B,YAAY,cAAc"}
1
+ {"version":3,"file":"MonthPicker.cjs","names":["useDatesState","Calendar"],"sources":["../../../src/components/MonthPicker/MonthPicker.tsx"],"sourcesContent":["import {\n BoxProps,\n ElementProps,\n factory,\n Factory,\n MantineComponentStaticProperties,\n StylesApiProps,\n useProps,\n useResolvedStylesApi,\n} from '@mantine/core';\nimport { useDatesState } from '../../hooks';\nimport { CalendarLevel, DatePickerType, DateStringValue, PickerBaseProps } from '../../types';\nimport { Calendar, CalendarBaseProps } from '../Calendar';\nimport { DecadeLevelBaseSettings } from '../DecadeLevel';\nimport { DecadeLevelGroupStylesNames } from '../DecadeLevelGroup';\nimport { YearLevelBaseSettings } from '../YearLevel';\nimport { YearLevelGroupStylesNames } from '../YearLevelGroup';\n\nexport type MonthPickerStylesNames = DecadeLevelGroupStylesNames | YearLevelGroupStylesNames;\n\ntype MonthPickerLevel = Exclude<CalendarLevel, 'month'>;\n\nexport interface MonthPickerBaseProps<Type extends DatePickerType = 'default'>\n extends\n PickerBaseProps<Type>,\n DecadeLevelBaseSettings,\n YearLevelBaseSettings,\n Omit<CalendarBaseProps, 'onNextMonth' | 'onPreviousMonth' | 'hasNextLevel'> {\n /** Max level that user can go up to @default 'decade' */\n maxLevel?: CalendarLevel;\n\n /** Initial displayed level (uncontrolled) */\n defaultLevel?: CalendarLevel;\n\n /** Current displayed level (controlled) */\n level?: CalendarLevel;\n\n /** Called when level changes */\n onLevelChange?: (level: MonthPickerLevel) => void;\n}\n\nexport interface MonthPickerProps<Type extends DatePickerType = 'default'>\n extends\n BoxProps,\n MonthPickerBaseProps<Type>,\n StylesApiProps<MonthPickerFactory>,\n ElementProps<'div', 'onChange' | 'value' | 'defaultValue'> {\n /** Called when month is selected */\n onMonthSelect?: (date: DateStringValue) => void;\n}\n\nexport type MonthPickerFactory = Factory<{\n props: MonthPickerProps;\n ref: HTMLDivElement;\n stylesNames: MonthPickerStylesNames;\n}>;\n\nconst defaultProps = {\n type: 'default',\n} satisfies Partial<MonthPickerProps>;\n\ntype MonthPickerComponent = (<Type extends DatePickerType = 'default'>(\n props: MonthPickerProps<Type> & { ref?: React.Ref<HTMLDivElement> }\n) => React.JSX.Element) & {\n displayName?: string;\n} & MantineComponentStaticProperties<MonthPickerFactory>;\n\nexport const MonthPicker: MonthPickerComponent = factory<MonthPickerFactory>((_props) => {\n const props = useProps('MonthPicker', defaultProps, _props);\n const {\n classNames,\n styles,\n vars,\n type,\n defaultValue,\n value,\n onChange,\n __staticSelector,\n getMonthControlProps,\n allowSingleDateInRange,\n allowDeselect,\n onMouseLeave,\n onMonthSelect,\n __updateDateOnMonthSelect,\n onLevelChange,\n ...others\n } = props;\n\n const { onDateChange, onRootMouseLeave, onHoveredDateChange, getControlProps } = useDatesState({\n type: type as any,\n level: 'month',\n allowDeselect,\n allowSingleDateInRange,\n value,\n defaultValue,\n onChange: onChange as any,\n onMouseLeave,\n });\n\n const { resolvedClassNames, resolvedStyles } = useResolvedStylesApi<MonthPickerFactory>({\n classNames,\n styles,\n props,\n });\n\n return (\n <Calendar\n minLevel=\"year\"\n __updateDateOnMonthSelect={__updateDateOnMonthSelect ?? false}\n __staticSelector={__staticSelector || 'MonthPicker'}\n onMouseLeave={onRootMouseLeave}\n onMonthMouseEnter={(_event, date) => onHoveredDateChange(date)}\n onMonthSelect={(date) => {\n onDateChange(date);\n onMonthSelect?.(date);\n }}\n getMonthControlProps={(date) => ({\n ...getControlProps(date),\n ...getMonthControlProps?.(date),\n })}\n classNames={resolvedClassNames}\n styles={resolvedStyles}\n onLevelChange={onLevelChange as any}\n {...others}\n />\n );\n}) as any;\n\nMonthPicker.classes = Calendar.classes;\nMonthPicker.displayName = '@mantine/dates/MonthPicker';\n\nexport namespace MonthPicker {\n export type Props<Type extends DatePickerType = 'default'> = MonthPickerProps<Type>;\n export type StylesNames = MonthPickerStylesNames;\n export type Factory = MonthPickerFactory;\n}\n"],"mappings":";;;;;;;AAyDA,MAAM,eAAe,EACnB,MAAM,WACP;AAQD,MAAa,eAAA,GAAA,cAAA,UAAiE,WAAW;CACvF,MAAM,SAAA,GAAA,cAAA,UAAiB,eAAe,cAAc,OAAO;CAC3D,MAAM,EACJ,YACA,QACA,MACA,MACA,cACA,OACA,UACA,kBACA,sBACA,wBACA,eACA,cACA,eACA,2BACA,eACA,GAAG,WACD;CAEJ,MAAM,EAAE,cAAc,kBAAkB,qBAAqB,oBAAoBA,wBAAAA,cAAc;EACvF;EACN,OAAO;EACP;EACA;EACA;EACA;EACU;EACV;EACD,CAAC;CAEF,MAAM,EAAE,oBAAoB,oBAAA,GAAA,cAAA,sBAA4D;EACtF;EACA;EACA;EACD,CAAC;AAEF,QACE,iBAAA,GAAA,kBAAA,KAACC,iBAAAA,UAAD;EACE,UAAS;EACT,2BAA2B,6BAA6B;EACxD,kBAAkB,oBAAoB;EACtC,cAAc;EACd,oBAAoB,QAAQ,SAAS,oBAAoB,KAAK;EAC9D,gBAAgB,SAAS;AACvB,gBAAa,KAAK;AAClB,mBAAgB,KAAK;;EAEvB,uBAAuB,UAAU;GAC/B,GAAG,gBAAgB,KAAK;GACxB,GAAG,uBAAuB,KAAK;GAChC;EACD,YAAY;EACZ,QAAQ;EACO;EACf,GAAI;EACJ,CAAA;EAEJ;AAEF,YAAY,UAAUA,iBAAAA,SAAS;AAC/B,YAAY,cAAc"}
@@ -10,6 +10,7 @@ let _mantine_core = require("@mantine/core");
10
10
  //#region packages/@mantine/dates/src/components/MonthPickerInput/MonthPickerInput.tsx
11
11
  const defaultProps = {
12
12
  type: "default",
13
+ size: "sm",
13
14
  valueFormat: "MMMM YYYY",
14
15
  closeOnChange: true,
15
16
  sortDates: true,
@@ -1 +1 @@
1
- {"version":3,"file":"MonthPickerInput.cjs","names":["pickCalendarProps","useDatesInput","PickerInputBase","MonthPicker","getDefaultClampedDate"],"sources":["../../../src/components/MonthPickerInput/MonthPickerInput.tsx"],"sourcesContent":["import {\n __InputStylesNames,\n BoxProps,\n factory,\n Factory,\n InputVariant,\n MantineComponentStaticProperties,\n StylesApiProps,\n useProps,\n useResolvedStylesApi,\n} from '@mantine/core';\nimport { useDatesInput } from '../../hooks';\nimport { DatePickerType } from '../../types';\nimport { getDefaultClampedDate } from '../../utils';\nimport { pickCalendarProps } from '../Calendar';\nimport { MonthPicker, MonthPickerBaseProps, MonthPickerStylesNames } from '../MonthPicker';\nimport { DateInputSharedProps, PickerInputBase } from '../PickerInputBase';\n\nexport type MonthPickerInputStylesNames =\n | __InputStylesNames\n | 'placeholder'\n | MonthPickerStylesNames;\n\nexport interface MonthPickerInputProps<Type extends DatePickerType = 'default'>\n extends\n BoxProps,\n DateInputSharedProps,\n MonthPickerBaseProps<Type>,\n StylesApiProps<MonthPickerInputFactory> {\n /** `dayjs` format for input value @default \"MMMM YYYY\" */\n valueFormat?: string;\n}\n\nexport type MonthPickerInputFactory = Factory<{\n props: MonthPickerInputProps;\n ref: HTMLButtonElement;\n stylesNames: MonthPickerInputStylesNames;\n variant: InputVariant;\n}>;\n\nconst defaultProps = {\n type: 'default',\n valueFormat: 'MMMM YYYY',\n closeOnChange: true,\n sortDates: true,\n dropdownType: 'popover',\n} satisfies Partial<MonthPickerInputProps>;\n\ntype MonthPickerInputComponent = (<Type extends DatePickerType = 'default'>(\n props: MonthPickerInputProps<Type> & { ref?: React.Ref<HTMLButtonElement> }\n) => React.JSX.Element) & {\n displayName?: string;\n} & MantineComponentStaticProperties<MonthPickerInputFactory>;\n\nexport const MonthPickerInput: MonthPickerInputComponent = factory<MonthPickerInputFactory>(\n (_props) => {\n const props = useProps('MonthPickerInput', defaultProps, _props);\n const {\n type,\n value,\n defaultValue,\n onChange,\n valueFormat,\n labelSeparator,\n locale,\n classNames,\n styles,\n unstyled,\n closeOnChange,\n size,\n variant,\n dropdownType,\n sortDates,\n minDate,\n maxDate,\n vars,\n valueFormatter,\n attributes,\n ...rest\n } = props;\n\n const { resolvedClassNames, resolvedStyles } = useResolvedStylesApi<MonthPickerInputFactory>({\n classNames,\n styles,\n props,\n });\n\n const { calendarProps, others } = pickCalendarProps(rest);\n\n const {\n _value,\n setValue,\n formattedValue,\n dropdownHandlers,\n dropdownOpened,\n onClear,\n shouldClear,\n } = useDatesInput({\n type: type as any,\n value,\n defaultValue,\n onChange: onChange as any,\n locale,\n format: valueFormat,\n labelSeparator,\n closeOnChange,\n sortDates,\n valueFormatter,\n });\n\n return (\n <PickerInputBase\n formattedValue={formattedValue}\n dropdownOpened={dropdownOpened}\n dropdownHandlers={dropdownHandlers}\n classNames={resolvedClassNames}\n styles={resolvedStyles}\n unstyled={unstyled}\n onClear={onClear}\n shouldClear={shouldClear}\n value={_value}\n size={size}\n variant={variant}\n dropdownType={dropdownType}\n {...others}\n attributes={attributes}\n type={type as any}\n __staticSelector=\"MonthPickerInput\"\n >\n <MonthPicker\n {...calendarProps}\n size={size}\n variant={variant}\n type={type}\n value={_value}\n defaultDate={\n calendarProps.defaultDate ||\n (Array.isArray(_value)\n ? _value[0] || getDefaultClampedDate({ maxDate, minDate })\n : _value || getDefaultClampedDate({ maxDate, minDate }))\n }\n onChange={setValue}\n locale={locale}\n classNames={resolvedClassNames}\n styles={resolvedStyles}\n unstyled={unstyled}\n __staticSelector=\"MonthPickerInput\"\n __stopPropagation={dropdownType === 'popover'}\n minDate={minDate}\n maxDate={maxDate}\n attributes={attributes}\n />\n </PickerInputBase>\n );\n }\n) as any;\n\nMonthPickerInput.classes = { ...PickerInputBase.classes, ...MonthPicker.classes };\nMonthPickerInput.displayName = '@mantine/dates/MonthPickerInput';\n"],"mappings":";;;;;;;;;;AAwCA,MAAM,eAAe;CACnB,MAAM;CACN,aAAa;CACb,eAAe;CACf,WAAW;CACX,cAAc;CACf;AAQD,MAAa,oBAAA,GAAA,cAAA,UACV,WAAW;CACV,MAAM,SAAA,GAAA,cAAA,UAAiB,oBAAoB,cAAc,OAAO;CAChE,MAAM,EACJ,MACA,OACA,cACA,UACA,aACA,gBACA,QACA,YACA,QACA,UACA,eACA,MACA,SACA,cACA,WACA,SACA,SACA,MACA,gBACA,YACA,GAAG,SACD;CAEJ,MAAM,EAAE,oBAAoB,oBAAA,GAAA,cAAA,sBAAiE;EAC3F;EACA;EACA;EACD,CAAC;CAEF,MAAM,EAAE,eAAe,WAAWA,mCAAAA,kBAAkB,KAAK;CAEzD,MAAM,EACJ,QACA,UACA,gBACA,kBACA,gBACA,SACA,gBACEC,wBAAAA,cAAc;EACV;EACN;EACA;EACU;EACV;EACA,QAAQ;EACR;EACA;EACA;EACA;EACD,CAAC;AAEF,QACE,iBAAA,GAAA,kBAAA,KAACC,wBAAAA,iBAAD;EACkB;EACA;EACE;EAClB,YAAY;EACZ,QAAQ;EACE;EACD;EACI;EACb,OAAO;EACD;EACG;EACK;EACd,GAAI;EACQ;EACN;EACN,kBAAiB;YAEjB,iBAAA,GAAA,kBAAA,KAACC,oBAAAA,aAAD;GACE,GAAI;GACE;GACG;GACH;GACN,OAAO;GACP,aACE,cAAc,gBACb,MAAM,QAAQ,OAAO,GAClB,OAAO,MAAMC,iCAAAA,sBAAsB;IAAE;IAAS;IAAS,CAAC,GACxD,UAAUA,iCAAAA,sBAAsB;IAAE;IAAS;IAAS,CAAC;GAE3D,UAAU;GACF;GACR,YAAY;GACZ,QAAQ;GACE;GACV,kBAAiB;GACjB,mBAAmB,iBAAiB;GAC3B;GACA;GACG;GACZ,CAAA;EACc,CAAA;EAGvB;AAED,iBAAiB,UAAU;CAAE,GAAGF,wBAAAA,gBAAgB;CAAS,GAAGC,oBAAAA,YAAY;CAAS;AACjF,iBAAiB,cAAc"}
1
+ {"version":3,"file":"MonthPickerInput.cjs","names":["pickCalendarProps","useDatesInput","PickerInputBase","MonthPicker","getDefaultClampedDate"],"sources":["../../../src/components/MonthPickerInput/MonthPickerInput.tsx"],"sourcesContent":["import {\n __InputStylesNames,\n BoxProps,\n factory,\n Factory,\n InputVariant,\n MantineComponentStaticProperties,\n StylesApiProps,\n useProps,\n useResolvedStylesApi,\n} from '@mantine/core';\nimport { useDatesInput } from '../../hooks';\nimport { DatePickerType } from '../../types';\nimport { getDefaultClampedDate } from '../../utils';\nimport { pickCalendarProps } from '../Calendar';\nimport { MonthPicker, MonthPickerBaseProps, MonthPickerStylesNames } from '../MonthPicker';\nimport { DateInputSharedProps, PickerInputBase } from '../PickerInputBase';\n\nexport type MonthPickerInputStylesNames =\n | __InputStylesNames\n | 'placeholder'\n | MonthPickerStylesNames;\n\nexport interface MonthPickerInputProps<Type extends DatePickerType = 'default'>\n extends\n BoxProps,\n DateInputSharedProps,\n MonthPickerBaseProps<Type>,\n StylesApiProps<MonthPickerInputFactory> {\n /** `dayjs` format for input value @default \"MMMM YYYY\" */\n valueFormat?: string;\n}\n\nexport type MonthPickerInputFactory = Factory<{\n props: MonthPickerInputProps;\n ref: HTMLButtonElement;\n stylesNames: MonthPickerInputStylesNames;\n variant: InputVariant;\n}>;\n\nconst defaultProps = {\n type: 'default',\n size: 'sm',\n valueFormat: 'MMMM YYYY',\n closeOnChange: true,\n sortDates: true,\n dropdownType: 'popover',\n} satisfies Partial<MonthPickerInputProps>;\n\ntype MonthPickerInputComponent = (<Type extends DatePickerType = 'default'>(\n props: MonthPickerInputProps<Type> & { ref?: React.Ref<HTMLButtonElement> }\n) => React.JSX.Element) & {\n displayName?: string;\n} & MantineComponentStaticProperties<MonthPickerInputFactory>;\n\nexport const MonthPickerInput: MonthPickerInputComponent = factory<MonthPickerInputFactory>(\n (_props) => {\n const props = useProps('MonthPickerInput', defaultProps, _props);\n const {\n type,\n value,\n defaultValue,\n onChange,\n valueFormat,\n labelSeparator,\n locale,\n classNames,\n styles,\n unstyled,\n closeOnChange,\n size,\n variant,\n dropdownType,\n sortDates,\n minDate,\n maxDate,\n vars,\n valueFormatter,\n attributes,\n ...rest\n } = props;\n\n const { resolvedClassNames, resolvedStyles } = useResolvedStylesApi<MonthPickerInputFactory>({\n classNames,\n styles,\n props,\n });\n\n const { calendarProps, others } = pickCalendarProps(rest);\n\n const {\n _value,\n setValue,\n formattedValue,\n dropdownHandlers,\n dropdownOpened,\n onClear,\n shouldClear,\n } = useDatesInput({\n type: type as any,\n value,\n defaultValue,\n onChange: onChange as any,\n locale,\n format: valueFormat,\n labelSeparator,\n closeOnChange,\n sortDates,\n valueFormatter,\n });\n\n return (\n <PickerInputBase\n formattedValue={formattedValue}\n dropdownOpened={dropdownOpened}\n dropdownHandlers={dropdownHandlers}\n classNames={resolvedClassNames}\n styles={resolvedStyles}\n unstyled={unstyled}\n onClear={onClear}\n shouldClear={shouldClear}\n value={_value}\n size={size}\n variant={variant}\n dropdownType={dropdownType}\n {...others}\n attributes={attributes}\n type={type as any}\n __staticSelector=\"MonthPickerInput\"\n >\n <MonthPicker\n {...calendarProps}\n size={size}\n variant={variant}\n type={type}\n value={_value}\n defaultDate={\n calendarProps.defaultDate ||\n (Array.isArray(_value)\n ? _value[0] || getDefaultClampedDate({ maxDate, minDate })\n : _value || getDefaultClampedDate({ maxDate, minDate }))\n }\n onChange={setValue}\n locale={locale}\n classNames={resolvedClassNames}\n styles={resolvedStyles}\n unstyled={unstyled}\n __staticSelector=\"MonthPickerInput\"\n __stopPropagation={dropdownType === 'popover'}\n minDate={minDate}\n maxDate={maxDate}\n attributes={attributes}\n />\n </PickerInputBase>\n );\n }\n) as any;\n\nMonthPickerInput.classes = { ...PickerInputBase.classes, ...MonthPicker.classes };\nMonthPickerInput.displayName = '@mantine/dates/MonthPickerInput';\n\nexport namespace MonthPickerInput {\n export type Props<Type extends DatePickerType = 'default'> = MonthPickerInputProps<Type>;\n export type StylesNames = MonthPickerInputStylesNames;\n export type Factory = MonthPickerInputFactory;\n}\n"],"mappings":";;;;;;;;;;AAwCA,MAAM,eAAe;CACnB,MAAM;CACN,MAAM;CACN,aAAa;CACb,eAAe;CACf,WAAW;CACX,cAAc;CACf;AAQD,MAAa,oBAAA,GAAA,cAAA,UACV,WAAW;CACV,MAAM,SAAA,GAAA,cAAA,UAAiB,oBAAoB,cAAc,OAAO;CAChE,MAAM,EACJ,MACA,OACA,cACA,UACA,aACA,gBACA,QACA,YACA,QACA,UACA,eACA,MACA,SACA,cACA,WACA,SACA,SACA,MACA,gBACA,YACA,GAAG,SACD;CAEJ,MAAM,EAAE,oBAAoB,oBAAA,GAAA,cAAA,sBAAiE;EAC3F;EACA;EACA;EACD,CAAC;CAEF,MAAM,EAAE,eAAe,WAAWA,mCAAAA,kBAAkB,KAAK;CAEzD,MAAM,EACJ,QACA,UACA,gBACA,kBACA,gBACA,SACA,gBACEC,wBAAAA,cAAc;EACV;EACN;EACA;EACU;EACV;EACA,QAAQ;EACR;EACA;EACA;EACA;EACD,CAAC;AAEF,QACE,iBAAA,GAAA,kBAAA,KAACC,wBAAAA,iBAAD;EACkB;EACA;EACE;EAClB,YAAY;EACZ,QAAQ;EACE;EACD;EACI;EACb,OAAO;EACD;EACG;EACK;EACd,GAAI;EACQ;EACN;EACN,kBAAiB;YAEjB,iBAAA,GAAA,kBAAA,KAACC,oBAAAA,aAAD;GACE,GAAI;GACE;GACG;GACH;GACN,OAAO;GACP,aACE,cAAc,gBACb,MAAM,QAAQ,OAAO,GAClB,OAAO,MAAMC,iCAAAA,sBAAsB;IAAE;IAAS;IAAS,CAAC,GACxD,UAAUA,iCAAAA,sBAAsB;IAAE;IAAS;IAAS,CAAC;GAE3D,UAAU;GACF;GACR,YAAY;GACZ,QAAQ;GACE;GACV,kBAAiB;GACjB,mBAAmB,iBAAiB;GAC3B;GACA;GACG;GACZ,CAAA;EACc,CAAA;EAGvB;AAED,iBAAiB,UAAU;CAAE,GAAGF,wBAAAA,gBAAgB;CAAS,GAAGC,oBAAAA,YAAY;CAAS;AACjF,iBAAiB,cAAc"}
@@ -1 +1 @@
1
- {"version":3,"file":"TimeGrid.cjs","names":["isTimeBefore","isTimeAfter","isSameTime","TimeGridControl","TimeGridProvider","Box","SimpleGrid","classes"],"sources":["../../../src/components/TimeGrid/TimeGrid.tsx"],"sourcesContent":["import {\n Box,\n BoxProps,\n createVarsResolver,\n DataAttributes,\n ElementProps,\n factory,\n Factory,\n getFontSize,\n getRadius,\n MantineRadius,\n MantineSize,\n SimpleGrid,\n SimpleGridProps,\n StylesApiProps,\n useProps,\n useStyles,\n} from '@mantine/core';\nimport { useUncontrolled } from '@mantine/hooks';\nimport type { TimePickerAmPmLabels, TimePickerFormat } from '../TimePicker';\nimport { isSameTime } from '../TimePicker/utils/is-same-time/is-same-time';\nimport { isTimeAfter, isTimeBefore } from './compare-time';\nimport { TimeGridProvider } from './TimeGrid.context';\nimport { TimeGridControl } from './TimeGridControl';\nimport classes from './TimeGrid.module.css';\n\nexport type TimeGridStylesNames = 'root' | 'control' | 'simpleGrid';\nexport type TimeGridCssVariables = {\n root: '--time-grid-fz' | '--time-grid-radius';\n};\n\nexport interface TimeGridProps\n extends\n BoxProps,\n StylesApiProps<TimeGridFactory>,\n ElementProps<'div', 'onChange' | 'value' | 'defaultValue'> {\n /** Time data in 24h format to be displayed in the grid, for example `['10:00', '18:30', '22:00']`. Time values must be unique. */\n data: string[];\n\n /** Controlled component value */\n value?: string | null;\n\n /** Uncontrolled component default value */\n defaultValue?: string | null;\n\n /** Called when value changes */\n onChange?: (value: string | null) => void;\n\n /** Determines whether the value can be deselected when the current active option is clicked or activated with keyboard @default false */\n allowDeselect?: boolean;\n\n /** Time format displayed in the grid @default '24h' */\n format?: TimePickerFormat;\n\n /** Determines whether the seconds part should be displayed @default false */\n withSeconds?: boolean;\n\n /** Labels used for am/pm values @default { am: 'AM', pm: 'PM' } */\n amPmLabels?: TimePickerAmPmLabels;\n\n /** Props passed down to the underlying `SimpleGrid` component @default { cols: 3, spacing: 'xs' } */\n simpleGridProps?: SimpleGridProps;\n\n /** A function to pass props down to control based on the time value */\n getControlProps?: (time: string) => React.ComponentProps<'button'> & DataAttributes;\n\n /** Key of `theme.radius` or any valid CSS value to set `border-radius` @default theme.defaultRadius */\n radius?: MantineRadius;\n\n /** Control `font-size` of controls, key of `theme.fontSizes` or any valid CSS value @default 'sm' */\n size?: MantineSize;\n\n /** All controls before this time are disabled */\n minTime?: string;\n\n /** All controls after this time are disabled */\n maxTime?: string;\n\n /** Array of time values to disable */\n disableTime?: string[] | ((time: string) => boolean);\n\n /** If set, all controls are disabled */\n disabled?: boolean;\n}\n\nexport type TimeGridFactory = Factory<{\n props: TimeGridProps;\n ref: HTMLDivElement;\n stylesNames: TimeGridStylesNames;\n vars: TimeGridCssVariables;\n}>;\n\nconst defaultProps = {\n simpleGridProps: { cols: 3, spacing: 'xs' },\n format: '24h',\n amPmLabels: { am: 'AM', pm: 'PM' },\n} satisfies Partial<TimeGridProps>;\n\nconst varsResolver = createVarsResolver<TimeGridFactory>((_theme, { size, radius }) => ({\n root: {\n '--time-grid-fz': getFontSize(size),\n '--time-grid-radius': getRadius(radius),\n },\n}));\n\nexport const TimeGrid = factory<TimeGridFactory>((_props) => {\n const props = useProps('TimeGrid', defaultProps, _props);\n const {\n classNames,\n className,\n style,\n styles,\n unstyled,\n vars,\n data,\n value,\n defaultValue,\n onChange,\n format,\n withSeconds = false,\n amPmLabels,\n allowDeselect,\n simpleGridProps,\n getControlProps,\n minTime,\n maxTime,\n disableTime,\n disabled,\n attributes,\n ...others\n } = props;\n\n const getStyles = useStyles<TimeGridFactory>({\n name: 'TimeGrid',\n classes,\n props,\n className,\n style,\n classNames,\n styles,\n unstyled,\n attributes,\n vars,\n varsResolver,\n });\n\n const [_value, setValue] = useUncontrolled({\n value,\n defaultValue,\n finalValue: null,\n onChange,\n });\n\n const controls = data.map((time) => {\n const isDisabled =\n disabled ||\n (!!minTime && isTimeBefore(time, minTime)) ||\n (!!maxTime && isTimeAfter(time, maxTime)) ||\n (Array.isArray(disableTime)\n ? !!disableTime.find((t) => isSameTime({ time, compare: t, withSeconds }))\n : !!disableTime?.(time));\n\n return (\n <TimeGridControl\n key={time}\n active={isSameTime({ time, compare: _value || '', withSeconds })}\n time={time}\n onClick={() => {\n const nextValue =\n allowDeselect &&\n (_value === null ? time === _value : isSameTime({ time, compare: _value, withSeconds }))\n ? null\n : time;\n nextValue !== _value && setValue(nextValue);\n }}\n format={format}\n amPmLabels={amPmLabels}\n disabled={isDisabled}\n data-disabled={isDisabled || undefined}\n withSeconds={withSeconds}\n {...getControlProps?.(time)}\n />\n );\n });\n\n return (\n <TimeGridProvider value={{ getStyles }}>\n <Box {...getStyles('root')} {...others}>\n <SimpleGrid\n {...simpleGridProps}\n {...getStyles('simpleGrid', {\n className: simpleGridProps?.className,\n style: simpleGridProps?.style,\n })}\n >\n {controls}\n </SimpleGrid>\n </Box>\n </TimeGridProvider>\n );\n});\n\nTimeGrid.displayName = '@mantine/dates/TimeGrid';\nTimeGrid.classes = classes;\nTimeGrid.varsResolver = varsResolver;\n"],"mappings":";;;;;;;;;;;AA4FA,MAAM,eAAe;CACnB,iBAAiB;EAAE,MAAM;EAAG,SAAS;EAAM;CAC3C,QAAQ;CACR,YAAY;EAAE,IAAI;EAAM,IAAI;EAAM;CACnC;AAED,MAAM,gBAAA,GAAA,cAAA,qBAAoD,QAAQ,EAAE,MAAM,cAAc,EACtF,MAAM;CACJ,mBAAA,GAAA,cAAA,aAA8B,KAAK;CACnC,uBAAA,GAAA,cAAA,WAAgC,OAAO;CACxC,EACF,EAAE;AAEH,MAAa,YAAA,GAAA,cAAA,UAAqC,WAAW;CAC3D,MAAM,SAAA,GAAA,cAAA,UAAiB,YAAY,cAAc,OAAO;CACxD,MAAM,EACJ,YACA,WACA,OACA,QACA,UACA,MACA,MACA,OACA,cACA,UACA,QACA,cAAc,OACd,YACA,eACA,iBACA,iBACA,SACA,SACA,aACA,UACA,YACA,GAAG,WACD;CAEJ,MAAM,aAAA,GAAA,cAAA,WAAuC;EAC3C,MAAM;EACN,SAAA,wBAAA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CAAC;CAEF,MAAM,CAAC,QAAQ,aAAA,GAAA,eAAA,iBAA4B;EACzC;EACA;EACA,YAAY;EACZ;EACD,CAAC;CAEF,MAAM,WAAW,KAAK,KAAK,SAAS;EAClC,MAAM,aACJ,YACC,CAAC,CAAC,WAAWA,qBAAAA,aAAa,MAAM,QAAQ,IACxC,CAAC,CAAC,WAAWC,qBAAAA,YAAY,MAAM,QAAQ,KACvC,MAAM,QAAQ,YAAY,GACvB,CAAC,CAAC,YAAY,MAAM,MAAMC,qBAAAA,WAAW;GAAE;GAAM,SAAS;GAAG;GAAa,CAAC,CAAC,GACxE,CAAC,CAAC,cAAc,KAAK;AAE3B,SACE,iBAAA,GAAA,kBAAA,KAACC,wBAAAA,iBAAD;GAEE,QAAQD,qBAAAA,WAAW;IAAE;IAAM,SAAS,UAAU;IAAI;IAAa,CAAC;GAC1D;GACN,eAAe;IACb,MAAM,YACJ,kBACC,WAAW,OAAO,SAAS,SAASA,qBAAAA,WAAW;KAAE;KAAM,SAAS;KAAQ;KAAa,CAAC,IACnF,OACA;AACN,kBAAc,UAAU,SAAS,UAAU;;GAErC;GACI;GACZ,UAAU;GACV,iBAAe,cAAc,KAAA;GAChB;GACb,GAAI,kBAAkB,KAAK;GAC3B,EAjBK,KAiBL;GAEJ;AAEF,QACE,iBAAA,GAAA,kBAAA,KAACE,yBAAAA,kBAAD;EAAkB,OAAO,EAAE,WAAW;YACpC,iBAAA,GAAA,kBAAA,KAACC,cAAAA,KAAD;GAAK,GAAI,UAAU,OAAO;GAAE,GAAI;aAC9B,iBAAA,GAAA,kBAAA,KAACC,cAAAA,YAAD;IACE,GAAI;IACJ,GAAI,UAAU,cAAc;KAC1B,WAAW,iBAAiB;KAC5B,OAAO,iBAAiB;KACzB,CAAC;cAED;IACU,CAAA;GACT,CAAA;EACW,CAAA;EAErB;AAEF,SAAS,cAAc;AACvB,SAAS,UAAUC,wBAAAA;AACnB,SAAS,eAAe"}
1
+ {"version":3,"file":"TimeGrid.cjs","names":["isTimeBefore","isTimeAfter","isSameTime","TimeGridControl","TimeGridProvider","Box","SimpleGrid","classes"],"sources":["../../../src/components/TimeGrid/TimeGrid.tsx"],"sourcesContent":["import {\n Box,\n BoxProps,\n createVarsResolver,\n DataAttributes,\n ElementProps,\n factory,\n Factory,\n getFontSize,\n getRadius,\n MantineRadius,\n MantineSize,\n SimpleGrid,\n SimpleGridProps,\n StylesApiProps,\n useProps,\n useStyles,\n} from '@mantine/core';\nimport { useUncontrolled } from '@mantine/hooks';\nimport type { TimePickerAmPmLabels, TimePickerFormat } from '../TimePicker';\nimport { isSameTime } from '../TimePicker/utils/is-same-time/is-same-time';\nimport { isTimeAfter, isTimeBefore } from './compare-time';\nimport { TimeGridProvider } from './TimeGrid.context';\nimport { TimeGridControl } from './TimeGridControl';\nimport classes from './TimeGrid.module.css';\n\nexport type TimeGridStylesNames = 'root' | 'control' | 'simpleGrid';\nexport type TimeGridCssVariables = {\n root: '--time-grid-fz' | '--time-grid-radius';\n};\n\nexport interface TimeGridProps\n extends\n BoxProps,\n StylesApiProps<TimeGridFactory>,\n ElementProps<'div', 'onChange' | 'value' | 'defaultValue'> {\n /** Time data in 24h format to be displayed in the grid, for example `['10:00', '18:30', '22:00']`. Time values must be unique. */\n data: string[];\n\n /** Controlled component value */\n value?: string | null;\n\n /** Uncontrolled component default value */\n defaultValue?: string | null;\n\n /** Called when value changes */\n onChange?: (value: string | null) => void;\n\n /** Determines whether the value can be deselected when the current active option is clicked or activated with keyboard @default false */\n allowDeselect?: boolean;\n\n /** Time format displayed in the grid @default '24h' */\n format?: TimePickerFormat;\n\n /** Determines whether the seconds part should be displayed @default false */\n withSeconds?: boolean;\n\n /** Labels used for am/pm values @default { am: 'AM', pm: 'PM' } */\n amPmLabels?: TimePickerAmPmLabels;\n\n /** Props passed down to the underlying `SimpleGrid` component @default { cols: 3, spacing: 'xs' } */\n simpleGridProps?: SimpleGridProps;\n\n /** A function to pass props down to control based on the time value */\n getControlProps?: (time: string) => React.ComponentProps<'button'> & DataAttributes;\n\n /** Key of `theme.radius` or any valid CSS value to set `border-radius` @default theme.defaultRadius */\n radius?: MantineRadius;\n\n /** Control `font-size` of controls, key of `theme.fontSizes` or any valid CSS value @default 'sm' */\n size?: MantineSize;\n\n /** All controls before this time are disabled */\n minTime?: string;\n\n /** All controls after this time are disabled */\n maxTime?: string;\n\n /** Array of time values to disable */\n disableTime?: string[] | ((time: string) => boolean);\n\n /** If set, all controls are disabled */\n disabled?: boolean;\n}\n\nexport type TimeGridFactory = Factory<{\n props: TimeGridProps;\n ref: HTMLDivElement;\n stylesNames: TimeGridStylesNames;\n vars: TimeGridCssVariables;\n}>;\n\nconst defaultProps = {\n simpleGridProps: { cols: 3, spacing: 'xs' },\n format: '24h',\n amPmLabels: { am: 'AM', pm: 'PM' },\n} satisfies Partial<TimeGridProps>;\n\nconst varsResolver = createVarsResolver<TimeGridFactory>((_theme, { size, radius }) => ({\n root: {\n '--time-grid-fz': getFontSize(size),\n '--time-grid-radius': getRadius(radius),\n },\n}));\n\nexport const TimeGrid = factory<TimeGridFactory>((_props) => {\n const props = useProps('TimeGrid', defaultProps, _props);\n const {\n classNames,\n className,\n style,\n styles,\n unstyled,\n vars,\n data,\n value,\n defaultValue,\n onChange,\n format,\n withSeconds = false,\n amPmLabels,\n allowDeselect,\n simpleGridProps,\n getControlProps,\n minTime,\n maxTime,\n disableTime,\n disabled,\n attributes,\n ...others\n } = props;\n\n const getStyles = useStyles<TimeGridFactory>({\n name: 'TimeGrid',\n classes,\n props,\n className,\n style,\n classNames,\n styles,\n unstyled,\n attributes,\n vars,\n varsResolver,\n });\n\n const [_value, setValue] = useUncontrolled({\n value,\n defaultValue,\n finalValue: null,\n onChange,\n });\n\n const controls = data.map((time) => {\n const isDisabled =\n disabled ||\n (!!minTime && isTimeBefore(time, minTime)) ||\n (!!maxTime && isTimeAfter(time, maxTime)) ||\n (Array.isArray(disableTime)\n ? !!disableTime.find((t) => isSameTime({ time, compare: t, withSeconds }))\n : !!disableTime?.(time));\n\n return (\n <TimeGridControl\n key={time}\n active={isSameTime({ time, compare: _value || '', withSeconds })}\n time={time}\n onClick={() => {\n const nextValue =\n allowDeselect &&\n (_value === null ? time === _value : isSameTime({ time, compare: _value, withSeconds }))\n ? null\n : time;\n nextValue !== _value && setValue(nextValue);\n }}\n format={format}\n amPmLabels={amPmLabels}\n disabled={isDisabled}\n data-disabled={isDisabled || undefined}\n withSeconds={withSeconds}\n {...getControlProps?.(time)}\n />\n );\n });\n\n return (\n <TimeGridProvider value={{ getStyles }}>\n <Box {...getStyles('root')} {...others}>\n <SimpleGrid\n {...simpleGridProps}\n {...getStyles('simpleGrid', {\n className: simpleGridProps?.className,\n style: simpleGridProps?.style,\n })}\n >\n {controls}\n </SimpleGrid>\n </Box>\n </TimeGridProvider>\n );\n});\n\nTimeGrid.displayName = '@mantine/dates/TimeGrid';\nTimeGrid.classes = classes;\nTimeGrid.varsResolver = varsResolver;\n\nexport namespace TimeGrid {\n export type Props = TimeGridProps;\n export type StylesNames = TimeGridStylesNames;\n export type Factory = TimeGridFactory;\n export type CssVariables = TimeGridCssVariables;\n}\n"],"mappings":";;;;;;;;;;;AA4FA,MAAM,eAAe;CACnB,iBAAiB;EAAE,MAAM;EAAG,SAAS;EAAM;CAC3C,QAAQ;CACR,YAAY;EAAE,IAAI;EAAM,IAAI;EAAM;CACnC;AAED,MAAM,gBAAA,GAAA,cAAA,qBAAoD,QAAQ,EAAE,MAAM,cAAc,EACtF,MAAM;CACJ,mBAAA,GAAA,cAAA,aAA8B,KAAK;CACnC,uBAAA,GAAA,cAAA,WAAgC,OAAO;CACxC,EACF,EAAE;AAEH,MAAa,YAAA,GAAA,cAAA,UAAqC,WAAW;CAC3D,MAAM,SAAA,GAAA,cAAA,UAAiB,YAAY,cAAc,OAAO;CACxD,MAAM,EACJ,YACA,WACA,OACA,QACA,UACA,MACA,MACA,OACA,cACA,UACA,QACA,cAAc,OACd,YACA,eACA,iBACA,iBACA,SACA,SACA,aACA,UACA,YACA,GAAG,WACD;CAEJ,MAAM,aAAA,GAAA,cAAA,WAAuC;EAC3C,MAAM;EACN,SAAA,wBAAA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CAAC;CAEF,MAAM,CAAC,QAAQ,aAAA,GAAA,eAAA,iBAA4B;EACzC;EACA;EACA,YAAY;EACZ;EACD,CAAC;CAEF,MAAM,WAAW,KAAK,KAAK,SAAS;EAClC,MAAM,aACJ,YACC,CAAC,CAAC,WAAWA,qBAAAA,aAAa,MAAM,QAAQ,IACxC,CAAC,CAAC,WAAWC,qBAAAA,YAAY,MAAM,QAAQ,KACvC,MAAM,QAAQ,YAAY,GACvB,CAAC,CAAC,YAAY,MAAM,MAAMC,qBAAAA,WAAW;GAAE;GAAM,SAAS;GAAG;GAAa,CAAC,CAAC,GACxE,CAAC,CAAC,cAAc,KAAK;AAE3B,SACE,iBAAA,GAAA,kBAAA,KAACC,wBAAAA,iBAAD;GAEE,QAAQD,qBAAAA,WAAW;IAAE;IAAM,SAAS,UAAU;IAAI;IAAa,CAAC;GAC1D;GACN,eAAe;IACb,MAAM,YACJ,kBACC,WAAW,OAAO,SAAS,SAASA,qBAAAA,WAAW;KAAE;KAAM,SAAS;KAAQ;KAAa,CAAC,IACnF,OACA;AACN,kBAAc,UAAU,SAAS,UAAU;;GAErC;GACI;GACZ,UAAU;GACV,iBAAe,cAAc,KAAA;GAChB;GACb,GAAI,kBAAkB,KAAK;GAC3B,EAjBK,KAiBL;GAEJ;AAEF,QACE,iBAAA,GAAA,kBAAA,KAACE,yBAAAA,kBAAD;EAAkB,OAAO,EAAE,WAAW;YACpC,iBAAA,GAAA,kBAAA,KAACC,cAAAA,KAAD;GAAK,GAAI,UAAU,OAAO;GAAE,GAAI;aAC9B,iBAAA,GAAA,kBAAA,KAACC,cAAAA,YAAD;IACE,GAAI;IACJ,GAAI,UAAU,cAAc;KAC1B,WAAW,iBAAiB;KAC5B,OAAO,iBAAiB;KACzB,CAAC;cAED;IACU,CAAA;GACT,CAAA;EACW,CAAA;EAErB;AAEF,SAAS,cAAc;AACvB,SAAS,UAAUC,wBAAAA;AACnB,SAAS,eAAe"}
@@ -7,7 +7,7 @@ clsx = require_runtime.__toESM(clsx);
7
7
  let _mantine_core = require("@mantine/core");
8
8
  //#region packages/@mantine/dates/src/components/TimeInput/TimeInput.tsx
9
9
  const TimeInput = (0, _mantine_core.factory)((_props) => {
10
- const props = (0, _mantine_core.useProps)("TimeInput", null, _props);
10
+ const props = (0, _mantine_core.useProps)("TimeInput", { size: "sm" }, _props);
11
11
  const { classNames, styles, unstyled, vars, withSeconds, minTime, maxTime, value, onChange, step, ...others } = props;
12
12
  const { resolvedClassNames, resolvedStyles } = (0, _mantine_core.useResolvedStylesApi)({
13
13
  classNames,
@@ -1 +1 @@
1
- {"version":3,"file":"TimeInput.cjs","names":["InputBase","classes"],"sources":["../../../src/components/TimeInput/TimeInput.tsx"],"sourcesContent":["import cx from 'clsx';\nimport {\n __BaseInputProps,\n __InputStylesNames,\n BoxProps,\n ElementProps,\n factory,\n Factory,\n InputBase,\n StylesApiProps,\n useProps,\n useResolvedStylesApi,\n} from '@mantine/core';\nimport classes from './TimeInput.module.css';\n\nexport interface TimeInputProps\n extends\n BoxProps,\n __BaseInputProps,\n StylesApiProps<TimeInputFactory>,\n ElementProps<'input', 'size'> {\n /** Determines whether seconds input should be displayed @default false */\n withSeconds?: boolean;\n\n /** Minimum possible string time, if `withSeconds` is true, time should be in format HH:mm:ss, otherwise HH:mm */\n minTime?: string;\n\n /** Maximum possible string time, if `withSeconds` is true, time should be in format HH:mm:ss, otherwise HH:mm */\n maxTime?: string;\n}\n\nexport type TimeInputFactory = Factory<{\n props: TimeInputProps;\n ref: HTMLInputElement;\n stylesNames: __InputStylesNames;\n}>;\n\nexport const TimeInput = factory<TimeInputFactory>((_props) => {\n const props = useProps('TimeInput', null, _props);\n const {\n classNames,\n styles,\n unstyled,\n vars,\n withSeconds,\n minTime,\n maxTime,\n value,\n onChange,\n step,\n ...others\n } = props;\n\n const { resolvedClassNames, resolvedStyles } = useResolvedStylesApi<TimeInputFactory>({\n classNames,\n styles,\n props,\n });\n\n /**\n * Check if time is within limits or not\n * If the given value is within limits, return 0\n * If the given value is greater than the maxTime, return 1\n * If the given value is less than the minTime, return -1\n */\n const checkIfTimeLimitExceeded = (val: string) => {\n if (minTime !== undefined || maxTime !== undefined) {\n const [hours, minutes, seconds] = val.split(':').map(Number);\n\n if (minTime) {\n const [minHours, minMinutes, minSeconds] = minTime.split(':').map(Number);\n\n if (\n hours < minHours ||\n (hours === minHours && minutes < minMinutes) ||\n (withSeconds && hours === minHours && minutes === minMinutes && seconds < minSeconds)\n ) {\n return -1;\n }\n }\n\n if (maxTime) {\n const [maxHours, maxMinutes, maxSeconds] = maxTime.split(':').map(Number);\n\n if (\n hours > maxHours ||\n (hours === maxHours && minutes > maxMinutes) ||\n (withSeconds && hours === maxHours && minutes === maxMinutes && seconds > maxSeconds)\n ) {\n return 1;\n }\n }\n }\n\n return 0;\n };\n\n const onTimeBlur = (event: React.FocusEvent<HTMLInputElement>) => {\n props.onBlur?.(event);\n if (minTime !== undefined || maxTime !== undefined) {\n const val = event.currentTarget.value;\n\n if (val) {\n const check = checkIfTimeLimitExceeded(val);\n if (check === 1) {\n if (maxTime) {\n event.currentTarget.value = maxTime;\n }\n\n props.onChange?.(event);\n } else if (check === -1) {\n if (minTime) {\n event.currentTarget.value = minTime;\n }\n\n props.onChange?.(event);\n }\n }\n }\n };\n\n return (\n <InputBase\n classNames={{ ...resolvedClassNames, input: cx(classes.input, resolvedClassNames?.input) }}\n styles={resolvedStyles}\n unstyled={unstyled}\n value={value}\n step={step ?? (withSeconds ? 1 : 60)}\n {...others}\n onChange={onChange}\n onBlur={onTimeBlur}\n type=\"time\"\n __staticSelector=\"TimeInput\"\n />\n );\n});\n\nTimeInput.classes = InputBase.classes;\nTimeInput.displayName = '@mantine/dates/TimeInput';\n"],"mappings":";;;;;;;;AAqCA,MAAa,aAAA,GAAA,cAAA,UAAuC,WAAW;CAC7D,MAAM,SAAA,GAAA,cAAA,UAAiB,aAAa,MAAM,OAAO;CACjD,MAAM,EACJ,YACA,QACA,UACA,MACA,aACA,SACA,SACA,OACA,UACA,MACA,GAAG,WACD;CAEJ,MAAM,EAAE,oBAAoB,oBAAA,GAAA,cAAA,sBAA0D;EACpF;EACA;EACA;EACD,CAAC;;;;;;;CAQF,MAAM,4BAA4B,QAAgB;AAChD,MAAI,YAAY,KAAA,KAAa,YAAY,KAAA,GAAW;GAClD,MAAM,CAAC,OAAO,SAAS,WAAW,IAAI,MAAM,IAAI,CAAC,IAAI,OAAO;AAE5D,OAAI,SAAS;IACX,MAAM,CAAC,UAAU,YAAY,cAAc,QAAQ,MAAM,IAAI,CAAC,IAAI,OAAO;AAEzE,QACE,QAAQ,YACP,UAAU,YAAY,UAAU,cAChC,eAAe,UAAU,YAAY,YAAY,cAAc,UAAU,WAE1E,QAAO;;AAIX,OAAI,SAAS;IACX,MAAM,CAAC,UAAU,YAAY,cAAc,QAAQ,MAAM,IAAI,CAAC,IAAI,OAAO;AAEzE,QACE,QAAQ,YACP,UAAU,YAAY,UAAU,cAChC,eAAe,UAAU,YAAY,YAAY,cAAc,UAAU,WAE1E,QAAO;;;AAKb,SAAO;;CAGT,MAAM,cAAc,UAA8C;AAChE,QAAM,SAAS,MAAM;AACrB,MAAI,YAAY,KAAA,KAAa,YAAY,KAAA,GAAW;GAClD,MAAM,MAAM,MAAM,cAAc;AAEhC,OAAI,KAAK;IACP,MAAM,QAAQ,yBAAyB,IAAI;AAC3C,QAAI,UAAU,GAAG;AACf,SAAI,QACF,OAAM,cAAc,QAAQ;AAG9B,WAAM,WAAW,MAAM;eACd,UAAU,IAAI;AACvB,SAAI,QACF,OAAM,cAAc,QAAQ;AAG9B,WAAM,WAAW,MAAM;;;;;AAM/B,QACE,iBAAA,GAAA,kBAAA,KAACA,cAAAA,WAAD;EACE,YAAY;GAAE,GAAG;GAAoB,QAAA,GAAA,KAAA,SAAUC,yBAAAA,QAAQ,OAAO,oBAAoB,MAAM;GAAE;EAC1F,QAAQ;EACE;EACH;EACP,MAAM,SAAS,cAAc,IAAI;EACjC,GAAI;EACM;EACV,QAAQ;EACR,MAAK;EACL,kBAAiB;EACjB,CAAA;EAEJ;AAEF,UAAU,UAAUD,cAAAA,UAAU;AAC9B,UAAU,cAAc"}
1
+ {"version":3,"file":"TimeInput.cjs","names":["InputBase","classes"],"sources":["../../../src/components/TimeInput/TimeInput.tsx"],"sourcesContent":["import cx from 'clsx';\nimport {\n __BaseInputProps,\n __InputStylesNames,\n BoxProps,\n ElementProps,\n factory,\n Factory,\n InputBase,\n StylesApiProps,\n useProps,\n useResolvedStylesApi,\n} from '@mantine/core';\nimport classes from './TimeInput.module.css';\n\nexport interface TimeInputProps\n extends\n BoxProps,\n __BaseInputProps,\n StylesApiProps<TimeInputFactory>,\n ElementProps<'input', 'size'> {\n /** Determines whether seconds input should be displayed @default false */\n withSeconds?: boolean;\n\n /** Minimum possible string time, if `withSeconds` is true, time should be in format HH:mm:ss, otherwise HH:mm */\n minTime?: string;\n\n /** Maximum possible string time, if `withSeconds` is true, time should be in format HH:mm:ss, otherwise HH:mm */\n maxTime?: string;\n}\n\nexport type TimeInputFactory = Factory<{\n props: TimeInputProps;\n ref: HTMLInputElement;\n stylesNames: __InputStylesNames;\n}>;\n\nexport const TimeInput = factory<TimeInputFactory>((_props) => {\n const props = useProps('TimeInput', { size: 'sm' } satisfies Partial<TimeInputProps>, _props);\n const {\n classNames,\n styles,\n unstyled,\n vars,\n withSeconds,\n minTime,\n maxTime,\n value,\n onChange,\n step,\n ...others\n } = props;\n\n const { resolvedClassNames, resolvedStyles } = useResolvedStylesApi<TimeInputFactory>({\n classNames,\n styles,\n props,\n });\n\n /**\n * Check if time is within limits or not\n * If the given value is within limits, return 0\n * If the given value is greater than the maxTime, return 1\n * If the given value is less than the minTime, return -1\n */\n const checkIfTimeLimitExceeded = (val: string) => {\n if (minTime !== undefined || maxTime !== undefined) {\n const [hours, minutes, seconds] = val.split(':').map(Number);\n\n if (minTime) {\n const [minHours, minMinutes, minSeconds] = minTime.split(':').map(Number);\n\n if (\n hours < minHours ||\n (hours === minHours && minutes < minMinutes) ||\n (withSeconds && hours === minHours && minutes === minMinutes && seconds < minSeconds)\n ) {\n return -1;\n }\n }\n\n if (maxTime) {\n const [maxHours, maxMinutes, maxSeconds] = maxTime.split(':').map(Number);\n\n if (\n hours > maxHours ||\n (hours === maxHours && minutes > maxMinutes) ||\n (withSeconds && hours === maxHours && minutes === maxMinutes && seconds > maxSeconds)\n ) {\n return 1;\n }\n }\n }\n\n return 0;\n };\n\n const onTimeBlur = (event: React.FocusEvent<HTMLInputElement>) => {\n props.onBlur?.(event);\n if (minTime !== undefined || maxTime !== undefined) {\n const val = event.currentTarget.value;\n\n if (val) {\n const check = checkIfTimeLimitExceeded(val);\n if (check === 1) {\n if (maxTime) {\n event.currentTarget.value = maxTime;\n }\n\n props.onChange?.(event);\n } else if (check === -1) {\n if (minTime) {\n event.currentTarget.value = minTime;\n }\n\n props.onChange?.(event);\n }\n }\n }\n };\n\n return (\n <InputBase\n classNames={{ ...resolvedClassNames, input: cx(classes.input, resolvedClassNames?.input) }}\n styles={resolvedStyles}\n unstyled={unstyled}\n value={value}\n step={step ?? (withSeconds ? 1 : 60)}\n {...others}\n onChange={onChange}\n onBlur={onTimeBlur}\n type=\"time\"\n __staticSelector=\"TimeInput\"\n />\n );\n});\n\nTimeInput.classes = InputBase.classes;\nTimeInput.displayName = '@mantine/dates/TimeInput';\n\nexport namespace TimeInput {\n export type Props = TimeInputProps;\n export type Factory = TimeInputFactory;\n}\n"],"mappings":";;;;;;;;AAqCA,MAAa,aAAA,GAAA,cAAA,UAAuC,WAAW;CAC7D,MAAM,SAAA,GAAA,cAAA,UAAiB,aAAa,EAAE,MAAM,MAAM,EAAoC,OAAO;CAC7F,MAAM,EACJ,YACA,QACA,UACA,MACA,aACA,SACA,SACA,OACA,UACA,MACA,GAAG,WACD;CAEJ,MAAM,EAAE,oBAAoB,oBAAA,GAAA,cAAA,sBAA0D;EACpF;EACA;EACA;EACD,CAAC;;;;;;;CAQF,MAAM,4BAA4B,QAAgB;AAChD,MAAI,YAAY,KAAA,KAAa,YAAY,KAAA,GAAW;GAClD,MAAM,CAAC,OAAO,SAAS,WAAW,IAAI,MAAM,IAAI,CAAC,IAAI,OAAO;AAE5D,OAAI,SAAS;IACX,MAAM,CAAC,UAAU,YAAY,cAAc,QAAQ,MAAM,IAAI,CAAC,IAAI,OAAO;AAEzE,QACE,QAAQ,YACP,UAAU,YAAY,UAAU,cAChC,eAAe,UAAU,YAAY,YAAY,cAAc,UAAU,WAE1E,QAAO;;AAIX,OAAI,SAAS;IACX,MAAM,CAAC,UAAU,YAAY,cAAc,QAAQ,MAAM,IAAI,CAAC,IAAI,OAAO;AAEzE,QACE,QAAQ,YACP,UAAU,YAAY,UAAU,cAChC,eAAe,UAAU,YAAY,YAAY,cAAc,UAAU,WAE1E,QAAO;;;AAKb,SAAO;;CAGT,MAAM,cAAc,UAA8C;AAChE,QAAM,SAAS,MAAM;AACrB,MAAI,YAAY,KAAA,KAAa,YAAY,KAAA,GAAW;GAClD,MAAM,MAAM,MAAM,cAAc;AAEhC,OAAI,KAAK;IACP,MAAM,QAAQ,yBAAyB,IAAI;AAC3C,QAAI,UAAU,GAAG;AACf,SAAI,QACF,OAAM,cAAc,QAAQ;AAG9B,WAAM,WAAW,MAAM;eACd,UAAU,IAAI;AACvB,SAAI,QACF,OAAM,cAAc,QAAQ;AAG9B,WAAM,WAAW,MAAM;;;;;AAM/B,QACE,iBAAA,GAAA,kBAAA,KAACA,cAAAA,WAAD;EACE,YAAY;GAAE,GAAG;GAAoB,QAAA,GAAA,KAAA,SAAUC,yBAAAA,QAAQ,OAAO,oBAAoB,MAAM;GAAE;EAC1F,QAAQ;EACE;EACH;EACP,MAAM,SAAS,cAAc,IAAI;EACjC,GAAI;EACM;EACV,QAAQ;EACR,MAAK;EACL,kBAAiB;EACjB,CAAA;EAEJ;AAEF,UAAU,UAAUD,cAAAA,UAAU;AAC9B,UAAU,cAAc"}
@@ -1 +1 @@
1
- {"version":3,"file":"TimePicker.cjs","names":["getParsedTime","useTimePicker","getTimeString","clampTime","TimePickerProvider","Popover","InputBase","CloseButton","SpinInput","AmPmInput","TimePresets","TimeControlsList","AmPmControlsList","classes"],"sources":["../../../src/components/TimePicker/TimePicker.tsx"],"sourcesContent":["import { useRef, useState } from 'react';\nimport {\n __BaseInputProps,\n __InputStylesNames,\n BoxProps,\n ClearSectionMode,\n CloseButton,\n CloseButtonProps,\n createVarsResolver,\n DataAttributes,\n ElementProps,\n factory,\n Factory,\n getFontSize,\n InputBase,\n InputVariant,\n Popover,\n PopoverProps,\n ScrollAreaProps,\n StylesApiProps,\n useProps,\n useResolvedStylesApi,\n useStyles,\n} from '@mantine/core';\nimport { useId, useMergedRef } from '@mantine/hooks';\nimport { SpinInput } from '../SpinInput';\nimport { AmPmInput } from './AmPmInput/AmPmInput';\nimport { AmPmControlsList } from './TimeControlsList/AmPmControlsList';\nimport { TimeControlsList } from './TimeControlsList/TimeControlsList';\nimport { TimePickerProvider } from './TimePicker.context';\nimport {\n TimePickerAmPmLabels,\n TimePickerFormat,\n TimePickerPasteSplit,\n TimePickerPresets,\n} from './TimePicker.types';\nimport { TimePresets } from './TimePresets/TimePresets';\nimport { useTimePicker } from './use-time-picker';\nimport { clampTime } from './utils/clamp-time/clamp-time';\nimport { getParsedTime } from './utils/get-parsed-time/get-parsed-time';\nimport { getTimeString } from './utils/get-time-string/get-time-string';\nimport classes from './TimePicker.module.css';\n\nexport type TimePickerStylesNames =\n | 'fieldsRoot'\n | 'fieldsGroup'\n | 'field'\n | 'controlsList'\n | 'controlsListGroup'\n | 'control'\n | 'dropdown'\n | 'presetsRoot'\n | 'presetsGroup'\n | 'presetsGroupLabel'\n | 'presetControl'\n | 'scrollarea'\n | __InputStylesNames;\n\nexport type TimePickerCssVariables = {\n dropdown: '--control-font-size';\n};\n\nexport interface TimePickerProps\n extends\n BoxProps,\n __BaseInputProps,\n StylesApiProps<TimePickerFactory>,\n ElementProps<'div', 'onChange' | 'defaultValue'> {\n /** Controlled component value */\n value?: string;\n\n /** Uncontrolled component default value */\n defaultValue?: string;\n\n /** Called when the value changes */\n onChange?: (value: string) => void;\n\n /** Determines whether the clear button should be displayed @default false */\n clearable?: boolean;\n\n /** Determines how the clear button and rightSection are rendered @default 'both' */\n clearSectionMode?: ClearSectionMode;\n\n /** `name` prop passed down to the hidden input */\n name?: string;\n\n /** `form` prop passed down to the hidden input */\n form?: string;\n\n /** Min possible time value in `hh:mm:ss` format */\n min?: string;\n\n /** Max possible time value in `hh:mm:ss` format */\n max?: string;\n\n /** Time format, `'24h'` by default */\n format?: TimePickerFormat;\n\n /** Number by which hours are incremented/decremented @default 1 */\n hoursStep?: number;\n\n /** Number by which minutes are incremented/decremented @default 1 */\n minutesStep?: number;\n\n /** Number by which seconds are incremented/decremented @default 1 */\n secondsStep?: number;\n\n /** Determines whether the seconds input should be displayed @default false */\n withSeconds?: boolean;\n\n /** `aria-label` of hours input */\n hoursInputLabel?: string;\n\n /** `aria-label` of minutes input */\n minutesInputLabel?: string;\n\n /** `aria-label` of seconds input */\n secondsInputLabel?: string;\n\n /** `aria-label` of am/pm input */\n amPmInputLabel?: string;\n\n /** Labels used for am/pm values @default { am: 'AM', pm: 'PM' } */\n amPmLabels?: TimePickerAmPmLabels;\n\n /** Determines whether the dropdown with time controls list should be visible when the input has focus @default false */\n withDropdown?: boolean;\n\n /** Props passed down to `Popover` component */\n popoverProps?: PopoverProps;\n\n /** Called once when one of the inputs is focused, not called when focused is shifted between hours, minutes, seconds and am/pm inputs */\n onFocus?: (event: React.FocusEvent<HTMLInputElement>) => void;\n\n /** Called once when the focus is no longer on any of the inputs */\n onBlur?: (event: React.FocusEvent<HTMLDivElement>) => void;\n\n /** Props passed down to clear button */\n clearButtonProps?: CloseButtonProps & ElementProps<'button'> & DataAttributes;\n\n /** Props passed down to hours input */\n hoursInputProps?: React.ComponentProps<'input'> & DataAttributes;\n\n /** Props passed down to minutes input */\n minutesInputProps?: React.ComponentProps<'input'> & DataAttributes;\n\n /** Props passed down to seconds input */\n secondsInputProps?: React.ComponentProps<'input'> & DataAttributes;\n\n /** Props passed down to am/pm select */\n amPmSelectProps?: React.ComponentProps<'select'> & DataAttributes;\n\n /** If set, the value cannot be updated */\n readOnly?: boolean;\n\n /** If set, the component becomes disabled */\n disabled?: boolean;\n\n /** Props passed down to the hidden input */\n hiddenInputProps?: React.ComponentProps<'input'> & DataAttributes;\n\n /** A function to transform paste values, by default time in 24h format can be parsed on paste for example `23:34:22` */\n pasteSplit?: TimePickerPasteSplit;\n\n /** A ref object to get node reference of the hours input */\n hoursRef?: React.Ref<HTMLInputElement>;\n\n /** A ref object to get node reference of the minutes input */\n minutesRef?: React.Ref<HTMLInputElement>;\n\n /** A ref object to get node reference of the seconds input */\n secondsRef?: React.Ref<HTMLInputElement>;\n\n /** A ref object to get node reference of the am/pm select */\n amPmRef?: React.Ref<HTMLSelectElement>;\n\n /** Time presets to display in the dropdown */\n presets?: TimePickerPresets;\n\n /** Maximum height of the content displayed in the dropdown in px @default 200 */\n maxDropdownContentHeight?: number;\n\n /** Props passed down to all underlying `ScrollArea` components */\n scrollAreaProps?: ScrollAreaProps;\n\n /** If set, the time controls list are reversed, @default false */\n reverseTimeControlsList?: boolean;\n\n /** Hours input placeholder, @default -- */\n hoursPlaceholder?: string;\n\n /** Minutes input placeholder, @default -- */\n minutesPlaceholder?: string;\n\n /** Seconds input placeholder, @default -- */\n secondsPlaceholder?: string;\n}\n\nexport type TimePickerFactory = Factory<{\n props: TimePickerProps;\n ref: HTMLDivElement;\n stylesNames: TimePickerStylesNames;\n vars: TimePickerCssVariables;\n variant: InputVariant;\n}>;\n\nconst defaultProps = {\n hoursStep: 1,\n minutesStep: 1,\n secondsStep: 1,\n format: '24h',\n amPmLabels: { am: 'AM', pm: 'PM' },\n pasteSplit: getParsedTime,\n maxDropdownContentHeight: 200,\n hoursPlaceholder: '--',\n minutesPlaceholder: '--',\n secondsPlaceholder: '--',\n} satisfies Partial<TimePickerProps>;\n\nconst varsResolver = createVarsResolver<TimePickerFactory>((_theme, { size }) => ({\n dropdown: {\n '--control-font-size': getFontSize(size),\n },\n}));\n\nexport const TimePicker = factory<TimePickerFactory>((_props) => {\n const props = useProps('TimePicker', defaultProps, _props);\n const {\n classNames,\n className,\n style,\n styles,\n unstyled,\n vars,\n onClick,\n format,\n value,\n defaultValue,\n onChange,\n hoursStep,\n minutesStep,\n secondsStep,\n withSeconds,\n hoursInputLabel,\n minutesInputLabel,\n secondsInputLabel,\n amPmInputLabel,\n amPmLabels,\n clearable,\n clearSectionMode,\n onMouseDown,\n onFocusCapture,\n onBlurCapture,\n min,\n max,\n popoverProps,\n withDropdown,\n rightSection,\n onFocus,\n onBlur,\n clearButtonProps,\n hoursInputProps,\n minutesInputProps,\n secondsInputProps,\n amPmSelectProps,\n readOnly,\n disabled,\n size,\n name,\n form,\n hiddenInputProps,\n labelProps,\n pasteSplit,\n hoursRef,\n minutesRef,\n secondsRef,\n amPmRef,\n presets,\n maxDropdownContentHeight,\n scrollAreaProps,\n attributes,\n reverseTimeControlsList,\n hoursPlaceholder,\n minutesPlaceholder,\n secondsPlaceholder,\n ...others\n } = props;\n\n const { resolvedClassNames, resolvedStyles } = useResolvedStylesApi<TimePickerFactory>({\n classNames,\n styles,\n props,\n });\n\n const getStyles = useStyles<TimePickerFactory>({\n name: 'TimePicker',\n classes,\n props,\n className,\n style,\n classNames,\n styles,\n unstyled,\n attributes,\n vars,\n varsResolver,\n });\n\n const controller = useTimePicker({\n value,\n defaultValue,\n onChange,\n format,\n amPmLabels,\n withSeconds,\n min,\n max,\n clearable,\n disabled,\n readOnly,\n pasteSplit,\n });\n\n const _hoursRef = useMergedRef(controller.refs.hours, hoursRef);\n const _minutesRef = useMergedRef(controller.refs.minutes, minutesRef);\n const _secondsRef = useMergedRef(controller.refs.seconds, secondsRef);\n const _amPmRef = useMergedRef(controller.refs.amPm, amPmRef);\n\n const hoursInputId = useId();\n const hasFocusRef = useRef(false);\n const [dropdownOpened, setDropdownOpened] = useState(false);\n\n const handleFocus = (event: React.FocusEvent<any>) => {\n if (!hasFocusRef.current) {\n hasFocusRef.current = true;\n onFocus?.(event);\n }\n };\n\n const handleBlur = (event: React.FocusEvent<HTMLDivElement>) => {\n if (!event.currentTarget.contains(event.relatedTarget)) {\n const computedValue = controller.values;\n const timeString = getTimeString({\n ...computedValue,\n format,\n amPmLabels,\n withSeconds: !!withSeconds,\n });\n\n if (timeString.valid && (min || max)) {\n const clamped = clampTime(timeString.value, min, max);\n\n if (clamped.timeString !== timeString.value) {\n controller.setTimeString(clamped.timeString);\n }\n }\n hasFocusRef.current = false;\n onBlur?.(event);\n }\n };\n\n return (\n <TimePickerProvider value={{ getStyles, scrollAreaProps, maxDropdownContentHeight }}>\n <Popover\n opened={dropdownOpened}\n transitionProps={{ duration: 0 }}\n position=\"bottom-start\"\n withRoles={false}\n disabled={disabled || readOnly || !withDropdown}\n {...popoverProps}\n >\n <Popover.Target>\n <InputBase\n component=\"div\"\n size={size}\n disabled={disabled}\n onClick={(event) => {\n onClick?.(event);\n controller.focus('hours');\n }}\n onMouseDown={(event) => {\n event.preventDefault();\n onMouseDown?.(event);\n }}\n onFocusCapture={(event) => {\n setDropdownOpened(true);\n onFocusCapture?.(event);\n }}\n onBlurCapture={(event) => {\n setDropdownOpened(false);\n onBlurCapture?.(event);\n }}\n rightSection={rightSection}\n __clearSection={\n <CloseButton\n {...clearButtonProps}\n size={size}\n onClick={(event) => {\n controller.clear();\n clearButtonProps?.onClick?.(event);\n }}\n onMouseDown={(event) => {\n event.preventDefault();\n clearButtonProps?.onMouseDown?.(event);\n }}\n />\n }\n __clearable={controller.isClearable}\n __clearSectionMode={clearSectionMode}\n labelProps={{ htmlFor: hoursInputId, ...labelProps }}\n style={style}\n className={className}\n classNames={resolvedClassNames}\n styles={resolvedStyles}\n attributes={attributes}\n __staticSelector=\"TimePicker\"\n {...others}\n >\n <div {...getStyles('fieldsRoot')} dir=\"ltr\">\n <div {...getStyles('fieldsGroup')} onBlur={handleBlur}>\n <SpinInput\n id={hoursInputId}\n {...hoursInputProps}\n {...getStyles('field', {\n className: hoursInputProps?.className,\n style: hoursInputProps?.style,\n })}\n value={controller.values.hours}\n onChange={controller.setHours}\n onNextInput={() => controller.focus('minutes')}\n min={format === '12h' ? 1 : 0}\n max={format === '12h' ? 12 : 23}\n allowTemporaryZero={format === '12h'}\n focusable\n step={hoursStep}\n ref={_hoursRef}\n aria-label={hoursInputLabel}\n readOnly={readOnly}\n disabled={disabled}\n onPaste={controller.onPaste}\n onFocus={(event) => {\n handleFocus(event);\n hoursInputProps?.onFocus?.(event);\n }}\n onBlur={(event) => {\n const actualInputValue = event.currentTarget.value;\n const numericValue = actualInputValue ? parseInt(actualInputValue, 10) : null;\n\n if (format === '12h' && numericValue === 0) {\n controller.setHours(12);\n }\n hoursInputProps?.onBlur?.(event);\n }}\n placeholder={hoursPlaceholder}\n />\n <span>:</span>\n <SpinInput\n {...minutesInputProps}\n {...getStyles('field', {\n className: minutesInputProps?.className,\n style: minutesInputProps?.style,\n })}\n value={controller.values.minutes}\n onChange={controller.setMinutes}\n min={0}\n max={59}\n focusable\n step={minutesStep}\n ref={_minutesRef}\n onPreviousInput={() => controller.focus('hours')}\n onNextInput={() =>\n withSeconds ? controller.focus('seconds') : controller.focus('amPm')\n }\n aria-label={minutesInputLabel}\n tabIndex={-1}\n readOnly={readOnly}\n disabled={disabled}\n onPaste={controller.onPaste}\n onFocus={(event) => {\n handleFocus(event);\n minutesInputProps?.onFocus?.(event);\n }}\n placeholder={minutesPlaceholder}\n />\n\n {withSeconds && (\n <>\n <span>:</span>\n <SpinInput\n {...secondsInputProps}\n {...getStyles('field', {\n className: secondsInputProps?.className,\n style: secondsInputProps?.style,\n })}\n value={controller.values.seconds}\n onChange={controller.setSeconds}\n min={0}\n max={59}\n focusable\n step={secondsStep}\n ref={_secondsRef}\n onPreviousInput={() => controller.focus('minutes')}\n onNextInput={() => controller.focus('amPm')}\n aria-label={secondsInputLabel}\n tabIndex={-1}\n readOnly={readOnly}\n disabled={disabled}\n onPaste={controller.onPaste}\n onFocus={(event) => {\n handleFocus(event);\n secondsInputProps?.onFocus?.(event);\n }}\n placeholder={secondsPlaceholder}\n />\n </>\n )}\n\n {format === '12h' && (\n <AmPmInput\n {...amPmSelectProps}\n inputType={withDropdown ? 'input' : 'select'}\n labels={amPmLabels}\n value={controller.values.amPm}\n onChange={controller.setAmPm}\n ref={_amPmRef}\n aria-label={amPmInputLabel}\n onPreviousInput={() =>\n withSeconds ? controller.focus('seconds') : controller.focus('minutes')\n }\n readOnly={readOnly}\n disabled={disabled}\n tabIndex={-1}\n onPaste={controller.onPaste}\n onFocus={(event) => {\n handleFocus(event);\n amPmSelectProps?.onFocus?.(event);\n }}\n />\n )}\n </div>\n </div>\n\n <input\n type=\"hidden\"\n name={name}\n form={form}\n value={controller.hiddenInputValue}\n {...hiddenInputProps}\n />\n </InputBase>\n </Popover.Target>\n <Popover.Dropdown\n {...getStyles('dropdown')}\n onMouseDown={(event) => event.preventDefault()}\n >\n {presets ? (\n <TimePresets\n value={controller.hiddenInputValue}\n onChange={controller.setTimeString}\n format={format}\n presets={presets}\n amPmLabels={amPmLabels}\n withSeconds={withSeconds || false}\n />\n ) : (\n <div {...getStyles('controlsListGroup')}>\n <TimeControlsList\n min={format === '12h' ? 1 : 0}\n max={format === '12h' ? 12 : 23}\n step={hoursStep}\n value={controller.values.hours}\n onSelect={controller.setHours}\n reversed={reverseTimeControlsList}\n />\n <TimeControlsList\n min={0}\n max={59}\n step={minutesStep}\n value={controller.values.minutes}\n onSelect={controller.setMinutes}\n reversed={reverseTimeControlsList}\n />\n {withSeconds && (\n <TimeControlsList\n min={0}\n max={59}\n step={secondsStep}\n value={controller.values.seconds}\n onSelect={controller.setSeconds}\n reversed={reverseTimeControlsList}\n />\n )}\n {format === '12h' && (\n <AmPmControlsList\n labels={amPmLabels}\n value={controller.values.amPm}\n onSelect={controller.setAmPm}\n />\n )}\n </div>\n )}\n </Popover.Dropdown>\n </Popover>\n </TimePickerProvider>\n );\n});\n\nTimePicker.displayName = '@mantine/dates/TimePicker';\nTimePicker.classes = classes;\nTimePicker.varsResolver = varsResolver;\n"],"mappings":"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"}
1
+ {"version":3,"file":"TimePicker.cjs","names":["getParsedTime","useTimePicker","getTimeString","clampTime","TimePickerProvider","Popover","InputBase","CloseButton","SpinInput","AmPmInput","TimePresets","TimeControlsList","AmPmControlsList","classes"],"sources":["../../../src/components/TimePicker/TimePicker.tsx"],"sourcesContent":["import { useRef, useState } from 'react';\nimport {\n __BaseInputProps,\n __InputStylesNames,\n BoxProps,\n ClearSectionMode,\n CloseButton,\n CloseButtonProps,\n createVarsResolver,\n DataAttributes,\n ElementProps,\n factory,\n Factory,\n getFontSize,\n InputBase,\n InputVariant,\n Popover,\n PopoverProps,\n ScrollAreaProps,\n StylesApiProps,\n useProps,\n useResolvedStylesApi,\n useStyles,\n} from '@mantine/core';\nimport { useId, useMergedRef } from '@mantine/hooks';\nimport { SpinInput } from '../SpinInput';\nimport { AmPmInput } from './AmPmInput/AmPmInput';\nimport { AmPmControlsList } from './TimeControlsList/AmPmControlsList';\nimport { TimeControlsList } from './TimeControlsList/TimeControlsList';\nimport { TimePickerProvider } from './TimePicker.context';\nimport {\n TimePickerAmPmLabels,\n TimePickerFormat,\n TimePickerPasteSplit,\n TimePickerPresets,\n} from './TimePicker.types';\nimport { TimePresets } from './TimePresets/TimePresets';\nimport { useTimePicker } from './use-time-picker';\nimport { clampTime } from './utils/clamp-time/clamp-time';\nimport { getParsedTime } from './utils/get-parsed-time/get-parsed-time';\nimport { getTimeString } from './utils/get-time-string/get-time-string';\nimport classes from './TimePicker.module.css';\n\nexport type TimePickerStylesNames =\n | 'fieldsRoot'\n | 'fieldsGroup'\n | 'field'\n | 'controlsList'\n | 'controlsListGroup'\n | 'control'\n | 'dropdown'\n | 'presetsRoot'\n | 'presetsGroup'\n | 'presetsGroupLabel'\n | 'presetControl'\n | 'scrollarea'\n | __InputStylesNames;\n\nexport type TimePickerCssVariables = {\n dropdown: '--control-font-size';\n};\n\nexport interface TimePickerProps\n extends\n BoxProps,\n __BaseInputProps,\n StylesApiProps<TimePickerFactory>,\n ElementProps<'div', 'onChange' | 'defaultValue'> {\n /** Controlled component value */\n value?: string;\n\n /** Uncontrolled component default value */\n defaultValue?: string;\n\n /** Called when the value changes */\n onChange?: (value: string) => void;\n\n /** Determines whether the clear button should be displayed @default false */\n clearable?: boolean;\n\n /** Determines how the clear button and rightSection are rendered @default 'both' */\n clearSectionMode?: ClearSectionMode;\n\n /** `name` prop passed down to the hidden input */\n name?: string;\n\n /** `form` prop passed down to the hidden input */\n form?: string;\n\n /** Min possible time value in `hh:mm:ss` format */\n min?: string;\n\n /** Max possible time value in `hh:mm:ss` format */\n max?: string;\n\n /** Time format, `'24h'` by default */\n format?: TimePickerFormat;\n\n /** Number by which hours are incremented/decremented @default 1 */\n hoursStep?: number;\n\n /** Number by which minutes are incremented/decremented @default 1 */\n minutesStep?: number;\n\n /** Number by which seconds are incremented/decremented @default 1 */\n secondsStep?: number;\n\n /** Determines whether the seconds input should be displayed @default false */\n withSeconds?: boolean;\n\n /** `aria-label` of hours input */\n hoursInputLabel?: string;\n\n /** `aria-label` of minutes input */\n minutesInputLabel?: string;\n\n /** `aria-label` of seconds input */\n secondsInputLabel?: string;\n\n /** `aria-label` of am/pm input */\n amPmInputLabel?: string;\n\n /** Labels used for am/pm values @default { am: 'AM', pm: 'PM' } */\n amPmLabels?: TimePickerAmPmLabels;\n\n /** Determines whether the dropdown with time controls list should be visible when the input has focus @default false */\n withDropdown?: boolean;\n\n /** Props passed down to `Popover` component */\n popoverProps?: PopoverProps;\n\n /** Called once when one of the inputs is focused, not called when focused is shifted between hours, minutes, seconds and am/pm inputs */\n onFocus?: (event: React.FocusEvent<HTMLInputElement>) => void;\n\n /** Called once when the focus is no longer on any of the inputs */\n onBlur?: (event: React.FocusEvent<HTMLDivElement>) => void;\n\n /** Props passed down to clear button */\n clearButtonProps?: CloseButtonProps & ElementProps<'button'> & DataAttributes;\n\n /** Props passed down to hours input */\n hoursInputProps?: React.ComponentProps<'input'> & DataAttributes;\n\n /** Props passed down to minutes input */\n minutesInputProps?: React.ComponentProps<'input'> & DataAttributes;\n\n /** Props passed down to seconds input */\n secondsInputProps?: React.ComponentProps<'input'> & DataAttributes;\n\n /** Props passed down to am/pm select */\n amPmSelectProps?: React.ComponentProps<'select'> & DataAttributes;\n\n /** If set, the value cannot be updated */\n readOnly?: boolean;\n\n /** If set, the component becomes disabled */\n disabled?: boolean;\n\n /** Props passed down to the hidden input */\n hiddenInputProps?: React.ComponentProps<'input'> & DataAttributes;\n\n /** A function to transform paste values, by default time in 24h format can be parsed on paste for example `23:34:22` */\n pasteSplit?: TimePickerPasteSplit;\n\n /** A ref object to get node reference of the hours input */\n hoursRef?: React.Ref<HTMLInputElement>;\n\n /** A ref object to get node reference of the minutes input */\n minutesRef?: React.Ref<HTMLInputElement>;\n\n /** A ref object to get node reference of the seconds input */\n secondsRef?: React.Ref<HTMLInputElement>;\n\n /** A ref object to get node reference of the am/pm select */\n amPmRef?: React.Ref<HTMLSelectElement>;\n\n /** Time presets to display in the dropdown */\n presets?: TimePickerPresets;\n\n /** Maximum height of the content displayed in the dropdown in px @default 200 */\n maxDropdownContentHeight?: number;\n\n /** Props passed down to all underlying `ScrollArea` components */\n scrollAreaProps?: ScrollAreaProps;\n\n /** If set, the time controls list are reversed, @default false */\n reverseTimeControlsList?: boolean;\n\n /** Hours input placeholder, @default -- */\n hoursPlaceholder?: string;\n\n /** Minutes input placeholder, @default -- */\n minutesPlaceholder?: string;\n\n /** Seconds input placeholder, @default -- */\n secondsPlaceholder?: string;\n}\n\nexport type TimePickerFactory = Factory<{\n props: TimePickerProps;\n ref: HTMLDivElement;\n stylesNames: TimePickerStylesNames;\n vars: TimePickerCssVariables;\n variant: InputVariant;\n}>;\n\nconst defaultProps = {\n hoursStep: 1,\n minutesStep: 1,\n secondsStep: 1,\n format: '24h',\n amPmLabels: { am: 'AM', pm: 'PM' },\n pasteSplit: getParsedTime,\n maxDropdownContentHeight: 200,\n hoursPlaceholder: '--',\n minutesPlaceholder: '--',\n secondsPlaceholder: '--',\n} satisfies Partial<TimePickerProps>;\n\nconst varsResolver = createVarsResolver<TimePickerFactory>((_theme, { size }) => ({\n dropdown: {\n '--control-font-size': getFontSize(size),\n },\n}));\n\nexport const TimePicker = factory<TimePickerFactory>((_props) => {\n const props = useProps('TimePicker', defaultProps, _props);\n const {\n classNames,\n className,\n style,\n styles,\n unstyled,\n vars,\n onClick,\n format,\n value,\n defaultValue,\n onChange,\n hoursStep,\n minutesStep,\n secondsStep,\n withSeconds,\n hoursInputLabel,\n minutesInputLabel,\n secondsInputLabel,\n amPmInputLabel,\n amPmLabels,\n clearable,\n clearSectionMode,\n onMouseDown,\n onFocusCapture,\n onBlurCapture,\n min,\n max,\n popoverProps,\n withDropdown,\n rightSection,\n onFocus,\n onBlur,\n clearButtonProps,\n hoursInputProps,\n minutesInputProps,\n secondsInputProps,\n amPmSelectProps,\n readOnly,\n disabled,\n size,\n name,\n form,\n hiddenInputProps,\n labelProps,\n pasteSplit,\n hoursRef,\n minutesRef,\n secondsRef,\n amPmRef,\n presets,\n maxDropdownContentHeight,\n scrollAreaProps,\n attributes,\n reverseTimeControlsList,\n hoursPlaceholder,\n minutesPlaceholder,\n secondsPlaceholder,\n ...others\n } = props;\n\n const { resolvedClassNames, resolvedStyles } = useResolvedStylesApi<TimePickerFactory>({\n classNames,\n styles,\n props,\n });\n\n const getStyles = useStyles<TimePickerFactory>({\n name: 'TimePicker',\n classes,\n props,\n className,\n style,\n classNames,\n styles,\n unstyled,\n attributes,\n vars,\n varsResolver,\n });\n\n const controller = useTimePicker({\n value,\n defaultValue,\n onChange,\n format,\n amPmLabels,\n withSeconds,\n min,\n max,\n clearable,\n disabled,\n readOnly,\n pasteSplit,\n });\n\n const _hoursRef = useMergedRef(controller.refs.hours, hoursRef);\n const _minutesRef = useMergedRef(controller.refs.minutes, minutesRef);\n const _secondsRef = useMergedRef(controller.refs.seconds, secondsRef);\n const _amPmRef = useMergedRef(controller.refs.amPm, amPmRef);\n\n const hoursInputId = useId();\n const hasFocusRef = useRef(false);\n const [dropdownOpened, setDropdownOpened] = useState(false);\n\n const handleFocus = (event: React.FocusEvent<any>) => {\n if (!hasFocusRef.current) {\n hasFocusRef.current = true;\n onFocus?.(event);\n }\n };\n\n const handleBlur = (event: React.FocusEvent<HTMLDivElement>) => {\n if (!event.currentTarget.contains(event.relatedTarget)) {\n const computedValue = controller.values;\n const timeString = getTimeString({\n ...computedValue,\n format,\n amPmLabels,\n withSeconds: !!withSeconds,\n });\n\n if (timeString.valid && (min || max)) {\n const clamped = clampTime(timeString.value, min, max);\n\n if (clamped.timeString !== timeString.value) {\n controller.setTimeString(clamped.timeString);\n }\n }\n hasFocusRef.current = false;\n onBlur?.(event);\n }\n };\n\n return (\n <TimePickerProvider value={{ getStyles, scrollAreaProps, maxDropdownContentHeight }}>\n <Popover\n opened={dropdownOpened}\n transitionProps={{ duration: 0 }}\n position=\"bottom-start\"\n withRoles={false}\n disabled={disabled || readOnly || !withDropdown}\n {...popoverProps}\n >\n <Popover.Target>\n <InputBase\n component=\"div\"\n size={size}\n disabled={disabled}\n onClick={(event) => {\n onClick?.(event);\n controller.focus('hours');\n }}\n onMouseDown={(event) => {\n event.preventDefault();\n onMouseDown?.(event);\n }}\n onFocusCapture={(event) => {\n setDropdownOpened(true);\n onFocusCapture?.(event);\n }}\n onBlurCapture={(event) => {\n setDropdownOpened(false);\n onBlurCapture?.(event);\n }}\n rightSection={rightSection}\n __clearSection={\n <CloseButton\n {...clearButtonProps}\n size={size}\n onClick={(event) => {\n controller.clear();\n clearButtonProps?.onClick?.(event);\n }}\n onMouseDown={(event) => {\n event.preventDefault();\n clearButtonProps?.onMouseDown?.(event);\n }}\n />\n }\n __clearable={controller.isClearable}\n __clearSectionMode={clearSectionMode}\n labelProps={{ htmlFor: hoursInputId, ...labelProps }}\n style={style}\n className={className}\n classNames={resolvedClassNames}\n styles={resolvedStyles}\n attributes={attributes}\n __staticSelector=\"TimePicker\"\n {...others}\n >\n <div {...getStyles('fieldsRoot')} dir=\"ltr\">\n <div {...getStyles('fieldsGroup')} onBlur={handleBlur}>\n <SpinInput\n id={hoursInputId}\n {...hoursInputProps}\n {...getStyles('field', {\n className: hoursInputProps?.className,\n style: hoursInputProps?.style,\n })}\n value={controller.values.hours}\n onChange={controller.setHours}\n onNextInput={() => controller.focus('minutes')}\n min={format === '12h' ? 1 : 0}\n max={format === '12h' ? 12 : 23}\n allowTemporaryZero={format === '12h'}\n focusable\n step={hoursStep}\n ref={_hoursRef}\n aria-label={hoursInputLabel}\n readOnly={readOnly}\n disabled={disabled}\n onPaste={controller.onPaste}\n onFocus={(event) => {\n handleFocus(event);\n hoursInputProps?.onFocus?.(event);\n }}\n onBlur={(event) => {\n const actualInputValue = event.currentTarget.value;\n const numericValue = actualInputValue ? parseInt(actualInputValue, 10) : null;\n\n if (format === '12h' && numericValue === 0) {\n controller.setHours(12);\n }\n hoursInputProps?.onBlur?.(event);\n }}\n placeholder={hoursPlaceholder}\n />\n <span>:</span>\n <SpinInput\n {...minutesInputProps}\n {...getStyles('field', {\n className: minutesInputProps?.className,\n style: minutesInputProps?.style,\n })}\n value={controller.values.minutes}\n onChange={controller.setMinutes}\n min={0}\n max={59}\n focusable\n step={minutesStep}\n ref={_minutesRef}\n onPreviousInput={() => controller.focus('hours')}\n onNextInput={() =>\n withSeconds ? controller.focus('seconds') : controller.focus('amPm')\n }\n aria-label={minutesInputLabel}\n tabIndex={-1}\n readOnly={readOnly}\n disabled={disabled}\n onPaste={controller.onPaste}\n onFocus={(event) => {\n handleFocus(event);\n minutesInputProps?.onFocus?.(event);\n }}\n placeholder={minutesPlaceholder}\n />\n\n {withSeconds && (\n <>\n <span>:</span>\n <SpinInput\n {...secondsInputProps}\n {...getStyles('field', {\n className: secondsInputProps?.className,\n style: secondsInputProps?.style,\n })}\n value={controller.values.seconds}\n onChange={controller.setSeconds}\n min={0}\n max={59}\n focusable\n step={secondsStep}\n ref={_secondsRef}\n onPreviousInput={() => controller.focus('minutes')}\n onNextInput={() => controller.focus('amPm')}\n aria-label={secondsInputLabel}\n tabIndex={-1}\n readOnly={readOnly}\n disabled={disabled}\n onPaste={controller.onPaste}\n onFocus={(event) => {\n handleFocus(event);\n secondsInputProps?.onFocus?.(event);\n }}\n placeholder={secondsPlaceholder}\n />\n </>\n )}\n\n {format === '12h' && (\n <AmPmInput\n {...amPmSelectProps}\n inputType={withDropdown ? 'input' : 'select'}\n labels={amPmLabels}\n value={controller.values.amPm}\n onChange={controller.setAmPm}\n ref={_amPmRef}\n aria-label={amPmInputLabel}\n onPreviousInput={() =>\n withSeconds ? controller.focus('seconds') : controller.focus('minutes')\n }\n readOnly={readOnly}\n disabled={disabled}\n tabIndex={-1}\n onPaste={controller.onPaste}\n onFocus={(event) => {\n handleFocus(event);\n amPmSelectProps?.onFocus?.(event);\n }}\n />\n )}\n </div>\n </div>\n\n <input\n type=\"hidden\"\n name={name}\n form={form}\n value={controller.hiddenInputValue}\n {...hiddenInputProps}\n />\n </InputBase>\n </Popover.Target>\n <Popover.Dropdown\n {...getStyles('dropdown')}\n onMouseDown={(event) => event.preventDefault()}\n >\n {presets ? (\n <TimePresets\n value={controller.hiddenInputValue}\n onChange={controller.setTimeString}\n format={format}\n presets={presets}\n amPmLabels={amPmLabels}\n withSeconds={withSeconds || false}\n />\n ) : (\n <div {...getStyles('controlsListGroup')}>\n <TimeControlsList\n min={format === '12h' ? 1 : 0}\n max={format === '12h' ? 12 : 23}\n step={hoursStep}\n value={controller.values.hours}\n onSelect={controller.setHours}\n reversed={reverseTimeControlsList}\n />\n <TimeControlsList\n min={0}\n max={59}\n step={minutesStep}\n value={controller.values.minutes}\n onSelect={controller.setMinutes}\n reversed={reverseTimeControlsList}\n />\n {withSeconds && (\n <TimeControlsList\n min={0}\n max={59}\n step={secondsStep}\n value={controller.values.seconds}\n onSelect={controller.setSeconds}\n reversed={reverseTimeControlsList}\n />\n )}\n {format === '12h' && (\n <AmPmControlsList\n labels={amPmLabels}\n value={controller.values.amPm}\n onSelect={controller.setAmPm}\n />\n )}\n </div>\n )}\n </Popover.Dropdown>\n </Popover>\n </TimePickerProvider>\n );\n});\n\nTimePicker.displayName = '@mantine/dates/TimePicker';\nTimePicker.classes = classes;\nTimePicker.varsResolver = varsResolver;\n\nexport namespace TimePicker {\n export type Props = TimePickerProps;\n export type StylesNames = TimePickerStylesNames;\n export type Factory = TimePickerFactory;\n export type CssVariables = TimePickerCssVariables;\n export type Format = TimePickerFormat;\n export type AmPmLabels = TimePickerAmPmLabels;\n export type PasteSplit = TimePickerPasteSplit;\n export type Presets = TimePickerPresets;\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"YearPicker.cjs","names":["useDatesState","Calendar"],"sources":["../../../src/components/YearPicker/YearPicker.tsx"],"sourcesContent":["import {\n BoxProps,\n ElementProps,\n factory,\n Factory,\n MantineComponentStaticProperties,\n StylesApiProps,\n useProps,\n useResolvedStylesApi,\n} from '@mantine/core';\nimport { useDatesState } from '../../hooks';\nimport { DatePickerType, DateStringValue, PickerBaseProps } from '../../types';\nimport { Calendar, CalendarBaseProps } from '../Calendar';\nimport { DecadeLevelBaseSettings } from '../DecadeLevel';\nimport { DecadeLevelGroupStylesNames } from '../DecadeLevelGroup';\n\nexport type YearPickerStylesNames = DecadeLevelGroupStylesNames;\n\nexport interface YearPickerBaseProps<Type extends DatePickerType = 'default'>\n extends\n PickerBaseProps<Type>,\n DecadeLevelBaseSettings,\n Omit<\n CalendarBaseProps,\n 'onNextYear' | 'onPreviousYear' | 'onNextMonth' | 'onPreviousMonth' | 'hasNextLevel'\n > {}\n\nexport interface YearPickerProps<Type extends DatePickerType = 'default'>\n extends\n BoxProps,\n YearPickerBaseProps<Type>,\n StylesApiProps<YearPickerFactory>,\n ElementProps<'div', 'onChange' | 'value' | 'defaultValue'> {\n /** Called when year is selected */\n onYearSelect?: (date: DateStringValue) => void;\n}\n\nexport type YearPickerFactory = Factory<{\n props: YearPickerProps;\n ref: HTMLDivElement;\n stylesNames: YearPickerStylesNames;\n}>;\n\nconst defaultProps = {\n type: 'default',\n} satisfies Partial<YearPickerProps>;\n\ntype YearPickerComponent = (<Type extends DatePickerType = 'default'>(\n props: YearPickerProps<Type> & { ref?: React.Ref<HTMLDivElement> }\n) => React.JSX.Element) & {\n displayName?: string;\n} & MantineComponentStaticProperties<YearPickerFactory>;\n\nexport const YearPicker: YearPickerComponent = factory<YearPickerFactory>((_props) => {\n const props = useProps('YearPicker', defaultProps, _props);\n const {\n classNames,\n styles,\n vars,\n type,\n defaultValue,\n value,\n onChange,\n __staticSelector,\n getYearControlProps,\n allowSingleDateInRange,\n allowDeselect,\n onMouseLeave,\n onYearSelect,\n __updateDateOnYearSelect,\n ...others\n } = props;\n\n const { onDateChange, onRootMouseLeave, onHoveredDateChange, getControlProps } = useDatesState({\n type: type as any,\n level: 'year',\n allowDeselect,\n allowSingleDateInRange,\n value,\n defaultValue,\n onChange: onChange as any,\n onMouseLeave,\n });\n\n const { resolvedClassNames, resolvedStyles } = useResolvedStylesApi<YearPickerFactory>({\n classNames,\n styles,\n props,\n });\n\n return (\n <Calendar\n minLevel=\"decade\"\n __updateDateOnYearSelect={__updateDateOnYearSelect ?? false}\n __staticSelector={__staticSelector || 'YearPicker'}\n onMouseLeave={onRootMouseLeave}\n onYearMouseEnter={(_event, date) => onHoveredDateChange(date)}\n onYearSelect={(date) => {\n onDateChange(date);\n onYearSelect?.(date);\n }}\n getYearControlProps={(date) => ({\n ...getControlProps(date),\n ...getYearControlProps?.(date),\n })}\n classNames={resolvedClassNames}\n styles={resolvedStyles}\n {...others}\n />\n );\n}) as any;\n\nYearPicker.classes = Calendar.classes;\nYearPicker.displayName = '@mantine/dates/YearPicker';\n"],"mappings":";;;;;;;AA2CA,MAAM,eAAe,EACnB,MAAM,WACP;AAQD,MAAa,cAAA,GAAA,cAAA,UAA8D,WAAW;CACpF,MAAM,SAAA,GAAA,cAAA,UAAiB,cAAc,cAAc,OAAO;CAC1D,MAAM,EACJ,YACA,QACA,MACA,MACA,cACA,OACA,UACA,kBACA,qBACA,wBACA,eACA,cACA,cACA,0BACA,GAAG,WACD;CAEJ,MAAM,EAAE,cAAc,kBAAkB,qBAAqB,oBAAoBA,wBAAAA,cAAc;EACvF;EACN,OAAO;EACP;EACA;EACA;EACA;EACU;EACV;EACD,CAAC;CAEF,MAAM,EAAE,oBAAoB,oBAAA,GAAA,cAAA,sBAA2D;EACrF;EACA;EACA;EACD,CAAC;AAEF,QACE,iBAAA,GAAA,kBAAA,KAACC,iBAAAA,UAAD;EACE,UAAS;EACT,0BAA0B,4BAA4B;EACtD,kBAAkB,oBAAoB;EACtC,cAAc;EACd,mBAAmB,QAAQ,SAAS,oBAAoB,KAAK;EAC7D,eAAe,SAAS;AACtB,gBAAa,KAAK;AAClB,kBAAe,KAAK;;EAEtB,sBAAsB,UAAU;GAC9B,GAAG,gBAAgB,KAAK;GACxB,GAAG,sBAAsB,KAAK;GAC/B;EACD,YAAY;EACZ,QAAQ;EACR,GAAI;EACJ,CAAA;EAEJ;AAEF,WAAW,UAAUA,iBAAAA,SAAS;AAC9B,WAAW,cAAc"}
1
+ {"version":3,"file":"YearPicker.cjs","names":["useDatesState","Calendar"],"sources":["../../../src/components/YearPicker/YearPicker.tsx"],"sourcesContent":["import {\n BoxProps,\n ElementProps,\n factory,\n Factory,\n MantineComponentStaticProperties,\n StylesApiProps,\n useProps,\n useResolvedStylesApi,\n} from '@mantine/core';\nimport { useDatesState } from '../../hooks';\nimport { DatePickerType, DateStringValue, PickerBaseProps } from '../../types';\nimport { Calendar, CalendarBaseProps } from '../Calendar';\nimport { DecadeLevelBaseSettings } from '../DecadeLevel';\nimport { DecadeLevelGroupStylesNames } from '../DecadeLevelGroup';\n\nexport type YearPickerStylesNames = DecadeLevelGroupStylesNames;\n\nexport interface YearPickerBaseProps<Type extends DatePickerType = 'default'>\n extends\n PickerBaseProps<Type>,\n DecadeLevelBaseSettings,\n Omit<\n CalendarBaseProps,\n 'onNextYear' | 'onPreviousYear' | 'onNextMonth' | 'onPreviousMonth' | 'hasNextLevel'\n > {}\n\nexport interface YearPickerProps<Type extends DatePickerType = 'default'>\n extends\n BoxProps,\n YearPickerBaseProps<Type>,\n StylesApiProps<YearPickerFactory>,\n ElementProps<'div', 'onChange' | 'value' | 'defaultValue'> {\n /** Called when year is selected */\n onYearSelect?: (date: DateStringValue) => void;\n}\n\nexport type YearPickerFactory = Factory<{\n props: YearPickerProps;\n ref: HTMLDivElement;\n stylesNames: YearPickerStylesNames;\n}>;\n\nconst defaultProps = {\n type: 'default',\n} satisfies Partial<YearPickerProps>;\n\ntype YearPickerComponent = (<Type extends DatePickerType = 'default'>(\n props: YearPickerProps<Type> & { ref?: React.Ref<HTMLDivElement> }\n) => React.JSX.Element) & {\n displayName?: string;\n} & MantineComponentStaticProperties<YearPickerFactory>;\n\nexport const YearPicker: YearPickerComponent = factory<YearPickerFactory>((_props) => {\n const props = useProps('YearPicker', defaultProps, _props);\n const {\n classNames,\n styles,\n vars,\n type,\n defaultValue,\n value,\n onChange,\n __staticSelector,\n getYearControlProps,\n allowSingleDateInRange,\n allowDeselect,\n onMouseLeave,\n onYearSelect,\n __updateDateOnYearSelect,\n ...others\n } = props;\n\n const { onDateChange, onRootMouseLeave, onHoveredDateChange, getControlProps } = useDatesState({\n type: type as any,\n level: 'year',\n allowDeselect,\n allowSingleDateInRange,\n value,\n defaultValue,\n onChange: onChange as any,\n onMouseLeave,\n });\n\n const { resolvedClassNames, resolvedStyles } = useResolvedStylesApi<YearPickerFactory>({\n classNames,\n styles,\n props,\n });\n\n return (\n <Calendar\n minLevel=\"decade\"\n __updateDateOnYearSelect={__updateDateOnYearSelect ?? false}\n __staticSelector={__staticSelector || 'YearPicker'}\n onMouseLeave={onRootMouseLeave}\n onYearMouseEnter={(_event, date) => onHoveredDateChange(date)}\n onYearSelect={(date) => {\n onDateChange(date);\n onYearSelect?.(date);\n }}\n getYearControlProps={(date) => ({\n ...getControlProps(date),\n ...getYearControlProps?.(date),\n })}\n classNames={resolvedClassNames}\n styles={resolvedStyles}\n {...others}\n />\n );\n}) as any;\n\nYearPicker.classes = Calendar.classes;\nYearPicker.displayName = '@mantine/dates/YearPicker';\n\nexport namespace YearPicker {\n export type Props<Type extends DatePickerType = 'default'> = YearPickerProps<Type>;\n export type BaseProps = YearPickerBaseProps;\n export type StylesNames = YearPickerStylesNames;\n export type Factory = YearPickerFactory;\n}\n"],"mappings":";;;;;;;AA2CA,MAAM,eAAe,EACnB,MAAM,WACP;AAQD,MAAa,cAAA,GAAA,cAAA,UAA8D,WAAW;CACpF,MAAM,SAAA,GAAA,cAAA,UAAiB,cAAc,cAAc,OAAO;CAC1D,MAAM,EACJ,YACA,QACA,MACA,MACA,cACA,OACA,UACA,kBACA,qBACA,wBACA,eACA,cACA,cACA,0BACA,GAAG,WACD;CAEJ,MAAM,EAAE,cAAc,kBAAkB,qBAAqB,oBAAoBA,wBAAAA,cAAc;EACvF;EACN,OAAO;EACP;EACA;EACA;EACA;EACU;EACV;EACD,CAAC;CAEF,MAAM,EAAE,oBAAoB,oBAAA,GAAA,cAAA,sBAA2D;EACrF;EACA;EACA;EACD,CAAC;AAEF,QACE,iBAAA,GAAA,kBAAA,KAACC,iBAAAA,UAAD;EACE,UAAS;EACT,0BAA0B,4BAA4B;EACtD,kBAAkB,oBAAoB;EACtC,cAAc;EACd,mBAAmB,QAAQ,SAAS,oBAAoB,KAAK;EAC7D,eAAe,SAAS;AACtB,gBAAa,KAAK;AAClB,kBAAe,KAAK;;EAEtB,sBAAsB,UAAU;GAC9B,GAAG,gBAAgB,KAAK;GACxB,GAAG,sBAAsB,KAAK;GAC/B;EACD,YAAY;EACZ,QAAQ;EACR,GAAI;EACJ,CAAA;EAEJ;AAEF,WAAW,UAAUA,iBAAAA,SAAS;AAC9B,WAAW,cAAc"}
@@ -10,6 +10,7 @@ let _mantine_core = require("@mantine/core");
10
10
  //#region packages/@mantine/dates/src/components/YearPickerInput/YearPickerInput.tsx
11
11
  const defaultProps = {
12
12
  type: "default",
13
+ size: "sm",
13
14
  valueFormat: "YYYY",
14
15
  closeOnChange: true,
15
16
  sortDates: true,
@@ -1 +1 @@
1
- {"version":3,"file":"YearPickerInput.cjs","names":["pickCalendarProps","useDatesInput","PickerInputBase","YearPicker","getDefaultClampedDate"],"sources":["../../../src/components/YearPickerInput/YearPickerInput.tsx"],"sourcesContent":["import {\n __InputStylesNames,\n BoxProps,\n factory,\n Factory,\n InputVariant,\n MantineComponentStaticProperties,\n StylesApiProps,\n useProps,\n useResolvedStylesApi,\n} from '@mantine/core';\nimport { useDatesInput } from '../../hooks';\nimport { DatePickerType } from '../../types';\nimport { getDefaultClampedDate } from '../../utils';\nimport { pickCalendarProps } from '../Calendar';\nimport { DateInputSharedProps, PickerInputBase } from '../PickerInputBase';\nimport { YearPicker, YearPickerBaseProps, YearPickerStylesNames } from '../YearPicker';\n\nexport type YearPickerInputStylesNames = __InputStylesNames | 'placeholder' | YearPickerStylesNames;\n\nexport interface YearPickerInputProps<Type extends DatePickerType = 'default'>\n extends\n BoxProps,\n DateInputSharedProps,\n YearPickerBaseProps<Type>,\n StylesApiProps<YearPickerInputFactory> {\n /** `dayjs` format to display input value @default \"YYYY\" */\n valueFormat?: string;\n}\n\nexport type YearPickerInputFactory = Factory<{\n props: YearPickerInputProps;\n ref: HTMLButtonElement;\n stylesNames: YearPickerInputStylesNames;\n variant: InputVariant;\n}>;\n\nconst defaultProps = {\n type: 'default',\n valueFormat: 'YYYY',\n closeOnChange: true,\n sortDates: true,\n dropdownType: 'popover',\n} satisfies Partial<YearPickerInputProps>;\n\ntype YearPickerInputComponent = (<Type extends DatePickerType = 'default'>(\n props: YearPickerInputProps<Type> & { ref?: React.Ref<HTMLButtonElement> }\n) => React.JSX.Element) & {\n displayName?: string;\n} & MantineComponentStaticProperties<YearPickerInputFactory>;\n\nexport const YearPickerInput: YearPickerInputComponent = factory<YearPickerInputFactory>(\n (_props) => {\n const props = useProps('YearPickerInput', defaultProps, _props);\n const {\n type,\n value,\n defaultValue,\n onChange,\n valueFormat,\n labelSeparator,\n locale,\n classNames,\n styles,\n unstyled,\n closeOnChange,\n size,\n variant,\n dropdownType,\n sortDates,\n minDate,\n maxDate,\n vars,\n valueFormatter,\n attributes,\n ...rest\n } = props;\n\n const { resolvedClassNames, resolvedStyles } = useResolvedStylesApi<YearPickerInputFactory>({\n classNames,\n styles,\n props,\n });\n\n const { calendarProps, others } = pickCalendarProps(rest);\n\n const {\n _value,\n setValue,\n formattedValue,\n dropdownHandlers,\n dropdownOpened,\n onClear,\n shouldClear,\n } = useDatesInput({\n type: type as any,\n value,\n defaultValue,\n onChange: onChange as any,\n locale,\n format: valueFormat,\n labelSeparator,\n closeOnChange,\n sortDates,\n valueFormatter,\n });\n\n return (\n <PickerInputBase\n formattedValue={formattedValue}\n dropdownOpened={dropdownOpened}\n dropdownHandlers={dropdownHandlers}\n classNames={resolvedClassNames}\n styles={resolvedStyles}\n unstyled={unstyled}\n onClear={onClear}\n shouldClear={shouldClear}\n value={_value}\n size={size}\n variant={variant}\n dropdownType={dropdownType}\n {...others}\n type={type as any}\n __staticSelector=\"YearPickerInput\"\n attributes={attributes}\n >\n <YearPicker\n {...calendarProps}\n size={size}\n variant={variant}\n type={type}\n value={_value}\n defaultDate={\n calendarProps.defaultDate ||\n (Array.isArray(_value)\n ? _value[0] || getDefaultClampedDate({ maxDate, minDate })\n : _value || getDefaultClampedDate({ maxDate, minDate }))\n }\n onChange={setValue}\n locale={locale}\n classNames={resolvedClassNames}\n styles={resolvedStyles}\n unstyled={unstyled}\n __staticSelector=\"YearPickerInput\"\n __stopPropagation={dropdownType === 'popover'}\n minDate={minDate}\n maxDate={maxDate}\n attributes={attributes}\n />\n </PickerInputBase>\n );\n }\n) as any;\n\nYearPickerInput.classes = { ...PickerInputBase.classes, ...YearPicker.classes };\nYearPickerInput.displayName = '@mantine/dates/YearPickerInput';\n"],"mappings":";;;;;;;;;;AAqCA,MAAM,eAAe;CACnB,MAAM;CACN,aAAa;CACb,eAAe;CACf,WAAW;CACX,cAAc;CACf;AAQD,MAAa,mBAAA,GAAA,cAAA,UACV,WAAW;CACV,MAAM,SAAA,GAAA,cAAA,UAAiB,mBAAmB,cAAc,OAAO;CAC/D,MAAM,EACJ,MACA,OACA,cACA,UACA,aACA,gBACA,QACA,YACA,QACA,UACA,eACA,MACA,SACA,cACA,WACA,SACA,SACA,MACA,gBACA,YACA,GAAG,SACD;CAEJ,MAAM,EAAE,oBAAoB,oBAAA,GAAA,cAAA,sBAAgE;EAC1F;EACA;EACA;EACD,CAAC;CAEF,MAAM,EAAE,eAAe,WAAWA,mCAAAA,kBAAkB,KAAK;CAEzD,MAAM,EACJ,QACA,UACA,gBACA,kBACA,gBACA,SACA,gBACEC,wBAAAA,cAAc;EACV;EACN;EACA;EACU;EACV;EACA,QAAQ;EACR;EACA;EACA;EACA;EACD,CAAC;AAEF,QACE,iBAAA,GAAA,kBAAA,KAACC,wBAAAA,iBAAD;EACkB;EACA;EACE;EAClB,YAAY;EACZ,QAAQ;EACE;EACD;EACI;EACb,OAAO;EACD;EACG;EACK;EACd,GAAI;EACE;EACN,kBAAiB;EACL;YAEZ,iBAAA,GAAA,kBAAA,KAACC,mBAAAA,YAAD;GACE,GAAI;GACE;GACG;GACH;GACN,OAAO;GACP,aACE,cAAc,gBACb,MAAM,QAAQ,OAAO,GAClB,OAAO,MAAMC,iCAAAA,sBAAsB;IAAE;IAAS;IAAS,CAAC,GACxD,UAAUA,iCAAAA,sBAAsB;IAAE;IAAS;IAAS,CAAC;GAE3D,UAAU;GACF;GACR,YAAY;GACZ,QAAQ;GACE;GACV,kBAAiB;GACjB,mBAAmB,iBAAiB;GAC3B;GACA;GACG;GACZ,CAAA;EACc,CAAA;EAGvB;AAED,gBAAgB,UAAU;CAAE,GAAGF,wBAAAA,gBAAgB;CAAS,GAAGC,mBAAAA,WAAW;CAAS;AAC/E,gBAAgB,cAAc"}
1
+ {"version":3,"file":"YearPickerInput.cjs","names":["pickCalendarProps","useDatesInput","PickerInputBase","YearPicker","getDefaultClampedDate"],"sources":["../../../src/components/YearPickerInput/YearPickerInput.tsx"],"sourcesContent":["import {\n __InputStylesNames,\n BoxProps,\n factory,\n Factory,\n InputVariant,\n MantineComponentStaticProperties,\n StylesApiProps,\n useProps,\n useResolvedStylesApi,\n} from '@mantine/core';\nimport { useDatesInput } from '../../hooks';\nimport { DatePickerType } from '../../types';\nimport { getDefaultClampedDate } from '../../utils';\nimport { pickCalendarProps } from '../Calendar';\nimport { DateInputSharedProps, PickerInputBase } from '../PickerInputBase';\nimport { YearPicker, YearPickerBaseProps, YearPickerStylesNames } from '../YearPicker';\n\nexport type YearPickerInputStylesNames = __InputStylesNames | 'placeholder' | YearPickerStylesNames;\n\nexport interface YearPickerInputProps<Type extends DatePickerType = 'default'>\n extends\n BoxProps,\n DateInputSharedProps,\n YearPickerBaseProps<Type>,\n StylesApiProps<YearPickerInputFactory> {\n /** `dayjs` format to display input value @default \"YYYY\" */\n valueFormat?: string;\n}\n\nexport type YearPickerInputFactory = Factory<{\n props: YearPickerInputProps;\n ref: HTMLButtonElement;\n stylesNames: YearPickerInputStylesNames;\n variant: InputVariant;\n}>;\n\nconst defaultProps = {\n type: 'default',\n size: 'sm',\n valueFormat: 'YYYY',\n closeOnChange: true,\n sortDates: true,\n dropdownType: 'popover',\n} satisfies Partial<YearPickerInputProps>;\n\ntype YearPickerInputComponent = (<Type extends DatePickerType = 'default'>(\n props: YearPickerInputProps<Type> & { ref?: React.Ref<HTMLButtonElement> }\n) => React.JSX.Element) & {\n displayName?: string;\n} & MantineComponentStaticProperties<YearPickerInputFactory>;\n\nexport const YearPickerInput: YearPickerInputComponent = factory<YearPickerInputFactory>(\n (_props) => {\n const props = useProps('YearPickerInput', defaultProps, _props);\n const {\n type,\n value,\n defaultValue,\n onChange,\n valueFormat,\n labelSeparator,\n locale,\n classNames,\n styles,\n unstyled,\n closeOnChange,\n size,\n variant,\n dropdownType,\n sortDates,\n minDate,\n maxDate,\n vars,\n valueFormatter,\n attributes,\n ...rest\n } = props;\n\n const { resolvedClassNames, resolvedStyles } = useResolvedStylesApi<YearPickerInputFactory>({\n classNames,\n styles,\n props,\n });\n\n const { calendarProps, others } = pickCalendarProps(rest);\n\n const {\n _value,\n setValue,\n formattedValue,\n dropdownHandlers,\n dropdownOpened,\n onClear,\n shouldClear,\n } = useDatesInput({\n type: type as any,\n value,\n defaultValue,\n onChange: onChange as any,\n locale,\n format: valueFormat,\n labelSeparator,\n closeOnChange,\n sortDates,\n valueFormatter,\n });\n\n return (\n <PickerInputBase\n formattedValue={formattedValue}\n dropdownOpened={dropdownOpened}\n dropdownHandlers={dropdownHandlers}\n classNames={resolvedClassNames}\n styles={resolvedStyles}\n unstyled={unstyled}\n onClear={onClear}\n shouldClear={shouldClear}\n value={_value}\n size={size}\n variant={variant}\n dropdownType={dropdownType}\n {...others}\n type={type as any}\n __staticSelector=\"YearPickerInput\"\n attributes={attributes}\n >\n <YearPicker\n {...calendarProps}\n size={size}\n variant={variant}\n type={type}\n value={_value}\n defaultDate={\n calendarProps.defaultDate ||\n (Array.isArray(_value)\n ? _value[0] || getDefaultClampedDate({ maxDate, minDate })\n : _value || getDefaultClampedDate({ maxDate, minDate }))\n }\n onChange={setValue}\n locale={locale}\n classNames={resolvedClassNames}\n styles={resolvedStyles}\n unstyled={unstyled}\n __staticSelector=\"YearPickerInput\"\n __stopPropagation={dropdownType === 'popover'}\n minDate={minDate}\n maxDate={maxDate}\n attributes={attributes}\n />\n </PickerInputBase>\n );\n }\n) as any;\n\nYearPickerInput.classes = { ...PickerInputBase.classes, ...YearPicker.classes };\nYearPickerInput.displayName = '@mantine/dates/YearPickerInput';\n\nexport namespace YearPickerInput {\n export type Props<Type extends DatePickerType = 'default'> = YearPickerInputProps<Type>;\n export type StylesNames = YearPickerInputStylesNames;\n export type Factory = YearPickerInputFactory;\n}\n"],"mappings":";;;;;;;;;;AAqCA,MAAM,eAAe;CACnB,MAAM;CACN,MAAM;CACN,aAAa;CACb,eAAe;CACf,WAAW;CACX,cAAc;CACf;AAQD,MAAa,mBAAA,GAAA,cAAA,UACV,WAAW;CACV,MAAM,SAAA,GAAA,cAAA,UAAiB,mBAAmB,cAAc,OAAO;CAC/D,MAAM,EACJ,MACA,OACA,cACA,UACA,aACA,gBACA,QACA,YACA,QACA,UACA,eACA,MACA,SACA,cACA,WACA,SACA,SACA,MACA,gBACA,YACA,GAAG,SACD;CAEJ,MAAM,EAAE,oBAAoB,oBAAA,GAAA,cAAA,sBAAgE;EAC1F;EACA;EACA;EACD,CAAC;CAEF,MAAM,EAAE,eAAe,WAAWA,mCAAAA,kBAAkB,KAAK;CAEzD,MAAM,EACJ,QACA,UACA,gBACA,kBACA,gBACA,SACA,gBACEC,wBAAAA,cAAc;EACV;EACN;EACA;EACU;EACV;EACA,QAAQ;EACR;EACA;EACA;EACA;EACD,CAAC;AAEF,QACE,iBAAA,GAAA,kBAAA,KAACC,wBAAAA,iBAAD;EACkB;EACA;EACE;EAClB,YAAY;EACZ,QAAQ;EACE;EACD;EACI;EACb,OAAO;EACD;EACG;EACK;EACd,GAAI;EACE;EACN,kBAAiB;EACL;YAEZ,iBAAA,GAAA,kBAAA,KAACC,mBAAAA,YAAD;GACE,GAAI;GACE;GACG;GACH;GACN,OAAO;GACP,aACE,cAAc,gBACb,MAAM,QAAQ,OAAO,GAClB,OAAO,MAAMC,iCAAAA,sBAAsB;IAAE;IAAS;IAAS,CAAC,GACxD,UAAUA,iCAAAA,sBAAsB;IAAE;IAAS;IAAS,CAAC;GAE3D,UAAU;GACF;GACR,YAAY;GACZ,QAAQ;GACE;GACV,kBAAiB;GACjB,mBAAmB,iBAAiB;GAC3B;GACA;GACG;GACZ,CAAA;EACc,CAAA;EAGvB;AAED,gBAAgB,UAAU;CAAE,GAAGF,wBAAAA,gBAAgB;CAAS,GAAGC,mBAAAA,WAAW;CAAS;AAC/E,gBAAgB,cAAc"}
@@ -1 +1 @@
1
- {"version":3,"file":"Calendar.mjs","names":[],"sources":["../../../src/components/Calendar/Calendar.tsx"],"sourcesContent":["import dayjs from 'dayjs';\nimport { useEffect, useImperativeHandle, useRef } from 'react';\nimport {\n Box,\n BoxProps,\n ElementProps,\n Factory,\n factory,\n StylesApiProps,\n useProps,\n useResolvedStylesApi,\n} from '@mantine/core';\nimport { useMergedRef, useUncontrolled } from '@mantine/hooks';\nimport { useUncontrolledDates } from '../../hooks';\nimport { CalendarLevel, DateStringValue } from '../../types';\nimport { toDateString } from '../../utils';\nimport { DecadeLevelSettings } from '../DecadeLevel';\nimport { DecadeLevelGroup, DecadeLevelGroupStylesNames } from '../DecadeLevelGroup';\nimport { MonthLevelSettings } from '../MonthLevel';\nimport { MonthLevelGroup, MonthLevelGroupStylesNames } from '../MonthLevelGroup';\nimport { YearLevelSettings } from '../YearLevel';\nimport { YearLevelGroup, YearLevelGroupStylesNames } from '../YearLevelGroup';\nimport { clampLevel } from './clamp-level/clamp-level';\n\nexport type CalendarStylesNames =\n | MonthLevelGroupStylesNames\n | YearLevelGroupStylesNames\n | DecadeLevelGroupStylesNames;\n\nexport interface CalendarAriaLabels {\n monthLevelControl?: string;\n yearLevelControl?: string;\n\n nextMonth?: string;\n previousMonth?: string;\n\n nextYear?: string;\n previousYear?: string;\n\n nextDecade?: string;\n previousDecade?: string;\n}\n\ntype OmittedSettings =\n | 'onNext'\n | 'onPrevious'\n | 'onLevelClick'\n | 'withNext'\n | 'withPrevious'\n | 'nextDisabled'\n | 'previousDisabled'\n | 'hasNextLevel';\n\nexport interface CalendarSettings\n extends\n Omit<DecadeLevelSettings, OmittedSettings>,\n Omit<YearLevelSettings, OmittedSettings>,\n Omit<MonthLevelSettings, OmittedSettings> {\n /** Initial displayed level in uncontrolled mode */\n defaultLevel?: CalendarLevel;\n\n /** Current displayed level displayed in controlled mode */\n level?: CalendarLevel;\n\n /** Called when level changes */\n onLevelChange?: (level: CalendarLevel) => void;\n\n /** Called when user selects year */\n onYearSelect?: (date: DateStringValue) => void;\n\n /** Called when user selects month */\n onMonthSelect?: (date: DateStringValue) => void;\n\n /** Called when mouse enters year control */\n onYearMouseEnter?: (event: React.MouseEvent<HTMLButtonElement>, date: DateStringValue) => void;\n\n /** Called when mouse enters month control */\n onMonthMouseEnter?: (event: React.MouseEvent<HTMLButtonElement>, date: DateStringValue) => void;\n}\n\nexport interface CalendarBaseProps {\n __staticSelector?: string;\n\n /** Prevents focus shift when buttons are clicked */\n __preventFocus?: boolean;\n\n /** Determines whether date should be updated when year control is clicked */\n __updateDateOnYearSelect?: boolean;\n\n /** Determines whether date should be updated when month control is clicked */\n __updateDateOnMonthSelect?: boolean;\n\n /** Assigns function to set date to the given ref */\n __setDateRef?: React.RefObject<((date: DateStringValue) => void) | null>;\n\n /** Assigns function to set level to the given ref */\n __setLevelRef?: React.RefObject<((level: CalendarLevel) => void) | null>;\n\n /** Initial displayed date in uncontrolled mode */\n defaultDate?: DateStringValue | Date;\n\n /** Displayed date in controlled mode */\n date?: DateStringValue | Date;\n\n /** Called when date changes */\n onDateChange?: (date: DateStringValue) => void;\n\n /** Number of columns displayed next to each other @default 1 */\n numberOfColumns?: number;\n\n /** Number of columns to scroll with next/prev buttons, same as `numberOfColumns` if not set explicitly */\n columnsToScroll?: number;\n\n /** `aria-label` attributes for controls on different levels */\n ariaLabels?: CalendarAriaLabels;\n\n /** Next button `aria-label` */\n nextLabel?: string;\n\n /** Previous button `aria-label` */\n previousLabel?: string;\n\n /** Determines whether the calendar should take the full width of its container @default false */\n fullWidth?: boolean;\n\n /** Called when the next decade button is clicked */\n onNextDecade?: (date: DateStringValue) => void;\n\n /** Called when the previous decade button is clicked */\n onPreviousDecade?: (date: DateStringValue) => void;\n\n /** Called when the next year button is clicked */\n onNextYear?: (date: DateStringValue) => void;\n\n /** Called when the previous year button is clicked */\n onPreviousYear?: (date: DateStringValue) => void;\n\n /** Called when the next month button is clicked */\n onNextMonth?: (date: DateStringValue) => void;\n\n /** Called when the previous month button is clicked */\n onPreviousMonth?: (date: DateStringValue) => void;\n}\n\nexport interface CalendarProps\n extends\n BoxProps,\n CalendarSettings,\n CalendarBaseProps,\n StylesApiProps<CalendarFactory>,\n ElementProps<'div'> {\n /** Max level that user can go up to (decade, year, month) @default 'decade' */\n maxLevel?: CalendarLevel;\n\n /** Min level that user can go down to (decade, year, month) @default 'month' */\n minLevel?: CalendarLevel;\n\n /** Determines whether days should be static, static days can be used to display month if it is not expected that user will interact with the component in any way */\n static?: boolean;\n\n /** Enable enhanced keyboard navigation (Ctrl/Cmd + Arrow keys for year navigation, Ctrl/Cmd + Shift + Arrow keys for decade navigation, Y key to open year view) */\n enableKeyboardNavigation?: boolean;\n}\n\nexport type CalendarFactory = Factory<{\n props: CalendarProps;\n ref: HTMLDivElement;\n stylesNames: CalendarStylesNames;\n}>;\n\nconst defaultProps = {\n maxLevel: 'decade',\n minLevel: 'month',\n __updateDateOnYearSelect: true,\n __updateDateOnMonthSelect: true,\n enableKeyboardNavigation: true,\n} satisfies Partial<CalendarProps>;\n\nexport const Calendar = factory<CalendarFactory>((_props) => {\n const props = useProps('Calendar', defaultProps, _props);\n const {\n // CalendarLevel props\n vars,\n maxLevel,\n minLevel,\n defaultLevel,\n level,\n onLevelChange,\n date,\n defaultDate,\n onDateChange,\n numberOfColumns,\n columnsToScroll,\n ariaLabels,\n nextLabel,\n previousLabel,\n onYearSelect,\n onMonthSelect,\n onYearMouseEnter,\n onMonthMouseEnter,\n headerControlsOrder,\n __updateDateOnYearSelect,\n __updateDateOnMonthSelect,\n __setDateRef,\n __setLevelRef,\n\n // MonthLevelGroup props\n firstDayOfWeek,\n weekdayFormat,\n weekendDays,\n getDayProps,\n excludeDate,\n renderDay,\n hideOutsideDates,\n hideWeekdays,\n getDayAriaLabel,\n monthLabelFormat,\n nextIcon,\n previousIcon,\n __onDayClick,\n __onDayMouseEnter,\n withCellSpacing,\n highlightToday,\n withWeekNumbers,\n\n // YearLevelGroup props\n monthsListFormat,\n getMonthControlProps,\n yearLabelFormat,\n\n // DecadeLevelGroup props\n yearsListFormat,\n getYearControlProps,\n decadeLabelFormat,\n\n // Other props\n classNames,\n styles,\n unstyled,\n minDate,\n maxDate,\n locale,\n __staticSelector,\n size,\n __preventFocus,\n __stopPropagation,\n onNextDecade,\n onPreviousDecade,\n onNextYear,\n onPreviousYear,\n onNextMonth,\n onPreviousMonth,\n static: isStatic,\n enableKeyboardNavigation,\n fullWidth,\n attributes,\n ref,\n ...others\n } = props;\n\n const { resolvedClassNames, resolvedStyles } = useResolvedStylesApi<CalendarFactory>({\n classNames,\n styles,\n props,\n });\n\n const [_level, setLevel] = useUncontrolled({\n value: level ? clampLevel(level, minLevel, maxLevel) : undefined,\n defaultValue: defaultLevel ? clampLevel(defaultLevel, minLevel, maxLevel) : undefined,\n finalValue: clampLevel(undefined, minLevel, maxLevel),\n onChange: onLevelChange,\n });\n\n const [_date, setDate] = useUncontrolledDates({\n type: 'default',\n value: toDateString(date),\n defaultValue: toDateString(defaultDate),\n onChange: onDateChange as any,\n });\n\n useImperativeHandle(__setDateRef, () => (date: DateStringValue) => {\n setDate(date);\n });\n\n useImperativeHandle(__setLevelRef, () => (level: CalendarLevel) => {\n setLevel(level);\n });\n\n const stylesApiProps = {\n __staticSelector: __staticSelector || 'Calendar',\n styles: resolvedStyles,\n classNames: resolvedClassNames,\n unstyled,\n size,\n attributes,\n };\n\n const _columnsToScroll = columnsToScroll || numberOfColumns || 1;\n\n const fallbackDateRef = useRef<DateStringValue | null>(null);\n if (fallbackDateRef.current === null) {\n const now = new Date();\n fallbackDateRef.current = (\n minDate && dayjs(now).isAfter(minDate) ? minDate : dayjs(now).format('YYYY-MM-DD')\n ) as DateStringValue;\n }\n const currentDate = _date || fallbackDateRef.current;\n\n const handleNextMonth = () => {\n const nextDate = dayjs(currentDate).add(_columnsToScroll, 'month').format('YYYY-MM-DD');\n onNextMonth?.(nextDate);\n setDate(nextDate);\n };\n\n const handlePreviousMonth = () => {\n const nextDate = dayjs(currentDate).subtract(_columnsToScroll, 'month').format('YYYY-MM-DD');\n onPreviousMonth?.(nextDate);\n setDate(nextDate);\n };\n\n const handleNextYear = () => {\n const nextDate = dayjs(currentDate).add(_columnsToScroll, 'year').format('YYYY-MM-DD');\n onNextYear?.(nextDate);\n setDate(nextDate);\n };\n\n const handlePreviousYear = () => {\n const nextDate = dayjs(currentDate).subtract(_columnsToScroll, 'year').format('YYYY-MM-DD');\n onPreviousYear?.(nextDate);\n setDate(nextDate);\n };\n\n const handleNextDecade = () => {\n const nextDate = dayjs(currentDate)\n .add(10 * _columnsToScroll, 'year')\n .format('YYYY-MM-DD');\n onNextDecade?.(nextDate);\n setDate(nextDate);\n };\n\n const handlePreviousDecade = () => {\n const nextDate = dayjs(currentDate)\n .subtract(10 * _columnsToScroll, 'year')\n .format('YYYY-MM-DD');\n onPreviousDecade?.(nextDate);\n setDate(nextDate);\n };\n\n const calendarRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!enableKeyboardNavigation || isStatic) {\n return;\n }\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (!calendarRef.current?.contains(document.activeElement)) {\n return;\n }\n\n const isCtrlOrCmd = event.ctrlKey || event.metaKey;\n const isShift = event.shiftKey;\n\n switch (event.key) {\n case 'ArrowUp':\n if (isCtrlOrCmd && isShift) {\n event.preventDefault();\n handlePreviousDecade();\n } else if (isCtrlOrCmd) {\n event.preventDefault();\n handlePreviousYear();\n }\n break;\n\n case 'ArrowDown':\n if (isCtrlOrCmd && isShift) {\n event.preventDefault();\n handleNextDecade();\n } else if (isCtrlOrCmd) {\n event.preventDefault();\n handleNextYear();\n }\n break;\n\n case 'y':\n case 'Y':\n if (_level === 'month') {\n event.preventDefault();\n setLevel('year');\n }\n break;\n }\n };\n\n document.addEventListener('keydown', handleKeyDown);\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown);\n };\n }, [\n enableKeyboardNavigation,\n isStatic,\n _level,\n handleNextYear,\n handlePreviousYear,\n handleNextDecade,\n handlePreviousDecade,\n ]);\n\n return (\n <Box\n ref={useMergedRef(calendarRef, ref)}\n size={size}\n data-calendar\n data-full-width={fullWidth || undefined}\n {...others}\n >\n {_level === 'month' && (\n <MonthLevelGroup\n month={currentDate}\n minDate={minDate}\n maxDate={maxDate}\n firstDayOfWeek={firstDayOfWeek}\n weekdayFormat={weekdayFormat}\n weekendDays={weekendDays}\n getDayProps={getDayProps}\n excludeDate={excludeDate}\n renderDay={renderDay}\n hideOutsideDates={hideOutsideDates}\n hideWeekdays={hideWeekdays}\n getDayAriaLabel={getDayAriaLabel}\n onNext={handleNextMonth}\n onPrevious={handlePreviousMonth}\n hasNextLevel={maxLevel !== 'month'}\n onLevelClick={() => setLevel('year')}\n numberOfColumns={numberOfColumns}\n locale={locale}\n levelControlAriaLabel={ariaLabels?.monthLevelControl}\n nextLabel={ariaLabels?.nextMonth ?? nextLabel}\n nextIcon={nextIcon}\n previousLabel={ariaLabels?.previousMonth ?? previousLabel}\n previousIcon={previousIcon}\n monthLabelFormat={monthLabelFormat}\n __onDayClick={__onDayClick}\n __onDayMouseEnter={__onDayMouseEnter}\n __preventFocus={__preventFocus}\n __stopPropagation={__stopPropagation}\n static={isStatic}\n withCellSpacing={withCellSpacing}\n highlightToday={highlightToday}\n withWeekNumbers={withWeekNumbers}\n headerControlsOrder={headerControlsOrder}\n fullWidth={fullWidth}\n {...stylesApiProps}\n />\n )}\n\n {_level === 'year' && (\n <YearLevelGroup\n year={currentDate}\n numberOfColumns={numberOfColumns}\n minDate={minDate}\n maxDate={maxDate}\n monthsListFormat={monthsListFormat}\n getMonthControlProps={getMonthControlProps}\n locale={locale}\n onNext={handleNextYear}\n onPrevious={handlePreviousYear}\n hasNextLevel={maxLevel !== 'month' && maxLevel !== 'year'}\n onLevelClick={() => setLevel('decade')}\n levelControlAriaLabel={ariaLabels?.yearLevelControl}\n nextLabel={ariaLabels?.nextYear ?? nextLabel}\n nextIcon={nextIcon}\n previousLabel={ariaLabels?.previousYear ?? previousLabel}\n previousIcon={previousIcon}\n yearLabelFormat={yearLabelFormat}\n __onControlMouseEnter={onMonthMouseEnter}\n __onControlClick={(_event, payload) => {\n __updateDateOnMonthSelect && setDate(payload);\n setLevel(clampLevel('month', minLevel, maxLevel));\n onMonthSelect?.(payload);\n }}\n __preventFocus={__preventFocus}\n __stopPropagation={__stopPropagation}\n withCellSpacing={withCellSpacing}\n headerControlsOrder={headerControlsOrder}\n fullWidth={fullWidth}\n {...stylesApiProps}\n />\n )}\n\n {_level === 'decade' && (\n <DecadeLevelGroup\n decade={currentDate}\n minDate={minDate}\n maxDate={maxDate}\n yearsListFormat={yearsListFormat}\n getYearControlProps={getYearControlProps}\n locale={locale}\n onNext={handleNextDecade}\n onPrevious={handlePreviousDecade}\n numberOfColumns={numberOfColumns}\n nextLabel={ariaLabels?.nextDecade ?? nextLabel}\n nextIcon={nextIcon}\n previousLabel={ariaLabels?.previousDecade ?? previousLabel}\n previousIcon={previousIcon}\n decadeLabelFormat={decadeLabelFormat}\n __onControlMouseEnter={onYearMouseEnter}\n __onControlClick={(_event, payload) => {\n __updateDateOnYearSelect && setDate(payload);\n setLevel(clampLevel('year', minLevel, maxLevel));\n onYearSelect?.(payload);\n }}\n __preventFocus={__preventFocus}\n __stopPropagation={__stopPropagation}\n withCellSpacing={withCellSpacing}\n headerControlsOrder={headerControlsOrder}\n fullWidth={fullWidth}\n {...stylesApiProps}\n />\n )}\n </Box>\n );\n});\n\nCalendar.classes = {\n ...DecadeLevelGroup.classes,\n ...YearLevelGroup.classes,\n ...MonthLevelGroup.classes,\n};\nCalendar.displayName = '@mantine/dates/Calendar';\n"],"mappings":"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"}
1
+ {"version":3,"file":"Calendar.mjs","names":[],"sources":["../../../src/components/Calendar/Calendar.tsx"],"sourcesContent":["import dayjs from 'dayjs';\nimport { useEffect, useImperativeHandle, useRef } from 'react';\nimport {\n Box,\n BoxProps,\n ElementProps,\n Factory,\n factory,\n StylesApiProps,\n useProps,\n useResolvedStylesApi,\n} from '@mantine/core';\nimport { useMergedRef, useUncontrolled } from '@mantine/hooks';\nimport { useUncontrolledDates } from '../../hooks';\nimport { CalendarLevel, DateStringValue } from '../../types';\nimport { toDateString } from '../../utils';\nimport { DecadeLevelSettings } from '../DecadeLevel';\nimport { DecadeLevelGroup, DecadeLevelGroupStylesNames } from '../DecadeLevelGroup';\nimport { MonthLevelSettings } from '../MonthLevel';\nimport { MonthLevelGroup, MonthLevelGroupStylesNames } from '../MonthLevelGroup';\nimport { YearLevelSettings } from '../YearLevel';\nimport { YearLevelGroup, YearLevelGroupStylesNames } from '../YearLevelGroup';\nimport { clampLevel } from './clamp-level/clamp-level';\n\nexport type CalendarStylesNames =\n | MonthLevelGroupStylesNames\n | YearLevelGroupStylesNames\n | DecadeLevelGroupStylesNames;\n\nexport interface CalendarAriaLabels {\n monthLevelControl?: string;\n yearLevelControl?: string;\n\n nextMonth?: string;\n previousMonth?: string;\n\n nextYear?: string;\n previousYear?: string;\n\n nextDecade?: string;\n previousDecade?: string;\n}\n\ntype OmittedSettings =\n | 'onNext'\n | 'onPrevious'\n | 'onLevelClick'\n | 'withNext'\n | 'withPrevious'\n | 'nextDisabled'\n | 'previousDisabled'\n | 'hasNextLevel';\n\nexport interface CalendarSettings\n extends\n Omit<DecadeLevelSettings, OmittedSettings>,\n Omit<YearLevelSettings, OmittedSettings>,\n Omit<MonthLevelSettings, OmittedSettings> {\n /** Initial displayed level in uncontrolled mode */\n defaultLevel?: CalendarLevel;\n\n /** Current displayed level displayed in controlled mode */\n level?: CalendarLevel;\n\n /** Called when level changes */\n onLevelChange?: (level: CalendarLevel) => void;\n\n /** Called when user selects year */\n onYearSelect?: (date: DateStringValue) => void;\n\n /** Called when user selects month */\n onMonthSelect?: (date: DateStringValue) => void;\n\n /** Called when mouse enters year control */\n onYearMouseEnter?: (event: React.MouseEvent<HTMLButtonElement>, date: DateStringValue) => void;\n\n /** Called when mouse enters month control */\n onMonthMouseEnter?: (event: React.MouseEvent<HTMLButtonElement>, date: DateStringValue) => void;\n}\n\nexport interface CalendarBaseProps {\n __staticSelector?: string;\n\n /** Prevents focus shift when buttons are clicked */\n __preventFocus?: boolean;\n\n /** Determines whether date should be updated when year control is clicked */\n __updateDateOnYearSelect?: boolean;\n\n /** Determines whether date should be updated when month control is clicked */\n __updateDateOnMonthSelect?: boolean;\n\n /** Assigns function to set date to the given ref */\n __setDateRef?: React.RefObject<((date: DateStringValue) => void) | null>;\n\n /** Assigns function to set level to the given ref */\n __setLevelRef?: React.RefObject<((level: CalendarLevel) => void) | null>;\n\n /** Initial displayed date in uncontrolled mode */\n defaultDate?: DateStringValue | Date;\n\n /** Displayed date in controlled mode */\n date?: DateStringValue | Date;\n\n /** Called when date changes */\n onDateChange?: (date: DateStringValue) => void;\n\n /** Number of columns displayed next to each other @default 1 */\n numberOfColumns?: number;\n\n /** Number of columns to scroll with next/prev buttons, same as `numberOfColumns` if not set explicitly */\n columnsToScroll?: number;\n\n /** `aria-label` attributes for controls on different levels */\n ariaLabels?: CalendarAriaLabels;\n\n /** Next button `aria-label` */\n nextLabel?: string;\n\n /** Previous button `aria-label` */\n previousLabel?: string;\n\n /** Determines whether the calendar should take the full width of its container @default false */\n fullWidth?: boolean;\n\n /** Called when the next decade button is clicked */\n onNextDecade?: (date: DateStringValue) => void;\n\n /** Called when the previous decade button is clicked */\n onPreviousDecade?: (date: DateStringValue) => void;\n\n /** Called when the next year button is clicked */\n onNextYear?: (date: DateStringValue) => void;\n\n /** Called when the previous year button is clicked */\n onPreviousYear?: (date: DateStringValue) => void;\n\n /** Called when the next month button is clicked */\n onNextMonth?: (date: DateStringValue) => void;\n\n /** Called when the previous month button is clicked */\n onPreviousMonth?: (date: DateStringValue) => void;\n}\n\nexport interface CalendarProps\n extends\n BoxProps,\n CalendarSettings,\n CalendarBaseProps,\n StylesApiProps<CalendarFactory>,\n ElementProps<'div'> {\n /** Max level that user can go up to (decade, year, month) @default 'decade' */\n maxLevel?: CalendarLevel;\n\n /** Min level that user can go down to (decade, year, month) @default 'month' */\n minLevel?: CalendarLevel;\n\n /** Determines whether days should be static, static days can be used to display month if it is not expected that user will interact with the component in any way */\n static?: boolean;\n\n /** Enable enhanced keyboard navigation (Ctrl/Cmd + Arrow keys for year navigation, Ctrl/Cmd + Shift + Arrow keys for decade navigation, Y key to open year view) */\n enableKeyboardNavigation?: boolean;\n}\n\nexport type CalendarFactory = Factory<{\n props: CalendarProps;\n ref: HTMLDivElement;\n stylesNames: CalendarStylesNames;\n}>;\n\nconst defaultProps = {\n maxLevel: 'decade',\n minLevel: 'month',\n __updateDateOnYearSelect: true,\n __updateDateOnMonthSelect: true,\n enableKeyboardNavigation: true,\n} satisfies Partial<CalendarProps>;\n\nexport const Calendar = factory<CalendarFactory>((_props) => {\n const props = useProps('Calendar', defaultProps, _props);\n const {\n // CalendarLevel props\n vars,\n maxLevel,\n minLevel,\n defaultLevel,\n level,\n onLevelChange,\n date,\n defaultDate,\n onDateChange,\n numberOfColumns,\n columnsToScroll,\n ariaLabels,\n nextLabel,\n previousLabel,\n onYearSelect,\n onMonthSelect,\n onYearMouseEnter,\n onMonthMouseEnter,\n headerControlsOrder,\n __updateDateOnYearSelect,\n __updateDateOnMonthSelect,\n __setDateRef,\n __setLevelRef,\n\n // MonthLevelGroup props\n firstDayOfWeek,\n weekdayFormat,\n weekendDays,\n getDayProps,\n excludeDate,\n renderDay,\n hideOutsideDates,\n hideWeekdays,\n getDayAriaLabel,\n monthLabelFormat,\n nextIcon,\n previousIcon,\n __onDayClick,\n __onDayMouseEnter,\n withCellSpacing,\n highlightToday,\n withWeekNumbers,\n\n // YearLevelGroup props\n monthsListFormat,\n getMonthControlProps,\n yearLabelFormat,\n\n // DecadeLevelGroup props\n yearsListFormat,\n getYearControlProps,\n decadeLabelFormat,\n\n // Other props\n classNames,\n styles,\n unstyled,\n minDate,\n maxDate,\n locale,\n __staticSelector,\n size,\n __preventFocus,\n __stopPropagation,\n onNextDecade,\n onPreviousDecade,\n onNextYear,\n onPreviousYear,\n onNextMonth,\n onPreviousMonth,\n static: isStatic,\n enableKeyboardNavigation,\n fullWidth,\n attributes,\n ref,\n ...others\n } = props;\n\n const { resolvedClassNames, resolvedStyles } = useResolvedStylesApi<CalendarFactory>({\n classNames,\n styles,\n props,\n });\n\n const [_level, setLevel] = useUncontrolled({\n value: level ? clampLevel(level, minLevel, maxLevel) : undefined,\n defaultValue: defaultLevel ? clampLevel(defaultLevel, minLevel, maxLevel) : undefined,\n finalValue: clampLevel(undefined, minLevel, maxLevel),\n onChange: onLevelChange,\n });\n\n const [_date, setDate] = useUncontrolledDates({\n type: 'default',\n value: toDateString(date),\n defaultValue: toDateString(defaultDate),\n onChange: onDateChange as any,\n });\n\n useImperativeHandle(__setDateRef, () => (date: DateStringValue) => {\n setDate(date);\n });\n\n useImperativeHandle(__setLevelRef, () => (level: CalendarLevel) => {\n setLevel(level);\n });\n\n const stylesApiProps = {\n __staticSelector: __staticSelector || 'Calendar',\n styles: resolvedStyles,\n classNames: resolvedClassNames,\n unstyled,\n size,\n attributes,\n };\n\n const _columnsToScroll = columnsToScroll || numberOfColumns || 1;\n\n const fallbackDateRef = useRef<DateStringValue | null>(null);\n if (fallbackDateRef.current === null) {\n const now = new Date();\n fallbackDateRef.current = (\n minDate && dayjs(now).isAfter(minDate) ? minDate : dayjs(now).format('YYYY-MM-DD')\n ) as DateStringValue;\n }\n const currentDate = _date || fallbackDateRef.current;\n\n const handleNextMonth = () => {\n const nextDate = dayjs(currentDate).add(_columnsToScroll, 'month').format('YYYY-MM-DD');\n onNextMonth?.(nextDate);\n setDate(nextDate);\n };\n\n const handlePreviousMonth = () => {\n const nextDate = dayjs(currentDate).subtract(_columnsToScroll, 'month').format('YYYY-MM-DD');\n onPreviousMonth?.(nextDate);\n setDate(nextDate);\n };\n\n const handleNextYear = () => {\n const nextDate = dayjs(currentDate).add(_columnsToScroll, 'year').format('YYYY-MM-DD');\n onNextYear?.(nextDate);\n setDate(nextDate);\n };\n\n const handlePreviousYear = () => {\n const nextDate = dayjs(currentDate).subtract(_columnsToScroll, 'year').format('YYYY-MM-DD');\n onPreviousYear?.(nextDate);\n setDate(nextDate);\n };\n\n const handleNextDecade = () => {\n const nextDate = dayjs(currentDate)\n .add(10 * _columnsToScroll, 'year')\n .format('YYYY-MM-DD');\n onNextDecade?.(nextDate);\n setDate(nextDate);\n };\n\n const handlePreviousDecade = () => {\n const nextDate = dayjs(currentDate)\n .subtract(10 * _columnsToScroll, 'year')\n .format('YYYY-MM-DD');\n onPreviousDecade?.(nextDate);\n setDate(nextDate);\n };\n\n const calendarRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!enableKeyboardNavigation || isStatic) {\n return;\n }\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (!calendarRef.current?.contains(document.activeElement)) {\n return;\n }\n\n const isCtrlOrCmd = event.ctrlKey || event.metaKey;\n const isShift = event.shiftKey;\n\n switch (event.key) {\n case 'ArrowUp':\n if (isCtrlOrCmd && isShift) {\n event.preventDefault();\n handlePreviousDecade();\n } else if (isCtrlOrCmd) {\n event.preventDefault();\n handlePreviousYear();\n }\n break;\n\n case 'ArrowDown':\n if (isCtrlOrCmd && isShift) {\n event.preventDefault();\n handleNextDecade();\n } else if (isCtrlOrCmd) {\n event.preventDefault();\n handleNextYear();\n }\n break;\n\n case 'y':\n case 'Y':\n if (_level === 'month') {\n event.preventDefault();\n setLevel('year');\n }\n break;\n }\n };\n\n document.addEventListener('keydown', handleKeyDown);\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown);\n };\n }, [\n enableKeyboardNavigation,\n isStatic,\n _level,\n handleNextYear,\n handlePreviousYear,\n handleNextDecade,\n handlePreviousDecade,\n ]);\n\n return (\n <Box\n ref={useMergedRef(calendarRef, ref)}\n size={size}\n data-calendar\n data-full-width={fullWidth || undefined}\n {...others}\n >\n {_level === 'month' && (\n <MonthLevelGroup\n month={currentDate}\n minDate={minDate}\n maxDate={maxDate}\n firstDayOfWeek={firstDayOfWeek}\n weekdayFormat={weekdayFormat}\n weekendDays={weekendDays}\n getDayProps={getDayProps}\n excludeDate={excludeDate}\n renderDay={renderDay}\n hideOutsideDates={hideOutsideDates}\n hideWeekdays={hideWeekdays}\n getDayAriaLabel={getDayAriaLabel}\n onNext={handleNextMonth}\n onPrevious={handlePreviousMonth}\n hasNextLevel={maxLevel !== 'month'}\n onLevelClick={() => setLevel('year')}\n numberOfColumns={numberOfColumns}\n locale={locale}\n levelControlAriaLabel={ariaLabels?.monthLevelControl}\n nextLabel={ariaLabels?.nextMonth ?? nextLabel}\n nextIcon={nextIcon}\n previousLabel={ariaLabels?.previousMonth ?? previousLabel}\n previousIcon={previousIcon}\n monthLabelFormat={monthLabelFormat}\n __onDayClick={__onDayClick}\n __onDayMouseEnter={__onDayMouseEnter}\n __preventFocus={__preventFocus}\n __stopPropagation={__stopPropagation}\n static={isStatic}\n withCellSpacing={withCellSpacing}\n highlightToday={highlightToday}\n withWeekNumbers={withWeekNumbers}\n headerControlsOrder={headerControlsOrder}\n fullWidth={fullWidth}\n {...stylesApiProps}\n />\n )}\n\n {_level === 'year' && (\n <YearLevelGroup\n year={currentDate}\n numberOfColumns={numberOfColumns}\n minDate={minDate}\n maxDate={maxDate}\n monthsListFormat={monthsListFormat}\n getMonthControlProps={getMonthControlProps}\n locale={locale}\n onNext={handleNextYear}\n onPrevious={handlePreviousYear}\n hasNextLevel={maxLevel !== 'month' && maxLevel !== 'year'}\n onLevelClick={() => setLevel('decade')}\n levelControlAriaLabel={ariaLabels?.yearLevelControl}\n nextLabel={ariaLabels?.nextYear ?? nextLabel}\n nextIcon={nextIcon}\n previousLabel={ariaLabels?.previousYear ?? previousLabel}\n previousIcon={previousIcon}\n yearLabelFormat={yearLabelFormat}\n __onControlMouseEnter={onMonthMouseEnter}\n __onControlClick={(_event, payload) => {\n __updateDateOnMonthSelect && setDate(payload);\n setLevel(clampLevel('month', minLevel, maxLevel));\n onMonthSelect?.(payload);\n }}\n __preventFocus={__preventFocus}\n __stopPropagation={__stopPropagation}\n withCellSpacing={withCellSpacing}\n headerControlsOrder={headerControlsOrder}\n fullWidth={fullWidth}\n {...stylesApiProps}\n />\n )}\n\n {_level === 'decade' && (\n <DecadeLevelGroup\n decade={currentDate}\n minDate={minDate}\n maxDate={maxDate}\n yearsListFormat={yearsListFormat}\n getYearControlProps={getYearControlProps}\n locale={locale}\n onNext={handleNextDecade}\n onPrevious={handlePreviousDecade}\n numberOfColumns={numberOfColumns}\n nextLabel={ariaLabels?.nextDecade ?? nextLabel}\n nextIcon={nextIcon}\n previousLabel={ariaLabels?.previousDecade ?? previousLabel}\n previousIcon={previousIcon}\n decadeLabelFormat={decadeLabelFormat}\n __onControlMouseEnter={onYearMouseEnter}\n __onControlClick={(_event, payload) => {\n __updateDateOnYearSelect && setDate(payload);\n setLevel(clampLevel('year', minLevel, maxLevel));\n onYearSelect?.(payload);\n }}\n __preventFocus={__preventFocus}\n __stopPropagation={__stopPropagation}\n withCellSpacing={withCellSpacing}\n headerControlsOrder={headerControlsOrder}\n fullWidth={fullWidth}\n {...stylesApiProps}\n />\n )}\n </Box>\n );\n});\n\nCalendar.classes = {\n ...DecadeLevelGroup.classes,\n ...YearLevelGroup.classes,\n ...MonthLevelGroup.classes,\n};\nCalendar.displayName = '@mantine/dates/Calendar';\n\nexport namespace Calendar {\n export type Props = CalendarProps;\n export type StylesNames = CalendarStylesNames;\n export type AriaLabels = CalendarAriaLabels;\n export type Settings = CalendarSettings;\n export type BaseProps = CalendarBaseProps;\n export type Factory = CalendarFactory;\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"CalendarHeader.mjs","names":["classes"],"sources":["../../../src/components/CalendarHeader/CalendarHeader.tsx"],"sourcesContent":["import {\n AccordionChevron,\n Box,\n BoxProps,\n createVarsResolver,\n ElementProps,\n factory,\n Factory,\n getFontSize,\n getSize,\n MantineSize,\n StylesApiProps,\n UnstyledButton,\n useProps,\n useStyles,\n} from '@mantine/core';\nimport classes from './CalendarHeader.module.css';\n\nexport type CalendarHeaderStylesNames =\n | 'calendarHeader'\n | 'calendarHeaderControl'\n | 'calendarHeaderLevel'\n | 'calendarHeaderControlIcon';\nexport type CalendarHeaderCssVariables = {\n calendarHeader: '--dch-control-size' | '--dch-fz';\n};\n\nexport interface CalendarHeaderSettings {\n __preventFocus?: boolean;\n\n /** Determines whether propagation for `Escape` key should be stopped */\n __stopPropagation?: boolean;\n\n /** Change next icon */\n nextIcon?: React.ReactNode;\n\n /** Change previous icon */\n previousIcon?: React.ReactNode;\n\n /** Next button `aria-label` */\n nextLabel?: string;\n\n /** Previous button `aria-label` */\n previousLabel?: string;\n\n /** Called when the next button is clicked */\n onNext?: () => void;\n\n /** Called when the previous button is clicked */\n onPrevious?: () => void;\n\n /** Called when the level button is clicked */\n onLevelClick?: () => void;\n\n /** Disables next control */\n nextDisabled?: boolean;\n\n /** Disables previous control */\n previousDisabled?: boolean;\n\n /** Determines whether next level button should be enabled @default true */\n hasNextLevel?: boolean;\n\n /** Determines whether next control should be rendered @default true */\n withNext?: boolean;\n\n /** Determines whether previous control should be rendered @default true */\n withPrevious?: boolean;\n\n /** Component size */\n size?: MantineSize;\n\n /** Controls order @default ['previous', 'level', 'next'] */\n headerControlsOrder?: ('previous' | 'next' | 'level')[];\n\n /** Determines whether the header should take the full width of its container @default false */\n fullWidth?: boolean;\n}\n\nexport interface CalendarHeaderProps\n extends\n BoxProps,\n CalendarHeaderSettings,\n StylesApiProps<CalendarHeaderFactory>,\n ElementProps<'div'> {\n __staticSelector?: string;\n\n /** Label displayed between next and previous buttons */\n label: React.ReactNode;\n\n /** Level control `aria-label` */\n levelControlAriaLabel?: string;\n}\n\nexport type CalendarHeaderFactory = Factory<{\n props: CalendarHeaderProps;\n ref: HTMLDivElement;\n stylesNames: CalendarHeaderStylesNames;\n vars: CalendarHeaderCssVariables;\n}>;\n\nconst defaultProps = {\n hasNextLevel: true,\n withNext: true,\n withPrevious: true,\n headerControlsOrder: ['previous', 'level', 'next'],\n} satisfies Partial<CalendarHeaderProps>;\n\nconst varsResolver = createVarsResolver<CalendarHeaderFactory>((_, { size }) => ({\n calendarHeader: {\n '--dch-control-size': getSize(size, 'dch-control-size'),\n '--dch-fz': getFontSize(size),\n },\n}));\n\nexport const CalendarHeader = factory<CalendarHeaderFactory>((_props) => {\n const props = useProps('CalendarHeader', defaultProps, _props);\n const {\n classNames,\n className,\n style,\n styles,\n unstyled,\n vars,\n nextIcon,\n previousIcon,\n nextLabel,\n previousLabel,\n onNext,\n onPrevious,\n onLevelClick,\n label,\n nextDisabled,\n previousDisabled,\n hasNextLevel,\n levelControlAriaLabel,\n withNext,\n withPrevious,\n headerControlsOrder,\n fullWidth,\n __staticSelector,\n __preventFocus,\n __stopPropagation,\n attributes,\n ...others\n } = props;\n\n const getStyles = useStyles<CalendarHeaderFactory>({\n name: __staticSelector || 'CalendarHeader',\n classes,\n props,\n className,\n style,\n classNames,\n styles,\n unstyled,\n attributes,\n vars,\n varsResolver,\n rootSelector: 'calendarHeader',\n });\n\n const preventFocus = __preventFocus\n ? (event: React.MouseEvent<HTMLElement>) => event.preventDefault()\n : undefined;\n\n const previousControl = withPrevious && (\n <UnstyledButton\n {...getStyles('calendarHeaderControl')}\n key=\"previous\"\n data-direction=\"previous\"\n aria-label={previousLabel}\n onClick={onPrevious}\n unstyled={unstyled}\n onMouseDown={preventFocus}\n disabled={previousDisabled}\n data-disabled={previousDisabled || undefined}\n tabIndex={__preventFocus || previousDisabled ? -1 : 0}\n data-mantine-stop-propagation={__stopPropagation || undefined}\n >\n {previousIcon || (\n <AccordionChevron\n {...getStyles('calendarHeaderControlIcon')}\n data-direction=\"previous\"\n size=\"45%\"\n />\n )}\n </UnstyledButton>\n );\n\n const levelControl = (\n <UnstyledButton\n component={hasNextLevel ? 'button' : 'div'}\n {...getStyles('calendarHeaderLevel')}\n key=\"level\"\n onClick={hasNextLevel ? onLevelClick : undefined}\n unstyled={unstyled}\n onMouseDown={hasNextLevel ? preventFocus : undefined}\n disabled={!hasNextLevel}\n data-static={!hasNextLevel || undefined}\n aria-label={levelControlAriaLabel}\n tabIndex={__preventFocus || !hasNextLevel ? -1 : 0}\n data-mantine-stop-propagation={__stopPropagation || undefined}\n >\n {label}\n </UnstyledButton>\n );\n\n const nextControl = withNext && (\n <UnstyledButton\n {...getStyles('calendarHeaderControl')}\n key=\"next\"\n data-direction=\"next\"\n aria-label={nextLabel}\n onClick={onNext}\n unstyled={unstyled}\n onMouseDown={preventFocus}\n disabled={nextDisabled}\n data-disabled={nextDisabled || undefined}\n tabIndex={__preventFocus || nextDisabled ? -1 : 0}\n data-mantine-stop-propagation={__stopPropagation || undefined}\n >\n {nextIcon || (\n <AccordionChevron\n {...getStyles('calendarHeaderControlIcon')}\n data-direction=\"next\"\n size=\"45%\"\n />\n )}\n </UnstyledButton>\n );\n\n const controls = headerControlsOrder.map((control) => {\n if (control === 'previous') {\n return previousControl;\n }\n if (control === 'level') {\n return levelControl;\n }\n if (control === 'next') {\n return nextControl;\n }\n return null;\n });\n\n return (\n <Box {...getStyles('calendarHeader')} data-full-width={fullWidth || undefined} {...others}>\n {controls}\n </Box>\n );\n});\n\nCalendarHeader.classes = classes;\nCalendarHeader.varsResolver = varsResolver;\nCalendarHeader.displayName = '@mantine/dates/CalendarHeader';\n"],"mappings":";;;;;;AAqGA,MAAM,eAAe;CACnB,cAAc;CACd,UAAU;CACV,cAAc;CACd,qBAAqB;EAAC;EAAY;EAAS;EAAO;CACnD;AAED,MAAM,eAAe,oBAA2C,GAAG,EAAE,YAAY,EAC/E,gBAAgB;CACd,sBAAsB,QAAQ,MAAM,mBAAmB;CACvD,YAAY,YAAY,KAAK;CAC9B,EACF,EAAE;AAEH,MAAa,iBAAiB,SAAgC,WAAW;CACvE,MAAM,QAAQ,SAAS,kBAAkB,cAAc,OAAO;CAC9D,MAAM,EACJ,YACA,WACA,OACA,QACA,UACA,MACA,UACA,cACA,WACA,eACA,QACA,YACA,cACA,OACA,cACA,kBACA,cACA,uBACA,UACA,cACA,qBACA,WACA,kBACA,gBACA,mBACA,YACA,GAAG,WACD;CAEJ,MAAM,YAAY,UAAiC;EACjD,MAAM,oBAAoB;EAC1B,SAAA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,cAAc;EACf,CAAC;CAEF,MAAM,eAAe,kBAChB,UAAyC,MAAM,gBAAgB,GAChE,KAAA;CAEJ,MAAM,kBAAkB,gBACtB,8BAAC,gBAAD;EACE,GAAI,UAAU,wBAAwB;EACtC,KAAI;EACJ,kBAAe;EACf,cAAY;EACZ,SAAS;EACC;EACV,aAAa;EACb,UAAU;EACV,iBAAe,oBAAoB,KAAA;EACnC,UAAU,kBAAkB,mBAAmB,KAAK;EACpD,iCAA+B,qBAAqB,KAAA;EASrC,EAPd,gBACC,oBAAC,kBAAD;EACE,GAAI,UAAU,4BAA4B;EAC1C,kBAAe;EACf,MAAK;EACL,CAAA,CAEW;CAGnB,MAAM,eACJ,8BAAC,gBAAD;EACE,WAAW,eAAe,WAAW;EACrC,GAAI,UAAU,sBAAsB;EACpC,KAAI;EACJ,SAAS,eAAe,eAAe,KAAA;EAC7B;EACV,aAAa,eAAe,eAAe,KAAA;EAC3C,UAAU,CAAC;EACX,eAAa,CAAC,gBAAgB,KAAA;EAC9B,cAAY;EACZ,UAAU,kBAAkB,CAAC,eAAe,KAAK;EACjD,iCAA+B,qBAAqB,KAAA;EAGrC,EADd,MACc;CAGnB,MAAM,cAAc,YAClB,8BAAC,gBAAD;EACE,GAAI,UAAU,wBAAwB;EACtC,KAAI;EACJ,kBAAe;EACf,cAAY;EACZ,SAAS;EACC;EACV,aAAa;EACb,UAAU;EACV,iBAAe,gBAAgB,KAAA;EAC/B,UAAU,kBAAkB,eAAe,KAAK;EAChD,iCAA+B,qBAAqB,KAAA;EASrC,EAPd,YACC,oBAAC,kBAAD;EACE,GAAI,UAAU,4BAA4B;EAC1C,kBAAe;EACf,MAAK;EACL,CAAA,CAEW;CAGnB,MAAM,WAAW,oBAAoB,KAAK,YAAY;AACpD,MAAI,YAAY,WACd,QAAO;AAET,MAAI,YAAY,QACd,QAAO;AAET,MAAI,YAAY,OACd,QAAO;AAET,SAAO;GACP;AAEF,QACE,oBAAC,KAAD;EAAK,GAAI,UAAU,iBAAiB;EAAE,mBAAiB,aAAa,KAAA;EAAW,GAAI;YAChF;EACG,CAAA;EAER;AAEF,eAAe,UAAUA;AACzB,eAAe,eAAe;AAC9B,eAAe,cAAc"}
1
+ {"version":3,"file":"CalendarHeader.mjs","names":["classes"],"sources":["../../../src/components/CalendarHeader/CalendarHeader.tsx"],"sourcesContent":["import {\n AccordionChevron,\n Box,\n BoxProps,\n createVarsResolver,\n ElementProps,\n factory,\n Factory,\n getFontSize,\n getSize,\n MantineSize,\n StylesApiProps,\n UnstyledButton,\n useProps,\n useStyles,\n} from '@mantine/core';\nimport classes from './CalendarHeader.module.css';\n\nexport type CalendarHeaderStylesNames =\n | 'calendarHeader'\n | 'calendarHeaderControl'\n | 'calendarHeaderLevel'\n | 'calendarHeaderControlIcon';\nexport type CalendarHeaderCssVariables = {\n calendarHeader: '--dch-control-size' | '--dch-fz';\n};\n\nexport interface CalendarHeaderSettings {\n __preventFocus?: boolean;\n\n /** Determines whether propagation for `Escape` key should be stopped */\n __stopPropagation?: boolean;\n\n /** Change next icon */\n nextIcon?: React.ReactNode;\n\n /** Change previous icon */\n previousIcon?: React.ReactNode;\n\n /** Next button `aria-label` */\n nextLabel?: string;\n\n /** Previous button `aria-label` */\n previousLabel?: string;\n\n /** Called when the next button is clicked */\n onNext?: () => void;\n\n /** Called when the previous button is clicked */\n onPrevious?: () => void;\n\n /** Called when the level button is clicked */\n onLevelClick?: () => void;\n\n /** Disables next control */\n nextDisabled?: boolean;\n\n /** Disables previous control */\n previousDisabled?: boolean;\n\n /** Determines whether next level button should be enabled @default true */\n hasNextLevel?: boolean;\n\n /** Determines whether next control should be rendered @default true */\n withNext?: boolean;\n\n /** Determines whether previous control should be rendered @default true */\n withPrevious?: boolean;\n\n /** Component size */\n size?: MantineSize;\n\n /** Controls order @default ['previous', 'level', 'next'] */\n headerControlsOrder?: ('previous' | 'next' | 'level')[];\n\n /** Determines whether the header should take the full width of its container @default false */\n fullWidth?: boolean;\n}\n\nexport interface CalendarHeaderProps\n extends\n BoxProps,\n CalendarHeaderSettings,\n StylesApiProps<CalendarHeaderFactory>,\n ElementProps<'div'> {\n __staticSelector?: string;\n\n /** Label displayed between next and previous buttons */\n label: React.ReactNode;\n\n /** Level control `aria-label` */\n levelControlAriaLabel?: string;\n}\n\nexport type CalendarHeaderFactory = Factory<{\n props: CalendarHeaderProps;\n ref: HTMLDivElement;\n stylesNames: CalendarHeaderStylesNames;\n vars: CalendarHeaderCssVariables;\n}>;\n\nconst defaultProps = {\n hasNextLevel: true,\n withNext: true,\n withPrevious: true,\n headerControlsOrder: ['previous', 'level', 'next'],\n} satisfies Partial<CalendarHeaderProps>;\n\nconst varsResolver = createVarsResolver<CalendarHeaderFactory>((_, { size }) => ({\n calendarHeader: {\n '--dch-control-size': getSize(size, 'dch-control-size'),\n '--dch-fz': getFontSize(size),\n },\n}));\n\nexport const CalendarHeader = factory<CalendarHeaderFactory>((_props) => {\n const props = useProps('CalendarHeader', defaultProps, _props);\n const {\n classNames,\n className,\n style,\n styles,\n unstyled,\n vars,\n nextIcon,\n previousIcon,\n nextLabel,\n previousLabel,\n onNext,\n onPrevious,\n onLevelClick,\n label,\n nextDisabled,\n previousDisabled,\n hasNextLevel,\n levelControlAriaLabel,\n withNext,\n withPrevious,\n headerControlsOrder,\n fullWidth,\n __staticSelector,\n __preventFocus,\n __stopPropagation,\n attributes,\n ...others\n } = props;\n\n const getStyles = useStyles<CalendarHeaderFactory>({\n name: __staticSelector || 'CalendarHeader',\n classes,\n props,\n className,\n style,\n classNames,\n styles,\n unstyled,\n attributes,\n vars,\n varsResolver,\n rootSelector: 'calendarHeader',\n });\n\n const preventFocus = __preventFocus\n ? (event: React.MouseEvent<HTMLElement>) => event.preventDefault()\n : undefined;\n\n const previousControl = withPrevious && (\n <UnstyledButton\n {...getStyles('calendarHeaderControl')}\n key=\"previous\"\n data-direction=\"previous\"\n aria-label={previousLabel}\n onClick={onPrevious}\n unstyled={unstyled}\n onMouseDown={preventFocus}\n disabled={previousDisabled}\n data-disabled={previousDisabled || undefined}\n tabIndex={__preventFocus || previousDisabled ? -1 : 0}\n data-mantine-stop-propagation={__stopPropagation || undefined}\n >\n {previousIcon || (\n <AccordionChevron\n {...getStyles('calendarHeaderControlIcon')}\n data-direction=\"previous\"\n size=\"45%\"\n />\n )}\n </UnstyledButton>\n );\n\n const levelControl = (\n <UnstyledButton\n component={hasNextLevel ? 'button' : 'div'}\n {...getStyles('calendarHeaderLevel')}\n key=\"level\"\n onClick={hasNextLevel ? onLevelClick : undefined}\n unstyled={unstyled}\n onMouseDown={hasNextLevel ? preventFocus : undefined}\n disabled={!hasNextLevel}\n data-static={!hasNextLevel || undefined}\n aria-label={levelControlAriaLabel}\n tabIndex={__preventFocus || !hasNextLevel ? -1 : 0}\n data-mantine-stop-propagation={__stopPropagation || undefined}\n >\n {label}\n </UnstyledButton>\n );\n\n const nextControl = withNext && (\n <UnstyledButton\n {...getStyles('calendarHeaderControl')}\n key=\"next\"\n data-direction=\"next\"\n aria-label={nextLabel}\n onClick={onNext}\n unstyled={unstyled}\n onMouseDown={preventFocus}\n disabled={nextDisabled}\n data-disabled={nextDisabled || undefined}\n tabIndex={__preventFocus || nextDisabled ? -1 : 0}\n data-mantine-stop-propagation={__stopPropagation || undefined}\n >\n {nextIcon || (\n <AccordionChevron\n {...getStyles('calendarHeaderControlIcon')}\n data-direction=\"next\"\n size=\"45%\"\n />\n )}\n </UnstyledButton>\n );\n\n const controls = headerControlsOrder.map((control) => {\n if (control === 'previous') {\n return previousControl;\n }\n if (control === 'level') {\n return levelControl;\n }\n if (control === 'next') {\n return nextControl;\n }\n return null;\n });\n\n return (\n <Box {...getStyles('calendarHeader')} data-full-width={fullWidth || undefined} {...others}>\n {controls}\n </Box>\n );\n});\n\nCalendarHeader.classes = classes;\nCalendarHeader.varsResolver = varsResolver;\nCalendarHeader.displayName = '@mantine/dates/CalendarHeader';\n\nexport namespace CalendarHeader {\n export type Props = CalendarHeaderProps;\n export type StylesNames = CalendarHeaderStylesNames;\n export type CssVariables = CalendarHeaderCssVariables;\n export type Settings = CalendarHeaderSettings;\n export type Factory = CalendarHeaderFactory;\n}\n"],"mappings":";;;;;;AAqGA,MAAM,eAAe;CACnB,cAAc;CACd,UAAU;CACV,cAAc;CACd,qBAAqB;EAAC;EAAY;EAAS;EAAO;CACnD;AAED,MAAM,eAAe,oBAA2C,GAAG,EAAE,YAAY,EAC/E,gBAAgB;CACd,sBAAsB,QAAQ,MAAM,mBAAmB;CACvD,YAAY,YAAY,KAAK;CAC9B,EACF,EAAE;AAEH,MAAa,iBAAiB,SAAgC,WAAW;CACvE,MAAM,QAAQ,SAAS,kBAAkB,cAAc,OAAO;CAC9D,MAAM,EACJ,YACA,WACA,OACA,QACA,UACA,MACA,UACA,cACA,WACA,eACA,QACA,YACA,cACA,OACA,cACA,kBACA,cACA,uBACA,UACA,cACA,qBACA,WACA,kBACA,gBACA,mBACA,YACA,GAAG,WACD;CAEJ,MAAM,YAAY,UAAiC;EACjD,MAAM,oBAAoB;EAC1B,SAAA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,cAAc;EACf,CAAC;CAEF,MAAM,eAAe,kBAChB,UAAyC,MAAM,gBAAgB,GAChE,KAAA;CAEJ,MAAM,kBAAkB,gBACtB,8BAAC,gBAAD;EACE,GAAI,UAAU,wBAAwB;EACtC,KAAI;EACJ,kBAAe;EACf,cAAY;EACZ,SAAS;EACC;EACV,aAAa;EACb,UAAU;EACV,iBAAe,oBAAoB,KAAA;EACnC,UAAU,kBAAkB,mBAAmB,KAAK;EACpD,iCAA+B,qBAAqB,KAAA;EASrC,EAPd,gBACC,oBAAC,kBAAD;EACE,GAAI,UAAU,4BAA4B;EAC1C,kBAAe;EACf,MAAK;EACL,CAAA,CAEW;CAGnB,MAAM,eACJ,8BAAC,gBAAD;EACE,WAAW,eAAe,WAAW;EACrC,GAAI,UAAU,sBAAsB;EACpC,KAAI;EACJ,SAAS,eAAe,eAAe,KAAA;EAC7B;EACV,aAAa,eAAe,eAAe,KAAA;EAC3C,UAAU,CAAC;EACX,eAAa,CAAC,gBAAgB,KAAA;EAC9B,cAAY;EACZ,UAAU,kBAAkB,CAAC,eAAe,KAAK;EACjD,iCAA+B,qBAAqB,KAAA;EAGrC,EADd,MACc;CAGnB,MAAM,cAAc,YAClB,8BAAC,gBAAD;EACE,GAAI,UAAU,wBAAwB;EACtC,KAAI;EACJ,kBAAe;EACf,cAAY;EACZ,SAAS;EACC;EACV,aAAa;EACb,UAAU;EACV,iBAAe,gBAAgB,KAAA;EAC/B,UAAU,kBAAkB,eAAe,KAAK;EAChD,iCAA+B,qBAAqB,KAAA;EASrC,EAPd,YACC,oBAAC,kBAAD;EACE,GAAI,UAAU,4BAA4B;EAC1C,kBAAe;EACf,MAAK;EACL,CAAA,CAEW;CAGnB,MAAM,WAAW,oBAAoB,KAAK,YAAY;AACpD,MAAI,YAAY,WACd,QAAO;AAET,MAAI,YAAY,QACd,QAAO;AAET,MAAI,YAAY,OACd,QAAO;AAET,SAAO;GACP;AAEF,QACE,oBAAC,KAAD;EAAK,GAAI,UAAU,iBAAiB;EAAE,mBAAiB,aAAa,KAAA;EAAW,GAAI;YAChF;EACG,CAAA;EAER;AAEF,eAAe,UAAUA;AACzB,eAAe,eAAe;AAC9B,eAAe,cAAc"}
@@ -1 +1 @@
1
- {"version":3,"file":"DateInput.mjs","names":[],"sources":["../../../src/components/DateInput/DateInput.tsx"],"sourcesContent":["import dayjs from 'dayjs';\nimport { useEffect, useRef, useState } from 'react';\nimport {\n __BaseInputProps,\n __InputStylesNames,\n BoxProps,\n ClearSectionMode,\n ElementProps,\n factory,\n Factory,\n Input,\n InputVariant,\n MantineSize,\n Popover,\n PopoverProps,\n StylesApiProps,\n useInputProps,\n} from '@mantine/core';\nimport { useClickOutside, useDidUpdate } from '@mantine/hooks';\nimport { useUncontrolledDates } from '../../hooks';\nimport { CalendarLevel, DateStringValue, DateValue } from '../../types';\nimport { Calendar, CalendarBaseProps, CalendarStylesNames, pickCalendarProps } from '../Calendar';\nimport { useDatesContext } from '../DatesProvider';\nimport { DecadeLevelSettings } from '../DecadeLevel';\nimport { HiddenDatesInput } from '../HiddenDatesInput';\nimport { isSameMonth } from '../Month';\nimport { MonthLevelSettings } from '../MonthLevel';\nimport { YearLevelSettings } from '../YearLevel';\nimport { dateStringParser } from './date-string-parser/date-string-parser';\nimport { isDateValid } from './is-date-valid/is-date-valid';\n\nexport type DateInputStylesNames = __InputStylesNames | CalendarStylesNames;\n\nexport interface DateInputProps\n extends\n BoxProps,\n Omit<__BaseInputProps, 'size'>,\n CalendarBaseProps,\n DecadeLevelSettings,\n YearLevelSettings,\n MonthLevelSettings,\n StylesApiProps<DateInputFactory>,\n ElementProps<'input', 'size' | 'value' | 'defaultValue' | 'onChange'> {\n /** A function to parse user input and convert it to date string value */\n dateParser?: (value: string) => DateStringValue | Date | null;\n\n /** Controlled component value */\n value?: DateValue | Date;\n\n /** Uncontrolled component default value */\n defaultValue?: DateValue | Date;\n\n /** Called when value changes */\n onChange?: (value: DateStringValue | null) => void;\n\n /** Props passed down to the `Popover` component */\n popoverProps?: Partial<Omit<PopoverProps, 'children'>>;\n\n /** If set, clear button is displayed in the `rightSection` when the component has value. Ignored if `rightSection` prop is set. @default false */\n clearable?: boolean;\n\n /** Determines how the clear button and rightSection are rendered @default 'both' */\n clearSectionMode?: ClearSectionMode;\n\n /** Props passed down to the clear button */\n clearButtonProps?: React.ComponentProps<'button'>;\n\n /** `dayjs` format to display input value, `\"MMMM D, YYYY\"` by default */\n valueFormat?: string;\n\n /** If set to `true`, the time part of the value is preserved. Set this to `true` when `valueFormat` includes time (e.g. `\"YYYY-MM-DD HH:mm\"`). @default false */\n withTime?: boolean;\n\n /** If set to `false`, invalid user input is preserved and is not corrected on blur */\n fixOnBlur?: boolean;\n\n /** If set, the value can be deselected by deleting everything from the input or by clicking the selected date in the dropdown. By default, `true` if `clearable` prop is set, `false` otherwise. */\n allowDeselect?: boolean;\n\n /** Max level that user can go up to @default 'decade' */\n maxLevel?: CalendarLevel;\n\n /** Initial displayed level (uncontrolled) */\n defaultLevel?: CalendarLevel;\n\n /** Current displayed level (controlled) */\n level?: CalendarLevel;\n\n /** Called when the level changes */\n onLevelChange?: (level: CalendarLevel) => void;\n}\n\nexport type DateInputFactory = Factory<{\n props: DateInputProps;\n ref: HTMLInputElement;\n stylesNames: DateInputStylesNames;\n variant: InputVariant;\n}>;\n\nconst defaultProps = {\n valueFormat: 'MMMM D, YYYY',\n fixOnBlur: true,\n size: 'sm',\n} satisfies Partial<DateInputProps>;\n\nexport const DateInput = factory<DateInputFactory>((_props) => {\n const props = useInputProps('DateInput', defaultProps, _props);\n const {\n inputProps,\n wrapperProps,\n value,\n defaultValue,\n onChange,\n clearable,\n clearSectionMode,\n clearButtonProps,\n popoverProps,\n getDayProps,\n locale,\n valueFormat,\n withTime,\n dateParser,\n minDate,\n maxDate,\n fixOnBlur,\n onFocus,\n onBlur,\n onClick,\n onKeyDown,\n readOnly,\n name,\n form,\n rightSection,\n unstyled,\n classNames,\n styles,\n allowDeselect,\n date,\n defaultDate,\n onDateChange,\n getMonthControlProps,\n getYearControlProps,\n disabled,\n ...rest\n } = props;\n\n const _wrapperRef = useRef<HTMLDivElement>(null);\n const _dropdownRef = useRef<HTMLDivElement>(null);\n const [dropdownOpened, setDropdownOpened] = useState(false);\n const { calendarProps, others } = pickCalendarProps(rest);\n const ctx = useDatesContext();\n const defaultDateParser = (val: string): DateStringValue | null => {\n const parsedDate = dayjs(val, valueFormat, ctx.getLocale(locale)).toDate();\n return Number.isNaN(parsedDate.getTime())\n ? dateStringParser(val)\n : dayjs(parsedDate).format(withTime ? 'YYYY-MM-DD HH:mm:ss' : 'YYYY-MM-DD');\n };\n\n const _dateParser = dateParser || defaultDateParser;\n const _allowDeselect = allowDeselect !== undefined ? allowDeselect : clearable;\n\n const formatValue = (val: DateStringValue) =>\n val ? dayjs(val).locale(ctx.getLocale(locale)).format(valueFormat) : '';\n\n const [_value, setValue, controlled] = useUncontrolledDates({\n type: 'default',\n value,\n defaultValue,\n onChange,\n withTime,\n });\n\n const [_date, setDate] = useUncontrolledDates({\n type: 'default',\n value: date,\n defaultValue: defaultValue || defaultDate,\n onChange: onDateChange as any,\n });\n\n useEffect(() => {\n if (controlled && value !== null) {\n setDate(value);\n }\n }, [controlled, value]);\n\n const [inputValue, setInputValue] = useState(formatValue(_value));\n\n useEffect(() => {\n setInputValue(formatValue(_value));\n }, [ctx.getLocale(locale)]);\n\n const handleInputChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n const val = event.currentTarget.value;\n setInputValue(val);\n setDropdownOpened(true);\n\n if (val.trim() === '' && (allowDeselect || clearable)) {\n setValue(null);\n } else {\n const dateValue = _dateParser(val);\n if (dateValue && isDateValid({ date: dateValue, minDate, maxDate })) {\n setValue(dateValue);\n setDate(dateValue);\n }\n }\n };\n\n const handleInputBlur = (event: React.FocusEvent<HTMLInputElement>) => {\n onBlur?.(event);\n setDropdownOpened(false);\n fixOnBlur && setInputValue(formatValue(_value));\n };\n\n const handleInputFocus = (event: React.FocusEvent<HTMLInputElement>) => {\n onFocus?.(event);\n setDropdownOpened(true);\n };\n\n const handleInputClick = (event: React.MouseEvent<HTMLInputElement>) => {\n onClick?.(event);\n setDropdownOpened(true);\n };\n\n const handleInputKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'Escape') {\n setDropdownOpened(false);\n }\n onKeyDown?.(event);\n };\n\n const _getDayProps = (day: DateStringValue) => ({\n ...getDayProps?.(day),\n selected: dayjs(_value).isSame(day, 'day'),\n onClick: (event: any) => {\n getDayProps?.(day).onClick?.(event);\n\n const val = _allowDeselect ? (dayjs(_value).isSame(day, 'day') ? null : day) : day;\n setValue(val);\n !controlled && val && setInputValue(formatValue(val));\n setDropdownOpened(false);\n },\n });\n\n const clearButton = (\n <Input.ClearButton\n onClick={() => {\n setValue(null);\n !controlled && setInputValue('');\n setDropdownOpened(false);\n }}\n unstyled={unstyled}\n {...clearButtonProps}\n />\n );\n\n const _clearable = clearable && !!_value && !readOnly && !disabled;\n\n useDidUpdate(() => {\n _value !== undefined && !dropdownOpened && setInputValue(formatValue(_value));\n }, [_value]);\n\n useClickOutside(() => setDropdownOpened(false), undefined, [\n _wrapperRef.current,\n _dropdownRef.current,\n ]);\n\n return (\n <>\n <Input.Wrapper {...wrapperProps} __staticSelector=\"DateInput\" ref={_wrapperRef}>\n <Popover\n opened={dropdownOpened}\n trapFocus={false}\n position=\"bottom-start\"\n disabled={readOnly || disabled}\n withRoles={false}\n unstyled={unstyled}\n {...popoverProps}\n >\n <Popover.Target>\n <Input\n data-dates-input\n data-read-only={readOnly || undefined}\n autoComplete=\"off\"\n value={inputValue}\n onChange={handleInputChange}\n onBlur={handleInputBlur}\n onFocus={handleInputFocus}\n onClick={handleInputClick}\n onKeyDown={handleInputKeyDown}\n readOnly={readOnly}\n rightSection={rightSection}\n __clearSection={clearButton}\n __clearable={_clearable}\n __clearSectionMode={clearSectionMode}\n {...inputProps}\n {...others}\n disabled={disabled}\n __staticSelector=\"DateInput\"\n />\n </Popover.Target>\n <Popover.Dropdown\n onMouseDown={(event) => event.preventDefault()}\n data-dates-dropdown\n ref={_dropdownRef}\n >\n <Calendar\n __staticSelector=\"DateInput\"\n {...calendarProps}\n classNames={classNames}\n styles={styles}\n unstyled={unstyled}\n __preventFocus\n minDate={minDate}\n maxDate={maxDate}\n locale={locale}\n getDayProps={_getDayProps}\n size={inputProps.size as MantineSize}\n date={_date}\n onDateChange={setDate}\n getMonthControlProps={(date) => ({\n selected: typeof _value === 'string' ? isSameMonth(date, _value) : false,\n ...getMonthControlProps?.(date),\n })}\n getYearControlProps={(date) => ({\n selected: typeof _value === 'string' ? dayjs(date).isSame(_value, 'year') : false,\n ...getYearControlProps?.(date),\n })}\n attributes={wrapperProps.attributes}\n />\n </Popover.Dropdown>\n </Popover>\n </Input.Wrapper>\n <HiddenDatesInput name={name} form={form} value={_value} type=\"default\" withTime={withTime} />\n </>\n );\n});\n\nDateInput.classes = { ...Input.classes, ...Calendar.classes };\nDateInput.displayName = '@mantine/dates/DateInput';\n"],"mappings":"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"}
1
+ {"version":3,"file":"DateInput.mjs","names":[],"sources":["../../../src/components/DateInput/DateInput.tsx"],"sourcesContent":["import dayjs from 'dayjs';\nimport { useEffect, useRef, useState } from 'react';\nimport {\n __BaseInputProps,\n __InputStylesNames,\n BoxProps,\n ClearSectionMode,\n ElementProps,\n factory,\n Factory,\n Input,\n InputVariant,\n MantineSize,\n Popover,\n PopoverProps,\n StylesApiProps,\n useInputProps,\n} from '@mantine/core';\nimport { useClickOutside, useDidUpdate } from '@mantine/hooks';\nimport { useUncontrolledDates } from '../../hooks';\nimport { CalendarLevel, DateStringValue, DateValue } from '../../types';\nimport { Calendar, CalendarBaseProps, CalendarStylesNames, pickCalendarProps } from '../Calendar';\nimport { useDatesContext } from '../DatesProvider';\nimport { DecadeLevelSettings } from '../DecadeLevel';\nimport { HiddenDatesInput } from '../HiddenDatesInput';\nimport { isSameMonth } from '../Month';\nimport { MonthLevelSettings } from '../MonthLevel';\nimport { YearLevelSettings } from '../YearLevel';\nimport { dateStringParser } from './date-string-parser/date-string-parser';\nimport { isDateValid } from './is-date-valid/is-date-valid';\n\nexport type DateInputStylesNames = __InputStylesNames | CalendarStylesNames;\n\nexport interface DateInputProps\n extends\n BoxProps,\n Omit<__BaseInputProps, 'size'>,\n CalendarBaseProps,\n DecadeLevelSettings,\n YearLevelSettings,\n MonthLevelSettings,\n StylesApiProps<DateInputFactory>,\n ElementProps<'input', 'size' | 'value' | 'defaultValue' | 'onChange'> {\n /** A function to parse user input and convert it to date string value */\n dateParser?: (value: string) => DateStringValue | Date | null;\n\n /** Controlled component value */\n value?: DateValue | Date;\n\n /** Uncontrolled component default value */\n defaultValue?: DateValue | Date;\n\n /** Called when value changes */\n onChange?: (value: DateStringValue | null) => void;\n\n /** Props passed down to the `Popover` component */\n popoverProps?: Partial<Omit<PopoverProps, 'children'>>;\n\n /** If set, clear button is displayed in the `rightSection` when the component has value. Ignored if `rightSection` prop is set. @default false */\n clearable?: boolean;\n\n /** Determines how the clear button and rightSection are rendered @default 'both' */\n clearSectionMode?: ClearSectionMode;\n\n /** Props passed down to the clear button */\n clearButtonProps?: React.ComponentProps<'button'>;\n\n /** `dayjs` format to display input value, `\"MMMM D, YYYY\"` by default */\n valueFormat?: string;\n\n /** If set to `true`, the time part of the value is preserved. Set this to `true` when `valueFormat` includes time (e.g. `\"YYYY-MM-DD HH:mm\"`). @default false */\n withTime?: boolean;\n\n /** If set to `false`, invalid user input is preserved and is not corrected on blur */\n fixOnBlur?: boolean;\n\n /** If set, the value can be deselected by deleting everything from the input or by clicking the selected date in the dropdown. By default, `true` if `clearable` prop is set, `false` otherwise. */\n allowDeselect?: boolean;\n\n /** Max level that user can go up to @default 'decade' */\n maxLevel?: CalendarLevel;\n\n /** Initial displayed level (uncontrolled) */\n defaultLevel?: CalendarLevel;\n\n /** Current displayed level (controlled) */\n level?: CalendarLevel;\n\n /** Called when the level changes */\n onLevelChange?: (level: CalendarLevel) => void;\n}\n\nexport type DateInputFactory = Factory<{\n props: DateInputProps;\n ref: HTMLInputElement;\n stylesNames: DateInputStylesNames;\n variant: InputVariant;\n}>;\n\nconst defaultProps = {\n valueFormat: 'MMMM D, YYYY',\n fixOnBlur: true,\n size: 'sm',\n} satisfies Partial<DateInputProps>;\n\nexport const DateInput = factory<DateInputFactory>((_props) => {\n const props = useInputProps('DateInput', defaultProps, _props);\n const {\n inputProps,\n wrapperProps,\n value,\n defaultValue,\n onChange,\n clearable,\n clearSectionMode,\n clearButtonProps,\n popoverProps,\n getDayProps,\n locale,\n valueFormat,\n withTime,\n dateParser,\n minDate,\n maxDate,\n fixOnBlur,\n onFocus,\n onBlur,\n onClick,\n onKeyDown,\n readOnly,\n name,\n form,\n rightSection,\n unstyled,\n classNames,\n styles,\n allowDeselect,\n date,\n defaultDate,\n onDateChange,\n getMonthControlProps,\n getYearControlProps,\n disabled,\n ...rest\n } = props;\n\n const _wrapperRef = useRef<HTMLDivElement>(null);\n const _dropdownRef = useRef<HTMLDivElement>(null);\n const [dropdownOpened, setDropdownOpened] = useState(false);\n const { calendarProps, others } = pickCalendarProps(rest);\n const ctx = useDatesContext();\n const defaultDateParser = (val: string): DateStringValue | null => {\n const parsedDate = dayjs(val, valueFormat, ctx.getLocale(locale)).toDate();\n return Number.isNaN(parsedDate.getTime())\n ? dateStringParser(val)\n : dayjs(parsedDate).format(withTime ? 'YYYY-MM-DD HH:mm:ss' : 'YYYY-MM-DD');\n };\n\n const _dateParser = dateParser || defaultDateParser;\n const _allowDeselect = allowDeselect !== undefined ? allowDeselect : clearable;\n\n const formatValue = (val: DateStringValue) =>\n val ? dayjs(val).locale(ctx.getLocale(locale)).format(valueFormat) : '';\n\n const [_value, setValue, controlled] = useUncontrolledDates({\n type: 'default',\n value,\n defaultValue,\n onChange,\n withTime,\n });\n\n const [_date, setDate] = useUncontrolledDates({\n type: 'default',\n value: date,\n defaultValue: defaultValue || defaultDate,\n onChange: onDateChange as any,\n });\n\n useEffect(() => {\n if (controlled && value !== null) {\n setDate(value);\n }\n }, [controlled, value]);\n\n const [inputValue, setInputValue] = useState(formatValue(_value));\n\n useEffect(() => {\n setInputValue(formatValue(_value));\n }, [ctx.getLocale(locale)]);\n\n const handleInputChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n const val = event.currentTarget.value;\n setInputValue(val);\n setDropdownOpened(true);\n\n if (val.trim() === '' && (allowDeselect || clearable)) {\n setValue(null);\n } else {\n const dateValue = _dateParser(val);\n if (dateValue && isDateValid({ date: dateValue, minDate, maxDate })) {\n setValue(dateValue);\n setDate(dateValue);\n }\n }\n };\n\n const handleInputBlur = (event: React.FocusEvent<HTMLInputElement>) => {\n onBlur?.(event);\n setDropdownOpened(false);\n fixOnBlur && setInputValue(formatValue(_value));\n };\n\n const handleInputFocus = (event: React.FocusEvent<HTMLInputElement>) => {\n onFocus?.(event);\n setDropdownOpened(true);\n };\n\n const handleInputClick = (event: React.MouseEvent<HTMLInputElement>) => {\n onClick?.(event);\n setDropdownOpened(true);\n };\n\n const handleInputKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'Escape') {\n setDropdownOpened(false);\n }\n onKeyDown?.(event);\n };\n\n const _getDayProps = (day: DateStringValue) => ({\n ...getDayProps?.(day),\n selected: dayjs(_value).isSame(day, 'day'),\n onClick: (event: any) => {\n getDayProps?.(day).onClick?.(event);\n\n const val = _allowDeselect ? (dayjs(_value).isSame(day, 'day') ? null : day) : day;\n setValue(val);\n !controlled && val && setInputValue(formatValue(val));\n setDropdownOpened(false);\n },\n });\n\n const clearButton = (\n <Input.ClearButton\n onClick={() => {\n setValue(null);\n !controlled && setInputValue('');\n setDropdownOpened(false);\n }}\n unstyled={unstyled}\n {...clearButtonProps}\n />\n );\n\n const _clearable = clearable && !!_value && !readOnly && !disabled;\n\n useDidUpdate(() => {\n _value !== undefined && !dropdownOpened && setInputValue(formatValue(_value));\n }, [_value]);\n\n useClickOutside(() => setDropdownOpened(false), undefined, [\n _wrapperRef.current,\n _dropdownRef.current,\n ]);\n\n return (\n <>\n <Input.Wrapper {...wrapperProps} __staticSelector=\"DateInput\" ref={_wrapperRef}>\n <Popover\n opened={dropdownOpened}\n trapFocus={false}\n position=\"bottom-start\"\n disabled={readOnly || disabled}\n withRoles={false}\n unstyled={unstyled}\n {...popoverProps}\n >\n <Popover.Target>\n <Input\n data-dates-input\n data-read-only={readOnly || undefined}\n autoComplete=\"off\"\n value={inputValue}\n onChange={handleInputChange}\n onBlur={handleInputBlur}\n onFocus={handleInputFocus}\n onClick={handleInputClick}\n onKeyDown={handleInputKeyDown}\n readOnly={readOnly}\n rightSection={rightSection}\n __clearSection={clearButton}\n __clearable={_clearable}\n __clearSectionMode={clearSectionMode}\n {...inputProps}\n {...others}\n disabled={disabled}\n __staticSelector=\"DateInput\"\n />\n </Popover.Target>\n <Popover.Dropdown\n onMouseDown={(event) => event.preventDefault()}\n data-dates-dropdown\n ref={_dropdownRef}\n >\n <Calendar\n __staticSelector=\"DateInput\"\n {...calendarProps}\n classNames={classNames}\n styles={styles}\n unstyled={unstyled}\n __preventFocus\n minDate={minDate}\n maxDate={maxDate}\n locale={locale}\n getDayProps={_getDayProps}\n size={inputProps.size as MantineSize}\n date={_date}\n onDateChange={setDate}\n getMonthControlProps={(date) => ({\n selected: typeof _value === 'string' ? isSameMonth(date, _value) : false,\n ...getMonthControlProps?.(date),\n })}\n getYearControlProps={(date) => ({\n selected: typeof _value === 'string' ? dayjs(date).isSame(_value, 'year') : false,\n ...getYearControlProps?.(date),\n })}\n attributes={wrapperProps.attributes}\n />\n </Popover.Dropdown>\n </Popover>\n </Input.Wrapper>\n <HiddenDatesInput name={name} form={form} value={_value} type=\"default\" withTime={withTime} />\n </>\n );\n});\n\nDateInput.classes = { ...Input.classes, ...Calendar.classes };\nDateInput.displayName = '@mantine/dates/DateInput';\n\nexport namespace DateInput {\n export type Props = DateInputProps;\n export type StylesNames = DateInputStylesNames;\n export type Factory = DateInputFactory;\n}\n"],"mappings":"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"}