@lobehub/ui 5.63.4 → 5.64.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 (51) hide show
  1. package/es/base-ui/DatePicker/DatePicker.d.mts +7 -2
  2. package/es/base-ui/DatePicker/DatePicker.mjs +13 -83
  3. package/es/base-ui/DatePicker/DatePicker.mjs.map +1 -1
  4. package/es/base-ui/DatePicker/DateRangePicker.d.mts +3 -2
  5. package/es/base-ui/DatePicker/DateRangePicker.mjs +3 -123
  6. package/es/base-ui/DatePicker/DateRangePicker.mjs.map +1 -1
  7. package/es/base-ui/DatePicker/PurePanel.mjs +80 -0
  8. package/es/base-ui/DatePicker/PurePanel.mjs.map +1 -0
  9. package/es/base-ui/DatePicker/RangePicker.mjs +120 -0
  10. package/es/base-ui/DatePicker/RangePicker.mjs.map +1 -0
  11. package/es/base-ui/DatePicker/SinglePicker.mjs +143 -0
  12. package/es/base-ui/DatePicker/SinglePicker.mjs.map +1 -0
  13. package/es/base-ui/DatePicker/generateConfig.mjs +12 -0
  14. package/es/base-ui/DatePicker/generateConfig.mjs.map +1 -0
  15. package/es/base-ui/DatePicker/generatePicker.d.mts +12 -0
  16. package/es/base-ui/DatePicker/generatePicker.mjs +22 -0
  17. package/es/base-ui/DatePicker/generatePicker.mjs.map +1 -0
  18. package/es/base-ui/DatePicker/index.d.mts +4 -3
  19. package/es/base-ui/DatePicker/locale.d.mts +16 -0
  20. package/es/base-ui/DatePicker/locale.mjs +136 -0
  21. package/es/base-ui/DatePicker/locale.mjs.map +1 -0
  22. package/es/base-ui/DatePicker/semantic.mjs +34 -0
  23. package/es/base-ui/DatePicker/semantic.mjs.map +1 -0
  24. package/es/base-ui/DatePicker/style.mjs +990 -139
  25. package/es/base-ui/DatePicker/style.mjs.map +1 -1
  26. package/es/base-ui/DatePicker/type.d.mts +281 -25
  27. package/es/base-ui/DatePicker/usePanelKeyboard.mjs +230 -0
  28. package/es/base-ui/DatePicker/usePanelKeyboard.mjs.map +1 -0
  29. package/es/base-ui/DatePicker/usePickerShared.mjs +136 -0
  30. package/es/base-ui/DatePicker/usePickerShared.mjs.map +1 -0
  31. package/es/base-ui/DatePicker/usePresetActive.mjs +48 -0
  32. package/es/base-ui/DatePicker/usePresetActive.mjs.map +1 -0
  33. package/es/base-ui/Text/style.d.mts +1 -1
  34. package/es/base-ui/index.d.mts +4 -3
  35. package/es/base-ui/index.mjs +3 -1
  36. package/es/i18n/resources/en/datePicker.d.mts +47 -0
  37. package/es/i18n/resources/en/datePicker.mjs +48 -1
  38. package/es/i18n/resources/en/datePicker.mjs.map +1 -1
  39. package/es/i18n/resources/zhCn/datePicker.d.mts +47 -0
  40. package/es/i18n/resources/zhCn/datePicker.mjs +48 -1
  41. package/es/i18n/resources/zhCn/datePicker.mjs.map +1 -1
  42. package/es/i18n/resources/zhCn/index.mjs +1 -1
  43. package/es/utils/styleEngine.mjs +1 -0
  44. package/package.json +2 -1
  45. package/es/base-ui/DatePicker/CalendarPanel.mjs +0 -188
  46. package/es/base-ui/DatePicker/CalendarPanel.mjs.map +0 -1
  47. package/es/base-ui/DatePicker/PickerShell.mjs +0 -43
  48. package/es/base-ui/DatePicker/PickerShell.mjs.map +0 -1
  49. package/es/base-ui/DatePicker/calendar.d.mts +0 -5
  50. package/es/base-ui/DatePicker/calendar.mjs +0 -46
  51. package/es/base-ui/DatePicker/calendar.mjs.map +0 -1
@@ -1,6 +1,11 @@
1
- import { DatePickerProps } from "./type.mjs";
1
+ import { DatePickerType } from "./type.mjs";
2
2
  //#region src/base-ui/DatePicker/DatePicker.d.ts
3
- declare const DatePicker: import("react").NamedExoticComponent<DatePickerProps>;
3
+ /**
4
+ * DatePicker over Dayjs, with antd's statics: `DatePicker.RangePicker`, `WeekPicker`,
5
+ * `MonthPicker`, `YearPicker`, `QuarterPicker`, `TimePicker`, the debug-only pure panels
6
+ * and `generatePicker`.
7
+ */
8
+ declare const DatePicker: DatePickerType;
4
9
  //#endregion
5
10
  export { DatePicker as default };
6
11
  //# sourceMappingURL=DatePicker.d.mts.map
@@ -1,88 +1,18 @@
1
1
  "use client";
2
- import Icon from "../../Icon/Icon.mjs";
3
- import { useTranslation } from "../../i18n/useTranslation.mjs";
4
- import datePicker_default from "../../i18n/resources/en/datePicker.mjs";
5
- import { DEFAULT_FORMAT, clampToBounds } from "./calendar.mjs";
6
- import { styles } from "./style.mjs";
7
- import CalendarPanel from "./CalendarPanel.mjs";
8
- import PickerShell from "./PickerShell.mjs";
9
- import { memo, useState } from "react";
10
- import { jsx, jsxs } from "react/jsx-runtime";
11
- import useMergeState from "use-merge-value";
12
- import { CalendarIcon } from "lucide-react";
13
- import dayjs from "dayjs";
2
+ import generateConfig from "./generateConfig.mjs";
3
+ import generatePicker from "./generatePicker.mjs";
4
+ import genPurePanel from "./PurePanel.mjs";
14
5
  //#region src/base-ui/DatePicker/DatePicker.tsx
15
- const PLACEHOLDER_KEY = {
16
- date: "datePicker.placeholder",
17
- month: "datePicker.monthPlaceholder",
18
- year: "datePicker.yearPlaceholder"
19
- };
20
- const formatDate = (date, format, fallback) => typeof format === "function" ? format(date) : dayjs(date).format(format ?? fallback);
21
- const DatePicker = memo(({ allowClear = true, className, defaultValue = null, disabled, disabledDate, footer, format, max, min, mode = "date", onChange, placeholder, shadow, size, style, value, variant }) => {
22
- const { t } = useTranslation(datePicker_default);
23
- const [current, setCurrent] = useMergeState(defaultValue, {
24
- defaultValue,
25
- onChange,
26
- value
27
- });
28
- const [open, setOpen] = useState(false);
29
- const [month, setMonth] = useState(() => current ?? /* @__PURE__ */ new Date());
30
- const text = current ? formatDate(current, format, DEFAULT_FORMAT[mode]) : null;
31
- return /* @__PURE__ */ jsxs(PickerShell, {
32
- className,
33
- disabled,
34
- open,
35
- shadow,
36
- showClear: allowClear && !!current,
37
- size,
38
- style,
39
- variant,
40
- icon: /* @__PURE__ */ jsx("span", {
41
- className: styles.icon,
42
- children: /* @__PURE__ */ jsx(Icon, {
43
- icon: CalendarIcon,
44
- size: 14
45
- })
46
- }),
47
- trigger: /* @__PURE__ */ jsx("button", {
48
- className: styles.trigger,
49
- disabled,
50
- type: "button",
51
- children: text ?? /* @__PURE__ */ jsx("span", {
52
- className: styles.placeholder,
53
- children: placeholder ?? t(PLACEHOLDER_KEY[mode])
54
- })
55
- }),
56
- onClear: () => setCurrent(null),
57
- onOpenChange: (next) => {
58
- if (next) setMonth(current ?? clampToBounds(/* @__PURE__ */ new Date(), {
59
- max,
60
- min
61
- }));
62
- setOpen(next);
63
- },
64
- children: [/* @__PURE__ */ jsx(CalendarPanel, {
65
- bounds: {
66
- disabledDate,
67
- max,
68
- min
69
- },
70
- mode,
71
- month,
72
- selected: current,
73
- onMonthChange: setMonth,
74
- onSelect: (date) => {
75
- setCurrent(date);
76
- setOpen(false);
77
- }
78
- }), footer && /* @__PURE__ */ jsx("div", {
79
- className: styles.footer,
80
- children: footer
81
- })]
82
- });
83
- });
84
- DatePicker.displayName = "DatePicker";
6
+ /**
7
+ * DatePicker over Dayjs, with antd's statics: `DatePicker.RangePicker`, `WeekPicker`,
8
+ * `MonthPicker`, `YearPicker`, `QuarterPicker`, `TimePicker`, the debug-only pure panels
9
+ * and `generatePicker`.
10
+ */
11
+ const DatePicker = generatePicker(generateConfig);
12
+ DatePicker._InternalPanelDoNotUseOrYouWillBeFired = genPurePanel(DatePicker);
13
+ DatePicker._InternalRangePanelDoNotUseOrYouWillBeFired = genPurePanel(DatePicker.RangePicker);
14
+ DatePicker.generatePicker = generatePicker;
85
15
  //#endregion
86
- export { DatePicker as default, formatDate };
16
+ export { DatePicker as default };
87
17
 
88
18
  //# sourceMappingURL=DatePicker.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"DatePicker.mjs","names":["datePickerMessages","useControlledState"],"sources":["../../../src/base-ui/DatePicker/DatePicker.tsx"],"sourcesContent":["'use client';\n\nimport dayjs from 'dayjs';\nimport { CalendarIcon } from 'lucide-react';\nimport { memo, useState } from 'react';\nimport useControlledState from 'use-merge-value';\n\nimport datePickerMessages from '@/i18n/resources/en/datePicker';\nimport { useTranslation } from '@/i18n/useTranslation';\nimport Icon from '@/Icon';\n\nimport { clampToBounds, DEFAULT_FORMAT } from './calendar';\nimport CalendarPanel from './CalendarPanel';\nimport PickerShell from './PickerShell';\nimport { styles } from './style';\nimport type { DatePickerProps } from './type';\n\nconst PLACEHOLDER_KEY = {\n date: 'datePicker.placeholder',\n month: 'datePicker.monthPlaceholder',\n year: 'datePicker.yearPlaceholder',\n} as const;\n\nexport const formatDate = (date: Date, format: DatePickerProps['format'], fallback: string) =>\n typeof format === 'function' ? format(date) : dayjs(date).format(format ?? fallback);\n\nconst DatePicker = memo<DatePickerProps>(\n ({\n allowClear = true,\n className,\n defaultValue = null,\n disabled,\n disabledDate,\n footer,\n format,\n max,\n min,\n mode = 'date',\n onChange,\n placeholder,\n shadow,\n size,\n style,\n value,\n variant,\n }) => {\n const { t } = useTranslation(datePickerMessages);\n const [current, setCurrent] = useControlledState<Date | null>(defaultValue, {\n defaultValue,\n onChange,\n value,\n });\n const [open, setOpen] = useState(false);\n const [month, setMonth] = useState<Date>(() => current ?? new Date());\n\n const text = current ? formatDate(current, format, DEFAULT_FORMAT[mode]) : null;\n\n return (\n <PickerShell\n className={className}\n disabled={disabled}\n open={open}\n shadow={shadow}\n showClear={allowClear && !!current}\n size={size}\n style={style}\n variant={variant}\n icon={\n <span className={styles.icon}>\n <Icon icon={CalendarIcon} size={14} />\n </span>\n }\n trigger={\n <button className={styles.trigger} disabled={disabled} type=\"button\">\n {text ?? (\n <span className={styles.placeholder}>{placeholder ?? t(PLACEHOLDER_KEY[mode])}</span>\n )}\n </button>\n }\n onClear={() => setCurrent(null)}\n onOpenChange={(next) => {\n if (next) setMonth(current ?? clampToBounds(new Date(), { max, min }));\n setOpen(next);\n }}\n >\n <CalendarPanel\n bounds={{ disabledDate, max, min }}\n mode={mode}\n month={month}\n selected={current}\n onMonthChange={setMonth}\n onSelect={(date) => {\n setCurrent(date);\n setOpen(false);\n }}\n />\n {footer && <div className={styles.footer}>{footer}</div>}\n </PickerShell>\n );\n },\n);\n\nDatePicker.displayName = 'DatePicker';\n\nexport default DatePicker;\n"],"mappings":";;;;;;;;;;;;;;AAiBA,MAAM,kBAAkB;CACtB,MAAM;CACN,OAAO;CACP,MAAM;AACR;AAEA,MAAa,cAAc,MAAY,QAAmC,aACxE,OAAO,WAAW,aAAa,OAAO,IAAI,IAAI,MAAM,IAAI,CAAC,CAAC,OAAO,UAAU,QAAQ;AAErF,MAAM,aAAa,MAChB,EACC,aAAa,MACb,WACA,eAAe,MACf,UACA,cACA,QACA,QACA,KACA,KACA,OAAO,QACP,UACA,aACA,QACA,MACA,OACA,OACA,cACI;CACJ,MAAM,EAAE,MAAM,eAAeA,kBAAkB;CAC/C,MAAM,CAAC,SAAS,cAAcC,cAAgC,cAAc;EAC1E;EACA;EACA;CACF,CAAC;CACD,MAAM,CAAC,MAAM,WAAW,SAAS,KAAK;CACtC,MAAM,CAAC,OAAO,YAAY,eAAqB,2BAAW,IAAI,KAAK,CAAC;CAEpE,MAAM,OAAO,UAAU,WAAW,SAAS,QAAQ,eAAe,KAAK,IAAI;CAE3E,OACE,qBAAC,aAAD;EACa;EACD;EACJ;EACE;EACR,WAAW,cAAc,CAAC,CAAC;EACrB;EACC;EACE;EACT,MACE,oBAAC,QAAD;GAAM,WAAW,OAAO;GACtB,UAAA,oBAAC,MAAD;IAAM,MAAM;IAAc,MAAM;GAAK,CAAA;EACjC,CAAA;EAER,SACE,oBAAC,UAAD;GAAQ,WAAW,OAAO;GAAmB;GAAU,MAAK;GACzD,UAAA,QACC,oBAAC,QAAD;IAAM,WAAW,OAAO;IAAc,UAAA,eAAe,EAAE,gBAAgB,KAAK;GAAQ,CAAA;EAEhF,CAAA;EAEV,eAAe,WAAW,IAAI;EAC9B,eAAe,SAAS;GACtB,IAAI,MAAM,SAAS,WAAW,8BAAc,IAAI,KAAK,GAAG;IAAE;IAAK;GAAI,CAAC,CAAC;GACrE,QAAQ,IAAI;EACd;EAzBF,UAAA,CA2BE,oBAAC,eAAD;GACE,QAAQ;IAAE;IAAc;IAAK;GAAI;GAC3B;GACC;GACP,UAAU;GACV,eAAe;GACf,WAAW,SAAS;IAClB,WAAW,IAAI;IACf,QAAQ,KAAK;GACf;EACD,CAAA,GACA,UAAU,oBAAC,OAAD;GAAK,WAAW,OAAO;GAAS,UAAA;EAAY,CAAA,CAC5C;;AAEjB,CACF;AAEA,WAAW,cAAc"}
1
+ {"version":3,"file":"DatePicker.mjs","names":["dayjsGenerateConfig"],"sources":["../../../src/base-ui/DatePicker/DatePicker.tsx"],"sourcesContent":["'use client';\n\nimport dayjsGenerateConfig from './generateConfig';\nimport generatePicker from './generatePicker';\nimport genPurePanel from './PurePanel';\nimport type { DatePickerType } from './type';\n\n/**\n * DatePicker over Dayjs, with antd's statics: `DatePicker.RangePicker`, `WeekPicker`,\n * `MonthPicker`, `YearPicker`, `QuarterPicker`, `TimePicker`, the debug-only pure panels\n * and `generatePicker`.\n */\nconst DatePicker = generatePicker(dayjsGenerateConfig) as DatePickerType;\n\nDatePicker._InternalPanelDoNotUseOrYouWillBeFired = genPurePanel(DatePicker);\nDatePicker._InternalRangePanelDoNotUseOrYouWillBeFired = genPurePanel(DatePicker.RangePicker);\nDatePicker.generatePicker = generatePicker;\n\nexport default DatePicker;\n"],"mappings":";;;;;;;;;;AAYA,MAAM,aAAa,eAAeA,cAAmB;AAErD,WAAW,yCAAyC,aAAa,UAAU;AAC3E,WAAW,8CAA8C,aAAa,WAAW,WAAW;AAC5F,WAAW,iBAAiB"}
@@ -1,6 +1,7 @@
1
- import { DateRangePickerProps } from "./type.mjs";
1
+ import { RangePickerComponent } from "./type.mjs";
2
2
  //#region src/base-ui/DatePicker/DateRangePicker.d.ts
3
- declare const DateRangePicker: import("react").NamedExoticComponent<DateRangePickerProps>;
3
+ /** `DatePicker.RangePicker`, kept as a standalone export. */
4
+ declare const DateRangePicker: RangePickerComponent<import("dayjs").Dayjs>;
4
5
  //#endregion
5
6
  export { DateRangePicker as default };
6
7
  //# sourceMappingURL=DateRangePicker.d.mts.map
@@ -1,127 +1,7 @@
1
- "use client";
2
- import Icon from "../../Icon/Icon.mjs";
3
- import { useTranslation } from "../../i18n/useTranslation.mjs";
4
- import datePicker_default from "../../i18n/resources/en/datePicker.mjs";
5
- import { DEFAULT_FORMAT, clampToBounds, orderRange } from "./calendar.mjs";
6
- import { styles } from "./style.mjs";
7
- import CalendarPanel from "./CalendarPanel.mjs";
8
- import PickerShell from "./PickerShell.mjs";
9
- import { formatDate } from "./DatePicker.mjs";
10
- import { memo, useState } from "react";
11
- import { jsx, jsxs } from "react/jsx-runtime";
12
- import useMergeState from "use-merge-value";
13
- import { ArrowRight, CalendarIcon } from "lucide-react";
14
- import dayjs from "dayjs";
1
+ import DatePicker from "./DatePicker.mjs";
15
2
  //#region src/base-ui/DatePicker/DateRangePicker.tsx
16
- const EMPTY = [null, null];
17
- const DateRangePicker = memo(({ allowClear = true, className, defaultValue = EMPTY, disabled, disabledDate, format, max, min, onChange, placeholder, shadow, size, style, value, variant }) => {
18
- const { t } = useTranslation(datePicker_default);
19
- const [current, setCurrent] = useMergeState(defaultValue, {
20
- defaultValue,
21
- onChange,
22
- value
23
- });
24
- const [open, setOpen] = useState(false);
25
- const [draft, setDraft] = useState(EMPTY);
26
- const [hovered, setHovered] = useState(null);
27
- const [month, setMonth] = useState(() => current[0] ?? /* @__PURE__ */ new Date());
28
- const shown = open && draft[0] ? draft : current;
29
- const nextMonth = dayjs(month).add(1, "month").toDate();
30
- const bounds = {
31
- disabledDate,
32
- max,
33
- min
34
- };
35
- const half = (date, fallback, active) => /* @__PURE__ */ jsx("span", {
36
- className: styles.rangeHalf,
37
- "data-active": active ? "" : void 0,
38
- children: date ? formatDate(date, format, DEFAULT_FORMAT.date) : /* @__PURE__ */ jsx("span", {
39
- className: styles.placeholder,
40
- children: fallback
41
- })
42
- });
43
- const select = (date) => {
44
- if (!draft[0] || draft[1]) {
45
- setDraft([date, null]);
46
- return;
47
- }
48
- const ordered = orderRange(draft[0], date);
49
- setDraft(EMPTY);
50
- setCurrent(ordered);
51
- setOpen(false);
52
- };
53
- return /* @__PURE__ */ jsx(PickerShell, {
54
- className,
55
- disabled,
56
- open,
57
- shadow,
58
- showClear: allowClear && !!(current[0] || current[1]),
59
- size,
60
- style,
61
- variant,
62
- icon: /* @__PURE__ */ jsx("span", {
63
- className: styles.icon,
64
- children: /* @__PURE__ */ jsx(Icon, {
65
- icon: CalendarIcon,
66
- size: 14
67
- })
68
- }),
69
- trigger: /* @__PURE__ */ jsx("button", {
70
- className: styles.trigger,
71
- disabled,
72
- type: "button",
73
- children: /* @__PURE__ */ jsxs("span", {
74
- className: styles.rangeTrigger,
75
- children: [
76
- half(shown[0], placeholder?.[0] ?? t("datePicker.startPlaceholder"), open && !draft[0]),
77
- /* @__PURE__ */ jsx("span", {
78
- className: styles.icon,
79
- children: /* @__PURE__ */ jsx(Icon, {
80
- icon: ArrowRight,
81
- size: 14
82
- })
83
- }),
84
- half(shown[1], placeholder?.[1] ?? t("datePicker.endPlaceholder"), open && !!draft[0])
85
- ]
86
- })
87
- }),
88
- onClear: () => setCurrent(EMPTY),
89
- onOpenChange: (next) => {
90
- if (next) {
91
- setMonth(current[0] ?? clampToBounds(/* @__PURE__ */ new Date(), {
92
- max,
93
- min
94
- }));
95
- setDraft(EMPTY);
96
- }
97
- setOpen(next);
98
- },
99
- children: /* @__PURE__ */ jsxs("div", {
100
- className: styles.range,
101
- children: [/* @__PURE__ */ jsx(CalendarPanel, {
102
- bounds,
103
- hovered,
104
- mode: "date",
105
- month,
106
- range: draft[0] ? draft : current,
107
- showNav: false,
108
- onHover: setHovered,
109
- onMonthChange: setMonth,
110
- onSelect: select
111
- }), /* @__PURE__ */ jsx(CalendarPanel, {
112
- bounds,
113
- hovered,
114
- mode: "date",
115
- month: nextMonth,
116
- range: draft[0] ? draft : current,
117
- onHover: setHovered,
118
- onMonthChange: (next) => setMonth(dayjs(next).subtract(1, "month").toDate()),
119
- onSelect: select
120
- })]
121
- })
122
- });
123
- });
124
- DateRangePicker.displayName = "DateRangePicker";
3
+ /** `DatePicker.RangePicker`, kept as a standalone export. */
4
+ const DateRangePicker = DatePicker.RangePicker;
125
5
  //#endregion
126
6
  export { DateRangePicker as default };
127
7
 
@@ -1 +1 @@
1
- {"version":3,"file":"DateRangePicker.mjs","names":["datePickerMessages","useControlledState"],"sources":["../../../src/base-ui/DatePicker/DateRangePicker.tsx"],"sourcesContent":["'use client';\n\nimport dayjs from 'dayjs';\nimport { ArrowRight, CalendarIcon } from 'lucide-react';\nimport { memo, useState } from 'react';\nimport useControlledState from 'use-merge-value';\n\nimport datePickerMessages from '@/i18n/resources/en/datePicker';\nimport { useTranslation } from '@/i18n/useTranslation';\nimport Icon from '@/Icon';\n\nimport { clampToBounds, DEFAULT_FORMAT, orderRange } from './calendar';\nimport CalendarPanel from './CalendarPanel';\nimport { formatDate } from './DatePicker';\nimport PickerShell from './PickerShell';\nimport { styles } from './style';\nimport type { DateRangePickerProps, DateRangeValue } from './type';\n\nconst EMPTY: DateRangeValue = [null, null];\n\nconst DateRangePicker = memo<DateRangePickerProps>(\n ({\n allowClear = true,\n className,\n defaultValue = EMPTY,\n disabled,\n disabledDate,\n format,\n max,\n min,\n onChange,\n placeholder,\n shadow,\n size,\n style,\n value,\n variant,\n }) => {\n const { t } = useTranslation(datePickerMessages);\n const [current, setCurrent] = useControlledState<DateRangeValue>(defaultValue, {\n defaultValue,\n onChange,\n value,\n });\n const [open, setOpen] = useState(false);\n const [draft, setDraft] = useState<DateRangeValue>(EMPTY);\n const [hovered, setHovered] = useState<Date | null>(null);\n const [month, setMonth] = useState<Date>(() => current[0] ?? new Date());\n\n const shown = open && draft[0] ? draft : current;\n const nextMonth = dayjs(month).add(1, 'month').toDate();\n const bounds = { disabledDate, max, min };\n\n const half = (date: Date | null, fallback: string, active: boolean) => (\n <span className={styles.rangeHalf} data-active={active ? '' : undefined}>\n {date ? (\n formatDate(date, format, DEFAULT_FORMAT.date)\n ) : (\n <span className={styles.placeholder}>{fallback}</span>\n )}\n </span>\n );\n\n const select = (date: Date) => {\n if (!draft[0] || draft[1]) {\n setDraft([date, null]);\n return;\n }\n const ordered = orderRange(draft[0], date);\n setDraft(EMPTY);\n setCurrent(ordered);\n setOpen(false);\n };\n\n return (\n <PickerShell\n className={className}\n disabled={disabled}\n open={open}\n shadow={shadow}\n showClear={allowClear && !!(current[0] || current[1])}\n size={size}\n style={style}\n variant={variant}\n icon={\n <span className={styles.icon}>\n <Icon icon={CalendarIcon} size={14} />\n </span>\n }\n trigger={\n <button className={styles.trigger} disabled={disabled} type=\"button\">\n <span className={styles.rangeTrigger}>\n {half(\n shown[0],\n placeholder?.[0] ?? t('datePicker.startPlaceholder'),\n open && !draft[0],\n )}\n <span className={styles.icon}>\n <Icon icon={ArrowRight} size={14} />\n </span>\n {half(\n shown[1],\n placeholder?.[1] ?? t('datePicker.endPlaceholder'),\n open && !!draft[0],\n )}\n </span>\n </button>\n }\n onClear={() => setCurrent(EMPTY)}\n onOpenChange={(next) => {\n if (next) {\n setMonth(current[0] ?? clampToBounds(new Date(), { max, min }));\n setDraft(EMPTY);\n }\n setOpen(next);\n }}\n >\n <div className={styles.range}>\n <CalendarPanel\n bounds={bounds}\n hovered={hovered}\n mode=\"date\"\n month={month}\n range={draft[0] ? draft : current}\n showNav={false}\n onHover={setHovered}\n onMonthChange={setMonth}\n onSelect={select}\n />\n <CalendarPanel\n bounds={bounds}\n hovered={hovered}\n mode=\"date\"\n month={nextMonth}\n range={draft[0] ? draft : current}\n onHover={setHovered}\n onMonthChange={(next) => setMonth(dayjs(next).subtract(1, 'month').toDate())}\n onSelect={select}\n />\n </div>\n </PickerShell>\n );\n },\n);\n\nDateRangePicker.displayName = 'DateRangePicker';\n\nexport default DateRangePicker;\n"],"mappings":"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"}
1
+ {"version":3,"file":"DateRangePicker.mjs","names":[],"sources":["../../../src/base-ui/DatePicker/DateRangePicker.tsx"],"sourcesContent":["import DatePicker from './DatePicker';\n\n/** `DatePicker.RangePicker`, kept as a standalone export. */\nconst DateRangePicker = DatePicker.RangePicker;\n\nexport default DateRangePicker;\n"],"mappings":";;;AAGA,MAAM,kBAAkB,WAAW"}
@@ -0,0 +1,80 @@
1
+ "use client";
2
+ import { PREFIX_CLS } from "./style.mjs";
3
+ import { useEffect, useRef, useState } from "react";
4
+ import { jsx } from "react/jsx-runtime";
5
+ //#region src/base-ui/DatePicker/PurePanel.tsx
6
+ /**
7
+ * antd `genPurePanel`: the picker with its popup always open and rendered in flow below
8
+ * the input — for docs and visual tests, not for apps. The holder reserves the popup's
9
+ * height, the popup does not flip or shift, and it has no motion or stacking z-index.
10
+ */
11
+ const genPurePanel = (Component) => {
12
+ const PurePanel = (props) => {
13
+ const { open: openProp, style, styles } = props;
14
+ const holderRef = useRef(null);
15
+ const [popupSize, setPopupSize] = useState({
16
+ height: 0,
17
+ width: 0
18
+ });
19
+ const [mounted, setMounted] = useState(false);
20
+ useEffect(() => {
21
+ setMounted(true);
22
+ if (typeof ResizeObserver === "undefined") return;
23
+ const resizeObserver = new ResizeObserver(([entry]) => {
24
+ const element = entry.target;
25
+ setPopupSize({
26
+ height: element.offsetHeight + 8,
27
+ width: element.offsetWidth
28
+ });
29
+ });
30
+ const interval = setInterval(() => {
31
+ const popup = holderRef.current?.querySelector(`.${PREFIX_CLS}-dropdown`);
32
+ if (!popup) return;
33
+ clearInterval(interval);
34
+ resizeObserver.observe(popup);
35
+ }, 10);
36
+ return () => {
37
+ clearInterval(interval);
38
+ resizeObserver.disconnect();
39
+ };
40
+ }, []);
41
+ const withInlinePopup = (semantic) => ({
42
+ ...semantic,
43
+ popup: {
44
+ ...semantic?.popup,
45
+ root: {
46
+ zIndex: "auto",
47
+ ...semantic?.popup?.root
48
+ }
49
+ }
50
+ });
51
+ return /* @__PURE__ */ jsx("div", {
52
+ ref: holderRef,
53
+ style: {
54
+ minWidth: popupSize.width,
55
+ paddingBottom: popupSize.height,
56
+ position: "relative"
57
+ },
58
+ children: /* @__PURE__ */ jsx(Component, {
59
+ ...props,
60
+ getPopupContainer: () => holderRef.current,
61
+ open: openProp ?? mounted,
62
+ popupAlign: { overflow: {
63
+ adjustX: false,
64
+ adjustY: false
65
+ } },
66
+ style: {
67
+ ...style,
68
+ margin: 0
69
+ },
70
+ transitionName: "",
71
+ styles: typeof styles === "function" ? (info) => withInlinePopup(styles(info)) : withInlinePopup(styles)
72
+ })
73
+ });
74
+ };
75
+ return PurePanel;
76
+ };
77
+ //#endregion
78
+ export { genPurePanel as default };
79
+
80
+ //# sourceMappingURL=PurePanel.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PurePanel.mjs","names":[],"sources":["../../../src/base-ui/DatePicker/PurePanel.tsx"],"sourcesContent":["'use client';\n\nimport { type ComponentType, type CSSProperties, useEffect, useRef, useState } from 'react';\n\nimport { PREFIX_CLS } from './style';\nimport type { PickerSemanticStyles, PickerStyles } from './type';\n\ninterface PurePanelProps {\n open?: boolean;\n style?: CSSProperties;\n styles?: PickerStyles;\n}\n\n/**\n * antd `genPurePanel`: the picker with its popup always open and rendered in flow below\n * the input — for docs and visual tests, not for apps. The holder reserves the popup's\n * height, the popup does not flip or shift, and it has no motion or stacking z-index.\n */\nconst genPurePanel = <P extends object>(Component: ComponentType<P>) => {\n const PurePanel = (props: P & PurePanelProps) => {\n const { open: openProp, style, styles } = props;\n const holderRef = useRef<HTMLDivElement>(null);\n const [popupSize, setPopupSize] = useState({ height: 0, width: 0 });\n const [mounted, setMounted] = useState(false);\n\n // Opened after mount, as in antd: the popup needs the holder to render into.\n useEffect(() => {\n setMounted(true);\n if (typeof ResizeObserver === 'undefined') return;\n const resizeObserver = new ResizeObserver(([entry]) => {\n const element = entry.target as HTMLElement;\n setPopupSize({ height: element.offsetHeight + 8, width: element.offsetWidth });\n });\n const interval = setInterval(() => {\n const popup = holderRef.current?.querySelector(`.${PREFIX_CLS}-dropdown`);\n if (!popup) return;\n clearInterval(interval);\n resizeObserver.observe(popup);\n }, 10);\n return () => {\n clearInterval(interval);\n resizeObserver.disconnect();\n };\n }, []);\n\n const withInlinePopup = (semantic?: PickerSemanticStyles): PickerSemanticStyles => ({\n ...semantic,\n popup: { ...semantic?.popup, root: { zIndex: 'auto', ...semantic?.popup?.root } },\n });\n\n return (\n <div\n ref={holderRef}\n style={{ minWidth: popupSize.width, paddingBottom: popupSize.height, position: 'relative' }}\n >\n <Component\n {...props}\n getPopupContainer={() => holderRef.current!}\n open={openProp ?? mounted}\n popupAlign={{ overflow: { adjustX: false, adjustY: false } }}\n style={{ ...style, margin: 0 }}\n transitionName=\"\"\n styles={\n typeof styles === 'function'\n ? (info: { props: any }) => withInlinePopup(styles(info))\n : withInlinePopup(styles)\n }\n />\n </div>\n );\n };\n return PurePanel;\n};\n\nexport default genPurePanel;\n"],"mappings":";;;;;;;;;;AAkBA,MAAM,gBAAkC,cAAgC;CACtE,MAAM,aAAa,UAA8B;EAC/C,MAAM,EAAE,MAAM,UAAU,OAAO,WAAW;EAC1C,MAAM,YAAY,OAAuB,IAAI;EAC7C,MAAM,CAAC,WAAW,gBAAgB,SAAS;GAAE,QAAQ;GAAG,OAAO;EAAE,CAAC;EAClE,MAAM,CAAC,SAAS,cAAc,SAAS,KAAK;EAG5C,gBAAgB;GACd,WAAW,IAAI;GACf,IAAI,OAAO,mBAAmB,aAAa;GAC3C,MAAM,iBAAiB,IAAI,gBAAgB,CAAC,WAAW;IACrD,MAAM,UAAU,MAAM;IACtB,aAAa;KAAE,QAAQ,QAAQ,eAAe;KAAG,OAAO,QAAQ;IAAY,CAAC;GAC/E,CAAC;GACD,MAAM,WAAW,kBAAkB;IACjC,MAAM,QAAQ,UAAU,SAAS,cAAc,IAAI,WAAW,UAAU;IACxE,IAAI,CAAC,OAAO;IACZ,cAAc,QAAQ;IACtB,eAAe,QAAQ,KAAK;GAC9B,GAAG,EAAE;GACL,aAAa;IACX,cAAc,QAAQ;IACtB,eAAe,WAAW;GAC5B;EACF,GAAG,CAAC,CAAC;EAEL,MAAM,mBAAmB,cAA2D;GAClF,GAAG;GACH,OAAO;IAAE,GAAG,UAAU;IAAO,MAAM;KAAE,QAAQ;KAAQ,GAAG,UAAU,OAAO;IAAK;GAAE;EAClF;EAEA,OACE,oBAAC,OAAD;GACE,KAAK;GACL,OAAO;IAAE,UAAU,UAAU;IAAO,eAAe,UAAU;IAAQ,UAAU;GAAW;GAE1F,UAAA,oBAAC,WAAD;IACE,GAAI;IACJ,yBAAyB,UAAU;IACnC,MAAM,YAAY;IAClB,YAAY,EAAE,UAAU;KAAE,SAAS;KAAO,SAAS;IAAM,EAAE;IAC3D,OAAO;KAAE,GAAG;KAAO,QAAQ;IAAE;IAC7B,gBAAe;IACf,QACE,OAAO,WAAW,cACb,SAAyB,gBAAgB,OAAO,IAAI,CAAC,IACtD,gBAAgB,MAAM;GAE7B,CAAA;EACE,CAAA;CAET;CACA,OAAO;AACT"}
@@ -0,0 +1,120 @@
1
+ "use client";
2
+ import Icon from "../../Icon/Icon.mjs";
3
+ import { cx } from "../../utils/styleEngine.mjs";
4
+ import { usePickerLocale } from "./locale.mjs";
5
+ import { usePanelKeyboard } from "./usePanelKeyboard.mjs";
6
+ import { usePickerShared } from "./usePickerShared.mjs";
7
+ import { usePresetActive } from "./usePresetActive.mjs";
8
+ import { jsx } from "react/jsx-runtime";
9
+ import { ArrowRight } from "lucide-react";
10
+ import { RangePicker } from "@rc-component/picker";
11
+ //#region src/base-ui/DatePicker/RangePicker.tsx
12
+ /** antd `generateRangePicker`: `DatePicker.RangePicker` over `generateConfig`'s date type. */
13
+ const generateRangePicker = (generateConfig) => {
14
+ const RangePicker$1 = (props) => {
15
+ const { allowClear, allowEmpty, bordered, cellRender, changeOnBlur, className, clearIcon, classNames, components, dateRender, defaultOpen, defaultPickerValue, defaultValue, dropdownClassName, direction, disabled, disabledDate, footer, getPopupContainer, id, locale: localeOverride, max, maxDate, min, minDate, mode, monthCellRender, needConfirm, nextIcon, onBlur, onKeyDown, onCalendarChange, onChange, onFocus, onOk, onOpenChange, onPanelChange, onPickerValueChange, open, order, picker = "date", pickerValue, placeholder, popupClassName, popupStyle, prevIcon, renderExtraFooter, rootClassName, separator, shadow, size, status, styles, suffixIcon, superNextIcon, superPrevIcon, transitionName, value, variant, ...rest } = props;
16
+ const { locale, rangePlaceholder } = usePickerLocale(localeOverride);
17
+ const keyboard = usePanelKeyboard({
18
+ cellRender,
19
+ dateRender,
20
+ defaultOpen,
21
+ defaultPickerValue,
22
+ defaultValue,
23
+ direction,
24
+ generateConfig,
25
+ mode,
26
+ monthCellRender,
27
+ onChange,
28
+ onFocus,
29
+ onOpenChange,
30
+ onPanelChange,
31
+ onPickerValueChange,
32
+ open,
33
+ picker,
34
+ pickerValue,
35
+ range: true,
36
+ value
37
+ });
38
+ const shared = usePickerShared({
39
+ allowClear,
40
+ bordered,
41
+ changeOnBlur,
42
+ className,
43
+ clearIcon,
44
+ classNames,
45
+ components,
46
+ defaultOpen,
47
+ dropdownClassName,
48
+ generateConfig,
49
+ getPopupContainer,
50
+ max,
51
+ maxDate,
52
+ min,
53
+ minDate,
54
+ needConfirm,
55
+ nextIcon,
56
+ onKeyDown,
57
+ onOpenChange: keyboard.onOpenChange,
58
+ open,
59
+ picker,
60
+ popupClassName,
61
+ popupStyle,
62
+ prevIcon,
63
+ rootClassName: cx(keyboard.scopeClassName, rootClassName),
64
+ semanticProps: props,
65
+ shadow,
66
+ size,
67
+ status,
68
+ styles,
69
+ suffixIcon,
70
+ superNextIcon,
71
+ superPrevIcon,
72
+ transitionName,
73
+ variant
74
+ });
75
+ const presetActive = usePresetActive(rest.presets, value, defaultValue);
76
+ return /* @__PURE__ */ jsx(RangePicker, {
77
+ ...rest,
78
+ ...shared,
79
+ allowEmpty,
80
+ cellRender: keyboard.cellRender,
81
+ dateRender,
82
+ defaultPickerValue,
83
+ defaultValue,
84
+ direction,
85
+ disabled,
86
+ disabledDate,
87
+ id,
88
+ locale: locale.lang,
89
+ mode,
90
+ monthCellRender,
91
+ order,
92
+ picker,
93
+ pickerValue: keyboard.pickerValue,
94
+ placeholder: placeholder ?? rangePlaceholder(picker),
95
+ presets: presetActive.presets,
96
+ renderExtraFooter: renderExtraFooter ?? (footer ? () => footer : void 0),
97
+ separator: separator ?? /* @__PURE__ */ jsx(Icon, {
98
+ icon: ArrowRight,
99
+ size: 14
100
+ }),
101
+ value,
102
+ onBlur,
103
+ onCalendarChange,
104
+ onFocus: keyboard.onFocus,
105
+ onOk,
106
+ onPanelChange: keyboard.onPanelChange,
107
+ onPickerValueChange: keyboard.onPickerValueChange,
108
+ onChange: (...args) => {
109
+ presetActive.track(args[0]);
110
+ keyboard.onChange(...args);
111
+ }
112
+ });
113
+ };
114
+ RangePicker$1.displayName = "RangePicker";
115
+ return RangePicker$1;
116
+ };
117
+ //#endregion
118
+ export { generateRangePicker as default };
119
+
120
+ //# sourceMappingURL=RangePicker.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RangePicker.mjs","names":["RangePicker","RcRangePicker"],"sources":["../../../src/base-ui/DatePicker/RangePicker.tsx"],"sourcesContent":["'use client';\n\nimport { RangePicker as RcRangePicker } from '@rc-component/picker';\nimport type { GenerateConfig } from '@rc-component/picker/generate';\nimport { ArrowRight } from 'lucide-react';\n\nimport Icon from '@/Icon';\nimport { cx } from '@/utils/styleEngine';\n\nimport { usePickerLocale } from './locale';\nimport type { DateRangePickerProps, RangePickerComponent } from './type';\nimport { usePanelKeyboard } from './usePanelKeyboard';\nimport { usePickerShared } from './usePickerShared';\nimport { usePresetActive } from './usePresetActive';\n\n/** antd `generateRangePicker`: `DatePicker.RangePicker` over `generateConfig`'s date type. */\nconst generateRangePicker = <DateType extends object>(generateConfig: GenerateConfig<DateType>) => {\n const RangePicker = (props: DateRangePickerProps<DateType>) => {\n const {\n allowClear,\n allowEmpty,\n bordered,\n cellRender,\n changeOnBlur,\n className,\n clearIcon,\n classNames,\n components,\n dateRender,\n defaultOpen,\n defaultPickerValue,\n defaultValue,\n dropdownClassName,\n direction,\n disabled,\n disabledDate,\n footer,\n getPopupContainer,\n id,\n locale: localeOverride,\n max,\n maxDate,\n min,\n minDate,\n mode,\n monthCellRender,\n needConfirm,\n nextIcon,\n onBlur,\n onKeyDown,\n onCalendarChange,\n onChange,\n onFocus,\n onOk,\n onOpenChange,\n onPanelChange,\n onPickerValueChange,\n open,\n order,\n picker = 'date',\n pickerValue,\n placeholder,\n popupClassName,\n popupStyle,\n prevIcon,\n renderExtraFooter,\n rootClassName,\n separator,\n shadow,\n size,\n status,\n styles,\n suffixIcon,\n superNextIcon,\n superPrevIcon,\n transitionName,\n value,\n variant,\n ...rest\n } = props;\n const { locale, rangePlaceholder } = usePickerLocale(localeOverride);\n const keyboard = usePanelKeyboard({\n cellRender,\n dateRender,\n defaultOpen,\n defaultPickerValue,\n defaultValue,\n direction,\n generateConfig,\n mode,\n monthCellRender,\n onChange,\n onFocus,\n onOpenChange,\n onPanelChange,\n onPickerValueChange,\n open,\n picker,\n pickerValue,\n range: true,\n value,\n });\n const shared = usePickerShared({\n allowClear,\n bordered,\n changeOnBlur,\n className,\n clearIcon,\n classNames,\n components,\n defaultOpen,\n dropdownClassName,\n generateConfig,\n getPopupContainer,\n max,\n maxDate,\n min,\n minDate,\n needConfirm,\n nextIcon,\n onKeyDown,\n onOpenChange: keyboard.onOpenChange,\n open,\n picker,\n popupClassName,\n popupStyle,\n prevIcon,\n rootClassName: cx(keyboard.scopeClassName, rootClassName),\n semanticProps: props,\n shadow,\n size,\n status,\n styles,\n suffixIcon,\n superNextIcon,\n superPrevIcon,\n transitionName,\n variant,\n });\n\n const presetActive = usePresetActive((rest as any).presets, value, defaultValue);\n\n return (\n <RcRangePicker<DateType>\n {...rest}\n {...shared}\n allowEmpty={allowEmpty}\n cellRender={keyboard.cellRender}\n dateRender={dateRender}\n defaultPickerValue={defaultPickerValue as any}\n defaultValue={defaultValue as any}\n direction={direction}\n disabled={disabled}\n disabledDate={disabledDate}\n id={id}\n locale={locale.lang}\n mode={mode as any}\n monthCellRender={monthCellRender}\n order={order}\n picker={picker}\n pickerValue={keyboard.pickerValue}\n placeholder={placeholder ?? rangePlaceholder(picker)}\n presets={presetActive.presets as any}\n renderExtraFooter={renderExtraFooter ?? (footer ? () => footer : undefined)}\n separator={separator ?? <Icon icon={ArrowRight} size={14} />}\n value={value as any}\n onBlur={onBlur as any}\n onCalendarChange={onCalendarChange as any}\n onFocus={keyboard.onFocus}\n onOk={onOk as any}\n onPanelChange={keyboard.onPanelChange}\n onPickerValueChange={keyboard.onPickerValueChange}\n onChange={(...args: any[]) => {\n presetActive.track(args[0]);\n (keyboard.onChange as any)(...args);\n }}\n />\n );\n };\n RangePicker.displayName = 'RangePicker';\n return RangePicker as RangePickerComponent<DateType>;\n};\n\nexport default generateRangePicker;\n"],"mappings":";;;;;;;;;;;;AAgBA,MAAM,uBAAgD,mBAA6C;CACjG,MAAMA,iBAAe,UAA0C;EAC7D,MAAM,EACJ,YACA,YACA,UACA,YACA,cACA,WACA,WACA,YACA,YACA,YACA,aACA,oBACA,cACA,mBACA,WACA,UACA,cACA,QACA,mBACA,IACA,QAAQ,gBACR,KACA,SACA,KACA,SACA,MACA,iBACA,aACA,UACA,QACA,WACA,kBACA,UACA,SACA,MACA,cACA,eACA,qBACA,MACA,OACA,SAAS,QACT,aACA,aACA,gBACA,YACA,UACA,mBACA,eACA,WACA,QACA,MACA,QACA,QACA,YACA,eACA,eACA,gBACA,OACA,SACA,GAAG,SACD;EACJ,MAAM,EAAE,QAAQ,qBAAqB,gBAAgB,cAAc;EACnE,MAAM,WAAW,iBAAiB;GAChC;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA,OAAO;GACP;EACF,CAAC;EACD,MAAM,SAAS,gBAAgB;GAC7B;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA,cAAc,SAAS;GACvB;GACA;GACA;GACA;GACA;GACA,eAAe,GAAG,SAAS,gBAAgB,aAAa;GACxD,eAAe;GACf;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF,CAAC;EAED,MAAM,eAAe,gBAAiB,KAAa,SAAS,OAAO,YAAY;EAE/E,OACE,oBAACC,aAAD;GACE,GAAI;GACJ,GAAI;GACQ;GACZ,YAAY,SAAS;GACT;GACQ;GACN;GACH;GACD;GACI;GACV;GACJ,QAAQ,OAAO;GACT;GACW;GACV;GACC;GACR,aAAa,SAAS;GACtB,aAAa,eAAe,iBAAiB,MAAM;GACnD,SAAS,aAAa;GACtB,mBAAmB,sBAAsB,eAAe,SAAS,KAAA;GACjE,WAAW,aAAa,oBAAC,MAAD;IAAM,MAAM;IAAY,MAAM;GAAK,CAAA;GACpD;GACC;GACU;GAClB,SAAS,SAAS;GACZ;GACN,eAAe,SAAS;GACxB,qBAAqB,SAAS;GAC9B,WAAW,GAAG,SAAgB;IAC5B,aAAa,MAAM,KAAK,EAAE;IAC1B,SAAU,SAAiB,GAAG,IAAI;GACpC;EACD,CAAA;CAEL;CACA,cAAY,cAAc;CAC1B,OAAOD;AACT"}
@@ -0,0 +1,143 @@
1
+ "use client";
2
+ import Icon from "../../Icon/Icon.mjs";
3
+ import { cx } from "../../utils/styleEngine.mjs";
4
+ import { usePickerLocale } from "./locale.mjs";
5
+ import { PREFIX_CLS } from "./style.mjs";
6
+ import { usePanelKeyboard } from "./usePanelKeyboard.mjs";
7
+ import { usePickerShared, withDefault } from "./usePickerShared.mjs";
8
+ import { usePresetActive } from "./usePresetActive.mjs";
9
+ import { jsx } from "react/jsx-runtime";
10
+ import { X } from "lucide-react";
11
+ import RcPicker from "@rc-component/picker";
12
+ //#region src/base-ui/DatePicker/SinglePicker.tsx
13
+ const defaultRemoveIcon = /* @__PURE__ */ jsx(Icon, {
14
+ icon: X,
15
+ size: 10,
16
+ style: { strokeWidth: 3 }
17
+ });
18
+ /**
19
+ * antd `generateSinglePicker`: DatePicker over `generateConfig`'s date type, plus the
20
+ * pickers whose `picker` is fixed (`DatePicker.WeekPicker`, …, `DatePicker.TimePicker`).
21
+ */
22
+ const generateSinglePicker = (generateConfig) => {
23
+ const getPicker = (presetPicker, displayName = "DatePicker") => {
24
+ const Picker = (props) => {
25
+ const { allowClear, bordered, cellRender, changeOnBlur, className, clearIcon, classNames, components, dateRender, defaultOpen, defaultPickerValue, defaultValue, dropdownClassName, direction, footer, getPopupContainer, locale: localeOverride, max, maxDate, min, minDate, mode, monthCellRender, multiple, needConfirm, nextIcon, onKeyDown, onCalendarChange, onChange, onFocus, onOk, onOpenChange, onPanelChange, onPickerValueChange, onSelect, open, picker: pickerProp, pickerValue, placeholder, popupClassName, popupStyle, prevIcon, ref, removeIcon, renderExtraFooter, rootClassName, shadow, size, status, styles, suffixIcon, superNextIcon, superPrevIcon, transitionName, value, variant, ...rest } = props;
26
+ const picker = presetPicker ?? pickerProp ?? "date";
27
+ const { locale, placeholder: defaultPlaceholder } = usePickerLocale(localeOverride);
28
+ const keyboard = usePanelKeyboard({
29
+ cellRender,
30
+ dateRender,
31
+ defaultOpen,
32
+ defaultPickerValue,
33
+ defaultValue,
34
+ direction,
35
+ generateConfig,
36
+ mode,
37
+ monthCellRender,
38
+ onChange,
39
+ onFocus,
40
+ onOpenChange,
41
+ onPanelChange,
42
+ onPickerValueChange,
43
+ open,
44
+ picker,
45
+ pickerValue,
46
+ value
47
+ });
48
+ const shared = usePickerShared({
49
+ allowClear,
50
+ bordered,
51
+ changeOnBlur,
52
+ className,
53
+ clearIcon,
54
+ classNames,
55
+ components,
56
+ defaultOpen,
57
+ dropdownClassName,
58
+ generateConfig,
59
+ getPopupContainer,
60
+ max,
61
+ maxDate,
62
+ min,
63
+ minDate,
64
+ needConfirm,
65
+ nextIcon,
66
+ onKeyDown,
67
+ onOpenChange: keyboard.onOpenChange,
68
+ open,
69
+ picker,
70
+ popupClassName,
71
+ popupStyle,
72
+ prevIcon,
73
+ rootClassName: cx(keyboard.scopeClassName, rootClassName),
74
+ semanticProps: props,
75
+ shadow,
76
+ size,
77
+ status,
78
+ styles,
79
+ suffixIcon,
80
+ superNextIcon,
81
+ superPrevIcon,
82
+ transitionName,
83
+ variant
84
+ });
85
+ const presetActive = usePresetActive(rest.presets, multiple ? void 0 : value, multiple ? void 0 : defaultValue);
86
+ return /* @__PURE__ */ jsx(RcPicker, {
87
+ ...rest,
88
+ ...shared,
89
+ presets: presetActive.presets,
90
+ cellRender: keyboard.cellRender,
91
+ dateRender,
92
+ defaultPickerValue,
93
+ defaultValue: defaultValue ?? void 0,
94
+ direction,
95
+ locale: locale.lang,
96
+ mode,
97
+ monthCellRender,
98
+ multiple,
99
+ picker,
100
+ pickerValue: keyboard.pickerValue,
101
+ placeholder: placeholder ?? defaultPlaceholder(picker),
102
+ ref,
103
+ removeIcon: withDefault(removeIcon, defaultRemoveIcon),
104
+ renderExtraFooter: renderExtraFooter ?? (footer ? () => footer : void 0),
105
+ showNow: rest.showNow ?? rest.showToday ?? false,
106
+ value,
107
+ classNames: multiple ? {
108
+ ...shared.classNames,
109
+ popup: {
110
+ ...shared.classNames.popup,
111
+ root: cx(shared.classNames.popup.root, `${PREFIX_CLS}-dropdown-multiple`)
112
+ }
113
+ } : shared.classNames,
114
+ onFocus: keyboard.onFocus,
115
+ onOk,
116
+ onPanelChange: keyboard.onPanelChange,
117
+ onPickerValueChange: keyboard.onPickerValueChange,
118
+ onCalendarChange: onCalendarChange || onSelect ? (date, dateString, info) => {
119
+ onCalendarChange?.(date, dateString, info);
120
+ if (date && !Array.isArray(date)) onSelect?.(date);
121
+ } : void 0,
122
+ onChange: (...args) => {
123
+ presetActive.track(args[0]);
124
+ keyboard.onChange(...args);
125
+ }
126
+ });
127
+ };
128
+ Picker.displayName = displayName;
129
+ return Picker;
130
+ };
131
+ return {
132
+ DatePicker: getPicker(),
133
+ MonthPicker: getPicker("month", "MonthPicker"),
134
+ QuarterPicker: getPicker("quarter", "QuarterPicker"),
135
+ TimePicker: getPicker("time", "TimePicker"),
136
+ WeekPicker: getPicker("week", "WeekPicker"),
137
+ YearPicker: getPicker("year", "YearPicker")
138
+ };
139
+ };
140
+ //#endregion
141
+ export { generateSinglePicker as default };
142
+
143
+ //# sourceMappingURL=SinglePicker.mjs.map