@hkyhy/marsun-components-core 0.1.28 → 0.1.29

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.
@@ -6,6 +6,14 @@ interface FilterNumberRangeProps extends BaseFilterProps {
6
6
  unit?: string;
7
7
  minPlaceholder?: string;
8
8
  maxPlaceholder?: string;
9
+ /** 绝对值下限(左右输入框共用) */
10
+ min?: number;
11
+ /** 绝对值上限(左右输入框共用) */
12
+ max?: number;
13
+ /** 小数位数 */
14
+ precision?: number;
15
+ /** 步进;未传且有 precision 时按 10^-precision 推导 */
16
+ step?: number;
9
17
  }
10
18
  declare const FilterNumberRange: React.FC<FilterNumberRangeProps>;
11
19
  export default FilterNumberRange;
@@ -1,81 +1,137 @@
1
- import { jsx as m, jsxs as w } from "react/jsx-runtime";
2
- import { Input as x } from "antd";
3
- import { useState as R, useEffect as F, useMemo as E } from "react";
4
- import H from "../FilterPopover/index.js";
5
- import { useFilterRegister as I } from "../useFilterState.js";
6
- import { resolveHidden as V } from "../types.js";
7
- import u from "./style.module.scss.js";
8
- import N from "classnames";
9
- const G = ({
10
- filterKey: o,
11
- label: n,
1
+ import { jsx as d, jsxs as E } from "react/jsx-runtime";
2
+ import { InputNumber as M, message as q } from "antd";
3
+ import { useState as a, useEffect as $, useMemo as y } from "react";
4
+ import A from "../FilterPopover/index.js";
5
+ import { useFilterRegister as B } from "../useFilterState.js";
6
+ import { resolveHidden as j } from "../types.js";
7
+ import f from "./style.module.scss.js";
8
+ import c from "classnames";
9
+ function w(s, e) {
10
+ return e != null && e >= 0 ? s.toFixed(e) : String(s);
11
+ }
12
+ function D(s, e) {
13
+ if (s != null) return s;
14
+ if (e != null && e >= 0) return 10 ** -e;
15
+ }
16
+ const Z = ({
17
+ filterKey: s,
18
+ label: e,
12
19
  value: r,
13
20
  onChange: t,
14
- unit: d,
15
- minPlaceholder: M = "最低...",
16
- maxPlaceholder: S = "最高...",
17
- active: $,
18
- hidden: c
21
+ unit: u,
22
+ minPlaceholder: z = "最低...",
23
+ maxPlaceholder: T = "最高...",
24
+ min: g,
25
+ max: F,
26
+ precision: n,
27
+ step: H,
28
+ active: I,
29
+ hidden: p
19
30
  }) => {
20
- const [i, p] = R(r == null ? void 0 : r[0]), [s, l] = R(r == null ? void 0 : r[1]), f = I();
21
- F(() => {
22
- p(r == null ? void 0 : r[0]), l(r == null ? void 0 : r[1]);
31
+ const [m, N] = a(r == null ? void 0 : r[0]), [o, x] = a(r == null ? void 0 : r[1]), [S, l] = a(""), V = D(H, n), b = B();
32
+ $(() => {
33
+ N(r == null ? void 0 : r[0]), x(r == null ? void 0 : r[1]), l("");
23
34
  }, [r]);
24
- const b = E(() => {
25
- if (i === void 0 && s === void 0) return "";
26
- const e = i !== void 0 ? String(i) : "—", g = s !== void 0 ? String(s) : "—";
27
- return `${e} ~ ${g}${d ?? ""}`;
28
- }, [i, s, d]);
29
- if (F(() => {
30
- if (f) {
31
- if (V(c)) {
32
- f.unregister(o);
35
+ const R = y(() => {
36
+ if (m === void 0 && o === void 0) return "";
37
+ const i = m !== void 0 ? w(m, n) : "—", k = o !== void 0 ? w(o, n) : "—";
38
+ return `${i} ~ ${k}${u ?? ""}`;
39
+ }, [m, o, u, n]);
40
+ if ($(() => {
41
+ if (b) {
42
+ if (j(p)) {
43
+ b.unregister(s);
33
44
  return;
34
45
  }
35
- b ? f.register(o, { label: n, valueLabel: b, onRemove: () => t == null ? void 0 : t(null) }) : f.unregister(o);
46
+ R ? b.register(s, { label: e, valueLabel: R, onRemove: () => t == null ? void 0 : t(null) }) : b.unregister(s);
36
47
  }
37
- }, [b, o, n, c]), V(c)) return null;
38
- const j = () => {
39
- i !== void 0 || s !== void 0 ? t == null || t([i, s]) : t == null || t(null);
40
- }, z = () => {
41
- p(void 0), l(void 0), t == null || t(null);
48
+ }, [R, s, e, p]), j(p)) return null;
49
+ const L = () => {
50
+ if (m !== void 0 && o !== void 0 && m > o) {
51
+ const i = "最小值不能大于最大值";
52
+ return l(i), q.warning(i), !1;
53
+ }
54
+ l(""), m !== void 0 || o !== void 0 ? t == null || t([m, o]) : t == null || t(null);
55
+ }, P = () => {
56
+ N(void 0), x(void 0), l(""), t == null || t(null);
42
57
  };
43
- return /* @__PURE__ */ m(
44
- H,
58
+ return /* @__PURE__ */ d(
59
+ A,
45
60
  {
46
- label: n,
47
- active: $ || !!(r != null && r[0]) || !!(r != null && r[1]),
48
- onConfirm: j,
49
- onReset: z,
61
+ label: e,
62
+ active: I || !!(r != null && r[0]) || !!(r != null && r[1]),
63
+ onConfirm: L,
64
+ onReset: P,
50
65
  width: 380,
51
- children: /* @__PURE__ */ w("div", { className: N("filter-number-range-inputs", u["filter-number-range-inputs"]), children: [
52
- /* @__PURE__ */ m(
53
- x,
66
+ children: /* @__PURE__ */ E("div", { className: c("filter-number-range-body", f["filter-number-range-body"]), children: [
67
+ /* @__PURE__ */ E(
68
+ "div",
54
69
  {
55
- size: "middle",
56
- placeholder: M,
57
- type: "number",
58
- value: i,
59
- onChange: (e) => p(e.target.value ? Number(e.target.value) : void 0)
70
+ className: c("filter-number-range-inputs", f["filter-number-range-inputs"]),
71
+ children: [
72
+ /* @__PURE__ */ d(
73
+ M,
74
+ {
75
+ size: "middle",
76
+ placeholder: z,
77
+ value: m,
78
+ min: g,
79
+ max: F,
80
+ precision: n,
81
+ step: V,
82
+ onChange: (i) => {
83
+ N(i === null ? void 0 : i), l("");
84
+ }
85
+ }
86
+ ),
87
+ /* @__PURE__ */ d(
88
+ "span",
89
+ {
90
+ className: c(
91
+ "filter-number-range-separator",
92
+ f["filter-number-range-separator"]
93
+ ),
94
+ children: "-"
95
+ }
96
+ ),
97
+ /* @__PURE__ */ d(
98
+ M,
99
+ {
100
+ size: "middle",
101
+ placeholder: T,
102
+ value: o,
103
+ min: g,
104
+ max: F,
105
+ precision: n,
106
+ step: V,
107
+ onChange: (i) => {
108
+ x(i === null ? void 0 : i), l("");
109
+ }
110
+ }
111
+ ),
112
+ u ? /* @__PURE__ */ d(
113
+ "span",
114
+ {
115
+ className: c("filter-number-range-unit", f["filter-number-range-unit"]),
116
+ children: u
117
+ }
118
+ ) : null
119
+ ]
60
120
  }
61
121
  ),
62
- /* @__PURE__ */ m("span", { className: N("filter-number-range-separator", u["filter-number-range-separator"]), children: "-" }),
63
- /* @__PURE__ */ m(
64
- x,
122
+ S ? /* @__PURE__ */ d(
123
+ "div",
65
124
  {
66
- size: "middle",
67
- placeholder: S,
68
- type: "number",
69
- value: s,
70
- onChange: (e) => l(e.target.value ? Number(e.target.value) : void 0)
125
+ className: c("filter-number-range-error", f["filter-number-range-error"]),
126
+ role: "alert",
127
+ children: S
71
128
  }
72
- ),
73
- d && /* @__PURE__ */ m("span", { className: N("filter-number-range-unit", u["filter-number-range-unit"]), children: d })
129
+ ) : null
74
130
  ] })
75
131
  }
76
132
  );
77
133
  };
78
134
  export {
79
- G as default
135
+ Z as default
80
136
  };
81
137
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/components/Filter/FilterNumberRange/index.tsx"],"sourcesContent":["import { Input } from 'antd';\nimport React, { useEffect, useMemo, useState } from 'react';\nimport FilterPopover from '../FilterPopover';\nimport { useFilterRegister } from '../useFilterState';\nimport type { BaseFilterProps } from '../types';\nimport { resolveHidden } from '../types';\nimport styles from './style.module.scss';\nimport classNames from 'classnames';\n\ninterface FilterNumberRangeProps extends BaseFilterProps {\n value?: [number | undefined, number | undefined] | null;\n onChange?: (value: [number | undefined, number | undefined] | null) => void;\n unit?: string;\n minPlaceholder?: string;\n maxPlaceholder?: string;\n}\n\nconst FilterNumberRange: React.FC<FilterNumberRangeProps> = ({\n filterKey,\n label,\n value,\n onChange,\n unit,\n minPlaceholder = '最低...',\n maxPlaceholder = '最高...',\n active,\n hidden,\n}) => {\n const [minVal, setMinVal] = useState<number | undefined>(value?.[0]);\n const [maxVal, setMaxVal] = useState<number | undefined>(value?.[1]);\n\n // ── 自动注册到 CommonFilter ──\n const registerFn = useFilterRegister();\n\n // 同步外部 value 到内部 minVal/maxVal\n useEffect(() => {\n setMinVal(value?.[0]);\n setMaxVal(value?.[1]);\n }, [value]);\n\n const valueLabel = useMemo(() => {\n if (minVal === undefined && maxVal === undefined) return '';\n const min = minVal !== undefined ? String(minVal) : '—';\n const max = maxVal !== undefined ? String(maxVal) : '—';\n return `${min} ~ ${max}${unit ?? ''}`;\n }, [minVal, maxVal, unit]);\n\n useEffect(() => {\n if (!registerFn) return;\n if (resolveHidden(hidden)) {\n registerFn.unregister(filterKey);\n return;\n }\n if (valueLabel) {\n registerFn.register(filterKey, { label, valueLabel, onRemove: () => onChange?.(null) });\n } else {\n registerFn.unregister(filterKey);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [valueLabel, filterKey, label, hidden]);\n\n // hidden 处理 - 必须在所有 hooks 之后\n if (resolveHidden(hidden)) return null;\n\n const handleConfirm = () => {\n if (minVal !== undefined || maxVal !== undefined) {\n onChange?.([minVal, maxVal]);\n } else {\n onChange?.(null);\n }\n };\n\n const handleReset = () => {\n setMinVal(undefined);\n setMaxVal(undefined);\n onChange?.(null);\n };\n\n return (\n <FilterPopover\n label={label}\n active={active || !!value?.[0] || !!value?.[1]}\n onConfirm={handleConfirm}\n onReset={handleReset}\n width={380}\n >\n <div className={classNames('filter-number-range-inputs', styles['filter-number-range-inputs'])}>\n <Input\n size=\"middle\"\n placeholder={minPlaceholder}\n type=\"number\"\n value={minVal}\n onChange={(e) => setMinVal(e.target.value ? Number(e.target.value) : undefined)}\n />\n <span className={classNames('filter-number-range-separator', styles['filter-number-range-separator'])}>-</span>\n <Input\n size=\"middle\"\n placeholder={maxPlaceholder}\n type=\"number\"\n value={maxVal}\n onChange={(e) => setMaxVal(e.target.value ? Number(e.target.value) : undefined)}\n />\n {unit && <span className={classNames('filter-number-range-unit', styles['filter-number-range-unit'])}>{unit}</span>}\n </div>\n </FilterPopover>\n );\n};\n\nexport default FilterNumberRange;\nexport type { FilterNumberRangeProps };\n"],"names":["FilterNumberRange","filterKey","label","value","onChange","unit","minPlaceholder","maxPlaceholder","active","hidden","minVal","setMinVal","useState","maxVal","setMaxVal","registerFn","useFilterRegister","useEffect","valueLabel","useMemo","min","max","resolveHidden","handleConfirm","handleReset","jsx","FilterPopover","jsxs","classNames","styles","Input"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../src/components/Filter/FilterNumberRange/index.tsx"],"sourcesContent":["import { InputNumber, message } from 'antd';\nimport React, { useEffect, useMemo, useState } from 'react';\nimport FilterPopover from '../FilterPopover';\nimport { useFilterRegister } from '../useFilterState';\nimport type { BaseFilterProps } from '../types';\nimport { resolveHidden } from '../types';\nimport styles from './style.module.scss';\nimport classNames from 'classnames';\n\ninterface FilterNumberRangeProps extends BaseFilterProps {\n value?: [number | undefined, number | undefined] | null;\n onChange?: (value: [number | undefined, number | undefined] | null) => void;\n unit?: string;\n minPlaceholder?: string;\n maxPlaceholder?: string;\n /** 绝对值下限(左右输入框共用) */\n min?: number;\n /** 绝对值上限(左右输入框共用) */\n max?: number;\n /** 小数位数 */\n precision?: number;\n /** 步进;未传且有 precision 时按 10^-precision 推导 */\n step?: number;\n}\n\nfunction formatNumber(n: number, precision?: number): string {\n if (precision != null && precision >= 0) return n.toFixed(precision);\n return String(n);\n}\n\nfunction resolveStep(step: number | undefined, precision: number | undefined): number | undefined {\n if (step != null) return step;\n if (precision != null && precision >= 0) return 10 ** -precision;\n return undefined;\n}\n\nconst FilterNumberRange: React.FC<FilterNumberRangeProps> = ({\n filterKey,\n label,\n value,\n onChange,\n unit,\n minPlaceholder = '最低...',\n maxPlaceholder = '最高...',\n min,\n max,\n precision,\n step,\n active,\n hidden,\n}) => {\n const [minVal, setMinVal] = useState<number | undefined>(value?.[0]);\n const [maxVal, setMaxVal] = useState<number | undefined>(value?.[1]);\n const [rangeError, setRangeError] = useState('');\n\n const resolvedStep = resolveStep(step, precision);\n\n // ── 自动注册到 CommonFilter ──\n const registerFn = useFilterRegister();\n\n // 同步外部 value 到内部 minVal/maxVal\n useEffect(() => {\n setMinVal(value?.[0]);\n setMaxVal(value?.[1]);\n setRangeError('');\n }, [value]);\n\n const valueLabel = useMemo(() => {\n if (minVal === undefined && maxVal === undefined) return '';\n const minText = minVal !== undefined ? formatNumber(minVal, precision) : '—';\n const maxText = maxVal !== undefined ? formatNumber(maxVal, precision) : '—';\n return `${minText} ~ ${maxText}${unit ?? ''}`;\n }, [minVal, maxVal, unit, precision]);\n\n useEffect(() => {\n if (!registerFn) return;\n if (resolveHidden(hidden)) {\n registerFn.unregister(filterKey);\n return;\n }\n if (valueLabel) {\n registerFn.register(filterKey, { label, valueLabel, onRemove: () => onChange?.(null) });\n } else {\n registerFn.unregister(filterKey);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [valueLabel, filterKey, label, hidden]);\n\n // hidden 处理 - 必须在所有 hooks 之后\n if (resolveHidden(hidden)) return null;\n\n const handleConfirm = (): boolean | void => {\n if (minVal !== undefined && maxVal !== undefined && minVal > maxVal) {\n const msg = '最小值不能大于最大值';\n setRangeError(msg);\n message.warning(msg);\n return false;\n }\n setRangeError('');\n if (minVal !== undefined || maxVal !== undefined) {\n onChange?.([minVal, maxVal]);\n } else {\n onChange?.(null);\n }\n };\n\n const handleReset = () => {\n setMinVal(undefined);\n setMaxVal(undefined);\n setRangeError('');\n onChange?.(null);\n };\n\n return (\n <FilterPopover\n label={label}\n active={active || !!value?.[0] || !!value?.[1]}\n onConfirm={handleConfirm}\n onReset={handleReset}\n width={380}\n >\n <div className={classNames('filter-number-range-body', styles['filter-number-range-body'])}>\n <div\n className={classNames('filter-number-range-inputs', styles['filter-number-range-inputs'])}\n >\n <InputNumber\n size=\"middle\"\n placeholder={minPlaceholder}\n value={minVal}\n min={min}\n max={max}\n precision={precision}\n step={resolvedStep}\n onChange={(v) => {\n setMinVal(v === null ? undefined : v);\n setRangeError('');\n }}\n />\n <span\n className={classNames(\n 'filter-number-range-separator',\n styles['filter-number-range-separator'],\n )}\n >\n -\n </span>\n <InputNumber\n size=\"middle\"\n placeholder={maxPlaceholder}\n value={maxVal}\n min={min}\n max={max}\n precision={precision}\n step={resolvedStep}\n onChange={(v) => {\n setMaxVal(v === null ? undefined : v);\n setRangeError('');\n }}\n />\n {unit ? (\n <span\n className={classNames('filter-number-range-unit', styles['filter-number-range-unit'])}\n >\n {unit}\n </span>\n ) : null}\n </div>\n {rangeError ? (\n <div\n className={classNames('filter-number-range-error', styles['filter-number-range-error'])}\n role=\"alert\"\n >\n {rangeError}\n </div>\n ) : null}\n </div>\n </FilterPopover>\n );\n};\n\nexport default FilterNumberRange;\nexport type { FilterNumberRangeProps };\n"],"names":["formatNumber","n","precision","resolveStep","step","FilterNumberRange","filterKey","label","value","onChange","unit","minPlaceholder","maxPlaceholder","min","max","active","hidden","minVal","setMinVal","useState","maxVal","setMaxVal","rangeError","setRangeError","resolvedStep","registerFn","useFilterRegister","useEffect","valueLabel","useMemo","minText","maxText","resolveHidden","handleConfirm","msg","message","handleReset","jsx","FilterPopover","jsxs","classNames","styles","InputNumber","v"],"mappings":"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"}
@@ -1,9 +1,11 @@
1
- const e = {
2
- "filter-number-range-inputs": "_filter-number-range-inputs_y3pfu_1",
3
- "filter-number-range-separator": "_filter-number-range-separator_y3pfu_7",
4
- "filter-number-range-unit": "_filter-number-range-unit_y3pfu_11"
1
+ const r = {
2
+ "filter-number-range-body": "_filter-number-range-body_hv0kp_1",
3
+ "filter-number-range-inputs": "_filter-number-range-inputs_hv0kp_7",
4
+ "filter-number-range-separator": "_filter-number-range-separator_hv0kp_13",
5
+ "filter-number-range-unit": "_filter-number-range-unit_hv0kp_17",
6
+ "filter-number-range-error": "_filter-number-range-error_hv0kp_22"
5
7
  };
6
8
  export {
7
- e as default
9
+ r as default
8
10
  };
9
11
  //# sourceMappingURL=style.module.scss.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"style.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;"}
1
+ {"version":3,"file":"style.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;"}
@@ -14,8 +14,8 @@ interface FilterPopoverProps {
14
14
  open?: boolean;
15
15
  /** 打开状态变更回调 */
16
16
  onOpenChange?: (open: boolean) => void;
17
- /** 确认回调(不传则无确定/取消按钮) */
18
- onConfirm?: () => void;
17
+ /** 确认回调(不传则无确定/取消按钮);返回 `false` 时不关闭弹层 */
18
+ onConfirm?: () => void | boolean;
19
19
  /** 取消回调 */
20
20
  onReset?: () => void;
21
21
  }
@@ -4,8 +4,8 @@ import { useState as h } from "react";
4
4
  import v from "../FilterPanel/index.js";
5
5
  import x from "../FilterTrigger/index.js";
6
6
  const I = ({
7
- label: p,
8
- active: a,
7
+ label: a,
8
+ active: p,
9
9
  width: i,
10
10
  confirmText: d = "确定",
11
11
  children: c,
@@ -14,13 +14,13 @@ const I = ({
14
14
  onConfirm: t,
15
15
  onReset: e
16
16
  }) => {
17
- const [f, u] = h(!1), s = m ?? f, o = (n) => {
18
- u(n), l == null || l(n);
17
+ const [f, u] = h(!1), n = m ?? f, o = (s) => {
18
+ u(s), l == null || l(s);
19
19
  };
20
20
  return /* @__PURE__ */ r(
21
21
  y,
22
22
  {
23
- open: s,
23
+ open: n,
24
24
  onOpenChange: o,
25
25
  trigger: "click",
26
26
  placement: "bottomLeft",
@@ -32,7 +32,7 @@ const I = ({
32
32
  v,
33
33
  {
34
34
  onConfirm: t ? () => {
35
- t == null || t(), o(!1);
35
+ (t == null ? void 0 : t()) !== !1 && o(!1);
36
36
  } : void 0,
37
37
  onReset: e ? () => {
38
38
  e == null || e(), o(!1);
@@ -42,7 +42,7 @@ const I = ({
42
42
  children: c
43
43
  }
44
44
  ),
45
- children: /* @__PURE__ */ r("span", { style: { display: "inline-flex" }, children: /* @__PURE__ */ r(x, { label: p, active: a, open: s }) })
45
+ children: /* @__PURE__ */ r("span", { style: { display: "inline-flex" }, children: /* @__PURE__ */ r(x, { label: a, active: p, open: n }) })
46
46
  }
47
47
  );
48
48
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/components/Filter/FilterPopover/index.tsx"],"sourcesContent":["import { Popover } from 'antd';\nimport React, { useState } from 'react';\nimport FilterPanel from '../FilterPanel';\nimport FilterTrigger from '../FilterTrigger';\n\ninterface FilterPopoverProps {\n /** 筛选项标签 */\n label: string;\n /** 是否有值(控制选中态样式) */\n active?: boolean;\n /** 面板宽度 */\n width?: number;\n /** 确定按钮文字 */\n confirmText?: string;\n /** 面板内容 */\n children: React.ReactNode;\n /** 受控打开状态(传入则由外部控制) */\n open?: boolean;\n /** 打开状态变更回调 */\n onOpenChange?: (open: boolean) => void;\n /** 确认回调(不传则无确定/取消按钮) */\n onConfirm?: () => void;\n /** 取消回调 */\n onReset?: () => void;\n}\n\nconst FilterPopover: React.FC<FilterPopoverProps> = ({\n label,\n active,\n width,\n confirmText = '确定',\n children,\n open: controlledOpen,\n onOpenChange,\n onConfirm,\n onReset,\n}) => {\n const [internalOpen, setInternalOpen] = useState(false);\n const open = controlledOpen ?? internalOpen;\n\n const setOpen = (value: boolean) => {\n setInternalOpen(value);\n onOpenChange?.(value);\n };\n\n const handleConfirm = () => {\n onConfirm?.();\n setOpen(false);\n };\n\n const handleReset = () => {\n onReset?.();\n setOpen(false);\n };\n\n return (\n <Popover\n open={open}\n onOpenChange={setOpen}\n trigger=\"click\"\n placement=\"bottomLeft\"\n destroyOnHidden\n classNames={{ root: 'filter-popover-panel' }}\n styles={{ content: { maxWidth: width || 300, padding: 0 } }}\n getPopupContainer={() => document.body}\n content={\n <FilterPanel\n onConfirm={onConfirm ? handleConfirm : undefined}\n onReset={onReset ? handleReset : undefined}\n confirmText={confirmText}\n width={width || 300}\n >\n {children}\n </FilterPanel>\n }\n >\n <span style={{ display: 'inline-flex' }}>\n <FilterTrigger label={label} active={active} open={open} />\n </span>\n </Popover>\n );\n};\n\nexport default FilterPopover;\nexport type { FilterPopoverProps };\n"],"names":["FilterPopover","label","active","width","confirmText","children","controlledOpen","onOpenChange","onConfirm","onReset","internalOpen","setInternalOpen","useState","open","setOpen","value","jsx","Popover","FilterPanel","FilterTrigger"],"mappings":";;;;;AA0BA,MAAMA,IAA8C,CAAC;AAAA,EACnD,OAAAC;AAAA,EACA,QAAAC;AAAA,EACA,OAAAC;AAAA,EACA,aAAAC,IAAc;AAAA,EACd,UAAAC;AAAA,EACA,MAAMC;AAAA,EACN,cAAAC;AAAA,EACA,WAAAC;AAAA,EACA,SAAAC;AACF,MAAM;AACJ,QAAM,CAACC,GAAcC,CAAe,IAAIC,EAAS,EAAK,GAChDC,IAAOP,KAAkBI,GAEzBI,IAAU,CAACC,MAAmB;AAClC,IAAAJ,EAAgBI,CAAK,GACrBR,KAAA,QAAAA,EAAeQ;AAAA,EACjB;AAYA,SACE,gBAAAC;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,MAAAJ;AAAA,MACA,cAAcC;AAAA,MACd,SAAQ;AAAA,MACR,WAAU;AAAA,MACV,iBAAe;AAAA,MACf,YAAY,EAAE,MAAM,uBAAA;AAAA,MACpB,QAAQ,EAAE,SAAS,EAAE,UAAUX,KAAS,KAAK,SAAS,IAAE;AAAA,MACxD,mBAAmB,MAAM,SAAS;AAAA,MAClC,SACE,gBAAAa;AAAA,QAACE;AAAA,QAAA;AAAA,UACC,WAAWV,IAtBG,MAAM;AAC1B,YAAAA,KAAA,QAAAA,KACAM,EAAQ,EAAK;AAAA,UACf,IAmB+C;AAAA,UACvC,SAASL,IAlBG,MAAM;AACxB,YAAAA,KAAA,QAAAA,KACAK,EAAQ,EAAK;AAAA,UACf,IAeyC;AAAA,UACjC,aAAAV;AAAA,UACA,OAAOD,KAAS;AAAA,UAEf,UAAAE;AAAA,QAAA;AAAA,MAAA;AAAA,MAIL,UAAA,gBAAAW,EAAC,QAAA,EAAK,OAAO,EAAE,SAAS,cAAA,GACtB,UAAA,gBAAAA,EAACG,GAAA,EAAc,OAAAlB,GAAc,QAAAC,GAAgB,MAAAW,EAAA,CAAY,EAAA,CAC3D;AAAA,IAAA;AAAA,EAAA;AAGN;"}
1
+ {"version":3,"file":"index.js","sources":["../../../../src/components/Filter/FilterPopover/index.tsx"],"sourcesContent":["import { Popover } from 'antd';\nimport React, { useState } from 'react';\nimport FilterPanel from '../FilterPanel';\nimport FilterTrigger from '../FilterTrigger';\n\ninterface FilterPopoverProps {\n /** 筛选项标签 */\n label: string;\n /** 是否有值(控制选中态样式) */\n active?: boolean;\n /** 面板宽度 */\n width?: number;\n /** 确定按钮文字 */\n confirmText?: string;\n /** 面板内容 */\n children: React.ReactNode;\n /** 受控打开状态(传入则由外部控制) */\n open?: boolean;\n /** 打开状态变更回调 */\n onOpenChange?: (open: boolean) => void;\n /** 确认回调(不传则无确定/取消按钮);返回 `false` 时不关闭弹层 */\n onConfirm?: () => void | boolean;\n /** 取消回调 */\n onReset?: () => void;\n}\n\nconst FilterPopover: React.FC<FilterPopoverProps> = ({\n label,\n active,\n width,\n confirmText = '确定',\n children,\n open: controlledOpen,\n onOpenChange,\n onConfirm,\n onReset,\n}) => {\n const [internalOpen, setInternalOpen] = useState(false);\n const open = controlledOpen ?? internalOpen;\n\n const setOpen = (value: boolean) => {\n setInternalOpen(value);\n onOpenChange?.(value);\n };\n\n const handleConfirm = () => {\n const result = onConfirm?.();\n if (result === false) return;\n setOpen(false);\n };\n\n const handleReset = () => {\n onReset?.();\n setOpen(false);\n };\n\n return (\n <Popover\n open={open}\n onOpenChange={setOpen}\n trigger=\"click\"\n placement=\"bottomLeft\"\n destroyOnHidden\n classNames={{ root: 'filter-popover-panel' }}\n styles={{ content: { maxWidth: width || 300, padding: 0 } }}\n getPopupContainer={() => document.body}\n content={\n <FilterPanel\n onConfirm={onConfirm ? handleConfirm : undefined}\n onReset={onReset ? handleReset : undefined}\n confirmText={confirmText}\n width={width || 300}\n >\n {children}\n </FilterPanel>\n }\n >\n <span style={{ display: 'inline-flex' }}>\n <FilterTrigger label={label} active={active} open={open} />\n </span>\n </Popover>\n );\n};\n\nexport default FilterPopover;\nexport type { FilterPopoverProps };\n"],"names":["FilterPopover","label","active","width","confirmText","children","controlledOpen","onOpenChange","onConfirm","onReset","internalOpen","setInternalOpen","useState","open","setOpen","value","jsx","Popover","FilterPanel","FilterTrigger"],"mappings":";;;;;AA0BA,MAAMA,IAA8C,CAAC;AAAA,EACnD,OAAAC;AAAA,EACA,QAAAC;AAAA,EACA,OAAAC;AAAA,EACA,aAAAC,IAAc;AAAA,EACd,UAAAC;AAAA,EACA,MAAMC;AAAA,EACN,cAAAC;AAAA,EACA,WAAAC;AAAA,EACA,SAAAC;AACF,MAAM;AACJ,QAAM,CAACC,GAAcC,CAAe,IAAIC,EAAS,EAAK,GAChDC,IAAOP,KAAkBI,GAEzBI,IAAU,CAACC,MAAmB;AAClC,IAAAJ,EAAgBI,CAAK,GACrBR,KAAA,QAAAA,EAAeQ;AAAA,EACjB;AAaA,SACE,gBAAAC;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,MAAAJ;AAAA,MACA,cAAcC;AAAA,MACd,SAAQ;AAAA,MACR,WAAU;AAAA,MACV,iBAAe;AAAA,MACf,YAAY,EAAE,MAAM,uBAAA;AAAA,MACpB,QAAQ,EAAE,SAAS,EAAE,UAAUX,KAAS,KAAK,SAAS,IAAE;AAAA,MACxD,mBAAmB,MAAM,SAAS;AAAA,MAClC,SACE,gBAAAa;AAAA,QAACE;AAAA,QAAA;AAAA,UACC,WAAWV,IAvBG,MAAM;AAE1B,aADeA,KAAA,gBAAAA,SACA,MACfM,EAAQ,EAAK;AAAA,UACf,IAmB+C;AAAA,UACvC,SAASL,IAlBG,MAAM;AACxB,YAAAA,KAAA,QAAAA,KACAK,EAAQ,EAAK;AAAA,UACf,IAeyC;AAAA,UACjC,aAAAV;AAAA,UACA,OAAOD,KAAS;AAAA,UAEf,UAAAE;AAAA,QAAA;AAAA,MAAA;AAAA,MAIL,UAAA,gBAAAW,EAAC,QAAA,EAAK,OAAO,EAAE,SAAS,cAAA,GACtB,UAAA,gBAAAA,EAACG,GAAA,EAAc,OAAAlB,GAAc,QAAAC,GAAgB,MAAAW,EAAA,CAAY,EAAA,CAC3D;AAAA,IAAA;AAAA,EAAA;AAGN;"}