@hkyhy/marsun-components-core 0.1.101 → 0.1.113
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/Editor/VariablePicker.js +13 -13
- package/dist/components/Editor/VariablePicker.js.map +1 -1
- package/dist/components/Filter/createKneFilterField.js +42 -39
- package/dist/components/Filter/createKneFilterField.js.map +1 -1
- package/dist/components/Form/SuperSelect.js +48 -45
- package/dist/components/Form/SuperSelect.js.map +1 -1
- package/dist/components/FormInfo/RichTextField/index.js +46 -69
- package/dist/components/FormInfo/RichTextField/index.js.map +1 -1
- package/dist/components/FormInfo/VariableMentionInput/index.d.ts +1 -0
- package/dist/components/FormInfo/VariableMentionInput/index.js +53 -47
- package/dist/components/FormInfo/VariableMentionInput/index.js.map +1 -1
- package/dist/components/FormInfo/VariableMentionInput/style.module.scss.js +6 -5
- package/dist/components/FormInfo/VariableMentionInput/style.module.scss.js.map +1 -1
- package/dist/components/ReactFilter/fields/index.js +33 -26
- package/dist/components/ReactFilter/fields/index.js.map +1 -1
- package/dist/components/ReactFilter/renderSelectListItemContent.d.ts +8 -0
- package/dist/components/ReactFilter/renderSelectListItemContent.js +12 -0
- package/dist/components/ReactFilter/renderSelectListItemContent.js.map +1 -0
- package/dist/components/Tools/Inbox/InboxBell/InboxBell.d.ts +3 -0
- package/dist/components/Tools/Inbox/InboxBell/InboxBell.js +59 -49
- package/dist/components/Tools/Inbox/InboxBell/InboxBell.js.map +1 -1
- package/dist/components/Tools/Inbox/InboxBell/style.module.scss.js +20 -18
- package/dist/components/Tools/Inbox/InboxBell/style.module.scss.js.map +1 -1
- package/dist/components/Tools/Inbox/index.d.ts +1 -0
- package/dist/components/Tools/Inbox/sanitizeInboxHtml.d.ts +5 -0
- package/dist/components/Tools/Inbox/sanitizeInboxHtml.js +14 -0
- package/dist/components/Tools/Inbox/sanitizeInboxHtml.js.map +1 -0
- package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/MessageTemplateAdmin.d.ts +1 -1
- package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/MessageTemplateAdmin.js +158 -137
- package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/MessageTemplateAdmin.js.map +1 -1
- package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/Modal/TemplateFormModal.js +217 -124
- package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/Modal/TemplateFormModal.js.map +1 -1
- package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/PushRulesPanel/index.d.ts +8 -1
- package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/PushRulesPanel/index.js +312 -170
- package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/PushRulesPanel/index.js.map +1 -1
- package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/VariablesPanel/index.js +87 -76
- package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/VariablesPanel/index.js.map +1 -1
- package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/audienceSlots.d.ts +14 -0
- package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/audienceSlots.js +31 -0
- package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/audienceSlots.js.map +1 -0
- package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/index.d.ts +3 -1
- package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/style.module.scss.js +18 -6
- package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/style.module.scss.js.map +1 -1
- package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/types.d.ts +27 -0
- package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/types.js.map +1 -1
- package/dist/components/Tools/MessageCenter/MsgCenterAppSwitcher/MsgCenterAppSwitcher.d.ts +22 -0
- package/dist/components/Tools/MessageCenter/MsgCenterAppSwitcher/MsgCenterAppSwitcher.js +64 -0
- package/dist/components/Tools/MessageCenter/MsgCenterAppSwitcher/MsgCenterAppSwitcher.js.map +1 -0
- package/dist/components/Tools/MessageCenter/MsgCenterAppSwitcher/index.d.ts +2 -0
- package/dist/components/Tools/MessageCenter/index.d.ts +8 -1
- package/dist/components/Tools/MessageCenter/msgCenterAppSwitch.d.ts +39 -0
- package/dist/components/Tools/MessageCenter/msgCenterAppSwitch.js +94 -0
- package/dist/components/Tools/MessageCenter/msgCenterAppSwitch.js.map +1 -0
- package/dist/components/Tools/MessageCenter/useMsgCenterAppKey.d.ts +2 -0
- package/dist/components/Tools/MessageCenter/useMsgCenterAppKey.js +18 -0
- package/dist/components/Tools/MessageCenter/useMsgCenterAppKey.js.map +1 -0
- package/dist/components/Tools/MessageCenter/utils/audienceUserSelectOptions.d.ts +16 -0
- package/dist/components/Tools/MessageCenter/utils/audienceUserSelectOptions.js +33 -0
- package/dist/components/Tools/MessageCenter/utils/audienceUserSelectOptions.js.map +1 -0
- package/dist/components/Tools/MessageCenter/utils/templateCode.js +11 -17
- package/dist/components/Tools/MessageCenter/utils/templateCode.js.map +1 -1
- package/dist/components/Tools/index.d.ts +3 -2
- package/dist/index.js +641 -626
- package/dist/index.js.map +1 -1
- package/dist/marsun-components-core.css +1 -1
- package/dist/node_modules/dompurify/dist/purify.es.js +908 -0
- package/dist/node_modules/dompurify/dist/purify.es.js.map +1 -0
- package/dist/node_modules/isomorphic-dompurify/dist/browser.js +17 -0
- package/dist/node_modules/isomorphic-dompurify/dist/browser.js.map +1 -0
- package/dist/styles/global.css +1 -1
- package/package.json +9 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { jsxs as b, jsx as
|
|
1
|
+
import { jsxs as b, jsx as t } from "react/jsx-runtime";
|
|
2
2
|
import { Dropdown as f, Button as h } from "antd";
|
|
3
3
|
import { useMemo as g } from "react";
|
|
4
4
|
import { filterVariableFeed as w } from "./variableMention.js";
|
|
@@ -8,12 +8,12 @@ const V = ({
|
|
|
8
8
|
disabled: i,
|
|
9
9
|
catalogError: r,
|
|
10
10
|
onPick: m,
|
|
11
|
-
buttonText:
|
|
12
|
-
size:
|
|
11
|
+
buttonText: d = "插入变量",
|
|
12
|
+
size: c = "middle",
|
|
13
13
|
className: p,
|
|
14
14
|
getPopupContainer: k
|
|
15
15
|
}) => {
|
|
16
|
-
const a = g(() => w(o, ""), [o]),
|
|
16
|
+
const a = g(() => w(o, ""), [o]), l = a.length === 0, s = r ? `目录失败:${r}` : l ? "暂无 catalog 变量" : void 0, u = l ? [
|
|
17
17
|
{
|
|
18
18
|
key: "__empty",
|
|
19
19
|
disabled: !0,
|
|
@@ -22,28 +22,28 @@ const V = ({
|
|
|
22
22
|
] : a.map((e) => ({
|
|
23
23
|
key: e.key,
|
|
24
24
|
label: /* @__PURE__ */ b("span", { className: n["var-mention-option"], children: [
|
|
25
|
-
e.label ? /* @__PURE__ */
|
|
26
|
-
/* @__PURE__ */
|
|
25
|
+
e.label ? /* @__PURE__ */ t("span", { className: n["var-mention-label"], children: e.label }) : null,
|
|
26
|
+
/* @__PURE__ */ t("span", { className: n["var-mention-token"], children: e.key })
|
|
27
27
|
] }),
|
|
28
28
|
onClick: () => m(e.key)
|
|
29
29
|
}));
|
|
30
|
-
return /* @__PURE__ */
|
|
30
|
+
return /* @__PURE__ */ t(
|
|
31
31
|
f,
|
|
32
32
|
{
|
|
33
|
-
disabled: i ||
|
|
33
|
+
disabled: i || l,
|
|
34
34
|
trigger: ["click"],
|
|
35
35
|
getPopupContainer: k,
|
|
36
|
-
dropdownRender: (e) => /* @__PURE__ */
|
|
36
|
+
dropdownRender: (e) => /* @__PURE__ */ t("div", { onMouseDown: (y) => y.preventDefault(), children: e }),
|
|
37
37
|
menu: { items: u },
|
|
38
|
-
children: /* @__PURE__ */
|
|
38
|
+
children: /* @__PURE__ */ t(
|
|
39
39
|
h,
|
|
40
40
|
{
|
|
41
41
|
type: "default",
|
|
42
|
-
size:
|
|
43
|
-
disabled: i ||
|
|
42
|
+
size: c,
|
|
43
|
+
disabled: i || l,
|
|
44
44
|
title: s,
|
|
45
45
|
className: p,
|
|
46
|
-
children:
|
|
46
|
+
children: d
|
|
47
47
|
}
|
|
48
48
|
)
|
|
49
49
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VariablePicker.js","sources":["../../../src/components/Editor/VariablePicker.tsx"],"sourcesContent":["import { Button, Dropdown } from 'antd';\nimport type { MenuProps } from 'antd';\nimport React, { useMemo } from 'react';\nimport { filterVariableFeed, type VariableMentionItem } from './variableMention';\nimport styles from '../FormInfo/VariableMentionInput/style.module.scss';\n\nexport type VariablePickerProps = {\n variables?: VariableMentionItem[];\n disabled?: boolean;\n /** catalog 加载失败短文案;有值时优先于「暂无变量」 */\n catalogError?: string;\n onPick: (key: string) => void;\n /** 按钮文案,默认「插入变量」 */\n buttonText?: string;\n size?: 'small' | 'middle' | 'large';\n className?: string;\n getPopupContainer?: (node: HTMLElement) => HTMLElement;\n};\n\n/**\n * Coze/Dify 风格:点选插入变量(中文 + code)。无 `/` 触发。\n */\nexport const VariablePicker: React.FC<VariablePickerProps> = ({\n variables,\n disabled,\n catalogError,\n onPick,\n buttonText = '插入变量',\n size = '
|
|
1
|
+
{"version":3,"file":"VariablePicker.js","sources":["../../../src/components/Editor/VariablePicker.tsx"],"sourcesContent":["import { Button, Dropdown } from 'antd';\nimport type { MenuProps } from 'antd';\nimport React, { useMemo } from 'react';\nimport { filterVariableFeed, type VariableMentionItem } from './variableMention';\nimport styles from '../FormInfo/VariableMentionInput/style.module.scss';\n\nexport type VariablePickerProps = {\n variables?: VariableMentionItem[];\n disabled?: boolean;\n /** catalog 加载失败短文案;有值时优先于「暂无变量」 */\n catalogError?: string;\n onPick: (key: string) => void;\n /** 按钮文案,默认「插入变量」 */\n buttonText?: string;\n size?: 'small' | 'middle' | 'large';\n className?: string;\n getPopupContainer?: (node: HTMLElement) => HTMLElement;\n};\n\n/**\n * Coze/Dify 风格:点选插入变量(中文 + code)。无 `/` 触发。\n */\nexport const VariablePicker: React.FC<VariablePickerProps> = ({\n variables,\n disabled,\n catalogError,\n onPick,\n buttonText = '插入变量',\n size = 'middle',\n className,\n getPopupContainer,\n}) => {\n const list = useMemo(() => filterVariableFeed(variables, ''), [variables]);\n const empty = list.length === 0;\n const tip = catalogError ? `目录失败:${catalogError}` : empty ? '暂无 catalog 变量' : undefined;\n\n const items: MenuProps['items'] = empty\n ? [\n {\n key: '__empty',\n disabled: true,\n label: tip || '暂无变量',\n },\n ]\n : list.map((v) => ({\n key: v.key,\n label: (\n <span className={styles['var-mention-option']}>\n {v.label ? <span className={styles['var-mention-label']}>{v.label}</span> : null}\n <span className={styles['var-mention-token']}>{v.key}</span>\n </span>\n ),\n onClick: () => onPick(v.key),\n }));\n\n return (\n <Dropdown\n disabled={disabled || empty}\n trigger={['click']}\n getPopupContainer={getPopupContainer}\n dropdownRender={(menu) => <div onMouseDown={(e) => e.preventDefault()}>{menu}</div>}\n menu={{ items }}\n >\n <Button\n type=\"default\"\n size={size}\n disabled={disabled || empty}\n title={tip}\n className={className}\n >\n {buttonText}\n </Button>\n </Dropdown>\n );\n};\n\nexport default VariablePicker;\n"],"names":["VariablePicker","variables","disabled","catalogError","onPick","buttonText","size","className","getPopupContainer","list","useMemo","filterVariableFeed","empty","tip","items","v","jsxs","styles","jsx","Dropdown","menu","e","Button"],"mappings":";;;;;AAsBO,MAAMA,IAAgD,CAAC;AAAA,EAC5D,WAAAC;AAAA,EACA,UAAAC;AAAA,EACA,cAAAC;AAAA,EACA,QAAAC;AAAA,EACA,YAAAC,IAAa;AAAA,EACb,MAAAC,IAAO;AAAA,EACP,WAAAC;AAAA,EACA,mBAAAC;AACF,MAAM;AACJ,QAAMC,IAAOC,EAAQ,MAAMC,EAAmBV,GAAW,EAAE,GAAG,CAACA,CAAS,CAAC,GACnEW,IAAQH,EAAK,WAAW,GACxBI,IAAMV,IAAe,QAAQA,CAAY,KAAKS,IAAQ,kBAAkB,QAExEE,IAA4BF,IAC9B;AAAA,IACE;AAAA,MACE,KAAK;AAAA,MACL,UAAU;AAAA,MACV,OAAOC,KAAO;AAAA,IAAA;AAAA,EAChB,IAEFJ,EAAK,IAAI,CAACM,OAAO;AAAA,IACf,KAAKA,EAAE;AAAA,IACP,OACE,gBAAAC,EAAC,QAAA,EAAK,WAAWC,EAAO,oBAAoB,GACzC,UAAA;AAAA,MAAAF,EAAE,0BAAS,QAAA,EAAK,WAAWE,EAAO,mBAAmB,GAAI,UAAAF,EAAE,MAAA,CAAM,IAAU;AAAA,wBAC3E,QAAA,EAAK,WAAWE,EAAO,mBAAmB,GAAI,YAAE,IAAA,CAAI;AAAA,IAAA,GACvD;AAAA,IAEF,SAAS,MAAMb,EAAOW,EAAE,GAAG;AAAA,EAAA,EAC3B;AAEN,SACE,gBAAAG;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,UAAUjB,KAAYU;AAAA,MACtB,SAAS,CAAC,OAAO;AAAA,MACjB,mBAAAJ;AAAA,MACA,gBAAgB,CAACY,MAAS,gBAAAF,EAAC,OAAA,EAAI,aAAa,CAACG,MAAMA,EAAE,eAAA,GAAmB,UAAAD,EAAA,CAAK;AAAA,MAC7E,MAAM,EAAE,OAAAN,EAAA;AAAA,MAER,UAAA,gBAAAI;AAAA,QAACI;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,MAAAhB;AAAA,UACA,UAAUJ,KAAYU;AAAA,UACtB,OAAOC;AAAA,UACP,WAAAN;AAAA,UAEC,UAAAF;AAAA,QAAA;AAAA,MAAA;AAAA,IACH;AAAA,EAAA;AAGN;"}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { jsx as b } from "react/jsx-runtime";
|
|
2
|
-
import { useRef as
|
|
3
|
-
import
|
|
2
|
+
import { useRef as N, useState as E, useEffect as k, useMemo as O } from "react";
|
|
3
|
+
import P from "./FilterPopover/index.js";
|
|
4
4
|
import { resolveFilterVisible as W } from "./types.js";
|
|
5
5
|
import { useFilterFieldBridge as $, useFilterRegister as q } from "./useFilterState.js";
|
|
6
|
-
import { marsunToKne as
|
|
6
|
+
import { marsunToKne as n, marsunValueLabel as z, kneValueLabel as G, mergeKneLabelMaps as V, kneToMarsun as H } from "./kneValueAdapter.js";
|
|
7
7
|
import D from "./createKneFilterField.module.scss.js";
|
|
8
8
|
import R from "classnames";
|
|
9
|
-
|
|
9
|
+
import { renderSelectListItemContent as J } from "../ReactFilter/renderSelectListItemContent.js";
|
|
10
|
+
function g(a, f) {
|
|
10
11
|
const M = ({
|
|
11
12
|
filterKey: s,
|
|
12
13
|
label: T,
|
|
@@ -17,88 +18,90 @@ function K(u, f) {
|
|
|
17
18
|
active: w,
|
|
18
19
|
hidden: y,
|
|
19
20
|
display: A,
|
|
20
|
-
dependsOn:
|
|
21
|
-
clearOnDepsChange:
|
|
22
|
-
|
|
21
|
+
dependsOn: I,
|
|
22
|
+
clearOnDepsChange: S = !0,
|
|
23
|
+
renderItemContent: j,
|
|
24
|
+
...L
|
|
23
25
|
}) => {
|
|
24
|
-
const l =
|
|
26
|
+
const l = N({
|
|
25
27
|
labelMap: {},
|
|
26
28
|
itemMap: {}
|
|
27
|
-
}), [
|
|
28
|
-
() =>
|
|
29
|
-
),
|
|
30
|
-
|
|
29
|
+
}), [u, m] = E(
|
|
30
|
+
() => n(r, { single: t, ...l.current })
|
|
31
|
+
), o = N(e);
|
|
32
|
+
o.current = e;
|
|
31
33
|
const { resolvedLabel: p } = $({
|
|
32
34
|
filterKey: s,
|
|
33
35
|
value: r,
|
|
34
36
|
label: T,
|
|
35
|
-
dependsOn:
|
|
36
|
-
clearOnDepsChange:
|
|
37
|
+
dependsOn: I,
|
|
38
|
+
clearOnDepsChange: S,
|
|
37
39
|
onDepsClear: () => {
|
|
38
40
|
var i;
|
|
39
|
-
return (i =
|
|
41
|
+
return (i = o.current) == null ? void 0 : i.call(o, void 0);
|
|
40
42
|
}
|
|
41
|
-
}),
|
|
42
|
-
|
|
43
|
-
|
|
43
|
+
}), c = q(), d = W({ display: A, hidden: y });
|
|
44
|
+
k(() => {
|
|
45
|
+
m(n(r, { single: t, ...l.current }));
|
|
44
46
|
}, [r, t]);
|
|
45
|
-
const F =
|
|
47
|
+
const F = O(() => {
|
|
46
48
|
const i = z(r, l.current.labelMap);
|
|
47
|
-
return i || G(
|
|
49
|
+
return i || G(n(r, { single: t, ...l.current }), t);
|
|
48
50
|
}, [r, t]);
|
|
49
|
-
if (
|
|
50
|
-
if (
|
|
51
|
+
if (k(() => {
|
|
52
|
+
if (c) {
|
|
51
53
|
if (!d) {
|
|
52
|
-
|
|
54
|
+
c.unregister(s);
|
|
53
55
|
return;
|
|
54
56
|
}
|
|
55
|
-
F ?
|
|
57
|
+
F ? c.register(s, {
|
|
56
58
|
label: p,
|
|
57
59
|
valueLabel: F,
|
|
58
60
|
onRemove: () => e == null ? void 0 : e(void 0)
|
|
59
|
-
}) :
|
|
61
|
+
}) : c.unregister(s);
|
|
60
62
|
}
|
|
61
63
|
}, [F, s, p, d]), !d) return null;
|
|
62
|
-
const
|
|
63
|
-
l.current = V(i, l.current),
|
|
64
|
+
const x = Array.isArray(r) ? r.length > 0 : r != null && r !== "", B = (i) => {
|
|
65
|
+
l.current = V(i, l.current), m(i);
|
|
64
66
|
};
|
|
65
67
|
return /* @__PURE__ */ b(
|
|
66
|
-
|
|
68
|
+
P,
|
|
67
69
|
{
|
|
68
70
|
label: p,
|
|
69
|
-
active: w ||
|
|
71
|
+
active: w || x,
|
|
70
72
|
width: v,
|
|
71
73
|
onOpenChange: (i) => {
|
|
72
|
-
i &&
|
|
74
|
+
i && m(n(r, { single: t, ...l.current }));
|
|
73
75
|
},
|
|
74
76
|
onConfirm: () => {
|
|
75
|
-
l.current = V(
|
|
77
|
+
l.current = V(u, l.current), e == null || e(H(u, t));
|
|
76
78
|
},
|
|
77
79
|
onReset: () => {
|
|
78
|
-
|
|
80
|
+
m(t ? null : []), e == null || e(void 0);
|
|
79
81
|
},
|
|
80
82
|
children: /* @__PURE__ */ b("div", { className: R("kne-filter-field-panel", D["kne-filter-field-panel"]), children: /* @__PURE__ */ b(
|
|
81
|
-
|
|
83
|
+
a,
|
|
82
84
|
{
|
|
83
|
-
...
|
|
85
|
+
...L,
|
|
84
86
|
className: R(
|
|
85
87
|
"kne-filter-field-inner",
|
|
86
88
|
D["kne-filter-field-inner"],
|
|
87
|
-
|
|
89
|
+
L.className
|
|
88
90
|
),
|
|
89
91
|
single: t,
|
|
90
92
|
allowClear: !1,
|
|
91
93
|
valueType: "all",
|
|
92
|
-
value:
|
|
93
|
-
onChange:
|
|
94
|
+
value: u ?? (t ? null : []),
|
|
95
|
+
onChange: B,
|
|
96
|
+
renderItemContent: j || J
|
|
94
97
|
}
|
|
95
98
|
) })
|
|
96
99
|
}
|
|
97
100
|
);
|
|
98
101
|
};
|
|
99
|
-
return M.displayName = `KneFilterField(${
|
|
102
|
+
return M.displayName = `KneFilterField(${a.displayName || a.name || "Component"})`, M;
|
|
100
103
|
}
|
|
101
104
|
export {
|
|
102
|
-
|
|
105
|
+
g as createKneFilterField
|
|
103
106
|
};
|
|
104
107
|
//# sourceMappingURL=createKneFilterField.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createKneFilterField.js","sources":["../../../src/components/Filter/createKneFilterField.tsx"],"sourcesContent":["import React, { useEffect, useMemo, useRef, useState } from 'react';\nimport FilterPopover from './FilterPopover';\nimport type { BaseFilterProps } from './types';\nimport { resolveFilterVisible } from './types';\nimport { useFilterFieldBridge, useFilterRegister } from './useFilterState';\nimport {\n kneToMarsun,\n kneValueLabel,\n marsunToKne,\n marsunValueLabel,\n mergeKneLabelMaps,\n type KneSelectItem,\n type MarsunSelectValue,\n} from './kneValueAdapter';\nimport styles from './createKneFilterField.module.scss';\nimport classNames from 'classnames';\n\nexport type KneFilterFieldProps = BaseFilterProps & {\n value?: MarsunSelectValue;\n onChange?: (value: MarsunSelectValue) => void;\n /** 对齐 kne:true 单选 */\n single?: boolean;\n /** 面板宽度 */\n panelWidth?: number;\n /** 透传给 kne 组件的其余 props */\n [key: string]: unknown;\n};\n\ntype KneComponentProps = Record<string, unknown> & {\n value?: KneSelectItem | KneSelectItem[] | null;\n onChange?: (v: KneSelectItem | KneSelectItem[] | null) => void;\n single?: boolean;\n valueType?: string;\n allowClear?: boolean;\n className?: string;\n};\n\n/**\n * 将 kne SuperSelect / plus 选择器包进 CommonFilter:FilterPopover 壳 + Marsun 值适配。\n */\nexport function createKneFilterField(\n KneComponent: React.ComponentType<KneComponentProps>,\n defaults?: { panelWidth?: number },\n) {\n const KneFilterField: React.FC<KneFilterFieldProps> = ({\n filterKey,\n label,\n value,\n onChange,\n single = false,\n panelWidth = defaults?.panelWidth ?? 420,\n active,\n hidden,\n display,\n dependsOn,\n clearOnDepsChange = true,\n ...kneRest\n }) => {\n const mapsRef = useRef({\n labelMap: {} as Record<string, string>,\n itemMap: {} as Record<string, KneSelectItem>,\n });\n const [draft, setDraft] = useState<KneSelectItem | KneSelectItem[] | null>(() =>\n marsunToKne(value, { single, ...mapsRef.current }),\n );\n\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n\n const { resolvedLabel } = useFilterFieldBridge({\n filterKey,\n value,\n label,\n dependsOn,\n clearOnDepsChange,\n onDepsClear: () => onChangeRef.current?.(undefined),\n });\n\n const registerFn = useFilterRegister();\n const visible = resolveFilterVisible({ display, hidden });\n\n useEffect(() => {\n setDraft(marsunToKne(value, { single, ...mapsRef.current }));\n }, [value, single]);\n\n const valueLabel = useMemo(() => {\n const fromMaps = marsunValueLabel(value, mapsRef.current.labelMap);\n if (fromMaps) return fromMaps;\n return kneValueLabel(marsunToKne(value, { single, ...mapsRef.current }), single);\n }, [value, single]);\n\n useEffect(() => {\n if (!registerFn) return;\n if (!visible) {\n registerFn.unregister(filterKey);\n return;\n }\n if (valueLabel) {\n registerFn.register(filterKey, {\n label: resolvedLabel,\n valueLabel,\n onRemove: () => onChange?.(undefined),\n });\n } else {\n registerFn.unregister(filterKey);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [valueLabel, filterKey, resolvedLabel, visible]);\n\n if (!visible) return null;\n\n const hasValue = Array.isArray(value) ? value.length > 0 : value != null && value !== '';\n\n const handleDraftChange = (next: KneSelectItem | KneSelectItem[] | null) => {\n mapsRef.current = mergeKneLabelMaps(next, mapsRef.current);\n setDraft(next);\n };\n\n return (\n <FilterPopover\n label={resolvedLabel}\n active={active || hasValue}\n width={panelWidth}\n onOpenChange={(open) => {\n if (open) setDraft(marsunToKne(value, { single, ...mapsRef.current }));\n }}\n onConfirm={() => {\n mapsRef.current = mergeKneLabelMaps(draft, mapsRef.current);\n onChange?.(kneToMarsun(draft, single));\n }}\n onReset={() => {\n setDraft(single ? null : []);\n onChange?.(undefined);\n }}\n >\n <div className={classNames('kne-filter-field-panel', styles['kne-filter-field-panel'])}>\n <KneComponent\n {...(kneRest as KneComponentProps)}\n className={classNames(\n 'kne-filter-field-inner',\n styles['kne-filter-field-inner'],\n kneRest.className as string | undefined,\n )}\n single={single}\n allowClear={false}\n valueType=\"all\"\n value={draft ?? (single ? null : [])}\n onChange={handleDraftChange}\n />\n </div>\n </FilterPopover>\n );\n };\n\n KneFilterField.displayName = `KneFilterField(${KneComponent.displayName || KneComponent.name || 'Component'})`;\n return KneFilterField;\n}\n"],"names":["createKneFilterField","KneComponent","defaults","KneFilterField","filterKey","label","value","onChange","single","panelWidth","active","hidden","display","dependsOn","clearOnDepsChange","kneRest","mapsRef","useRef","draft","setDraft","useState","marsunToKne","onChangeRef","resolvedLabel","useFilterFieldBridge","_a","registerFn","useFilterRegister","visible","resolveFilterVisible","useEffect","valueLabel","useMemo","fromMaps","marsunValueLabel","kneValueLabel","hasValue","handleDraftChange","next","mergeKneLabelMaps","jsx","FilterPopover","open","kneToMarsun","classNames","styles"],"mappings":"
|
|
1
|
+
{"version":3,"file":"createKneFilterField.js","sources":["../../../src/components/Filter/createKneFilterField.tsx"],"sourcesContent":["import React, { useEffect, useMemo, useRef, useState } from 'react';\nimport FilterPopover from './FilterPopover';\nimport type { BaseFilterProps } from './types';\nimport { resolveFilterVisible } from './types';\nimport { useFilterFieldBridge, useFilterRegister } from './useFilterState';\nimport {\n kneToMarsun,\n kneValueLabel,\n marsunToKne,\n marsunValueLabel,\n mergeKneLabelMaps,\n type KneSelectItem,\n type MarsunSelectValue,\n} from './kneValueAdapter';\nimport styles from './createKneFilterField.module.scss';\nimport classNames from 'classnames';\nimport { renderSelectListItemContent } from '../ReactFilter/renderSelectListItemContent';\n\nexport type KneFilterFieldProps = BaseFilterProps & {\n value?: MarsunSelectValue;\n onChange?: (value: MarsunSelectValue) => void;\n /** 对齐 kne:true 单选 */\n single?: boolean;\n /** 面板宽度 */\n panelWidth?: number;\n /** 透传给 kne 组件的其余 props */\n [key: string]: unknown;\n};\n\ntype KneComponentProps = Record<string, unknown> & {\n value?: KneSelectItem | KneSelectItem[] | null;\n onChange?: (v: KneSelectItem | KneSelectItem[] | null) => void;\n single?: boolean;\n valueType?: string;\n allowClear?: boolean;\n className?: string;\n};\n\n/**\n * 将 kne SuperSelect / plus 选择器包进 CommonFilter:FilterPopover 壳 + Marsun 值适配。\n */\nexport function createKneFilterField(\n KneComponent: React.ComponentType<KneComponentProps>,\n defaults?: { panelWidth?: number },\n) {\n const KneFilterField: React.FC<KneFilterFieldProps> = ({\n filterKey,\n label,\n value,\n onChange,\n single = false,\n panelWidth = defaults?.panelWidth ?? 420,\n active,\n hidden,\n display,\n dependsOn,\n clearOnDepsChange = true,\n renderItemContent,\n ...kneRest\n }) => {\n const mapsRef = useRef({\n labelMap: {} as Record<string, string>,\n itemMap: {} as Record<string, KneSelectItem>,\n });\n const [draft, setDraft] = useState<KneSelectItem | KneSelectItem[] | null>(() =>\n marsunToKne(value, { single, ...mapsRef.current }),\n );\n\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n\n const { resolvedLabel } = useFilterFieldBridge({\n filterKey,\n value,\n label,\n dependsOn,\n clearOnDepsChange,\n onDepsClear: () => onChangeRef.current?.(undefined),\n });\n\n const registerFn = useFilterRegister();\n const visible = resolveFilterVisible({ display, hidden });\n\n useEffect(() => {\n setDraft(marsunToKne(value, { single, ...mapsRef.current }));\n }, [value, single]);\n\n const valueLabel = useMemo(() => {\n const fromMaps = marsunValueLabel(value, mapsRef.current.labelMap);\n if (fromMaps) return fromMaps;\n return kneValueLabel(marsunToKne(value, { single, ...mapsRef.current }), single);\n }, [value, single]);\n\n useEffect(() => {\n if (!registerFn) return;\n if (!visible) {\n registerFn.unregister(filterKey);\n return;\n }\n if (valueLabel) {\n registerFn.register(filterKey, {\n label: resolvedLabel,\n valueLabel,\n onRemove: () => onChange?.(undefined),\n });\n } else {\n registerFn.unregister(filterKey);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [valueLabel, filterKey, resolvedLabel, visible]);\n\n if (!visible) return null;\n\n const hasValue = Array.isArray(value) ? value.length > 0 : value != null && value !== '';\n\n const handleDraftChange = (next: KneSelectItem | KneSelectItem[] | null) => {\n mapsRef.current = mergeKneLabelMaps(next, mapsRef.current);\n setDraft(next);\n };\n\n return (\n <FilterPopover\n label={resolvedLabel}\n active={active || hasValue}\n width={panelWidth}\n onOpenChange={(open) => {\n if (open) setDraft(marsunToKne(value, { single, ...mapsRef.current }));\n }}\n onConfirm={() => {\n mapsRef.current = mergeKneLabelMaps(draft, mapsRef.current);\n onChange?.(kneToMarsun(draft, single));\n }}\n onReset={() => {\n setDraft(single ? null : []);\n onChange?.(undefined);\n }}\n >\n <div className={classNames('kne-filter-field-panel', styles['kne-filter-field-panel'])}>\n <KneComponent\n {...(kneRest as KneComponentProps)}\n className={classNames(\n 'kne-filter-field-inner',\n styles['kne-filter-field-inner'],\n kneRest.className as string | undefined,\n )}\n single={single}\n allowClear={false}\n valueType=\"all\"\n value={draft ?? (single ? null : [])}\n onChange={handleDraftChange}\n renderItemContent={\n (renderItemContent as ((ctx: unknown) => React.ReactNode) | undefined) ||\n renderSelectListItemContent\n }\n />\n </div>\n </FilterPopover>\n );\n };\n\n KneFilterField.displayName = `KneFilterField(${KneComponent.displayName || KneComponent.name || 'Component'})`;\n return KneFilterField;\n}\n"],"names":["createKneFilterField","KneComponent","defaults","KneFilterField","filterKey","label","value","onChange","single","panelWidth","active","hidden","display","dependsOn","clearOnDepsChange","renderItemContent","kneRest","mapsRef","useRef","draft","setDraft","useState","marsunToKne","onChangeRef","resolvedLabel","useFilterFieldBridge","_a","registerFn","useFilterRegister","visible","resolveFilterVisible","useEffect","valueLabel","useMemo","fromMaps","marsunValueLabel","kneValueLabel","hasValue","handleDraftChange","next","mergeKneLabelMaps","jsx","FilterPopover","open","kneToMarsun","classNames","styles","renderSelectListItemContent"],"mappings":"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"}
|
|
@@ -1,53 +1,55 @@
|
|
|
1
1
|
import { jsx as g } from "react/jsx-runtime";
|
|
2
|
-
import
|
|
2
|
+
import F from "@kne/super-select";
|
|
3
3
|
/* empty css */
|
|
4
|
-
import * as
|
|
4
|
+
import * as I from "@kne/react-form-antd";
|
|
5
5
|
import T from "classnames";
|
|
6
6
|
import { useRef as _, useMemo as b } from "react";
|
|
7
7
|
import { withNormalizedLabelTips as K } from "./normalizeLabelTips.js";
|
|
8
8
|
import { marsunToKne as U, mergeKneLabelMaps as j, kneToMarsun as z } from "../Filter/kneValueAdapter.js";
|
|
9
9
|
import D from "./SuperSelect.module.scss.js";
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
import { renderSelectListItemContent as G } from "../ReactFilter/renderSelectListItemContent.js";
|
|
11
|
+
const m = "all";
|
|
12
|
+
function O(r, t = m) {
|
|
13
|
+
return r == null || r === "" ? !1 : Array.isArray(r) ? r.length === 1 && String(r[0]) === String(t) : String(r) === String(t);
|
|
13
14
|
}
|
|
14
|
-
function
|
|
15
|
-
return r == null || r === "" ? !1 : Array.isArray(r) ? r.length === 1 && String(r[0]) === String(
|
|
15
|
+
function Z(r, t = m) {
|
|
16
|
+
return r == null || r === "" ? !1 : Array.isArray(r) ? r.length === 1 && String(r[0]) === String(t) : String(r) === String(t);
|
|
16
17
|
}
|
|
17
|
-
const
|
|
18
|
+
const $ = ({
|
|
18
19
|
value: r,
|
|
19
|
-
onChange:
|
|
20
|
-
disabled:
|
|
20
|
+
onChange: t,
|
|
21
|
+
disabled: a,
|
|
21
22
|
options: c = [],
|
|
22
23
|
single: o = !1,
|
|
23
|
-
allowSelectedAll:
|
|
24
|
-
selectedAllValue: n = { value:
|
|
25
|
-
placeholder:
|
|
26
|
-
showSearch:
|
|
24
|
+
allowSelectedAll: d = !1,
|
|
25
|
+
selectedAllValue: n = { value: m, label: "全选" },
|
|
26
|
+
placeholder: L,
|
|
27
|
+
showSearch: u = !0,
|
|
27
28
|
allowClear: w = !0,
|
|
28
29
|
className: y,
|
|
29
30
|
api: p,
|
|
30
31
|
getSearchProps: l,
|
|
31
|
-
|
|
32
|
+
renderItemContent: k,
|
|
33
|
+
...C
|
|
32
34
|
}) => {
|
|
33
|
-
const
|
|
35
|
+
const i = _({
|
|
34
36
|
labelMap: {},
|
|
35
37
|
itemMap: {}
|
|
36
38
|
}), A = p != null, S = b(() => {
|
|
37
|
-
const
|
|
39
|
+
const e = {};
|
|
38
40
|
for (const s of c)
|
|
39
|
-
|
|
40
|
-
return
|
|
41
|
+
e[String(s.value)] = s.label;
|
|
42
|
+
return e[String(n.value)] = n.label, e;
|
|
41
43
|
}, [c, n]), N = b(() => {
|
|
42
|
-
const
|
|
43
|
-
labelMap: { ...S, ...
|
|
44
|
-
itemMap:
|
|
44
|
+
const e = {
|
|
45
|
+
labelMap: { ...S, ...i.current.labelMap },
|
|
46
|
+
itemMap: i.current.itemMap
|
|
45
47
|
};
|
|
46
|
-
return
|
|
47
|
-
}, [r, o, S, n]), h = (
|
|
48
|
-
|
|
49
|
-
},
|
|
50
|
-
keyword:
|
|
48
|
+
return O(r, n.value) ? [n] : U(r, { single: o, ...e });
|
|
49
|
+
}, [r, o, S, n]), h = (e) => {
|
|
50
|
+
i.current = j(e, i.current), t == null || t(z(e, o));
|
|
51
|
+
}, E = ({ searchText: e }) => ({
|
|
52
|
+
keyword: e || "",
|
|
51
53
|
currentPage: 1
|
|
52
54
|
});
|
|
53
55
|
return /* @__PURE__ */ g(
|
|
@@ -59,47 +61,48 @@ const I = ({
|
|
|
59
61
|
y
|
|
60
62
|
),
|
|
61
63
|
children: /* @__PURE__ */ g(
|
|
62
|
-
|
|
64
|
+
F,
|
|
63
65
|
{
|
|
64
|
-
...
|
|
66
|
+
...C,
|
|
65
67
|
value: N,
|
|
66
68
|
onChange: h,
|
|
69
|
+
renderItemContent: k || G,
|
|
67
70
|
...A ? {
|
|
68
71
|
api: p,
|
|
69
|
-
getSearchProps:
|
|
72
|
+
getSearchProps: u ? l || E : l
|
|
70
73
|
} : {
|
|
71
74
|
options: c,
|
|
72
|
-
getSearchCallback:
|
|
73
|
-
if (!
|
|
74
|
-
const f =
|
|
75
|
-
return
|
|
75
|
+
getSearchCallback: u ? ({ searchText: e }, s) => {
|
|
76
|
+
if (!e) return !0;
|
|
77
|
+
const f = e.toLowerCase(), P = String(s.label ?? "").toLowerCase(), R = String(s.value ?? "").toLowerCase();
|
|
78
|
+
return P.includes(f) || R.includes(f);
|
|
76
79
|
} : void 0
|
|
77
80
|
},
|
|
78
81
|
single: o,
|
|
79
|
-
allowSelectedAll: !o &&
|
|
82
|
+
allowSelectedAll: !o && d,
|
|
80
83
|
selectedAllValue: n,
|
|
81
|
-
placeholder:
|
|
84
|
+
placeholder: L,
|
|
82
85
|
isPopup: !0,
|
|
83
|
-
allowClear: w && !
|
|
84
|
-
disabled:
|
|
86
|
+
allowClear: w && !a,
|
|
87
|
+
disabled: a
|
|
85
88
|
}
|
|
86
89
|
)
|
|
87
90
|
}
|
|
88
91
|
);
|
|
89
92
|
}, M = (r) => {
|
|
90
|
-
const { useDecorator:
|
|
91
|
-
return
|
|
93
|
+
const { useDecorator: t } = I.hooks;
|
|
94
|
+
return t({
|
|
92
95
|
fieldName: "superSelect",
|
|
93
96
|
...r
|
|
94
|
-
})(
|
|
97
|
+
})($);
|
|
95
98
|
};
|
|
96
99
|
M.displayName = "SuperSelect";
|
|
97
|
-
const
|
|
100
|
+
const v = K(
|
|
98
101
|
M
|
|
99
102
|
);
|
|
100
103
|
export {
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
+
m as SUPER_SELECT_ALL_VALUE,
|
|
105
|
+
v as SuperSelect,
|
|
106
|
+
Z as isSuperSelectAllValue
|
|
104
107
|
};
|
|
105
108
|
//# sourceMappingURL=SuperSelect.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SuperSelect.js","sources":["../../../src/components/Form/SuperSelect.tsx"],"sourcesContent":["/**\n * FormInfo · SuperSelect 字段(对位 kne-union SuperSelectField 精简版)。\n * 经 `hooks.useDecorator` 接入;多选可开 `allowSelectedAll`(值 sentinel 默认 `'all'`)。\n * 对外 form 值为 Marsun 标量/数组(string | string[]),面板内适配 kne `{ label, value }`。\n */\n// @ts-nocheck — @kne/super-select 无完整 TS 类型\nimport KneSuperSelect from '@kne/super-select';\nimport '@kne/super-select/dist/index.css';\nimport * as ReactFormAntd from '@kne/react-form-antd';\nimport classNames from 'classnames';\nimport type { ComponentType, FC, ReactNode } from 'react';\nimport { useMemo, useRef } from 'react';\nimport { withNormalizedLabelTips } from './normalizeLabelTips';\nimport {\n kneToMarsun,\n marsunToKne,\n mergeKneLabelMaps,\n type KneSelectItem,\n type MarsunSelectValue,\n} from '@/components/Filter/kneValueAdapter';\nimport styles from './SuperSelect.module.scss';\n\n/** 与 @kne/super-select 默认 `selectedAllValue.value` 对齐 */\nexport const SUPER_SELECT_ALL_VALUE = 'all';\n\nexport type SuperSelectOption = {\n value: string | number;\n label: string;\n disabled?: boolean;\n [key: string]: unknown;\n};\n\nexport type SuperSelectProps = {\n name: string;\n label?: ReactNode;\n labelTips?: ReactNode | ((props: SuperSelectProps) => ReactNode);\n rule?: string;\n disabled?: boolean;\n placeholder?: string;\n options?: SuperSelectOption[];\n /** true = 单选;默认多选 */\n single?: boolean;\n /** 多选时显示全选(form 值变为 `[selectedAllValue.value]`,默认 `'all'`) */\n allowSelectedAll?: boolean;\n /** 覆盖默认 `{ value: 'all', label: '全选' }` */\n selectedAllValue?: { value: string | number; label: string };\n showSearch?: boolean;\n allowClear?: boolean;\n className?: string;\n /** 透传 kne SuperSelect */\n [key: string]: unknown;\n};\n\ntype FieldRenderProps = {\n value?: MarsunSelectValue;\n onChange?: (v: MarsunSelectValue) => void;\n disabled?: boolean;\n id?: string;\n};\n\ntype KneHooks = {\n useDecorator: (\n opts: Record<string, unknown>,\n ) => (Comp: ComponentType<FieldRenderProps>) => ReactNode;\n};\n\nfunction isSelectAllMarsun(\n value: MarsunSelectValue,\n allValue: string | number = SUPER_SELECT_ALL_VALUE,\n): boolean {\n if (value == null || value === '') return false;\n if (Array.isArray(value)) {\n return value.length === 1 && String(value[0]) === String(allValue);\n }\n return String(value) === String(allValue);\n}\n\n/** 业务写路径:是否为全选 sentinel */\nexport function isSuperSelectAllValue(\n value: unknown,\n allValue: string | number = SUPER_SELECT_ALL_VALUE,\n): boolean {\n if (value == null || value === '') return false;\n if (Array.isArray(value)) {\n return value.length === 1 && String(value[0]) === String(allValue);\n }\n return String(value) === String(allValue);\n}\n\nconst SuperSelectField: FC<\n FieldRenderProps & {\n options?: SuperSelectOption[];\n single?: boolean;\n allowSelectedAll?: boolean;\n selectedAllValue?: { value: string | number; label: string };\n placeholder?: string;\n showSearch?: boolean;\n allowClear?: boolean;\n className?: string;\n /** 有 api 时走远程/分页加载,不再传 options(否则 kne 会忽略 api) */\n api?: unknown;\n getSearchProps?: (searchProps: { searchText?: string }) => Record<string, unknown>;\n [key: string]: unknown;\n }\n> = ({\n value,\n onChange,\n disabled,\n options = [],\n single = false,\n allowSelectedAll = false,\n selectedAllValue = { value: SUPER_SELECT_ALL_VALUE, label: '全选' },\n placeholder,\n showSearch = true,\n allowClear = true,\n className,\n api,\n getSearchProps: getSearchPropsProp,\n ...kneRest\n}) => {\n const mapsRef = useRef({\n labelMap: {} as Record<string, string>,\n itemMap: {} as Record<string, KneSelectItem>,\n });\n const useApi = api != null;\n\n const labelMapFromOptions = useMemo(() => {\n const map: Record<string, string> = {};\n for (const o of options) {\n map[String(o.value)] = o.label;\n }\n map[String(selectedAllValue.value)] = selectedAllValue.label;\n return map;\n }, [options, selectedAllValue]);\n\n const kneValue = useMemo(() => {\n const maps = {\n labelMap: { ...labelMapFromOptions, ...mapsRef.current.labelMap },\n itemMap: mapsRef.current.itemMap,\n };\n if (isSelectAllMarsun(value, selectedAllValue.value)) {\n return [selectedAllValue as KneSelectItem];\n }\n return marsunToKne(value, { single, ...maps });\n }, [value, single, labelMapFromOptions, selectedAllValue]);\n\n const handleChange = (next: KneSelectItem | KneSelectItem[] | null) => {\n mapsRef.current = mergeKneLabelMaps(next, mapsRef.current);\n onChange?.(kneToMarsun(next, single));\n };\n\n const defaultGetSearchProps = ({ searchText }: { searchText?: string }) => ({\n keyword: searchText || '',\n currentPage: 1,\n });\n\n return (\n <div\n className={classNames(\n 'marsun-form-super-select',\n styles['marsun-form-super-select'],\n className,\n )}\n >\n <KneSuperSelect\n {...kneRest}\n value={kneValue}\n onChange={handleChange}\n {...(useApi\n ? {\n api,\n getSearchProps: showSearch\n ? getSearchPropsProp || defaultGetSearchProps\n : getSearchPropsProp,\n }\n : {\n options,\n getSearchCallback: showSearch\n ? ({ searchText }: { searchText?: string }, item: KneSelectItem) => {\n if (!searchText) return true;\n const kw = searchText.toLowerCase();\n const label = String(item.label ?? '').toLowerCase();\n const val = String(item.value ?? '').toLowerCase();\n return label.includes(kw) || val.includes(kw);\n }\n : undefined,\n })}\n single={single}\n allowSelectedAll={!single && allowSelectedAll}\n selectedAllValue={selectedAllValue}\n placeholder={placeholder}\n isPopup\n allowClear={allowClear && !disabled}\n disabled={disabled}\n />\n </div>\n );\n};\n\nconst SuperSelectInner: FC<SuperSelectProps> = (props) => {\n const { useDecorator } = (ReactFormAntd as unknown as { hooks: KneHooks }).hooks;\n const render = useDecorator({\n fieldName: 'superSelect',\n ...props,\n });\n return render(SuperSelectField);\n};\n\nSuperSelectInner.displayName = 'SuperSelect';\n\nexport const SuperSelect = withNormalizedLabelTips(\n SuperSelectInner as ComponentType<SuperSelectProps>,\n) as ComponentType<SuperSelectProps>;\n\nexport default SuperSelect;\n"],"names":["SUPER_SELECT_ALL_VALUE","isSelectAllMarsun","value","allValue","isSuperSelectAllValue","SuperSelectField","onChange","disabled","options","single","allowSelectedAll","selectedAllValue","placeholder","showSearch","allowClear","className","api","getSearchPropsProp","kneRest","mapsRef","useRef","useApi","labelMapFromOptions","useMemo","map","o","kneValue","maps","marsunToKne","handleChange","next","mergeKneLabelMaps","kneToMarsun","defaultGetSearchProps","searchText","jsx","classNames","styles","KneSuperSelect","item","kw","label","val","SuperSelectInner","props","useDecorator","ReactFormAntd","SuperSelect","withNormalizedLabelTips"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SuperSelect.js","sources":["../../../src/components/Form/SuperSelect.tsx"],"sourcesContent":["/**\n * FormInfo · SuperSelect 字段(对位 kne-union SuperSelectField 精简版)。\n * 经 `hooks.useDecorator` 接入;多选可开 `allowSelectedAll`(值 sentinel 默认 `'all'`)。\n * 对外 form 值为 Marsun 标量/数组(string | string[]),面板内适配 kne `{ label, value }`。\n */\n// @ts-nocheck — @kne/super-select 无完整 TS 类型\nimport KneSuperSelect from '@kne/super-select';\nimport '@kne/super-select/dist/index.css';\nimport * as ReactFormAntd from '@kne/react-form-antd';\nimport classNames from 'classnames';\nimport type { ComponentType, FC, ReactNode } from 'react';\nimport { useMemo, useRef } from 'react';\nimport { withNormalizedLabelTips } from './normalizeLabelTips';\nimport {\n kneToMarsun,\n marsunToKne,\n mergeKneLabelMaps,\n type KneSelectItem,\n type MarsunSelectValue,\n} from '@/components/Filter/kneValueAdapter';\nimport styles from './SuperSelect.module.scss';\nimport { renderSelectListItemContent } from '@/components/ReactFilter/renderSelectListItemContent';\n\n/** 与 @kne/super-select 默认 `selectedAllValue.value` 对齐 */\nexport const SUPER_SELECT_ALL_VALUE = 'all';\n\nexport type SuperSelectOption = {\n value: string | number;\n label: string;\n disabled?: boolean;\n [key: string]: unknown;\n};\n\nexport type SuperSelectProps = {\n name: string;\n label?: ReactNode;\n labelTips?: ReactNode | ((props: SuperSelectProps) => ReactNode);\n rule?: string;\n disabled?: boolean;\n placeholder?: string;\n options?: SuperSelectOption[];\n /** true = 单选;默认多选 */\n single?: boolean;\n /** 多选时显示全选(form 值变为 `[selectedAllValue.value]`,默认 `'all'`) */\n allowSelectedAll?: boolean;\n /** 覆盖默认 `{ value: 'all', label: '全选' }` */\n selectedAllValue?: { value: string | number; label: string };\n showSearch?: boolean;\n allowClear?: boolean;\n className?: string;\n /** 透传 kne SuperSelect */\n [key: string]: unknown;\n};\n\ntype FieldRenderProps = {\n value?: MarsunSelectValue;\n onChange?: (v: MarsunSelectValue) => void;\n disabled?: boolean;\n id?: string;\n};\n\ntype KneHooks = {\n useDecorator: (\n opts: Record<string, unknown>,\n ) => (Comp: ComponentType<FieldRenderProps>) => ReactNode;\n};\n\nfunction isSelectAllMarsun(\n value: MarsunSelectValue,\n allValue: string | number = SUPER_SELECT_ALL_VALUE,\n): boolean {\n if (value == null || value === '') return false;\n if (Array.isArray(value)) {\n return value.length === 1 && String(value[0]) === String(allValue);\n }\n return String(value) === String(allValue);\n}\n\n/** 业务写路径:是否为全选 sentinel */\nexport function isSuperSelectAllValue(\n value: unknown,\n allValue: string | number = SUPER_SELECT_ALL_VALUE,\n): boolean {\n if (value == null || value === '') return false;\n if (Array.isArray(value)) {\n return value.length === 1 && String(value[0]) === String(allValue);\n }\n return String(value) === String(allValue);\n}\n\nconst SuperSelectField: FC<\n FieldRenderProps & {\n options?: SuperSelectOption[];\n single?: boolean;\n allowSelectedAll?: boolean;\n selectedAllValue?: { value: string | number; label: string };\n placeholder?: string;\n showSearch?: boolean;\n allowClear?: boolean;\n className?: string;\n /** 有 api 时走远程/分页加载,不再传 options(否则 kne 会忽略 api) */\n api?: unknown;\n getSearchProps?: (searchProps: { searchText?: string }) => Record<string, unknown>;\n [key: string]: unknown;\n }\n> = ({\n value,\n onChange,\n disabled,\n options = [],\n single = false,\n allowSelectedAll = false,\n selectedAllValue = { value: SUPER_SELECT_ALL_VALUE, label: '全选' },\n placeholder,\n showSearch = true,\n allowClear = true,\n className,\n api,\n getSearchProps: getSearchPropsProp,\n renderItemContent,\n ...kneRest\n}) => {\n const mapsRef = useRef({\n labelMap: {} as Record<string, string>,\n itemMap: {} as Record<string, KneSelectItem>,\n });\n const useApi = api != null;\n\n const labelMapFromOptions = useMemo(() => {\n const map: Record<string, string> = {};\n for (const o of options) {\n map[String(o.value)] = o.label;\n }\n map[String(selectedAllValue.value)] = selectedAllValue.label;\n return map;\n }, [options, selectedAllValue]);\n\n const kneValue = useMemo(() => {\n const maps = {\n labelMap: { ...labelMapFromOptions, ...mapsRef.current.labelMap },\n itemMap: mapsRef.current.itemMap,\n };\n if (isSelectAllMarsun(value, selectedAllValue.value)) {\n return [selectedAllValue as KneSelectItem];\n }\n return marsunToKne(value, { single, ...maps });\n }, [value, single, labelMapFromOptions, selectedAllValue]);\n\n const handleChange = (next: KneSelectItem | KneSelectItem[] | null) => {\n mapsRef.current = mergeKneLabelMaps(next, mapsRef.current);\n onChange?.(kneToMarsun(next, single));\n };\n\n const defaultGetSearchProps = ({ searchText }: { searchText?: string }) => ({\n keyword: searchText || '',\n currentPage: 1,\n });\n\n return (\n <div\n className={classNames(\n 'marsun-form-super-select',\n styles['marsun-form-super-select'],\n className,\n )}\n >\n <KneSuperSelect\n {...kneRest}\n value={kneValue}\n onChange={handleChange}\n renderItemContent={renderItemContent || renderSelectListItemContent}\n {...(useApi\n ? {\n api,\n getSearchProps: showSearch\n ? getSearchPropsProp || defaultGetSearchProps\n : getSearchPropsProp,\n }\n : {\n options,\n getSearchCallback: showSearch\n ? ({ searchText }: { searchText?: string }, item: KneSelectItem) => {\n if (!searchText) return true;\n const kw = searchText.toLowerCase();\n const label = String(item.label ?? '').toLowerCase();\n const val = String(item.value ?? '').toLowerCase();\n return label.includes(kw) || val.includes(kw);\n }\n : undefined,\n })}\n single={single}\n allowSelectedAll={!single && allowSelectedAll}\n selectedAllValue={selectedAllValue}\n placeholder={placeholder}\n isPopup\n allowClear={allowClear && !disabled}\n disabled={disabled}\n />\n </div>\n );\n};\n\nconst SuperSelectInner: FC<SuperSelectProps> = (props) => {\n const { useDecorator } = (ReactFormAntd as unknown as { hooks: KneHooks }).hooks;\n const render = useDecorator({\n fieldName: 'superSelect',\n ...props,\n });\n return render(SuperSelectField);\n};\n\nSuperSelectInner.displayName = 'SuperSelect';\n\nexport const SuperSelect = withNormalizedLabelTips(\n SuperSelectInner as ComponentType<SuperSelectProps>,\n) as ComponentType<SuperSelectProps>;\n\nexport default SuperSelect;\n"],"names":["SUPER_SELECT_ALL_VALUE","isSelectAllMarsun","value","allValue","isSuperSelectAllValue","SuperSelectField","onChange","disabled","options","single","allowSelectedAll","selectedAllValue","placeholder","showSearch","allowClear","className","api","getSearchPropsProp","renderItemContent","kneRest","mapsRef","useRef","useApi","labelMapFromOptions","useMemo","map","o","kneValue","maps","marsunToKne","handleChange","next","mergeKneLabelMaps","kneToMarsun","defaultGetSearchProps","searchText","jsx","classNames","styles","KneSuperSelect","renderSelectListItemContent","item","kw","label","val","SuperSelectInner","props","useDecorator","ReactFormAntd","SuperSelect","withNormalizedLabelTips"],"mappings":"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"}
|
|
@@ -1,82 +1,59 @@
|
|
|
1
|
-
import { jsx as
|
|
2
|
-
import * as
|
|
3
|
-
import
|
|
4
|
-
import { Suspense as
|
|
5
|
-
import
|
|
6
|
-
const
|
|
7
|
-
() => import("../../Editor/index.js").then((
|
|
8
|
-
),
|
|
9
|
-
value:
|
|
10
|
-
onChange:
|
|
11
|
-
disabled:
|
|
12
|
-
readOnly:
|
|
13
|
-
placeholder:
|
|
14
|
-
minHeight:
|
|
15
|
-
enableVariableMention:
|
|
16
|
-
variables:
|
|
17
|
-
catalogError:
|
|
18
|
-
className:
|
|
19
|
-
editorKey:
|
|
20
|
-
id:
|
|
21
|
-
}) => /* @__PURE__ */
|
|
1
|
+
import { jsx as e } from "react/jsx-runtime";
|
|
2
|
+
import * as p from "@kne/react-form-antd";
|
|
3
|
+
import R from "classnames";
|
|
4
|
+
import { Suspense as T, lazy as u } from "react";
|
|
5
|
+
import o from "./style.module.scss.js";
|
|
6
|
+
const N = u(
|
|
7
|
+
() => import("../../Editor/index.js").then((t) => ({ default: t.RichTextEditor }))
|
|
8
|
+
), F = ({
|
|
9
|
+
value: t = "",
|
|
10
|
+
onChange: r,
|
|
11
|
+
disabled: i,
|
|
12
|
+
readOnly: s,
|
|
13
|
+
placeholder: m,
|
|
14
|
+
minHeight: d = 140,
|
|
15
|
+
enableVariableMention: a,
|
|
16
|
+
variables: n,
|
|
17
|
+
catalogError: l,
|
|
18
|
+
className: h,
|
|
19
|
+
editorKey: f,
|
|
20
|
+
id: x
|
|
21
|
+
}) => /* @__PURE__ */ e(
|
|
22
22
|
"div",
|
|
23
23
|
{
|
|
24
|
-
className:
|
|
24
|
+
className: R(
|
|
25
25
|
"marsun-form-rich-text",
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
26
|
+
o["form-rich-text"],
|
|
27
|
+
i && o["form-rich-text-disabled"],
|
|
28
|
+
h
|
|
29
29
|
),
|
|
30
|
-
"data-field-id":
|
|
31
|
-
children: /* @__PURE__ */
|
|
32
|
-
|
|
30
|
+
"data-field-id": x,
|
|
31
|
+
children: /* @__PURE__ */ e(T, { fallback: /* @__PURE__ */ e("div", { className: o["form-rich-text-loading"], children: "加载编辑器…" }), children: /* @__PURE__ */ e(
|
|
32
|
+
N,
|
|
33
33
|
{
|
|
34
|
-
value:
|
|
35
|
-
onChange:
|
|
36
|
-
disabled:
|
|
37
|
-
readOnly:
|
|
38
|
-
placeholder:
|
|
39
|
-
minHeight:
|
|
40
|
-
enableVariableMention:
|
|
41
|
-
variables:
|
|
42
|
-
catalogError:
|
|
34
|
+
value: t,
|
|
35
|
+
onChange: r,
|
|
36
|
+
disabled: i,
|
|
37
|
+
readOnly: s,
|
|
38
|
+
placeholder: m,
|
|
39
|
+
minHeight: d,
|
|
40
|
+
enableVariableMention: a,
|
|
41
|
+
variables: n,
|
|
42
|
+
catalogError: l
|
|
43
43
|
},
|
|
44
|
-
|
|
44
|
+
f || "rte"
|
|
45
45
|
) })
|
|
46
46
|
}
|
|
47
|
-
),
|
|
48
|
-
const { useDecorator:
|
|
49
|
-
|
|
50
|
-
catalogError: o,
|
|
51
|
-
placeholder: a,
|
|
52
|
-
className: c,
|
|
53
|
-
enableVariableMention: s,
|
|
54
|
-
readOnly: l,
|
|
55
|
-
minHeight: n,
|
|
56
|
-
editorKey: d,
|
|
57
|
-
...m
|
|
58
|
-
} = e;
|
|
59
|
-
return i({
|
|
47
|
+
), c = (t) => {
|
|
48
|
+
const { useDecorator: r } = p.hooks;
|
|
49
|
+
return r({
|
|
60
50
|
fieldName: "richTextEditor",
|
|
61
|
-
...
|
|
62
|
-
})(
|
|
63
|
-
b,
|
|
64
|
-
{
|
|
65
|
-
...p,
|
|
66
|
-
variables: t,
|
|
67
|
-
catalogError: o,
|
|
68
|
-
placeholder: a,
|
|
69
|
-
className: c,
|
|
70
|
-
enableVariableMention: s,
|
|
71
|
-
readOnly: l,
|
|
72
|
-
minHeight: n,
|
|
73
|
-
editorKey: d
|
|
74
|
-
}
|
|
75
|
-
));
|
|
51
|
+
...t
|
|
52
|
+
})(F);
|
|
76
53
|
};
|
|
77
|
-
|
|
78
|
-
const
|
|
54
|
+
c.displayName = "RichTextField";
|
|
55
|
+
const b = c;
|
|
79
56
|
export {
|
|
80
|
-
|
|
57
|
+
b as RichTextField
|
|
81
58
|
};
|
|
82
59
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/components/FormInfo/RichTextField/index.tsx"],"sourcesContent":["import * as ReactFormAntd from '@kne/react-form-antd';\nimport classNames from 'classnames';\nimport type { ComponentType, FC, ReactNode } from 'react';\nimport { Suspense, lazy } from 'react';\nimport type { VariableMentionItem } from '@/components/Editor/variableMention';\nimport styles from './style.module.scss';\n\nconst RichTextEditor = lazy(() =>\n import('@/components/Editor').then((m) => ({ default: m.RichTextEditor })),\n);\n\nexport type RichTextFieldProps = {\n name: string;\n label?: ReactNode;\n labelTips?: ReactNode | ((props: RichTextFieldProps) => ReactNode);\n rule?: string;\n disabled?: boolean;\n readOnly?: boolean;\n placeholder?: string;\n minHeight?: number;\n enableVariableMention?: boolean;\n variables?: VariableMentionItem[];\n catalogError?: string;\n className?: string;\n /** remount 键(换文档时传入) */\n editorKey?: string;\n [key: string]: unknown;\n};\n\ntype FieldRenderProps = {\n value?: string;\n onChange?: (v: string) => void;\n disabled?: boolean;\n id?: string;\n};\n\ntype KneHooks = {\n useDecorator: (\n opts: Record<string, unknown>,\n ) => (Comp: ComponentType<FieldRenderProps>) => ReactNode;\n};\n\n/**\n * FormInfo 富文本字段:外观对齐 Input;L2 Editor 懒加载;「插入变量」+ 原子色块。\n */\nconst RichTextControl: FC
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/components/FormInfo/RichTextField/index.tsx"],"sourcesContent":["import * as ReactFormAntd from '@kne/react-form-antd';\nimport classNames from 'classnames';\nimport type { ComponentType, FC, ReactNode } from 'react';\nimport { Suspense, lazy } from 'react';\nimport type { VariableMentionItem } from '@/components/Editor/variableMention';\nimport styles from './style.module.scss';\n\nconst RichTextEditor = lazy(() =>\n import('@/components/Editor').then((m) => ({ default: m.RichTextEditor })),\n);\n\nexport type RichTextFieldProps = {\n name: string;\n label?: ReactNode;\n labelTips?: ReactNode | ((props: RichTextFieldProps) => ReactNode);\n rule?: string;\n disabled?: boolean;\n readOnly?: boolean;\n placeholder?: string;\n minHeight?: number;\n enableVariableMention?: boolean;\n variables?: VariableMentionItem[];\n catalogError?: string;\n className?: string;\n /** remount 键(换文档时传入) */\n editorKey?: string;\n [key: string]: unknown;\n};\n\ntype FieldRenderProps = {\n value?: string;\n onChange?: (v: string) => void;\n disabled?: boolean;\n id?: string;\n readOnly?: boolean;\n placeholder?: string;\n minHeight?: number;\n enableVariableMention?: boolean;\n variables?: VariableMentionItem[];\n catalogError?: string;\n className?: string;\n editorKey?: string;\n};\n\ntype KneHooks = {\n useDecorator: (\n opts: Record<string, unknown>,\n ) => (Comp: ComponentType<FieldRenderProps>) => ReactNode;\n};\n\n/**\n * FormInfo 富文本字段:外观对齐 Input;L2 Editor 懒加载;「插入变量」+ 原子色块。\n * 须作为稳定组件类型交给 useDecorator(禁内联函数,否则每键 remount 丢焦)。\n */\nconst RichTextControl: FC<FieldRenderProps> = ({\n value = '',\n onChange,\n disabled,\n readOnly,\n placeholder,\n minHeight = 140,\n enableVariableMention,\n variables,\n catalogError,\n className,\n editorKey,\n id,\n}) => (\n <div\n className={classNames(\n 'marsun-form-rich-text',\n styles['form-rich-text'],\n disabled && styles['form-rich-text-disabled'],\n className,\n )}\n data-field-id={id}\n >\n <Suspense fallback={<div className={styles['form-rich-text-loading']}>加载编辑器…</div>}>\n <RichTextEditor\n key={editorKey || 'rte'}\n value={value}\n onChange={onChange}\n disabled={disabled}\n readOnly={readOnly}\n placeholder={placeholder}\n minHeight={minHeight}\n enableVariableMention={enableVariableMention}\n variables={variables}\n catalogError={catalogError}\n />\n </Suspense>\n </div>\n);\n\nconst RichTextFieldInner: FC<RichTextFieldProps> = (props) => {\n const { useDecorator } = (ReactFormAntd as unknown as { hooks: KneHooks }).hooks;\n const render = useDecorator({\n fieldName: 'richTextEditor',\n ...props,\n });\n return render(RichTextControl);\n};\n\nRichTextFieldInner.displayName = 'RichTextField';\n\nexport const RichTextField = RichTextFieldInner as ComponentType<RichTextFieldProps>;\n\nexport default RichTextField;\n"],"names":["RichTextEditor","lazy","m","RichTextControl","value","onChange","disabled","readOnly","placeholder","minHeight","enableVariableMention","variables","catalogError","className","editorKey","id","jsx","classNames","styles","Suspense","RichTextFieldInner","props","useDecorator","ReactFormAntd","RichTextField"],"mappings":";;;;;AAOA,MAAMA,IAAiBC;AAAA,EAAK,MAC1B,OAAO,uBAAqB,EAAE,KAAK,CAACC,OAAO,EAAE,SAASA,EAAE,iBAAiB;AAC3E,GA6CMC,IAAwC,CAAC;AAAA,EAC7C,OAAAC,IAAQ;AAAA,EACR,UAAAC;AAAA,EACA,UAAAC;AAAA,EACA,UAAAC;AAAA,EACA,aAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,uBAAAC;AAAA,EACA,WAAAC;AAAA,EACA,cAAAC;AAAA,EACA,WAAAC;AAAA,EACA,WAAAC;AAAA,EACA,IAAAC;AACF,MACE,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,WAAWC;AAAA,MACT;AAAA,MACAC,EAAO,gBAAgB;AAAA,MACvBZ,KAAYY,EAAO,yBAAyB;AAAA,MAC5CL;AAAA,IAAA;AAAA,IAEF,iBAAeE;AAAA,IAEf,UAAA,gBAAAC,EAACG,GAAA,EAAS,UAAU,gBAAAH,EAAC,OAAA,EAAI,WAAWE,EAAO,wBAAwB,GAAG,UAAA,SAAA,CAAM,GAC1E,UAAA,gBAAAF;AAAA,MAAChB;AAAA,MAAA;AAAA,QAEC,OAAAI;AAAA,QACA,UAAAC;AAAA,QACA,UAAAC;AAAA,QACA,UAAAC;AAAA,QACA,aAAAC;AAAA,QACA,WAAAC;AAAA,QACA,uBAAAC;AAAA,QACA,WAAAC;AAAA,QACA,cAAAC;AAAA,MAAA;AAAA,MATKE,KAAa;AAAA,IAAA,EAUpB,CACF;AAAA,EAAA;AACF,GAGIM,IAA6C,CAACC,MAAU;AAC5D,QAAM,EAAE,cAAAC,MAAkBC,EAAiD;AAK3E,SAJeD,EAAa;AAAA,IAC1B,WAAW;AAAA,IACX,GAAGD;AAAA,EAAA,CACJ,EACalB,CAAe;AAC/B;AAEAiB,EAAmB,cAAc;AAE1B,MAAMI,IAAgBJ;"}
|