@hkyhy/marsun-components-core 0.1.21 → 0.1.24
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/dist/components/AgentHub/Chat/Detail/ChatAgentFab/style.module.scss.js +9 -9
- package/dist/components/AgentHub/Chat/utils/index.d.ts +2 -0
- package/dist/components/AgentHub/Chat/utils/smoothScroll.js +51 -0
- package/dist/components/AgentHub/Chat/utils/smoothScroll.js.map +1 -0
- package/dist/components/Empty/Empty.d.ts +16 -0
- package/dist/components/Empty/Empty.js +33 -0
- package/dist/components/Empty/Empty.js.map +1 -0
- package/dist/components/Empty/index.d.ts +2 -0
- package/dist/components/Empty/style.module.scss.js +7 -0
- package/dist/components/Empty/style.module.scss.js.map +1 -0
- package/dist/components/File/FilePreview/FilePreviewContent.js +11 -12
- package/dist/components/File/FilePreview/FilePreviewContent.js.map +1 -1
- package/dist/components/Filter/FilterDatePicker/index.d.ts +31 -0
- package/dist/components/Filter/FilterDatePicker/index.js +128 -0
- package/dist/components/Filter/FilterDatePicker/index.js.map +1 -0
- package/dist/components/Filter/FilterDatePicker/style.module.scss.js +10 -0
- package/dist/components/Filter/FilterDatePicker/style.module.scss.js.map +1 -0
- package/dist/components/Filter/FilterDateRange/index.d.ts +7 -2
- package/dist/components/Filter/FilterDateRange/index.js +96 -68
- package/dist/components/Filter/FilterDateRange/index.js.map +1 -1
- package/dist/components/Filter/index.d.ts +3 -0
- package/dist/components/Form/index.d.ts +6 -0
- package/dist/components/Form/kneFormInfo.d.ts +47 -0
- package/dist/components/Form/kneFormInfo.js +23 -0
- package/dist/components/Form/kneFormInfo.js.map +1 -0
- package/dist/components/Form/kneReactForm.d.ts +8 -0
- package/dist/components/Layout/PageSpin/index.js +5 -5
- package/dist/components/Layout/PageSpin/index.js.map +1 -1
- package/dist/components/TooltipInfo/TooltipInfo.js +11 -10
- package/dist/components/TooltipInfo/TooltipInfo.js.map +1 -1
- package/dist/components/index.d.ts +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +426 -374
- package/dist/index.js.map +1 -1
- package/dist/marsun-components-core.css +1 -1
- package/dist/styles/global.css +1 -1
- package/dist/theme/theme.js +9 -9
- package/dist/theme/theme.js.map +1 -1
- package/dist/theme/tokens.css +12 -0
- package/dist/utils/pickerDate.d.ts +9 -0
- package/dist/utils/pickerDate.js +33 -0
- package/dist/utils/pickerDate.js.map +1 -0
- package/package.json +4 -1
|
@@ -1,120 +1,147 @@
|
|
|
1
|
-
import { jsxs as
|
|
2
|
-
import { DatePicker as
|
|
3
|
-
import
|
|
4
|
-
import { useState as
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
import {
|
|
8
|
-
import
|
|
9
|
-
import
|
|
10
|
-
|
|
1
|
+
import { jsxs as _, jsx as a } from "react/jsx-runtime";
|
|
2
|
+
import { DatePicker as B } from "antd";
|
|
3
|
+
import d from "dayjs";
|
|
4
|
+
import { useState as g, useMemo as I, useEffect as j } from "react";
|
|
5
|
+
import { parsePickerValue as f, formatPickerValue as x } from "../../../utils/pickerDate.js";
|
|
6
|
+
import L from "../FilterPopover/index.js";
|
|
7
|
+
import { resolveHidden as A } from "../types.js";
|
|
8
|
+
import { useFilterRegister as U } from "../useFilterState.js";
|
|
9
|
+
import V from "./style.module.scss.js";
|
|
10
|
+
import P from "classnames";
|
|
11
|
+
const { RangePicker: W } = B, $ = [
|
|
11
12
|
{
|
|
12
13
|
key: "lastWeek",
|
|
13
14
|
label: "上周",
|
|
14
15
|
getValue: () => [
|
|
15
|
-
|
|
16
|
-
|
|
16
|
+
d().subtract(1, "week").startOf("week"),
|
|
17
|
+
d().subtract(1, "week").endOf("week")
|
|
17
18
|
]
|
|
18
19
|
},
|
|
19
20
|
{
|
|
20
21
|
key: "thisWeek",
|
|
21
22
|
label: "本周",
|
|
22
|
-
getValue: () => [
|
|
23
|
+
getValue: () => [d().startOf("week"), d().endOf("week")]
|
|
23
24
|
}
|
|
24
25
|
];
|
|
25
|
-
function
|
|
26
|
+
function E() {
|
|
27
|
+
const e = d().startOf("month");
|
|
28
|
+
return [
|
|
29
|
+
{ key: "1m", label: "近1月", getValue: () => [e, e] },
|
|
30
|
+
{
|
|
31
|
+
key: "3m",
|
|
32
|
+
label: "近3月",
|
|
33
|
+
getValue: () => [e.subtract(2, "month"), e]
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
key: "6m",
|
|
37
|
+
label: "近6月",
|
|
38
|
+
getValue: () => [e.subtract(5, "month"), e]
|
|
39
|
+
}
|
|
40
|
+
];
|
|
41
|
+
}
|
|
42
|
+
function H(e, r) {
|
|
26
43
|
return !(e != null && e[0]) || !(e != null && e[1]) ? !(r != null && r[0]) || !(r != null && r[1]) : !(r != null && r[0]) || !(r != null && r[1]) ? !1 : e[0] === r[0] && e[1] === r[1];
|
|
27
44
|
}
|
|
28
|
-
function
|
|
45
|
+
function K(e) {
|
|
46
|
+
return e === "month" ? "month" : e === "year" ? "year" : "day";
|
|
47
|
+
}
|
|
48
|
+
function Y(e, r, t) {
|
|
29
49
|
if (!(e != null && e[0]) || !(e != null && e[1])) return null;
|
|
30
|
-
const
|
|
31
|
-
for (const
|
|
32
|
-
const
|
|
33
|
-
if (
|
|
34
|
-
return
|
|
50
|
+
const i = f(e[0], t), n = f(e[1], t), k = K(t);
|
|
51
|
+
for (const y of r) {
|
|
52
|
+
const c = y.getValue();
|
|
53
|
+
if (c && c[0].isSame(i, k) && c[1].isSame(n, k))
|
|
54
|
+
return y.key;
|
|
35
55
|
}
|
|
36
56
|
return null;
|
|
37
57
|
}
|
|
38
|
-
const
|
|
58
|
+
const it = ({
|
|
39
59
|
filterKey: e,
|
|
40
60
|
label: r,
|
|
41
61
|
value: t,
|
|
42
|
-
onChange:
|
|
62
|
+
onChange: i,
|
|
63
|
+
picker: n = "date",
|
|
43
64
|
defaultValue: k,
|
|
44
|
-
showDefaultAsSelected:
|
|
45
|
-
showQuickOptions:
|
|
46
|
-
quickOptions:
|
|
47
|
-
|
|
48
|
-
|
|
65
|
+
showDefaultAsSelected: y = !1,
|
|
66
|
+
showQuickOptions: c = !0,
|
|
67
|
+
quickOptions: R,
|
|
68
|
+
disabledDate: M,
|
|
69
|
+
active: Q,
|
|
70
|
+
hidden: p
|
|
49
71
|
}) => {
|
|
50
|
-
const [
|
|
51
|
-
t ? [
|
|
52
|
-
), [
|
|
53
|
-
|
|
72
|
+
const [T, D] = g(!1), [o, m] = g(
|
|
73
|
+
t ? [f(t[0], n), f(t[1], n)] : null
|
|
74
|
+
), [q, l] = g(null), u = U(), O = I(
|
|
75
|
+
() => R ?? (c ? n === "month" ? E() : $ : []),
|
|
76
|
+
[R, c, n]
|
|
77
|
+
), w = (s) => {
|
|
78
|
+
l(Y(s, O, n));
|
|
54
79
|
}, S = () => {
|
|
55
|
-
t != null && t[0] && (t != null && t[1]) ? (
|
|
80
|
+
t != null && t[0] && (t != null && t[1]) ? (m([f(t[0], n), f(t[1], n)]), w(t)) : (m(null), l(null));
|
|
56
81
|
};
|
|
57
|
-
|
|
58
|
-
t != null && t[0] && (t != null && t[1]) ? (
|
|
59
|
-
}, [t,
|
|
60
|
-
const
|
|
61
|
-
return
|
|
62
|
-
if (
|
|
63
|
-
if (
|
|
64
|
-
|
|
82
|
+
j(() => {
|
|
83
|
+
t != null && t[0] && (t != null && t[1]) ? (m([f(t[0], n), f(t[1], n)]), w(t)) : (m(null), l(null));
|
|
84
|
+
}, [t, O, n]);
|
|
85
|
+
const h = y ? !!(t != null && t[0]) : !!(t != null && t[0]) && !H(t, k), N = I(() => !h || !(t != null && t[0]) || !(t != null && t[1]) ? "" : `${t[0]} ~ ${t[1]}`, [h, t]);
|
|
86
|
+
return j(() => {
|
|
87
|
+
if (u) {
|
|
88
|
+
if (A(p)) {
|
|
89
|
+
u.unregister(e);
|
|
65
90
|
return;
|
|
66
91
|
}
|
|
67
|
-
|
|
92
|
+
N ? u.register(e, { label: r, valueLabel: N, onRemove: () => i == null ? void 0 : i(null) }) : u.unregister(e);
|
|
68
93
|
}
|
|
69
|
-
}, [
|
|
70
|
-
|
|
94
|
+
}, [N, e, r, p]), A(p) ? null : /* @__PURE__ */ _(
|
|
95
|
+
L,
|
|
71
96
|
{
|
|
72
97
|
label: r,
|
|
73
|
-
active:
|
|
74
|
-
open:
|
|
75
|
-
onOpenChange: (
|
|
76
|
-
S(), D(
|
|
98
|
+
active: Q || h,
|
|
99
|
+
open: T,
|
|
100
|
+
onOpenChange: (s) => {
|
|
101
|
+
S(), D(s);
|
|
77
102
|
},
|
|
78
103
|
onConfirm: () => {
|
|
79
|
-
o != null && o[0] && (o != null && o[1]) ?
|
|
104
|
+
o != null && o[0] && (o != null && o[1]) ? i == null || i([x(o[0], n), x(o[1], n)]) : i == null || i(null), D(!1);
|
|
80
105
|
},
|
|
81
106
|
onReset: () => {
|
|
82
107
|
S(), D(!1);
|
|
83
108
|
},
|
|
84
109
|
children: [
|
|
85
|
-
|
|
110
|
+
O.length > 0 && /* @__PURE__ */ a(
|
|
86
111
|
"div",
|
|
87
112
|
{
|
|
88
|
-
className:
|
|
113
|
+
className: P(
|
|
89
114
|
"filter-date-range-quick-options",
|
|
90
|
-
|
|
115
|
+
V["filter-date-range-quick-options"]
|
|
91
116
|
),
|
|
92
|
-
children:
|
|
117
|
+
children: O.map((s) => /* @__PURE__ */ a(
|
|
93
118
|
"span",
|
|
94
119
|
{
|
|
95
|
-
className:
|
|
120
|
+
className: P(
|
|
96
121
|
"filter-date-range-quick-option",
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
122
|
+
V["filter-date-range-quick-option"],
|
|
123
|
+
q === s.key && "filter-date-range-quick-option-active",
|
|
124
|
+
q === s.key && V["filter-date-range-quick-option-active"]
|
|
100
125
|
),
|
|
101
126
|
onClick: () => {
|
|
102
|
-
const
|
|
103
|
-
|
|
127
|
+
const F = s.getValue();
|
|
128
|
+
F && (m(F), l(s.key));
|
|
104
129
|
},
|
|
105
|
-
children:
|
|
130
|
+
children: s.label
|
|
106
131
|
},
|
|
107
|
-
|
|
132
|
+
s.key
|
|
108
133
|
))
|
|
109
134
|
}
|
|
110
135
|
),
|
|
111
|
-
/* @__PURE__ */
|
|
112
|
-
|
|
136
|
+
/* @__PURE__ */ a(
|
|
137
|
+
W,
|
|
113
138
|
{
|
|
114
|
-
className:
|
|
139
|
+
className: P("filter-date-range-picker", V["filter-date-range-picker"]),
|
|
140
|
+
picker: n,
|
|
115
141
|
value: o,
|
|
116
|
-
|
|
117
|
-
|
|
142
|
+
disabledDate: M,
|
|
143
|
+
onChange: (s) => {
|
|
144
|
+
m(s), l(null);
|
|
118
145
|
}
|
|
119
146
|
}
|
|
120
147
|
)
|
|
@@ -123,8 +150,9 @@ const b = ({
|
|
|
123
150
|
);
|
|
124
151
|
};
|
|
125
152
|
export {
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
153
|
+
it as default,
|
|
154
|
+
Y as findMatchingQuickKey,
|
|
155
|
+
E as getBuiltInMonthOptions,
|
|
156
|
+
H as isSameRange
|
|
129
157
|
};
|
|
130
158
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/components/Filter/FilterDateRange/index.tsx"],"sourcesContent":["import { DatePicker } from 'antd';\nimport dayjs, { Dayjs } from 'dayjs';\nimport React, { useEffect, useMemo, useState } from 'react';\nimport FilterPopover from '../FilterPopover';\nimport type { BaseFilterProps } from '../types';\nimport { resolveHidden } from '../types';\nimport { useFilterRegister } from '../useFilterState';\nimport styles from './style.module.scss';\nimport classNames from 'classnames';\n\nconst { RangePicker } = DatePicker;\n\n/** 快捷选项配置类型 */\ninterface QuickOption {\n key: string;\n label: string;\n getValue: () => [Dayjs, Dayjs] | null;\n}\n\n/** 内置快捷选项 */\nconst BUILT_IN_OPTIONS: QuickOption[] = [\n {\n key: 'lastWeek',\n label: '上周',\n getValue: () => [\n dayjs().subtract(1, 'week').startOf('week'),\n dayjs().subtract(1, 'week').endOf('week'),\n ],\n },\n {\n key: 'thisWeek',\n label: '本周',\n getValue: () => [dayjs().startOf('week'), dayjs().endOf('week')],\n },\n];\n\ninterface FilterDateRangeProps extends BaseFilterProps {\n value?: [string, string] | null;\n onChange?: (value: [string, string] | null) => void;\n /** 默认区间:与默认相同时视为未筛选(除非 showDefaultAsSelected) */\n defaultValue?: [string, string];\n /** 为 true 时,value 等于 defaultValue 仍展示在已选 Tag 中 */\n showDefaultAsSelected?: boolean;\n showQuickOptions?: boolean;\n quickOptions?: QuickOption[];\n}\n\nfunction isSameRange(a?: [string, string] | null, b?: [string, string]): boolean {\n if (!a?.[0] || !a?.[1]) return !b?.[0] || !b?.[1];\n if (!b?.[0] || !b?.[1]) return false;\n return a[0] === b[0] && a[1] === b[1];\n}\n\nfunction findMatchingQuickKey(\n range: [string, string] | null | undefined,\n opts: QuickOption[],\n): string | null {\n if (!range?.[0] || !range?.[1]) return null;\n const start = dayjs(range[0]);\n const end = dayjs(range[1]);\n for (const opt of opts) {\n const v = opt.getValue();\n if (v && v[0].isSame(start, 'day') && v[1].isSame(end, 'day')) {\n return opt.key;\n }\n }\n return null;\n}\n\nconst FilterDateRange: React.FC<FilterDateRangeProps> = ({\n filterKey,\n label,\n value,\n onChange,\n defaultValue,\n showDefaultAsSelected = false,\n showQuickOptions = true,\n quickOptions,\n active,\n hidden,\n}) => {\n const [open, setOpen] = useState(false);\n const [dates, setDates] = useState<[Dayjs | null, Dayjs | null] | null>(\n value ? [dayjs(value[0]), dayjs(value[1])] : null,\n );\n const [activeQuickKey, setActiveQuickKey] = useState<string | null>(null);\n\n const registerFn = useFilterRegister();\n const opts = quickOptions ?? (showQuickOptions ? BUILT_IN_OPTIONS : []);\n\n const syncActiveQuickKey = (range: [string, string] | null | undefined) => {\n setActiveQuickKey(findMatchingQuickKey(range, opts));\n };\n\n const revertToCommitted = () => {\n if (value?.[0] && value?.[1]) {\n setDates([dayjs(value[0]), dayjs(value[1])]);\n syncActiveQuickKey(value);\n } else {\n setDates(null);\n setActiveQuickKey(null);\n }\n };\n\n useEffect(() => {\n if (value?.[0] && value?.[1]) {\n setDates([dayjs(value[0]), dayjs(value[1])]);\n syncActiveQuickKey(value);\n } else {\n setDates(null);\n setActiveQuickKey(null);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value, opts]);\n\n const hasNonDefaultValue = showDefaultAsSelected\n ? !!value?.[0]\n : !!value?.[0] && !isSameRange(value, defaultValue);\n\n const valueLabel = useMemo(() => {\n if (!hasNonDefaultValue || !value?.[0] || !value?.[1]) return '';\n return `${value[0]} ~ ${value[1]}`;\n }, [hasNonDefaultValue, value]);\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 if (resolveHidden(hidden)) return null;\n\n const handleConfirm = () => {\n if (dates?.[0] && dates?.[1]) {\n onChange?.([dates[0].format('YYYY-MM-DD'), dates[1].format('YYYY-MM-DD')]);\n } else {\n onChange?.(null);\n }\n setOpen(false);\n };\n\n const handleDiscardDraft = () => {\n revertToCommitted();\n setOpen(false);\n };\n\n const handleOpenChange = (nextOpen: boolean) => {\n revertToCommitted();\n setOpen(nextOpen);\n };\n\n return (\n <FilterPopover\n label={label}\n active={active || hasNonDefaultValue}\n open={open}\n onOpenChange={handleOpenChange}\n onConfirm={handleConfirm}\n onReset={handleDiscardDraft}\n >\n {opts.length > 0 && (\n <div\n className={classNames(\n 'filter-date-range-quick-options',\n styles['filter-date-range-quick-options'],\n )}\n >\n {opts.map((opt) => (\n <span\n key={opt.key}\n className={classNames(\n 'filter-date-range-quick-option',\n styles['filter-date-range-quick-option'],\n activeQuickKey === opt.key && 'filter-date-range-quick-option-active',\n activeQuickKey === opt.key && styles['filter-date-range-quick-option-active'],\n )}\n onClick={() => {\n const v = opt.getValue();\n if (v) {\n setDates(v);\n setActiveQuickKey(opt.key);\n }\n }}\n >\n {opt.label}\n </span>\n ))}\n </div>\n )}\n <RangePicker\n className={classNames('filter-date-range-picker', styles['filter-date-range-picker'])}\n value={dates}\n onChange={(vals) => {\n setDates(vals as [Dayjs | null, Dayjs | null] | null);\n setActiveQuickKey(null);\n }}\n />\n </FilterPopover>\n );\n};\n\nexport default FilterDateRange;\nexport type { FilterDateRangeProps, QuickOption };\nexport { findMatchingQuickKey, isSameRange };\n"],"names":["RangePicker","DatePicker","BUILT_IN_OPTIONS","dayjs","isSameRange","a","b","findMatchingQuickKey","range","opts","start","end","opt","v","FilterDateRange","filterKey","label","value","onChange","defaultValue","showDefaultAsSelected","showQuickOptions","quickOptions","active","hidden","open","setOpen","useState","dates","setDates","activeQuickKey","setActiveQuickKey","registerFn","useFilterRegister","syncActiveQuickKey","revertToCommitted","useEffect","hasNonDefaultValue","valueLabel","useMemo","resolveHidden","jsxs","FilterPopover","nextOpen","jsx","classNames","styles","vals"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/components/Filter/FilterDateRange/index.tsx"],"sourcesContent":["import { DatePicker } from 'antd';\nimport dayjs, { Dayjs } from 'dayjs';\nimport React, { useEffect, useMemo, useState } from 'react';\nimport {\n formatPickerValue,\n parsePickerValue,\n type DatePickerGranularity,\n} from '@/utils/pickerDate';\nimport FilterPopover from '../FilterPopover';\nimport type { BaseFilterProps } from '../types';\nimport { resolveHidden } from '../types';\nimport { useFilterRegister } from '../useFilterState';\nimport styles from './style.module.scss';\nimport classNames from 'classnames';\n\nconst { RangePicker } = DatePicker;\n\n/** 快捷选项配置类型 */\ninterface QuickOption {\n key: string;\n label: string;\n getValue: () => [Dayjs, Dayjs] | null;\n}\n\n/** 内置快捷选项(日粒度) */\nconst BUILT_IN_DAY_OPTIONS: QuickOption[] = [\n {\n key: 'lastWeek',\n label: '上周',\n getValue: () => [\n dayjs().subtract(1, 'week').startOf('week'),\n dayjs().subtract(1, 'week').endOf('week'),\n ],\n },\n {\n key: 'thisWeek',\n label: '本周',\n getValue: () => [dayjs().startOf('week'), dayjs().endOf('week')],\n },\n];\n\nfunction getBuiltInMonthOptions(): QuickOption[] {\n const end = dayjs().startOf('month');\n return [\n { key: '1m', label: '近1月', getValue: () => [end, end] },\n {\n key: '3m',\n label: '近3月',\n getValue: () => [end.subtract(2, 'month'), end],\n },\n {\n key: '6m',\n label: '近6月',\n getValue: () => [end.subtract(5, 'month'), end],\n },\n ];\n}\n\ninterface FilterDateRangeProps extends BaseFilterProps {\n value?: [string, string] | null;\n onChange?: (value: [string, string] | null) => void;\n /** 选择粒度:日 / 月 / 年 */\n picker?: DatePickerGranularity;\n /** 默认区间:与默认相同时视为未筛选(除非 showDefaultAsSelected) */\n defaultValue?: [string, string];\n /** 为 true 时,value 等于 defaultValue 仍展示在已选 Tag 中 */\n showDefaultAsSelected?: boolean;\n showQuickOptions?: boolean;\n quickOptions?: QuickOption[];\n disabledDate?: (current: Dayjs) => boolean;\n}\n\nfunction isSameRange(a?: [string, string] | null, b?: [string, string]): boolean {\n if (!a?.[0] || !a?.[1]) return !b?.[0] || !b?.[1];\n if (!b?.[0] || !b?.[1]) return false;\n return a[0] === b[0] && a[1] === b[1];\n}\n\nfunction rangeUnit(picker: DatePickerGranularity): 'day' | 'month' | 'year' {\n if (picker === 'month') return 'month';\n if (picker === 'year') return 'year';\n return 'day';\n}\n\nfunction findMatchingQuickKey(\n range: [string, string] | null | undefined,\n opts: QuickOption[],\n picker: DatePickerGranularity,\n): string | null {\n if (!range?.[0] || !range?.[1]) return null;\n const start = parsePickerValue(range[0], picker);\n const end = parsePickerValue(range[1], picker);\n const unit = rangeUnit(picker);\n for (const opt of opts) {\n const v = opt.getValue();\n if (v && v[0].isSame(start, unit) && v[1].isSame(end, unit)) {\n return opt.key;\n }\n }\n return null;\n}\n\nconst FilterDateRange: React.FC<FilterDateRangeProps> = ({\n filterKey,\n label,\n value,\n onChange,\n picker = 'date',\n defaultValue,\n showDefaultAsSelected = false,\n showQuickOptions = true,\n quickOptions,\n disabledDate,\n active,\n hidden,\n}) => {\n const [open, setOpen] = useState(false);\n const [dates, setDates] = useState<[Dayjs | null, Dayjs | null] | null>(\n value ? [parsePickerValue(value[0], picker), parsePickerValue(value[1], picker)] : null,\n );\n const [activeQuickKey, setActiveQuickKey] = useState<string | null>(null);\n\n const registerFn = useFilterRegister();\n const opts = useMemo(\n () =>\n quickOptions ??\n (showQuickOptions\n ? picker === 'month'\n ? getBuiltInMonthOptions()\n : BUILT_IN_DAY_OPTIONS\n : []),\n [quickOptions, showQuickOptions, picker],\n );\n\n const syncActiveQuickKey = (range: [string, string] | null | undefined) => {\n setActiveQuickKey(findMatchingQuickKey(range, opts, picker));\n };\n\n const revertToCommitted = () => {\n if (value?.[0] && value?.[1]) {\n setDates([parsePickerValue(value[0], picker), parsePickerValue(value[1], picker)]);\n syncActiveQuickKey(value);\n } else {\n setDates(null);\n setActiveQuickKey(null);\n }\n };\n\n useEffect(() => {\n if (value?.[0] && value?.[1]) {\n setDates([parsePickerValue(value[0], picker), parsePickerValue(value[1], picker)]);\n syncActiveQuickKey(value);\n } else {\n setDates(null);\n setActiveQuickKey(null);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value, opts, picker]);\n\n const hasNonDefaultValue = showDefaultAsSelected\n ? !!value?.[0]\n : !!value?.[0] && !isSameRange(value, defaultValue);\n\n const valueLabel = useMemo(() => {\n if (!hasNonDefaultValue || !value?.[0] || !value?.[1]) return '';\n return `${value[0]} ~ ${value[1]}`;\n }, [hasNonDefaultValue, value]);\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 if (resolveHidden(hidden)) return null;\n\n const handleConfirm = () => {\n if (dates?.[0] && dates?.[1]) {\n onChange?.([formatPickerValue(dates[0], picker), formatPickerValue(dates[1], picker)]);\n } else {\n onChange?.(null);\n }\n setOpen(false);\n };\n\n const handleDiscardDraft = () => {\n revertToCommitted();\n setOpen(false);\n };\n\n const handleOpenChange = (nextOpen: boolean) => {\n revertToCommitted();\n setOpen(nextOpen);\n };\n\n return (\n <FilterPopover\n label={label}\n active={active || hasNonDefaultValue}\n open={open}\n onOpenChange={handleOpenChange}\n onConfirm={handleConfirm}\n onReset={handleDiscardDraft}\n >\n {opts.length > 0 && (\n <div\n className={classNames(\n 'filter-date-range-quick-options',\n styles['filter-date-range-quick-options'],\n )}\n >\n {opts.map((opt) => (\n <span\n key={opt.key}\n className={classNames(\n 'filter-date-range-quick-option',\n styles['filter-date-range-quick-option'],\n activeQuickKey === opt.key && 'filter-date-range-quick-option-active',\n activeQuickKey === opt.key && styles['filter-date-range-quick-option-active'],\n )}\n onClick={() => {\n const v = opt.getValue();\n if (v) {\n setDates(v);\n setActiveQuickKey(opt.key);\n }\n }}\n >\n {opt.label}\n </span>\n ))}\n </div>\n )}\n <RangePicker\n className={classNames('filter-date-range-picker', styles['filter-date-range-picker'])}\n picker={picker}\n value={dates}\n disabledDate={disabledDate}\n onChange={(vals) => {\n setDates(vals as [Dayjs | null, Dayjs | null] | null);\n setActiveQuickKey(null);\n }}\n />\n </FilterPopover>\n );\n};\n\nexport default FilterDateRange;\nexport type { FilterDateRangeProps, QuickOption };\nexport { findMatchingQuickKey, isSameRange, getBuiltInMonthOptions };\n"],"names":["RangePicker","DatePicker","BUILT_IN_DAY_OPTIONS","dayjs","getBuiltInMonthOptions","end","isSameRange","a","b","rangeUnit","picker","findMatchingQuickKey","range","opts","start","parsePickerValue","unit","opt","v","FilterDateRange","filterKey","label","value","onChange","defaultValue","showDefaultAsSelected","showQuickOptions","quickOptions","disabledDate","active","hidden","open","setOpen","useState","dates","setDates","activeQuickKey","setActiveQuickKey","registerFn","useFilterRegister","useMemo","syncActiveQuickKey","revertToCommitted","useEffect","hasNonDefaultValue","valueLabel","resolveHidden","jsxs","FilterPopover","nextOpen","formatPickerValue","jsx","classNames","styles","vals"],"mappings":"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"}
|
|
@@ -5,6 +5,7 @@ import { default as FilterPopover } from './FilterPopover';
|
|
|
5
5
|
import { default as FilterSelect } from './FilterSelect';
|
|
6
6
|
import { default as FilterInput } from './FilterInput';
|
|
7
7
|
import { default as FilterDateRange } from './FilterDateRange';
|
|
8
|
+
import { default as FilterDatePicker } from './FilterDatePicker';
|
|
8
9
|
import { default as FilterNumberRange } from './FilterNumberRange';
|
|
9
10
|
import { default as FilterTreeSelect } from './FilterTreeSelect';
|
|
10
11
|
export type { CommonFilterProps } from './CommonFilter';
|
|
@@ -23,6 +24,8 @@ export type { FilterInputProps } from './FilterInput';
|
|
|
23
24
|
export { FilterInput };
|
|
24
25
|
export type { FilterDateRangeProps, QuickOption } from './FilterDateRange';
|
|
25
26
|
export { FilterDateRange };
|
|
27
|
+
export type { FilterDatePickerProps, SingleQuickOption } from './FilterDatePicker';
|
|
28
|
+
export { FilterDatePicker };
|
|
26
29
|
export type { FilterNumberRangeProps } from './FilterNumberRange';
|
|
27
30
|
export { FilterNumberRange };
|
|
28
31
|
export type { FilterTreeSelectProps, TreeFilterNode } from './FilterTreeSelect';
|
|
@@ -6,3 +6,9 @@ export { default as FetchSelect } from './FetchSelect';
|
|
|
6
6
|
export type { FetchSelectProps, SelectOptionItem } from './FetchSelect';
|
|
7
7
|
export { default as PersonOptionRow } from './PersonOptionRow';
|
|
8
8
|
export type { PersonOptionRowProps } from './PersonOptionRow';
|
|
9
|
+
/** @kne/form-info — 业务从包根导入,勿直连 @kne/form-info */
|
|
10
|
+
export { FormInfo, Form, FormModal, FormSteps, FormStepsModal, List, TableList, MultiField, Input, TextArea, Select, InputNumber, Switch, SubmitButton, ResetButton, CancelButton, } from './kneFormInfo';
|
|
11
|
+
export type { FormInfoProps, FormProps, FormModalProps, FormStepsProps, FormStepsModalProps, ListProps, TableListProps, MultiFieldProps, } from './kneFormInfo';
|
|
12
|
+
/** @kne/react-form — 引擎 API;默认组件为 ReactForm(勿与 FormInfo 的 Form 混淆) */
|
|
13
|
+
export { ReactForm, GroupList, useField, useFormApi, useFormContext, useGroup, useSubmit, useReset, RULES, preset, interceptors, compileErrMsg, computedFieldValueFromFormData, computedFormDataFormState, filterEmpty, findField, formUtils, isEmpty, isNotEmpty, matchFields, stateToError, stateToIsPass, } from './kneReactForm';
|
|
14
|
+
export type { GroupListRenderProps } from './kneReactForm';
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { FormModalProps, FormProps, FormStepsModalProps, FormStepsProps, ListProps, MultiFieldProps, TableListProps, FormInfoProps } from '@kne/form-info';
|
|
2
|
+
import { ComponentType, FC, ReactNode } from 'react';
|
|
3
|
+
type FieldProps = {
|
|
4
|
+
name: string;
|
|
5
|
+
label?: ReactNode;
|
|
6
|
+
rule?: string;
|
|
7
|
+
placeholder?: string;
|
|
8
|
+
disabled?: boolean;
|
|
9
|
+
block?: boolean;
|
|
10
|
+
rows?: number;
|
|
11
|
+
options?: unknown[];
|
|
12
|
+
[key: string]: unknown;
|
|
13
|
+
};
|
|
14
|
+
type ButtonProps = {
|
|
15
|
+
children?: ReactNode;
|
|
16
|
+
type?: string;
|
|
17
|
+
loading?: boolean;
|
|
18
|
+
[key: string]: unknown;
|
|
19
|
+
};
|
|
20
|
+
type ItemTitleCtx = {
|
|
21
|
+
index: number;
|
|
22
|
+
data?: Record<string, unknown>;
|
|
23
|
+
};
|
|
24
|
+
export type { FormInfoProps, FormProps, FormModalProps, FormStepsProps, FormStepsModalProps, ListProps, TableListProps, MultiFieldProps, };
|
|
25
|
+
export declare const FormInfo: FC<FormInfoProps>;
|
|
26
|
+
export declare const Form: FC<FormProps>;
|
|
27
|
+
export declare const FormModal: FC<FormModalProps & {
|
|
28
|
+
children?: ReactNode;
|
|
29
|
+
}>;
|
|
30
|
+
export declare const FormSteps: FC<FormStepsProps>;
|
|
31
|
+
export declare const FormStepsModal: FC<FormStepsModalProps>;
|
|
32
|
+
export declare const List: FC<Omit<ListProps, "itemTitle"> & {
|
|
33
|
+
maxLength?: number;
|
|
34
|
+
itemTitle?: (ctx: ItemTitleCtx) => string;
|
|
35
|
+
}>;
|
|
36
|
+
export declare const TableList: FC<Omit<TableListProps, "itemTitle"> & {
|
|
37
|
+
itemTitle?: (ctx: ItemTitleCtx) => string;
|
|
38
|
+
}>;
|
|
39
|
+
export declare const MultiField: FC<MultiFieldProps>;
|
|
40
|
+
export declare const Input: ComponentType<FieldProps>;
|
|
41
|
+
export declare const TextArea: ComponentType<FieldProps>;
|
|
42
|
+
export declare const Select: ComponentType<FieldProps>;
|
|
43
|
+
export declare const InputNumber: ComponentType<FieldProps>;
|
|
44
|
+
export declare const Switch: ComponentType<FieldProps>;
|
|
45
|
+
export declare const SubmitButton: ComponentType<ButtonProps>;
|
|
46
|
+
export declare const ResetButton: ComponentType<ButtonProps>;
|
|
47
|
+
export declare const CancelButton: ComponentType<ButtonProps>;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/* empty css */
|
|
2
|
+
import t, { Form as o, FormModal as s, FormSteps as e, FormStepsModal as n, List as a, MultiField as r, TableList as c } from "@kne/form-info";
|
|
3
|
+
import { CancelButton as m, Input as u, InputNumber as i, ResetButton as l, Select as F, SubmitButton as p, Switch as S, TextArea as $ } from "@kne/react-form-antd";
|
|
4
|
+
const M = t, I = o, L = s, T = e, f = n, x = a, h = c, w = r, A = u, C = $, N = F, R = i, g = S, j = p, k = l, q = m;
|
|
5
|
+
export {
|
|
6
|
+
q as CancelButton,
|
|
7
|
+
I as Form,
|
|
8
|
+
M as FormInfo,
|
|
9
|
+
L as FormModal,
|
|
10
|
+
T as FormSteps,
|
|
11
|
+
f as FormStepsModal,
|
|
12
|
+
A as Input,
|
|
13
|
+
R as InputNumber,
|
|
14
|
+
x as List,
|
|
15
|
+
w as MultiField,
|
|
16
|
+
k as ResetButton,
|
|
17
|
+
N as Select,
|
|
18
|
+
j as SubmitButton,
|
|
19
|
+
g as Switch,
|
|
20
|
+
h as TableList,
|
|
21
|
+
C as TextArea
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=kneFormInfo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kneFormInfo.js","sources":["../../../src/components/Form/kneFormInfo.ts"],"sourcesContent":["/**\n * 经 core 再导出 @kne/form-info(业务唯一入口)。\n * 布局组件来自 @kne/form-info;字段组件须从 @kne/react-form-antd 具名导入\n * (form-info 的 `export *` 在 Vite 下经 namespace 读取时常为 undefined)。\n */\nimport '@kne/form-info/dist/index.css';\nimport FormInfoBase, {\n Form as KneForm,\n FormModal as KneFormModal,\n FormSteps as KneFormSteps,\n FormStepsModal as KneFormStepsModal,\n List as KneList,\n MultiField as KneMultiField,\n TableList as KneTableList,\n type FormModalProps,\n type FormProps,\n type FormStepsModalProps,\n type FormStepsProps,\n type ListProps,\n type MultiFieldProps,\n type TableListProps,\n type FormInfoProps,\n} from '@kne/form-info';\nimport {\n CancelButton as KneCancelButton,\n Input as KneInput,\n InputNumber as KneInputNumber,\n ResetButton as KneResetButton,\n Select as KneSelect,\n SubmitButton as KneSubmitButton,\n Switch as KneSwitch,\n TextArea as KneTextArea,\n} from '@kne/react-form-antd';\nimport type { ComponentType, FC, ReactNode } from 'react';\n\ntype FieldProps = {\n name: string;\n label?: ReactNode;\n rule?: string;\n placeholder?: string;\n disabled?: boolean;\n block?: boolean;\n rows?: number;\n options?: unknown[];\n [key: string]: unknown;\n};\n\ntype ButtonProps = {\n children?: ReactNode;\n type?: string;\n loading?: boolean;\n [key: string]: unknown;\n};\n\ntype ItemTitleCtx = { index: number; data?: Record<string, unknown> };\n\nexport type {\n FormInfoProps,\n FormProps,\n FormModalProps,\n FormStepsProps,\n FormStepsModalProps,\n ListProps,\n TableListProps,\n MultiFieldProps,\n};\n\nexport const FormInfo = FormInfoBase;\nexport const Form = KneForm;\nexport const FormModal = KneFormModal as FC<FormModalProps & { children?: ReactNode }>;\nexport const FormSteps = KneFormSteps as FC<FormStepsProps>;\nexport const FormStepsModal = KneFormStepsModal as FC<FormStepsModalProps>;\n\nexport const List = KneList as FC<\n Omit<ListProps, 'itemTitle'> & {\n maxLength?: number;\n itemTitle?: (ctx: ItemTitleCtx) => string;\n }\n>;\nexport const TableList = KneTableList as FC<\n Omit<TableListProps, 'itemTitle'> & {\n itemTitle?: (ctx: ItemTitleCtx) => string;\n }\n>;\nexport const MultiField = KneMultiField as FC<MultiFieldProps>;\n\nexport const Input = KneInput as ComponentType<FieldProps>;\nexport const TextArea = KneTextArea as ComponentType<FieldProps>;\nexport const Select = KneSelect as ComponentType<FieldProps>;\nexport const InputNumber = KneInputNumber as ComponentType<FieldProps>;\nexport const Switch = KneSwitch as ComponentType<FieldProps>;\nexport const SubmitButton = KneSubmitButton as ComponentType<ButtonProps>;\nexport const ResetButton = KneResetButton as ComponentType<ButtonProps>;\nexport const CancelButton = KneCancelButton as ComponentType<ButtonProps>;\n"],"names":["FormInfo","FormInfoBase","Form","KneForm","FormModal","KneFormModal","FormSteps","KneFormSteps","FormStepsModal","KneFormStepsModal","List","KneList","TableList","KneTableList","MultiField","KneMultiField","Input","KneInput","TextArea","KneTextArea","Select","KneSelect","InputNumber","KneInputNumber","Switch","KneSwitch","SubmitButton","KneSubmitButton","ResetButton","KneResetButton","CancelButton","KneCancelButton"],"mappings":";;;AAmEO,MAAMA,IAAWC,GACXC,IAAOC,GACPC,IAAYC,GACZC,IAAYC,GACZC,IAAiBC,GAEjBC,IAAOC,GAMPC,IAAYC,GAKZC,IAAaC,GAEbC,IAAQC,GACRC,IAAWC,GACXC,IAASC,GACTC,IAAcC,GACdC,IAASC,GACTC,IAAeC,GACfC,IAAcC,GACdC,IAAeC;"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 经 core 再导出 @kne/react-form 引擎 API。
|
|
3
|
+
* 默认组件命名为 ReactForm,避免与 form-info 的 Form 冲突。
|
|
4
|
+
* 业务禁止直连 @kne/react-form。
|
|
5
|
+
*/
|
|
6
|
+
export { default as ReactForm } from '@kne/react-form';
|
|
7
|
+
export { GroupList, useField, useFormApi, useFormContext, useGroup, useSubmit, useReset, RULES, preset, interceptors, compileErrMsg, computedFieldValueFromFormData, computedFormDataFormState, filterEmpty, findField, formUtils, isEmpty, isNotEmpty, matchFields, stateToError, stateToIsPass, } from '@kne/react-form';
|
|
8
|
+
export type { GroupListRenderProps } from '@kne/react-form';
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { jsx as
|
|
2
|
-
import { Spin as
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
const n = ({ spinning:
|
|
1
|
+
import { jsx as r } from "react/jsx-runtime";
|
|
2
|
+
import { Spin as p } from "antd";
|
|
3
|
+
import t from "classnames";
|
|
4
|
+
import a from "./style.module.scss.js";
|
|
5
|
+
const n = ({ spinning: o, children: s, className: m }) => /* @__PURE__ */ r(p, { spinning: o, classNames: { root: t(a["page-spin"], m) }, children: s });
|
|
6
6
|
export {
|
|
7
7
|
n as default
|
|
8
8
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/components/Layout/PageSpin/index.tsx"],"sourcesContent":["import { Spin } from 'antd';\nimport classNames from 'classnames';\nimport type { ReactNode } from 'react';\nimport styles from './style.module.scss';\n\nexport type PageSpinProps = {\n spinning: boolean;\n children: ReactNode;\n className?: string;\n};\n\n/** 模块页 body 区整页 Spin:参与 flex 高度链,遮罩 Filter + 主工作区 */\nconst PageSpin: React.FC<PageSpinProps> = ({ spinning, children, className }) => (\n <Spin spinning={spinning}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/components/Layout/PageSpin/index.tsx"],"sourcesContent":["import { Spin } from 'antd';\nimport classNames from 'classnames';\nimport type { ReactNode } from 'react';\nimport styles from './style.module.scss';\n\nexport type PageSpinProps = {\n spinning: boolean;\n children: ReactNode;\n className?: string;\n};\n\n/** 模块页 body 区整页 Spin:参与 flex 高度链,遮罩 Filter + 主工作区 */\nconst PageSpin: React.FC<PageSpinProps> = ({ spinning, children, className }) => (\n <Spin spinning={spinning} classNames={{ root: classNames(styles['page-spin'], className) }}>\n {children}\n </Spin>\n);\n\nexport default PageSpin;\n"],"names":["PageSpin","spinning","children","className","Spin","classNames","styles"],"mappings":";;;;AAYA,MAAMA,IAAoC,CAAC,EAAE,UAAAC,GAAU,UAAAC,GAAU,WAAAC,0BAC9DC,GAAA,EAAK,UAAAH,GAAoB,YAAY,EAAE,MAAMI,EAAWC,EAAO,WAAW,GAAGH,CAAS,EAAA,GACpF,UAAAD,EAAA,CACH;"}
|
|
@@ -1,35 +1,36 @@
|
|
|
1
|
-
import { jsx as o, Fragment as
|
|
2
|
-
import { Tooltip as
|
|
3
|
-
import
|
|
1
|
+
import { jsx as o, Fragment as m } from "react/jsx-runtime";
|
|
2
|
+
import { Tooltip as s } from "antd";
|
|
3
|
+
import d from "../Descriptions/CommonDescriptions.js";
|
|
4
4
|
const b = ({
|
|
5
5
|
content: t,
|
|
6
6
|
children: r,
|
|
7
7
|
column: i = 1,
|
|
8
8
|
hidden: a = !1,
|
|
9
9
|
placement: e = "top",
|
|
10
|
-
overlayClassName:
|
|
11
|
-
overlayStyle:
|
|
10
|
+
overlayClassName: n,
|
|
11
|
+
overlayStyle: p,
|
|
12
12
|
mouseEnterDelay: l = 0.3,
|
|
13
13
|
...f
|
|
14
|
-
}) => a || t.length === 0 ? /* @__PURE__ */ o(
|
|
15
|
-
|
|
14
|
+
}) => a || t.length === 0 ? /* @__PURE__ */ o(m, { children: r }) : /* @__PURE__ */ o(
|
|
15
|
+
s,
|
|
16
16
|
{
|
|
17
17
|
placement: e,
|
|
18
18
|
mouseEnterDelay: l,
|
|
19
19
|
destroyOnHidden: !0,
|
|
20
|
-
classNames: { root: ["tooltip-info-overlay",
|
|
20
|
+
classNames: { root: ["tooltip-info-overlay", n].filter(Boolean).join(" ") },
|
|
21
21
|
styles: {
|
|
22
22
|
container: {
|
|
23
|
+
minWidth: 220,
|
|
23
24
|
maxWidth: 360,
|
|
24
25
|
padding: "8px 12px",
|
|
25
26
|
background: "var(--tooltip-info-bg, var(--bg-color-white, #ffffff))",
|
|
26
27
|
color: "var(--tooltip-info-color, var(--font-color, #222222))",
|
|
27
28
|
boxShadow: "0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 3px 6px -4px rgba(0, 0, 0, 0.12)",
|
|
28
|
-
...
|
|
29
|
+
...p
|
|
29
30
|
}
|
|
30
31
|
},
|
|
31
32
|
getPopupContainer: () => document.body,
|
|
32
|
-
title: /* @__PURE__ */ o(
|
|
33
|
+
title: /* @__PURE__ */ o(d, { content: t, column: i, size: "small" }),
|
|
33
34
|
...f,
|
|
34
35
|
children: r
|
|
35
36
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TooltipInfo.js","sources":["../../../src/components/TooltipInfo/TooltipInfo.tsx"],"sourcesContent":["import type { TooltipProps } from 'antd';\nimport { Tooltip } from 'antd';\nimport React from 'react';\nimport type { DescriptionItem } from '../Descriptions/CommonDescriptions';\nimport CommonDescriptions from '../Descriptions/CommonDescriptions';\nimport './style.module.scss';\n\nexport interface TooltipInfoProps extends Pick<\n TooltipProps,\n 'placement' | 'mouseEnterDelay' | 'mouseLeaveDelay'\n> {\n /** 详情描述项,内部使用 CommonDescriptions 渲染 */\n content: DescriptionItem[];\n children: React.ReactNode;\n /** CommonDescriptions 列数,默认 1 */\n column?: number;\n /** 为 true 或 content 为空时不展示 Tooltip */\n hidden?: boolean;\n /** @deprecated 使用 classNames.root */\n overlayClassName?: string;\n /** @deprecated 使用 styles.root */\n overlayStyle?: React.CSSProperties;\n}\n\n/** Tooltip 详情展示,内部统一使用 CommonDescriptions */\nconst TooltipInfo: React.FC<TooltipInfoProps> = ({\n content,\n children,\n column = 1,\n hidden = false,\n placement = 'top',\n overlayClassName,\n overlayStyle,\n mouseEnterDelay = 0.3,\n ...rest\n}) => {\n if (hidden || content.length === 0) {\n return <>{children}</>;\n }\n\n return (\n <Tooltip\n placement={placement}\n mouseEnterDelay={mouseEnterDelay}\n destroyOnHidden\n classNames={{ root: ['tooltip-info-overlay', overlayClassName].filter(Boolean).join(' ') }}\n styles={{\n container: {\n maxWidth: 360,\n padding: '8px 12px',\n background: 'var(--tooltip-info-bg, var(--bg-color-white, #ffffff))',\n color: 'var(--tooltip-info-color, var(--font-color, #222222))',\n boxShadow
|
|
1
|
+
{"version":3,"file":"TooltipInfo.js","sources":["../../../src/components/TooltipInfo/TooltipInfo.tsx"],"sourcesContent":["import type { TooltipProps } from 'antd';\nimport { Tooltip } from 'antd';\nimport React from 'react';\nimport type { DescriptionItem } from '../Descriptions/CommonDescriptions';\nimport CommonDescriptions from '../Descriptions/CommonDescriptions';\nimport './style.module.scss';\n\nexport interface TooltipInfoProps extends Pick<\n TooltipProps,\n 'placement' | 'mouseEnterDelay' | 'mouseLeaveDelay'\n> {\n /** 详情描述项,内部使用 CommonDescriptions 渲染 */\n content: DescriptionItem[];\n children: React.ReactNode;\n /** CommonDescriptions 列数,默认 1 */\n column?: number;\n /** 为 true 或 content 为空时不展示 Tooltip */\n hidden?: boolean;\n /** @deprecated 使用 classNames.root */\n overlayClassName?: string;\n /** @deprecated 使用 styles.root */\n overlayStyle?: React.CSSProperties;\n}\n\n/** Tooltip 详情展示,内部统一使用 CommonDescriptions */\nconst TooltipInfo: React.FC<TooltipInfoProps> = ({\n content,\n children,\n column = 1,\n hidden = false,\n placement = 'top',\n overlayClassName,\n overlayStyle,\n mouseEnterDelay = 0.3,\n ...rest\n}) => {\n if (hidden || content.length === 0) {\n return <>{children}</>;\n }\n\n return (\n <Tooltip\n placement={placement}\n mouseEnterDelay={mouseEnterDelay}\n destroyOnHidden\n classNames={{ root: ['tooltip-info-overlay', overlayClassName].filter(Boolean).join(' ') }}\n styles={{\n container: {\n minWidth: 220,\n maxWidth: 360,\n padding: '8px 12px',\n background: 'var(--tooltip-info-bg, var(--bg-color-white, #ffffff))',\n color: 'var(--tooltip-info-color, var(--font-color, #222222))',\n boxShadow: '0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 3px 6px -4px rgba(0, 0, 0, 0.12)',\n ...overlayStyle,\n },\n }}\n getPopupContainer={() => document.body}\n title={<CommonDescriptions content={content} column={column} size=\"small\" />}\n {...rest}\n >\n {children}\n </Tooltip>\n );\n};\n\nexport default TooltipInfo;\n"],"names":["TooltipInfo","content","children","column","hidden","placement","overlayClassName","overlayStyle","mouseEnterDelay","rest","jsx","Tooltip","CommonDescriptions"],"mappings":";;;AAyBA,MAAMA,IAA0C,CAAC;AAAA,EAC/C,SAAAC;AAAA,EACA,UAAAC;AAAA,EACA,QAAAC,IAAS;AAAA,EACT,QAAAC,IAAS;AAAA,EACT,WAAAC,IAAY;AAAA,EACZ,kBAAAC;AAAA,EACA,cAAAC;AAAA,EACA,iBAAAC,IAAkB;AAAA,EAClB,GAAGC;AACL,MACML,KAAUH,EAAQ,WAAW,2BACrB,UAAAC,GAAS,IAInB,gBAAAQ;AAAA,EAACC;AAAA,EAAA;AAAA,IACC,WAAAN;AAAA,IACA,iBAAAG;AAAA,IACA,iBAAe;AAAA,IACf,YAAY,EAAE,MAAM,CAAC,wBAAwBF,CAAgB,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,EAAA;AAAA,IACvF,QAAQ;AAAA,MACN,WAAW;AAAA,QACT,UAAU;AAAA,QACV,UAAU;AAAA,QACV,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,OAAO;AAAA,QACP,WAAW;AAAA,QACX,GAAGC;AAAA,MAAA;AAAA,IACL;AAAA,IAEF,mBAAmB,MAAM,SAAS;AAAA,IAClC,OAAO,gBAAAG,EAACE,GAAA,EAAmB,SAAAX,GAAkB,QAAAE,GAAgB,MAAK,SAAQ;AAAA,IACzE,GAAGM;AAAA,IAEH,UAAAP;AAAA,EAAA;AAAA;"}
|
package/dist/index.d.ts
CHANGED
|
@@ -6,6 +6,7 @@ export type { FetchDataOptions, FetchDataResult } from './hooks/useFetchData';
|
|
|
6
6
|
export { resolveMaybeFn, resolveVisible, type MaybeFn, type Visibility, } from './utils/resolveMaybeFn';
|
|
7
7
|
export { formatFileSize } from './utils/format';
|
|
8
8
|
export { toDateRange, toDateTimeRange, toApiStartEnd, recentDayRange, recentYearRange, recentDayRangeStrings, } from './utils/date';
|
|
9
|
+
export { formatPickerValue, parsePickerValue, isValidPickerValue, type DatePickerGranularity, } from './utils/pickerDate';
|
|
9
10
|
export { REDIRECT_URL_PARAM, resolveRedirectUrl, buildLocationRedirectUrl, buildLoginPath, readRedirectUrlFromSearch, } from './utils/authRedirect';
|
|
10
11
|
export { DEFAULT_LAST_ACTIVITY_STORAGE_KEY, getLastActivityTime, touchLastActivity, clearLastActivity, } from './utils/sessionActivity';
|
|
11
12
|
export { USER_ROLE_PERMISSIONS_KEY, PERMISSION_DEFINITIONS_KEY, PERMISSIONS_STORAGE_KEY, loadUserRolePermissions, saveUserRolePermissions, loadPermissionDefinitions, savePermissionDefinitions, getStoredUserPermissions, getStoredPermissionMap, } from './utils/permissionStorage';
|
|
@@ -21,6 +22,7 @@ export { normalizeRawPersonList, normalizePersonDtos, resolvePersonDepartmentNam
|
|
|
21
22
|
export type { PersonOptionDto, ReviewerOptionDto, PersonSelectOption } from './utils/personOption';
|
|
22
23
|
export * from './components/Auth';
|
|
23
24
|
export * from './components/Descriptions';
|
|
25
|
+
export * from './components/Empty';
|
|
24
26
|
export * from './components/File';
|
|
25
27
|
export * from './components/Filter';
|
|
26
28
|
export * from './components/Form';
|