@mantine/dates 9.0.2 → 9.1.0
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.
- package/cjs/components/MonthPicker/MonthPicker.cjs +67 -7
- package/cjs/components/MonthPicker/MonthPicker.cjs.map +1 -1
- package/cjs/components/MonthPicker/MonthPicker.module.cjs +11 -0
- package/cjs/components/MonthPicker/MonthPicker.module.cjs.map +1 -0
- package/cjs/components/MonthPickerInput/MonthPickerInput.cjs +2 -1
- package/cjs/components/MonthPickerInput/MonthPickerInput.cjs.map +1 -1
- package/cjs/components/SpinInput/SpinInput.cjs +2 -2
- package/cjs/components/SpinInput/SpinInput.cjs.map +1 -1
- package/cjs/components/TimePicker/TimePicker.cjs +19 -8
- package/cjs/components/TimePicker/TimePicker.cjs.map +1 -1
- package/cjs/components/TimePicker/use-time-picker.cjs +3 -2
- package/cjs/components/TimePicker/use-time-picker.cjs.map +1 -1
- package/cjs/components/YearPicker/YearPicker.cjs +67 -7
- package/cjs/components/YearPicker/YearPicker.cjs.map +1 -1
- package/cjs/components/YearPicker/YearPicker.module.cjs +11 -0
- package/cjs/components/YearPicker/YearPicker.module.cjs.map +1 -0
- package/cjs/components/YearPickerInput/YearPickerInput.cjs +2 -1
- package/cjs/components/YearPickerInput/YearPickerInput.cjs.map +1 -1
- package/esm/components/MonthPicker/MonthPicker.mjs +69 -9
- package/esm/components/MonthPicker/MonthPicker.mjs.map +1 -1
- package/esm/components/MonthPicker/MonthPicker.module.mjs +11 -0
- package/esm/components/MonthPicker/MonthPicker.module.mjs.map +1 -0
- package/esm/components/MonthPickerInput/MonthPickerInput.mjs +2 -1
- package/esm/components/MonthPickerInput/MonthPickerInput.mjs.map +1 -1
- package/esm/components/SpinInput/SpinInput.mjs +2 -2
- package/esm/components/SpinInput/SpinInput.mjs.map +1 -1
- package/esm/components/TimePicker/TimePicker.mjs +19 -8
- package/esm/components/TimePicker/TimePicker.mjs.map +1 -1
- package/esm/components/TimePicker/use-time-picker.mjs +3 -2
- package/esm/components/TimePicker/use-time-picker.mjs.map +1 -1
- package/esm/components/YearPicker/YearPicker.mjs +69 -9
- package/esm/components/YearPicker/YearPicker.mjs.map +1 -1
- package/esm/components/YearPicker/YearPicker.module.mjs +11 -0
- package/esm/components/YearPicker/YearPicker.module.mjs.map +1 -0
- package/esm/components/YearPickerInput/YearPickerInput.mjs +2 -1
- package/esm/components/YearPickerInput/YearPickerInput.mjs.map +1 -1
- package/lib/components/MonthPicker/MonthPicker.d.ts +13 -1
- package/lib/components/SpinInput/SpinInput.d.ts +2 -1
- package/lib/components/TimePicker/TimePicker.d.ts +5 -1
- package/lib/components/TimePicker/TimePicker.types.d.ts +1 -0
- package/lib/components/TimePicker/use-time-picker.d.ts +3 -2
- package/lib/components/YearPicker/YearPicker.d.ts +13 -1
- package/package.json +5 -5
- package/styles.css +96 -0
- package/styles.layer.css +96 -0
|
@@ -2,14 +2,35 @@
|
|
|
2
2
|
require("../../_virtual/_rolldown/runtime.cjs");
|
|
3
3
|
const require_use_dates_state = require("../../hooks/use-dates-state/use-dates-state.cjs");
|
|
4
4
|
const require_Calendar = require("../Calendar/Calendar.cjs");
|
|
5
|
+
const require_pick_calendar_levels_props = require("../Calendar/pick-calendar-levels-props/pick-calendar-levels-props.cjs");
|
|
6
|
+
const require_YearPicker_module = require("./YearPicker.module.cjs");
|
|
7
|
+
let react = require("react");
|
|
5
8
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
6
9
|
let _mantine_core = require("@mantine/core");
|
|
7
10
|
//#region packages/@mantine/dates/src/components/YearPicker/YearPicker.tsx
|
|
11
|
+
const varsResolver = (0, _mantine_core.createVarsResolver)((_, { size }) => ({ yearPickerRoot: { "--preset-font-size": (0, _mantine_core.getFontSize)(size) } }));
|
|
8
12
|
const defaultProps = { type: "default" };
|
|
9
13
|
const YearPicker = (0, _mantine_core.factory)((_props) => {
|
|
10
14
|
const props = (0, _mantine_core.useProps)("YearPicker", defaultProps, _props);
|
|
11
|
-
const { classNames, styles, vars, type, defaultValue, value, onChange, __staticSelector, getYearControlProps, allowSingleDateInRange, allowDeselect, onMouseLeave, onYearSelect, __updateDateOnYearSelect, ...
|
|
12
|
-
const {
|
|
15
|
+
const { classNames, styles, vars, type, defaultValue, value, onChange, __staticSelector, getYearControlProps, allowSingleDateInRange, allowDeselect, onMouseLeave, onYearSelect, __updateDateOnYearSelect, __onPresetSelect, __stopPropagation, presets, className, style, unstyled, size, attributes, ...rest } = props;
|
|
16
|
+
const { calendarProps, others } = require_pick_calendar_levels_props.pickCalendarProps(rest);
|
|
17
|
+
const setDateRef = (0, react.useRef)(null);
|
|
18
|
+
const setLevelRef = (0, react.useRef)(null);
|
|
19
|
+
const getStyles = (0, _mantine_core.useStyles)({
|
|
20
|
+
name: __staticSelector || "YearPicker",
|
|
21
|
+
classes: require_YearPicker_module.default,
|
|
22
|
+
props,
|
|
23
|
+
className,
|
|
24
|
+
style,
|
|
25
|
+
classNames,
|
|
26
|
+
styles,
|
|
27
|
+
unstyled,
|
|
28
|
+
attributes,
|
|
29
|
+
rootSelector: presets ? "yearPickerRoot" : void 0,
|
|
30
|
+
varsResolver,
|
|
31
|
+
vars
|
|
32
|
+
});
|
|
33
|
+
const { onDateChange, onRootMouseLeave, onHoveredDateChange, getControlProps, setValue } = require_use_dates_state.useDatesState({
|
|
13
34
|
type,
|
|
14
35
|
level: "year",
|
|
15
36
|
allowDeselect,
|
|
@@ -24,7 +45,12 @@ const YearPicker = (0, _mantine_core.factory)((_props) => {
|
|
|
24
45
|
styles,
|
|
25
46
|
props
|
|
26
47
|
});
|
|
27
|
-
|
|
48
|
+
const calendar = /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Calendar.Calendar, {
|
|
49
|
+
classNames: resolvedClassNames,
|
|
50
|
+
styles: resolvedStyles,
|
|
51
|
+
size,
|
|
52
|
+
...calendarProps,
|
|
53
|
+
...!presets ? others : {},
|
|
28
54
|
minLevel: "decade",
|
|
29
55
|
__updateDateOnYearSelect: __updateDateOnYearSelect ?? false,
|
|
30
56
|
__staticSelector: __staticSelector || "YearPicker",
|
|
@@ -38,12 +64,46 @@ const YearPicker = (0, _mantine_core.factory)((_props) => {
|
|
|
38
64
|
...getControlProps(date),
|
|
39
65
|
...getYearControlProps?.(date)
|
|
40
66
|
}),
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
67
|
+
__setDateRef: setDateRef,
|
|
68
|
+
__setLevelRef: setLevelRef,
|
|
69
|
+
__stopPropagation,
|
|
70
|
+
attributes,
|
|
71
|
+
...!presets ? {
|
|
72
|
+
className,
|
|
73
|
+
style
|
|
74
|
+
} : {}
|
|
75
|
+
});
|
|
76
|
+
if (!presets) return calendar;
|
|
77
|
+
const handlePresetSelect = (val) => {
|
|
78
|
+
const _val = Array.isArray(val) ? val[0] : val;
|
|
79
|
+
if (_val !== void 0) {
|
|
80
|
+
setDateRef.current?.(_val);
|
|
81
|
+
setLevelRef.current?.("decade");
|
|
82
|
+
__onPresetSelect ? __onPresetSelect(_val) : setValue(val);
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
const presetButtons = presets.map((preset, index) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mantine_core.UnstyledButton, {
|
|
86
|
+
...getStyles("presetButton"),
|
|
87
|
+
onClick: () => handlePresetSelect(preset.value),
|
|
88
|
+
onMouseDown: (event) => event.preventDefault(),
|
|
89
|
+
"data-mantine-stop-propagation": __stopPropagation || void 0,
|
|
90
|
+
children: preset.label
|
|
91
|
+
}, index));
|
|
92
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_mantine_core.Box, {
|
|
93
|
+
...getStyles("yearPickerRoot"),
|
|
94
|
+
size,
|
|
95
|
+
...others,
|
|
96
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
97
|
+
...getStyles("presetsList"),
|
|
98
|
+
children: presetButtons
|
|
99
|
+
}), calendar]
|
|
44
100
|
});
|
|
45
101
|
});
|
|
46
|
-
YearPicker.classes =
|
|
102
|
+
YearPicker.classes = {
|
|
103
|
+
...require_Calendar.Calendar.classes,
|
|
104
|
+
...require_YearPicker_module.default
|
|
105
|
+
};
|
|
106
|
+
YearPicker.varsResolver = varsResolver;
|
|
47
107
|
YearPicker.displayName = "@mantine/dates/YearPicker";
|
|
48
108
|
//#endregion
|
|
49
109
|
exports.YearPicker = YearPicker;
|
|
@@ -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 {
|
|
1
|
+
{"version":3,"file":"YearPicker.cjs","names":["pickCalendarProps","useDatesState","Calendar","UnstyledButton","Box","classes"],"sources":["../../../src/components/YearPicker/YearPicker.tsx"],"sourcesContent":["import { useRef } from 'react';\nimport {\n Box,\n BoxProps,\n createVarsResolver,\n ElementProps,\n factory,\n Factory,\n getFontSize,\n MantineComponentStaticProperties,\n StylesApiProps,\n UnstyledButton,\n useProps,\n useResolvedStylesApi,\n useStyles,\n} from '@mantine/core';\nimport { useDatesState } from '../../hooks';\nimport {\n CalendarLevel,\n DatePickerType,\n DateStringValue,\n DateValue,\n PickerBaseProps,\n} from '../../types';\nimport { Calendar, CalendarBaseProps, pickCalendarProps } from '../Calendar';\nimport { DecadeLevelBaseSettings } from '../DecadeLevel';\nimport { DecadeLevelGroupStylesNames } from '../DecadeLevelGroup';\nimport classes from './YearPicker.module.css';\n\nexport interface YearPickerPreset<Type extends DatePickerType> {\n value: Type extends 'range'\n ? [DateStringValue | null, DateStringValue | null]\n : Type extends 'multiple'\n ? DateStringValue[]\n : DateStringValue | null;\n label: React.ReactNode;\n}\n\nexport type YearPickerCssVariables = {\n yearPickerRoot: '--preset-font-size';\n};\n\nexport type YearPickerStylesNames =\n | DecadeLevelGroupStylesNames\n | 'presetsList'\n | 'presetButton'\n | 'yearPickerRoot';\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 /** Predefined values to pick from */\n presets?: YearPickerPreset<Type>[];\n\n /** If defined, called with preset value, suppresses `onChange` call */\n __onPresetSelect?: (\n preset: Type extends 'range'\n ? [DateStringValue | null, DateStringValue | null]\n : DateStringValue | null\n ) => void;\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 vars: YearPickerCssVariables;\n}>;\n\nconst varsResolver = createVarsResolver<YearPickerFactory>((_, { size }) => ({\n yearPickerRoot: {\n '--preset-font-size': getFontSize(size),\n },\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 __onPresetSelect,\n __stopPropagation,\n presets,\n className,\n style,\n unstyled,\n size,\n attributes,\n ...rest\n } = props;\n\n const { calendarProps, others } = pickCalendarProps(rest);\n const setDateRef = useRef<((date: DateValue) => void) | null>(null);\n const setLevelRef = useRef<((level: CalendarLevel) => void) | null>(null);\n\n const getStyles = useStyles<YearPickerFactory>({\n name: __staticSelector || 'YearPicker',\n classes,\n props,\n className,\n style,\n classNames,\n styles,\n unstyled,\n attributes,\n rootSelector: presets ? 'yearPickerRoot' : undefined,\n varsResolver,\n vars,\n });\n\n const { onDateChange, onRootMouseLeave, onHoveredDateChange, getControlProps, setValue } =\n 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 const calendar = (\n <Calendar\n classNames={resolvedClassNames}\n styles={resolvedStyles}\n size={size}\n {...calendarProps}\n {...(!presets ? others : {})}\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 __setDateRef={setDateRef}\n __setLevelRef={setLevelRef}\n __stopPropagation={__stopPropagation}\n attributes={attributes}\n {...(!presets ? { className, style } : {})}\n />\n );\n\n if (!presets) {\n return calendar;\n }\n\n const handlePresetSelect = (\n val: DateStringValue | null | [DateStringValue | null, DateStringValue | null]\n ) => {\n const _val = Array.isArray(val) ? val[0] : val;\n if (_val !== undefined) {\n setDateRef.current?.(_val);\n setLevelRef.current?.('decade');\n __onPresetSelect ? __onPresetSelect(_val) : setValue(val);\n }\n };\n\n const presetButtons = presets.map((preset, index) => (\n <UnstyledButton\n key={index}\n {...getStyles('presetButton')}\n onClick={() => handlePresetSelect(preset.value)}\n onMouseDown={(event) => event.preventDefault()}\n data-mantine-stop-propagation={__stopPropagation || undefined}\n >\n {preset.label}\n </UnstyledButton>\n ));\n\n return (\n <Box {...getStyles('yearPickerRoot')} size={size} {...others}>\n <div {...getStyles('presetsList')}>{presetButtons}</div>\n {calendar}\n </Box>\n );\n}) as any;\n\nYearPicker.classes = { ...Calendar.classes, ...classes };\nYearPicker.varsResolver = varsResolver;\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":";;;;;;;;;;AAoFA,MAAM,gBAAA,GAAA,cAAA,qBAAsD,GAAG,EAAE,YAAY,EAC3E,gBAAgB,EACd,uBAAA,GAAA,cAAA,aAAkC,KAAK,EACxC,EACF,EAAE;AAEH,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,kBACA,mBACA,SACA,WACA,OACA,UACA,MACA,YACA,GAAG,SACD;CAEJ,MAAM,EAAE,eAAe,WAAWA,mCAAAA,kBAAkB,KAAK;CACzD,MAAM,cAAA,GAAA,MAAA,QAAwD,KAAK;CACnE,MAAM,eAAA,GAAA,MAAA,QAA8D,KAAK;CAEzE,MAAM,aAAA,GAAA,cAAA,WAAyC;EAC7C,MAAM,oBAAoB;EAC1B,SAAA,0BAAA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,cAAc,UAAU,mBAAmB,KAAA;EAC3C;EACA;EACD,CAAC;CAEF,MAAM,EAAE,cAAc,kBAAkB,qBAAqB,iBAAiB,aAC5EC,wBAAAA,cAAc;EACN;EACN,OAAO;EACP;EACA;EACA;EACA;EACU;EACV;EACD,CAAC;CAEJ,MAAM,EAAE,oBAAoB,oBAAA,GAAA,cAAA,sBAA2D;EACrF;EACA;EACA;EACD,CAAC;CAEF,MAAM,WACJ,iBAAA,GAAA,kBAAA,KAACC,iBAAAA,UAAD;EACE,YAAY;EACZ,QAAQ;EACF;EACN,GAAI;EACJ,GAAK,CAAC,UAAU,SAAS,EAAE;EAC3B,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,cAAc;EACd,eAAe;EACI;EACP;EACZ,GAAK,CAAC,UAAU;GAAE;GAAW;GAAO,GAAG,EAAE;EACzC,CAAA;AAGJ,KAAI,CAAC,QACH,QAAO;CAGT,MAAM,sBACJ,QACG;EACH,MAAM,OAAO,MAAM,QAAQ,IAAI,GAAG,IAAI,KAAK;AAC3C,MAAI,SAAS,KAAA,GAAW;AACtB,cAAW,UAAU,KAAK;AAC1B,eAAY,UAAU,SAAS;AAC/B,sBAAmB,iBAAiB,KAAK,GAAG,SAAS,IAAI;;;CAI7D,MAAM,gBAAgB,QAAQ,KAAK,QAAQ,UACzC,iBAAA,GAAA,kBAAA,KAACC,cAAAA,gBAAD;EAEE,GAAI,UAAU,eAAe;EAC7B,eAAe,mBAAmB,OAAO,MAAM;EAC/C,cAAc,UAAU,MAAM,gBAAgB;EAC9C,iCAA+B,qBAAqB,KAAA;YAEnD,OAAO;EACO,EAPV,MAOU,CACjB;AAEF,QACE,iBAAA,GAAA,kBAAA,MAACC,cAAAA,KAAD;EAAK,GAAI,UAAU,iBAAiB;EAAQ;EAAM,GAAI;YAAtD,CACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;GAAK,GAAI,UAAU,cAAc;aAAG;GAAoB,CAAA,EACvD,SACG;;EAER;AAEF,WAAW,UAAU;CAAE,GAAGF,iBAAAA,SAAS;CAAS,GAAGG,0BAAAA;CAAS;AACxD,WAAW,eAAe;AAC1B,WAAW,cAAc"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
//#region packages/@mantine/dates/src/components/YearPicker/YearPicker.module.css
|
|
3
|
+
var YearPicker_module_default = {
|
|
4
|
+
"yearPickerRoot": "m_d01e596f",
|
|
5
|
+
"presetsList": "m_52a6b4b0",
|
|
6
|
+
"presetButton": "m_b0d93233"
|
|
7
|
+
};
|
|
8
|
+
//#endregion
|
|
9
|
+
exports.default = YearPicker_module_default;
|
|
10
|
+
|
|
11
|
+
//# sourceMappingURL=YearPicker.module.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"YearPicker.module.cjs","names":[],"sources":["../../../src/components/YearPicker/YearPicker.module.css"],"sourcesContent":[".yearPickerRoot {\n display: flex;\n font-size: var(--preset-font-size);\n}\n\n.presetsList {\n display: flex;\n flex-direction: column;\n border-inline-end: 1px solid;\n padding-inline-end: 0.5em;\n margin-inline-end: 0.5em;\n\n @mixin where-light {\n border-color: var(--mantine-color-gray-2);\n }\n\n @mixin where-dark {\n border-color: var(--mantine-color-dark-5);\n }\n}\n\n.presetButton {\n padding: 0.52em 0.8em;\n border-radius: var(--mantine-radius-default);\n font-size: var(--preset-font-size);\n white-space: nowrap;\n\n @mixin hover {\n @mixin where-light {\n background-color: var(--mantine-color-gray-0);\n }\n\n @mixin where-dark {\n background-color: var(--mantine-color-dark-5);\n }\n }\n}\n"],"mappings":""}
|
|
@@ -18,7 +18,7 @@ const defaultProps = {
|
|
|
18
18
|
};
|
|
19
19
|
const YearPickerInput = (0, _mantine_core.factory)((_props) => {
|
|
20
20
|
const props = (0, _mantine_core.useProps)("YearPickerInput", defaultProps, _props);
|
|
21
|
-
const { type, value, defaultValue, onChange, valueFormat, labelSeparator, locale, classNames, styles, unstyled, closeOnChange, size, variant, dropdownType, sortDates, minDate, maxDate, vars, valueFormatter, attributes, ...rest } = props;
|
|
21
|
+
const { type, value, defaultValue, onChange, valueFormat, labelSeparator, locale, classNames, styles, unstyled, closeOnChange, size, variant, dropdownType, sortDates, minDate, maxDate, vars, valueFormatter, presets, attributes, ...rest } = props;
|
|
22
22
|
const { resolvedClassNames, resolvedStyles } = (0, _mantine_core.useResolvedStylesApi)({
|
|
23
23
|
classNames,
|
|
24
24
|
styles,
|
|
@@ -76,6 +76,7 @@ const YearPickerInput = (0, _mantine_core.factory)((_props) => {
|
|
|
76
76
|
__stopPropagation: dropdownType === "popover",
|
|
77
77
|
minDate,
|
|
78
78
|
maxDate,
|
|
79
|
+
presets,
|
|
79
80
|
attributes
|
|
80
81
|
})
|
|
81
82
|
});
|
|
@@ -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 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
|
+
{"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 presets,\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 presets={presets}\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,SACA,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;GACA;GACG;GACZ,CAAA;EACc,CAAA;EAGvB;AAED,gBAAgB,UAAU;CAAE,GAAGF,wBAAAA,gBAAgB;CAAS,GAAGC,mBAAAA,WAAW;CAAS;AAC/E,gBAAgB,cAAc"}
|
|
@@ -1,14 +1,35 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { useDatesState } from "../../hooks/use-dates-state/use-dates-state.mjs";
|
|
3
3
|
import { Calendar } from "../Calendar/Calendar.mjs";
|
|
4
|
-
import {
|
|
5
|
-
import
|
|
4
|
+
import { pickCalendarProps } from "../Calendar/pick-calendar-levels-props/pick-calendar-levels-props.mjs";
|
|
5
|
+
import MonthPicker_module_default from "./MonthPicker.module.mjs";
|
|
6
|
+
import { useRef } from "react";
|
|
7
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
8
|
+
import { Box, UnstyledButton, createVarsResolver, factory, getFontSize, useProps, useResolvedStylesApi, useStyles } from "@mantine/core";
|
|
6
9
|
//#region packages/@mantine/dates/src/components/MonthPicker/MonthPicker.tsx
|
|
10
|
+
const varsResolver = createVarsResolver((_, { size }) => ({ monthPickerRoot: { "--preset-font-size": getFontSize(size) } }));
|
|
7
11
|
const defaultProps = { type: "default" };
|
|
8
12
|
const MonthPicker = factory((_props) => {
|
|
9
13
|
const props = useProps("MonthPicker", defaultProps, _props);
|
|
10
|
-
const { classNames, styles, vars, type, defaultValue, value, onChange, __staticSelector, getMonthControlProps, allowSingleDateInRange, allowDeselect, onMouseLeave, onMonthSelect, __updateDateOnMonthSelect, onLevelChange, ...
|
|
11
|
-
const {
|
|
14
|
+
const { classNames, styles, vars, type, defaultValue, value, onChange, __staticSelector, getMonthControlProps, allowSingleDateInRange, allowDeselect, onMouseLeave, onMonthSelect, __updateDateOnMonthSelect, __onPresetSelect, __stopPropagation, presets, className, style, unstyled, size, attributes, onLevelChange, ...rest } = props;
|
|
15
|
+
const { calendarProps, others } = pickCalendarProps(rest);
|
|
16
|
+
const setDateRef = useRef(null);
|
|
17
|
+
const setLevelRef = useRef(null);
|
|
18
|
+
const getStyles = useStyles({
|
|
19
|
+
name: __staticSelector || "MonthPicker",
|
|
20
|
+
classes: MonthPicker_module_default,
|
|
21
|
+
props,
|
|
22
|
+
className,
|
|
23
|
+
style,
|
|
24
|
+
classNames,
|
|
25
|
+
styles,
|
|
26
|
+
unstyled,
|
|
27
|
+
attributes,
|
|
28
|
+
rootSelector: presets ? "monthPickerRoot" : void 0,
|
|
29
|
+
varsResolver,
|
|
30
|
+
vars
|
|
31
|
+
});
|
|
32
|
+
const { onDateChange, onRootMouseLeave, onHoveredDateChange, getControlProps, setValue } = useDatesState({
|
|
12
33
|
type,
|
|
13
34
|
level: "month",
|
|
14
35
|
allowDeselect,
|
|
@@ -23,7 +44,12 @@ const MonthPicker = factory((_props) => {
|
|
|
23
44
|
styles,
|
|
24
45
|
props
|
|
25
46
|
});
|
|
26
|
-
|
|
47
|
+
const calendar = /* @__PURE__ */ jsx(Calendar, {
|
|
48
|
+
classNames: resolvedClassNames,
|
|
49
|
+
styles: resolvedStyles,
|
|
50
|
+
size,
|
|
51
|
+
...calendarProps,
|
|
52
|
+
...!presets ? others : {},
|
|
27
53
|
minLevel: "year",
|
|
28
54
|
__updateDateOnMonthSelect: __updateDateOnMonthSelect ?? false,
|
|
29
55
|
__staticSelector: __staticSelector || "MonthPicker",
|
|
@@ -37,13 +63,47 @@ const MonthPicker = factory((_props) => {
|
|
|
37
63
|
...getControlProps(date),
|
|
38
64
|
...getMonthControlProps?.(date)
|
|
39
65
|
}),
|
|
40
|
-
classNames: resolvedClassNames,
|
|
41
|
-
styles: resolvedStyles,
|
|
42
66
|
onLevelChange,
|
|
43
|
-
|
|
67
|
+
__setDateRef: setDateRef,
|
|
68
|
+
__setLevelRef: setLevelRef,
|
|
69
|
+
__stopPropagation,
|
|
70
|
+
attributes,
|
|
71
|
+
...!presets ? {
|
|
72
|
+
className,
|
|
73
|
+
style
|
|
74
|
+
} : {}
|
|
75
|
+
});
|
|
76
|
+
if (!presets) return calendar;
|
|
77
|
+
const handlePresetSelect = (val) => {
|
|
78
|
+
const _val = Array.isArray(val) ? val[0] : val;
|
|
79
|
+
if (_val !== void 0) {
|
|
80
|
+
setDateRef.current?.(_val);
|
|
81
|
+
setLevelRef.current?.("year");
|
|
82
|
+
__onPresetSelect ? __onPresetSelect(_val) : setValue(val);
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
const presetButtons = presets.map((preset, index) => /* @__PURE__ */ jsx(UnstyledButton, {
|
|
86
|
+
...getStyles("presetButton"),
|
|
87
|
+
onClick: () => handlePresetSelect(preset.value),
|
|
88
|
+
onMouseDown: (event) => event.preventDefault(),
|
|
89
|
+
"data-mantine-stop-propagation": __stopPropagation || void 0,
|
|
90
|
+
children: preset.label
|
|
91
|
+
}, index));
|
|
92
|
+
return /* @__PURE__ */ jsxs(Box, {
|
|
93
|
+
...getStyles("monthPickerRoot"),
|
|
94
|
+
size,
|
|
95
|
+
...others,
|
|
96
|
+
children: [/* @__PURE__ */ jsx("div", {
|
|
97
|
+
...getStyles("presetsList"),
|
|
98
|
+
children: presetButtons
|
|
99
|
+
}), calendar]
|
|
44
100
|
});
|
|
45
101
|
});
|
|
46
|
-
MonthPicker.classes =
|
|
102
|
+
MonthPicker.classes = {
|
|
103
|
+
...Calendar.classes,
|
|
104
|
+
...MonthPicker_module_default
|
|
105
|
+
};
|
|
106
|
+
MonthPicker.varsResolver = varsResolver;
|
|
47
107
|
MonthPicker.displayName = "@mantine/dates/MonthPicker";
|
|
48
108
|
//#endregion
|
|
49
109
|
export { MonthPicker };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MonthPicker.mjs","names":[],"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 {
|
|
1
|
+
{"version":3,"file":"MonthPicker.mjs","names":["classes"],"sources":["../../../src/components/MonthPicker/MonthPicker.tsx"],"sourcesContent":["import { useRef } from 'react';\nimport {\n Box,\n BoxProps,\n createVarsResolver,\n ElementProps,\n factory,\n Factory,\n getFontSize,\n MantineComponentStaticProperties,\n StylesApiProps,\n UnstyledButton,\n useProps,\n useResolvedStylesApi,\n useStyles,\n} from '@mantine/core';\nimport { useDatesState } from '../../hooks';\nimport {\n CalendarLevel,\n DatePickerType,\n DateStringValue,\n DateValue,\n PickerBaseProps,\n} from '../../types';\nimport { Calendar, CalendarBaseProps, pickCalendarProps } from '../Calendar';\nimport { DecadeLevelBaseSettings } from '../DecadeLevel';\nimport { DecadeLevelGroupStylesNames } from '../DecadeLevelGroup';\nimport { YearLevelBaseSettings } from '../YearLevel';\nimport { YearLevelGroupStylesNames } from '../YearLevelGroup';\nimport classes from './MonthPicker.module.css';\n\nexport interface MonthPickerPreset<Type extends DatePickerType> {\n value: Type extends 'range'\n ? [DateStringValue | null, DateStringValue | null]\n : Type extends 'multiple'\n ? DateStringValue[]\n : DateStringValue | null;\n label: React.ReactNode;\n}\n\nexport type MonthPickerCssVariables = {\n monthPickerRoot: '--preset-font-size';\n};\n\nexport type MonthPickerStylesNames =\n | DecadeLevelGroupStylesNames\n | YearLevelGroupStylesNames\n | 'presetsList'\n | 'presetButton'\n | 'monthPickerRoot';\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 /** Predefined values to pick from */\n presets?: MonthPickerPreset<Type>[];\n\n /** If defined, called with preset value, suppresses `onChange` call */\n __onPresetSelect?: (\n preset: Type extends 'range'\n ? [DateStringValue | null, DateStringValue | null]\n : DateStringValue | null\n ) => 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 vars: MonthPickerCssVariables;\n}>;\n\nconst varsResolver = createVarsResolver<MonthPickerFactory>((_, { size }) => ({\n monthPickerRoot: {\n '--preset-font-size': getFontSize(size),\n },\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 __onPresetSelect,\n __stopPropagation,\n presets,\n className,\n style,\n unstyled,\n size,\n attributes,\n onLevelChange,\n ...rest\n } = props;\n\n const { calendarProps, others } = pickCalendarProps(rest);\n const setDateRef = useRef<((date: DateValue) => void) | null>(null);\n const setLevelRef = useRef<((level: CalendarLevel) => void) | null>(null);\n\n const getStyles = useStyles<MonthPickerFactory>({\n name: __staticSelector || 'MonthPicker',\n classes,\n props,\n className,\n style,\n classNames,\n styles,\n unstyled,\n attributes,\n rootSelector: presets ? 'monthPickerRoot' : undefined,\n varsResolver,\n vars,\n });\n\n const { onDateChange, onRootMouseLeave, onHoveredDateChange, getControlProps, setValue } =\n 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 const calendar = (\n <Calendar\n classNames={resolvedClassNames}\n styles={resolvedStyles}\n size={size}\n {...calendarProps}\n {...(!presets ? others : {})}\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 onLevelChange={onLevelChange as any}\n __setDateRef={setDateRef}\n __setLevelRef={setLevelRef}\n __stopPropagation={__stopPropagation}\n attributes={attributes}\n {...(!presets ? { className, style } : {})}\n />\n );\n\n if (!presets) {\n return calendar;\n }\n\n const handlePresetSelect = (\n val: DateStringValue | null | [DateStringValue | null, DateStringValue | null]\n ) => {\n const _val = Array.isArray(val) ? val[0] : val;\n if (_val !== undefined) {\n setDateRef.current?.(_val);\n setLevelRef.current?.('year');\n __onPresetSelect ? __onPresetSelect(_val) : setValue(val);\n }\n };\n\n const presetButtons = presets.map((preset, index) => (\n <UnstyledButton\n key={index}\n {...getStyles('presetButton')}\n onClick={() => handlePresetSelect(preset.value)}\n onMouseDown={(event) => event.preventDefault()}\n data-mantine-stop-propagation={__stopPropagation || undefined}\n >\n {preset.label}\n </UnstyledButton>\n ));\n\n return (\n <Box {...getStyles('monthPickerRoot')} size={size} {...others}>\n <div {...getStyles('presetsList')}>{presetButtons}</div>\n {calendar}\n </Box>\n );\n}) as any;\n\nMonthPicker.classes = { ...Calendar.classes, ...classes };\nMonthPicker.varsResolver = varsResolver;\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":";;;;;;;;;AAmGA,MAAM,eAAe,oBAAwC,GAAG,EAAE,YAAY,EAC5E,iBAAiB,EACf,sBAAsB,YAAY,KAAK,EACxC,EACF,EAAE;AAEH,MAAM,eAAe,EACnB,MAAM,WACP;AAQD,MAAa,cAAoC,SAA6B,WAAW;CACvF,MAAM,QAAQ,SAAS,eAAe,cAAc,OAAO;CAC3D,MAAM,EACJ,YACA,QACA,MACA,MACA,cACA,OACA,UACA,kBACA,sBACA,wBACA,eACA,cACA,eACA,2BACA,kBACA,mBACA,SACA,WACA,OACA,UACA,MACA,YACA,eACA,GAAG,SACD;CAEJ,MAAM,EAAE,eAAe,WAAW,kBAAkB,KAAK;CACzD,MAAM,aAAa,OAA2C,KAAK;CACnE,MAAM,cAAc,OAAgD,KAAK;CAEzE,MAAM,YAAY,UAA8B;EAC9C,MAAM,oBAAoB;EAC1B,SAAA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,cAAc,UAAU,oBAAoB,KAAA;EAC5C;EACA;EACD,CAAC;CAEF,MAAM,EAAE,cAAc,kBAAkB,qBAAqB,iBAAiB,aAC5E,cAAc;EACN;EACN,OAAO;EACP;EACA;EACA;EACA;EACU;EACV;EACD,CAAC;CAEJ,MAAM,EAAE,oBAAoB,mBAAmB,qBAAyC;EACtF;EACA;EACA;EACD,CAAC;CAEF,MAAM,WACJ,oBAAC,UAAD;EACE,YAAY;EACZ,QAAQ;EACF;EACN,GAAI;EACJ,GAAK,CAAC,UAAU,SAAS,EAAE;EAC3B,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;EACc;EACf,cAAc;EACd,eAAe;EACI;EACP;EACZ,GAAK,CAAC,UAAU;GAAE;GAAW;GAAO,GAAG,EAAE;EACzC,CAAA;AAGJ,KAAI,CAAC,QACH,QAAO;CAGT,MAAM,sBACJ,QACG;EACH,MAAM,OAAO,MAAM,QAAQ,IAAI,GAAG,IAAI,KAAK;AAC3C,MAAI,SAAS,KAAA,GAAW;AACtB,cAAW,UAAU,KAAK;AAC1B,eAAY,UAAU,OAAO;AAC7B,sBAAmB,iBAAiB,KAAK,GAAG,SAAS,IAAI;;;CAI7D,MAAM,gBAAgB,QAAQ,KAAK,QAAQ,UACzC,oBAAC,gBAAD;EAEE,GAAI,UAAU,eAAe;EAC7B,eAAe,mBAAmB,OAAO,MAAM;EAC/C,cAAc,UAAU,MAAM,gBAAgB;EAC9C,iCAA+B,qBAAqB,KAAA;YAEnD,OAAO;EACO,EAPV,MAOU,CACjB;AAEF,QACE,qBAAC,KAAD;EAAK,GAAI,UAAU,kBAAkB;EAAQ;EAAM,GAAI;YAAvD,CACE,oBAAC,OAAD;GAAK,GAAI,UAAU,cAAc;aAAG;GAAoB,CAAA,EACvD,SACG;;EAER;AAEF,YAAY,UAAU;CAAE,GAAG,SAAS;CAAS,GAAGA;CAAS;AACzD,YAAY,eAAe;AAC3B,YAAY,cAAc"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
//#region packages/@mantine/dates/src/components/MonthPicker/MonthPicker.module.css
|
|
3
|
+
var MonthPicker_module_default = {
|
|
4
|
+
"monthPickerRoot": "m_53c9e871",
|
|
5
|
+
"presetsList": "m_cccb8ff3",
|
|
6
|
+
"presetButton": "m_7b4fbf50"
|
|
7
|
+
};
|
|
8
|
+
//#endregion
|
|
9
|
+
export { MonthPicker_module_default as default };
|
|
10
|
+
|
|
11
|
+
//# sourceMappingURL=MonthPicker.module.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MonthPicker.module.mjs","names":[],"sources":["../../../src/components/MonthPicker/MonthPicker.module.css"],"sourcesContent":[".monthPickerRoot {\n display: flex;\n font-size: var(--preset-font-size);\n}\n\n.presetsList {\n display: flex;\n flex-direction: column;\n border-inline-end: 1px solid;\n padding-inline-end: 0.5em;\n margin-inline-end: 0.5em;\n\n @mixin where-light {\n border-color: var(--mantine-color-gray-2);\n }\n\n @mixin where-dark {\n border-color: var(--mantine-color-dark-5);\n }\n}\n\n.presetButton {\n padding: 0.52em 0.8em;\n border-radius: var(--mantine-radius-default);\n font-size: var(--preset-font-size);\n white-space: nowrap;\n\n @mixin hover {\n @mixin where-light {\n background-color: var(--mantine-color-gray-0);\n }\n\n @mixin where-dark {\n background-color: var(--mantine-color-dark-5);\n }\n }\n}\n"],"mappings":""}
|
|
@@ -17,7 +17,7 @@ const defaultProps = {
|
|
|
17
17
|
};
|
|
18
18
|
const MonthPickerInput = factory((_props) => {
|
|
19
19
|
const props = useProps("MonthPickerInput", defaultProps, _props);
|
|
20
|
-
const { type, value, defaultValue, onChange, valueFormat, labelSeparator, locale, classNames, styles, unstyled, closeOnChange, size, variant, dropdownType, sortDates, minDate, maxDate, vars, valueFormatter, attributes, ...rest } = props;
|
|
20
|
+
const { type, value, defaultValue, onChange, valueFormat, labelSeparator, locale, classNames, styles, unstyled, closeOnChange, size, variant, dropdownType, sortDates, minDate, maxDate, vars, valueFormatter, presets, attributes, ...rest } = props;
|
|
21
21
|
const { resolvedClassNames, resolvedStyles } = useResolvedStylesApi({
|
|
22
22
|
classNames,
|
|
23
23
|
styles,
|
|
@@ -75,6 +75,7 @@ const MonthPickerInput = factory((_props) => {
|
|
|
75
75
|
__stopPropagation: dropdownType === "popover",
|
|
76
76
|
minDate,
|
|
77
77
|
maxDate,
|
|
78
|
+
presets,
|
|
78
79
|
attributes
|
|
79
80
|
})
|
|
80
81
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MonthPickerInput.mjs","names":[],"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,mBAA8C,SACxD,WAAW;CACV,MAAM,QAAQ,SAAS,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,mBAAmB,qBAA8C;EAC3F;EACA;EACA;EACD,CAAC;CAEF,MAAM,EAAE,eAAe,WAAW,kBAAkB,KAAK;CAEzD,MAAM,EACJ,QACA,UACA,gBACA,kBACA,gBACA,SACA,gBACE,cAAc;EACV;EACN;EACA;EACU;EACV;EACA,QAAQ;EACR;EACA;EACA;EACA;EACD,CAAC;AAEF,QACE,oBAAC,iBAAD;EACkB;EACA;EACE;EAClB,YAAY;EACZ,QAAQ;EACE;EACD;EACI;EACb,OAAO;EACD;EACG;EACK;EACd,GAAI;EACQ;EACN;EACN,kBAAiB;YAEjB,oBAAC,aAAD;GACE,GAAI;GACE;GACG;GACH;GACN,OAAO;GACP,aACE,cAAc,gBACb,MAAM,QAAQ,OAAO,GAClB,OAAO,MAAM,sBAAsB;IAAE;IAAS;IAAS,CAAC,GACxD,UAAU,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,GAAG,gBAAgB;CAAS,GAAG,YAAY;CAAS;AACjF,iBAAiB,cAAc"}
|
|
1
|
+
{"version":3,"file":"MonthPickerInput.mjs","names":[],"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 presets,\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 presets={presets}\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,mBAA8C,SACxD,WAAW;CACV,MAAM,QAAQ,SAAS,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,SACA,YACA,GAAG,SACD;CAEJ,MAAM,EAAE,oBAAoB,mBAAmB,qBAA8C;EAC3F;EACA;EACA;EACD,CAAC;CAEF,MAAM,EAAE,eAAe,WAAW,kBAAkB,KAAK;CAEzD,MAAM,EACJ,QACA,UACA,gBACA,kBACA,gBACA,SACA,gBACE,cAAc;EACV;EACN;EACA;EACU;EACV;EACA,QAAQ;EACR;EACA;EACA;EACA;EACD,CAAC;AAEF,QACE,oBAAC,iBAAD;EACkB;EACA;EACE;EAClB,YAAY;EACZ,QAAQ;EACE;EACD;EACI;EACb,OAAO;EACD;EACG;EACK;EACd,GAAI;EACQ;EACN;EACN,kBAAiB;YAEjB,oBAAC,aAAD;GACE,GAAI;GACE;GACG;GACH;GACN,OAAO;GACP,aACE,cAAc,gBACb,MAAM,QAAQ,OAAO,GAClB,OAAO,MAAM,sBAAsB;IAAE;IAAS;IAAS,CAAC,GACxD,UAAU,sBAAsB;IAAE;IAAS;IAAS,CAAC;GAE3D,UAAU;GACF;GACR,YAAY;GACZ,QAAQ;GACE;GACV,kBAAiB;GACjB,mBAAmB,iBAAiB;GAC3B;GACA;GACA;GACG;GACZ,CAAA;EACc,CAAA;EAGvB;AAED,iBAAiB,UAAU;CAAE,GAAG,gBAAgB;CAAS,GAAG,YAAY;CAAS;AACjF,iBAAiB,cAAc"}
|
|
@@ -4,7 +4,7 @@ import { jsx } from "react/jsx-runtime";
|
|
|
4
4
|
import { clamp } from "@mantine/hooks";
|
|
5
5
|
//#region packages/@mantine/dates/src/components/SpinInput/SpinInput.tsx
|
|
6
6
|
const getMaxDigit = (max) => Number(max.toFixed(0)[0]);
|
|
7
|
-
function SpinInput({ value, min, max, onChange, focusable, step, onNextInput, onPreviousInput, onFocus, readOnly, allowTemporaryZero = false, placeholder = "--", ...others }) {
|
|
7
|
+
function SpinInput({ value, min, max, onChange, focusable, step, onNextInput, onPreviousInput, onFocus, readOnly, allowTemporaryZero = false, placeholder = "--", disableAutoAdvance = false, ...others }) {
|
|
8
8
|
const maxDigit = getMaxDigit(max);
|
|
9
9
|
const arrowsMax = max + 1 - step;
|
|
10
10
|
const handleChange = (value) => {
|
|
@@ -14,7 +14,7 @@ function SpinInput({ value, min, max, onChange, focusable, step, onNextInput, on
|
|
|
14
14
|
const parsedValue = parseInt(clearValue, 10);
|
|
15
15
|
const clampedValue = allowTemporaryZero && parsedValue === 0 && min > 0 ? 0 : clamp(parsedValue, min, max);
|
|
16
16
|
onChange(clampedValue);
|
|
17
|
-
if (clampedValue > maxDigit || value.startsWith("00")) onNextInput?.();
|
|
17
|
+
if (!disableAutoAdvance && (clampedValue > maxDigit || value.startsWith("00"))) onNextInput?.();
|
|
18
18
|
}
|
|
19
19
|
};
|
|
20
20
|
const handleKeyDown = (event) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SpinInput.mjs","names":[],"sources":["../../../src/components/SpinInput/SpinInput.tsx"],"sourcesContent":["import { clamp } from '@mantine/hooks';\nimport { padTime } from '../TimePicker/utils/pad-time/pad-time';\n\ninterface SpinInputProps extends Omit<React.ComponentProps<'input'>, 'onChange' | 'value'> {\n value: number | null;\n min: number;\n max: number;\n onChange: (value: number | null) => void;\n focusable: boolean;\n step: number;\n onNextInput?: () => void;\n onPreviousInput?: () => void;\n allowTemporaryZero?: boolean;\n placeholder?: string;\n}\n\nconst getMaxDigit = (max: number) => Number(max.toFixed(0)[0]);\n\nexport function SpinInput({\n value,\n min,\n max,\n onChange,\n focusable,\n step,\n onNextInput,\n onPreviousInput,\n onFocus,\n readOnly,\n allowTemporaryZero = false,\n placeholder = '--',\n ...others\n}: SpinInputProps) {\n const maxDigit = getMaxDigit(max);\n const arrowsMax = max + 1 - step;\n\n const handleChange = (value: string) => {\n if (readOnly) {\n return;\n }\n\n const clearValue = value.replace(/\\D/g, '');\n if (clearValue !== '') {\n const parsedValue = parseInt(clearValue, 10);\n const clampedValue =\n allowTemporaryZero && parsedValue === 0 && min > 0 ? 0 : clamp(parsedValue, min, max);\n\n onChange(clampedValue);\n\n if (clampedValue > maxDigit || value.startsWith('00')) {\n onNextInput?.();\n }\n }\n };\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (readOnly) {\n return;\n }\n\n if (event.key === '0' || event.key === 'Num0') {\n if (value === 0) {\n event.preventDefault();\n onNextInput?.();\n }\n }\n\n if (event.key === 'Home') {\n event.preventDefault();\n onChange(min);\n }\n\n if (event.key === 'End') {\n event.preventDefault();\n onChange(max);\n }\n\n if (event.key === 'Backspace' || event.key === 'Delete') {\n event.preventDefault();\n\n if (value !== null) {\n onChange(null);\n } else {\n onPreviousInput?.();\n }\n }\n\n if (event.key === 'ArrowRight') {\n event.preventDefault();\n onNextInput?.();\n }\n\n if (event.key === 'ArrowLeft') {\n event.preventDefault();\n onPreviousInput?.();\n }\n\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n const newValue = value === null ? min : clamp(value + step, min, arrowsMax);\n onChange(newValue);\n }\n\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n const newValue = value === null ? arrowsMax : clamp(value - step, min, arrowsMax);\n onChange(newValue);\n }\n };\n\n return (\n <input\n type=\"text\"\n role=\"spinbutton\"\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuenow={value === null ? 0 : value}\n data-empty={value === null || undefined}\n inputMode=\"numeric\"\n placeholder={placeholder}\n value={value === null ? '' : padTime(value)}\n onChange={(event) => handleChange(event.currentTarget.value)}\n onKeyDown={handleKeyDown}\n onFocus={(event) => {\n event.currentTarget.select();\n onFocus?.(event);\n }}\n onClick={(event) => {\n event.stopPropagation();\n event.currentTarget.select();\n }}\n onMouseDown={(event) => event.stopPropagation()}\n {...others}\n />\n );\n}\n\nSpinInput.displayName = '@mantine/dates/SpinInput';\n"],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"SpinInput.mjs","names":[],"sources":["../../../src/components/SpinInput/SpinInput.tsx"],"sourcesContent":["import { clamp } from '@mantine/hooks';\nimport { padTime } from '../TimePicker/utils/pad-time/pad-time';\n\ninterface SpinInputProps extends Omit<React.ComponentProps<'input'>, 'onChange' | 'value'> {\n value: number | null;\n min: number;\n max: number;\n onChange: (value: number | null) => void;\n focusable: boolean;\n step: number;\n onNextInput?: () => void;\n onPreviousInput?: () => void;\n allowTemporaryZero?: boolean;\n placeholder?: string;\n disableAutoAdvance?: boolean;\n}\n\nconst getMaxDigit = (max: number) => Number(max.toFixed(0)[0]);\n\nexport function SpinInput({\n value,\n min,\n max,\n onChange,\n focusable,\n step,\n onNextInput,\n onPreviousInput,\n onFocus,\n readOnly,\n allowTemporaryZero = false,\n placeholder = '--',\n disableAutoAdvance = false,\n ...others\n}: SpinInputProps) {\n const maxDigit = getMaxDigit(max);\n const arrowsMax = max + 1 - step;\n\n const handleChange = (value: string) => {\n if (readOnly) {\n return;\n }\n\n const clearValue = value.replace(/\\D/g, '');\n if (clearValue !== '') {\n const parsedValue = parseInt(clearValue, 10);\n const clampedValue =\n allowTemporaryZero && parsedValue === 0 && min > 0 ? 0 : clamp(parsedValue, min, max);\n\n onChange(clampedValue);\n\n if (!disableAutoAdvance && (clampedValue > maxDigit || value.startsWith('00'))) {\n onNextInput?.();\n }\n }\n };\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (readOnly) {\n return;\n }\n\n if (event.key === '0' || event.key === 'Num0') {\n if (value === 0) {\n event.preventDefault();\n onNextInput?.();\n }\n }\n\n if (event.key === 'Home') {\n event.preventDefault();\n onChange(min);\n }\n\n if (event.key === 'End') {\n event.preventDefault();\n onChange(max);\n }\n\n if (event.key === 'Backspace' || event.key === 'Delete') {\n event.preventDefault();\n\n if (value !== null) {\n onChange(null);\n } else {\n onPreviousInput?.();\n }\n }\n\n if (event.key === 'ArrowRight') {\n event.preventDefault();\n onNextInput?.();\n }\n\n if (event.key === 'ArrowLeft') {\n event.preventDefault();\n onPreviousInput?.();\n }\n\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n const newValue = value === null ? min : clamp(value + step, min, arrowsMax);\n onChange(newValue);\n }\n\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n const newValue = value === null ? arrowsMax : clamp(value - step, min, arrowsMax);\n onChange(newValue);\n }\n };\n\n return (\n <input\n type=\"text\"\n role=\"spinbutton\"\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuenow={value === null ? 0 : value}\n data-empty={value === null || undefined}\n inputMode=\"numeric\"\n placeholder={placeholder}\n value={value === null ? '' : padTime(value)}\n onChange={(event) => handleChange(event.currentTarget.value)}\n onKeyDown={handleKeyDown}\n onFocus={(event) => {\n event.currentTarget.select();\n onFocus?.(event);\n }}\n onClick={(event) => {\n event.stopPropagation();\n event.currentTarget.select();\n }}\n onMouseDown={(event) => event.stopPropagation()}\n {...others}\n />\n );\n}\n\nSpinInput.displayName = '@mantine/dates/SpinInput';\n"],"mappings":";;;;;AAiBA,MAAM,eAAe,QAAgB,OAAO,IAAI,QAAQ,EAAE,CAAC,GAAG;AAE9D,SAAgB,UAAU,EACxB,OACA,KACA,KACA,UACA,WACA,MACA,aACA,iBACA,SACA,UACA,qBAAqB,OACrB,cAAc,MACd,qBAAqB,OACrB,GAAG,UACc;CACjB,MAAM,WAAW,YAAY,IAAI;CACjC,MAAM,YAAY,MAAM,IAAI;CAE5B,MAAM,gBAAgB,UAAkB;AACtC,MAAI,SACF;EAGF,MAAM,aAAa,MAAM,QAAQ,OAAO,GAAG;AAC3C,MAAI,eAAe,IAAI;GACrB,MAAM,cAAc,SAAS,YAAY,GAAG;GAC5C,MAAM,eACJ,sBAAsB,gBAAgB,KAAK,MAAM,IAAI,IAAI,MAAM,aAAa,KAAK,IAAI;AAEvF,YAAS,aAAa;AAEtB,OAAI,CAAC,uBAAuB,eAAe,YAAY,MAAM,WAAW,KAAK,EAC3E,gBAAe;;;CAKrB,MAAM,iBAAiB,UAAiD;AACtE,MAAI,SACF;AAGF,MAAI,MAAM,QAAQ,OAAO,MAAM,QAAQ;OACjC,UAAU,GAAG;AACf,UAAM,gBAAgB;AACtB,mBAAe;;;AAInB,MAAI,MAAM,QAAQ,QAAQ;AACxB,SAAM,gBAAgB;AACtB,YAAS,IAAI;;AAGf,MAAI,MAAM,QAAQ,OAAO;AACvB,SAAM,gBAAgB;AACtB,YAAS,IAAI;;AAGf,MAAI,MAAM,QAAQ,eAAe,MAAM,QAAQ,UAAU;AACvD,SAAM,gBAAgB;AAEtB,OAAI,UAAU,KACZ,UAAS,KAAK;OAEd,oBAAmB;;AAIvB,MAAI,MAAM,QAAQ,cAAc;AAC9B,SAAM,gBAAgB;AACtB,kBAAe;;AAGjB,MAAI,MAAM,QAAQ,aAAa;AAC7B,SAAM,gBAAgB;AACtB,sBAAmB;;AAGrB,MAAI,MAAM,QAAQ,WAAW;AAC3B,SAAM,gBAAgB;AAEtB,YADiB,UAAU,OAAO,MAAM,MAAM,QAAQ,MAAM,KAAK,UAAU,CACzD;;AAGpB,MAAI,MAAM,QAAQ,aAAa;AAC7B,SAAM,gBAAgB;AAEtB,YADiB,UAAU,OAAO,YAAY,MAAM,QAAQ,MAAM,KAAK,UAAU,CAC/D;;;AAItB,QACE,oBAAC,SAAD;EACE,MAAK;EACL,MAAK;EACL,iBAAe;EACf,iBAAe;EACf,iBAAe,UAAU,OAAO,IAAI;EACpC,cAAY,UAAU,QAAQ,KAAA;EAC9B,WAAU;EACG;EACb,OAAO,UAAU,OAAO,KAAK,QAAQ,MAAM;EAC3C,WAAW,UAAU,aAAa,MAAM,cAAc,MAAM;EAC5D,WAAW;EACX,UAAU,UAAU;AAClB,SAAM,cAAc,QAAQ;AAC5B,aAAU,MAAM;;EAElB,UAAU,UAAU;AAClB,SAAM,iBAAiB;AACvB,SAAM,cAAc,QAAQ;;EAE9B,cAAc,UAAU,MAAM,iBAAiB;EAC/C,GAAI;EACJ,CAAA;;AAIN,UAAU,cAAc"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
+
import { padTime } from "./utils/pad-time/pad-time.mjs";
|
|
2
3
|
import { SpinInput } from "../SpinInput/SpinInput.mjs";
|
|
3
4
|
import { TimePickerProvider } from "./TimePicker.context.mjs";
|
|
4
5
|
import { AmPmInput } from "./AmPmInput/AmPmInput.mjs";
|
|
@@ -16,6 +17,7 @@ import { CloseButton, InputBase, Popover, createVarsResolver, factory, getFontSi
|
|
|
16
17
|
import { useId, useMergedRef } from "@mantine/hooks";
|
|
17
18
|
//#region packages/@mantine/dates/src/components/TimePicker/TimePicker.tsx
|
|
18
19
|
const defaultProps = {
|
|
20
|
+
type: "time",
|
|
19
21
|
hoursStep: 1,
|
|
20
22
|
minutesStep: 1,
|
|
21
23
|
secondsStep: 1,
|
|
@@ -28,12 +30,16 @@ const defaultProps = {
|
|
|
28
30
|
maxDropdownContentHeight: 200,
|
|
29
31
|
hoursPlaceholder: "--",
|
|
30
32
|
minutesPlaceholder: "--",
|
|
31
|
-
secondsPlaceholder: "--"
|
|
33
|
+
secondsPlaceholder: "--",
|
|
34
|
+
minHoursDigits: 2
|
|
32
35
|
};
|
|
33
36
|
const varsResolver = createVarsResolver((_theme, { size }) => ({ dropdown: { "--control-font-size": getFontSize(size) } }));
|
|
34
37
|
const TimePicker = factory((_props) => {
|
|
35
38
|
const props = useProps("TimePicker", defaultProps, _props);
|
|
36
|
-
const { classNames, className, style, styles, unstyled, vars, onClick, format, value, defaultValue, onChange, hoursStep, minutesStep, secondsStep, withSeconds, hoursInputLabel, minutesInputLabel, secondsInputLabel, amPmInputLabel, amPmLabels, clearable, clearSectionMode, onMouseDown, onFocusCapture, onBlurCapture, min, max, popoverProps, withDropdown, rightSection, onFocus, onBlur, clearButtonProps, hoursInputProps, minutesInputProps, secondsInputProps, amPmSelectProps, readOnly, disabled, size, name, form, hiddenInputProps, labelProps, pasteSplit, hoursRef, minutesRef, secondsRef, amPmRef, presets, maxDropdownContentHeight, scrollAreaProps, attributes, reverseTimeControlsList, hoursPlaceholder, minutesPlaceholder, secondsPlaceholder, ...others } = props;
|
|
39
|
+
const { classNames, className, style, styles, unstyled, vars, onClick, type, format: _format, value, defaultValue, onChange, hoursStep, minutesStep, secondsStep, withSeconds, hoursInputLabel, minutesInputLabel, secondsInputLabel, amPmInputLabel, amPmLabels, clearable, clearSectionMode, onMouseDown, onFocusCapture, onBlurCapture, min, max, popoverProps, withDropdown, rightSection, onFocus, onBlur, clearButtonProps, hoursInputProps, minutesInputProps, secondsInputProps, amPmSelectProps, readOnly, disabled, size, name, form, hiddenInputProps, labelProps, pasteSplit, hoursRef, minutesRef, secondsRef, amPmRef, presets, maxDropdownContentHeight, scrollAreaProps, attributes, reverseTimeControlsList, hoursPlaceholder, minutesPlaceholder, secondsPlaceholder, minHoursDigits, ...others } = props;
|
|
40
|
+
const isDuration = type === "duration";
|
|
41
|
+
const format = isDuration ? "24h" : _format;
|
|
42
|
+
const resolvedHoursPlaceholder = isDuration && hoursPlaceholder === "--" ? "-".repeat(minHoursDigits) : hoursPlaceholder;
|
|
37
43
|
const { resolvedClassNames, resolvedStyles } = useResolvedStylesApi({
|
|
38
44
|
classNames,
|
|
39
45
|
styles,
|
|
@@ -64,7 +70,8 @@ const TimePicker = factory((_props) => {
|
|
|
64
70
|
clearable,
|
|
65
71
|
disabled,
|
|
66
72
|
readOnly,
|
|
67
|
-
pasteSplit
|
|
73
|
+
pasteSplit,
|
|
74
|
+
type
|
|
68
75
|
});
|
|
69
76
|
const _hoursRef = useMergedRef(controller.refs.hours, hoursRef);
|
|
70
77
|
const _minutesRef = useMergedRef(controller.refs.minutes, minutesRef);
|
|
@@ -107,7 +114,7 @@ const TimePicker = factory((_props) => {
|
|
|
107
114
|
transitionProps: { duration: 0 },
|
|
108
115
|
position: "bottom-start",
|
|
109
116
|
withRoles: false,
|
|
110
|
-
disabled: disabled || readOnly || !withDropdown,
|
|
117
|
+
disabled: disabled || readOnly || !withDropdown || isDuration,
|
|
111
118
|
...popoverProps,
|
|
112
119
|
children: [/* @__PURE__ */ jsx(Popover.Target, { children: /* @__PURE__ */ jsxs(InputBase, {
|
|
113
120
|
component: "div",
|
|
@@ -167,14 +174,18 @@ const TimePicker = factory((_props) => {
|
|
|
167
174
|
...hoursInputProps,
|
|
168
175
|
...getStyles("field", {
|
|
169
176
|
className: hoursInputProps?.className,
|
|
170
|
-
style:
|
|
177
|
+
style: isDuration ? {
|
|
178
|
+
width: `calc(${Math.max(minHoursDigits, padTime(controller.values.hours ?? 0).length)}ch + 0.3em)`,
|
|
179
|
+
...hoursInputProps?.style
|
|
180
|
+
} : hoursInputProps?.style
|
|
171
181
|
}),
|
|
172
182
|
value: controller.values.hours,
|
|
173
183
|
onChange: controller.setHours,
|
|
174
184
|
onNextInput: () => controller.focus("minutes"),
|
|
175
185
|
min: format === "12h" ? 1 : 0,
|
|
176
|
-
max: format === "12h" ? 12 : 23,
|
|
186
|
+
max: isDuration ? 9999 : format === "12h" ? 12 : 23,
|
|
177
187
|
allowTemporaryZero: format === "12h",
|
|
188
|
+
disableAutoAdvance: isDuration,
|
|
178
189
|
focusable: true,
|
|
179
190
|
step: hoursStep,
|
|
180
191
|
ref: _hoursRef,
|
|
@@ -191,7 +202,7 @@ const TimePicker = factory((_props) => {
|
|
|
191
202
|
if (format === "12h" && (actualInputValue ? parseInt(actualInputValue, 10) : null) === 0) controller.setHours(12);
|
|
192
203
|
hoursInputProps?.onBlur?.(event);
|
|
193
204
|
},
|
|
194
|
-
placeholder:
|
|
205
|
+
placeholder: resolvedHoursPlaceholder
|
|
195
206
|
}),
|
|
196
207
|
/* @__PURE__ */ jsx("span", { children: ":" }),
|
|
197
208
|
/* @__PURE__ */ jsx(SpinInput, {
|
|
@@ -246,7 +257,7 @@ const TimePicker = factory((_props) => {
|
|
|
246
257
|
},
|
|
247
258
|
placeholder: secondsPlaceholder
|
|
248
259
|
})] }),
|
|
249
|
-
format === "12h" && /* @__PURE__ */ jsx(AmPmInput, {
|
|
260
|
+
format === "12h" && !isDuration && /* @__PURE__ */ jsx(AmPmInput, {
|
|
250
261
|
...amPmSelectProps,
|
|
251
262
|
inputType: withDropdown ? "input" : "select",
|
|
252
263
|
labels: amPmLabels,
|