@hkyhy/marsun-components-core 0.1.38 → 0.1.40

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.
@@ -2,7 +2,7 @@ const h = "<think>", m = "</think>", p = new RegExp(
2
2
  h.replace(/[.*+?^${}()|[\]\\]/g, "\\$&") + "([\\s\\S]*?)" + m.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"),
3
3
  "gi"
4
4
  ), c = /<\/?think>/gi;
5
- function t(n) {
5
+ function s(n) {
6
6
  return n.replace(/\n{3,}/g, `
7
7
 
8
8
  `).trimEnd();
@@ -14,10 +14,10 @@ function T(n) {
14
14
  `);
15
15
  return i = i.replace(/```\s*mermaid[ \t]*(?!\n)/gi, "```mermaid\n"), i = i.replace(
16
16
  /```mermaid\n([\s\S]*?)(\n(?:风格说明|Style)[^\n`]*[\s\S]*?)(?=```|$)/gi,
17
- (o, r, s) => `\`\`\`mermaid
17
+ (o, r, t) => `\`\`\`mermaid
18
18
  ${r.trimEnd()}
19
19
  \`\`\`
20
- ${s.trim()}`
20
+ ${t.trim()}`
21
21
  ), i;
22
22
  }
23
23
  function d(n) {
@@ -27,19 +27,19 @@ function w(n, i = !1) {
27
27
  var g;
28
28
  if (!n)
29
29
  return { thinking: "", answer: "", isThinking: i };
30
- const o = n.toLowerCase(), r = o.lastIndexOf(m), s = o.lastIndexOf(h), a = [];
30
+ const o = n.toLowerCase(), r = o.lastIndexOf(m), t = o.lastIndexOf(h), a = [];
31
31
  for (const e of n.matchAll(p)) {
32
32
  const l = (g = e[1]) == null ? void 0 : g.trim();
33
33
  l && a.push(l);
34
34
  }
35
- if (i && r === -1)
35
+ if (i && r === -1 && t !== -1)
36
36
  return {
37
- thinking: t(n.replace(c, "").trim()),
37
+ thinking: s(n.replace(c, "").trim()),
38
38
  answer: "",
39
39
  isThinking: !0
40
40
  };
41
- if (s > r) {
42
- const e = n.slice(0, s).replace(c, "").trim(), l = n.slice(s + h.length).replace(c, "").trim(), k = [
41
+ if (t > r) {
42
+ const e = n.slice(0, t).replace(c, "").trim(), l = n.slice(t + h.length).replace(c, "").trim(), k = [
43
43
  ...e ? [e] : [],
44
44
  ...a,
45
45
  ...l ? [l] : []
@@ -47,29 +47,29 @@ function w(n, i = !1) {
47
47
 
48
48
  `);
49
49
  return {
50
- thinking: t(k),
50
+ thinking: s(k),
51
51
  answer: "",
52
52
  isThinking: i
53
53
  };
54
54
  }
55
55
  if (r !== -1) {
56
- const e = t(
56
+ const e = s(
57
57
  n.slice(r + m.length).replace(c, "").trim()
58
58
  );
59
59
  if (e)
60
60
  return {
61
- thinking: t(a.join(`
61
+ thinking: s(a.join(`
62
62
 
63
63
  `)),
64
64
  answer: e,
65
65
  isThinking: !1
66
66
  };
67
67
  }
68
- const f = t(
68
+ const f = s(
69
69
  n.replace(p, "").replace(c, "").trim()
70
70
  );
71
71
  return {
72
- thinking: t(a.join(`
72
+ thinking: s(a.join(`
73
73
 
74
74
  `)),
75
75
  answer: f,
@@ -79,7 +79,7 @@ function w(n, i = !1) {
79
79
  export {
80
80
  d as hasCitationMarkers,
81
81
  T as normalizeAssistantMarkdown,
82
- t as normalizeDisplayText,
82
+ s as normalizeDisplayText,
83
83
  w as parseAssistantContent
84
84
  };
85
85
  //# sourceMappingURL=messageContent.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"messageContent.js","sources":["../../../../../src/components/AgentHub/Chat/utils/messageContent.ts"],"sourcesContent":["const THINK_OPEN = '<' + 'think>';\nconst THINK_CLOSE = '<' + '/think>';\nconst THINK_BLOCK_RE = new RegExp(\n THINK_OPEN.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&') +\n '([\\\\s\\\\S]*?)' +\n THINK_CLOSE.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'),\n 'gi',\n);\nconst THINK_TAG_RE = /<\\/?think>/gi;\n\nexport interface ParsedAssistantContent {\n /** Reasoning text extracted from think blocks */\n thinking: string;\n /** User-facing answer (outside think blocks) */\n answer: string;\n /** Stream still inside an unclosed think block */\n isThinking: boolean;\n}\n\n/** Collapse excessive blank lines and trim trailing whitespace for display */\nexport function normalizeDisplayText(text: string): string {\n return text.replace(/\\n{3,}/g, '\\n\\n').trimEnd();\n}\n\nconst CITATION_MARKER_TEST_RE = /\\[ID[:-]\\d+\\]/;\n\n/** Normalize assistant markdown from persisted sessions (fences, mermaid blocks). */\nexport function normalizeAssistantMarkdown(content: string): string {\n if (!content) return content;\n\n let text = content.replace(/\\r\\n/g, '\\n');\n\n // Ensure newline after ```mermaid opening fence\n text = text.replace(/```\\s*mermaid[ \\t]*(?!\\n)/gi, '```mermaid\\n');\n\n // Move trailing prose after mermaid block out of the fence when closing ``` is missing\n text = text.replace(\n /```mermaid\\n([\\s\\S]*?)(\\n(?:风格说明|Style)[^\\n`]*[\\s\\S]*?)(?=```|$)/gi,\n (_, chart, prose) => {\n const trimmedChart = chart.trimEnd();\n return `\\`\\`\\`mermaid\\n${trimmedChart}\\n\\`\\`\\`\\n${prose.trim()}`;\n },\n );\n\n return text;\n}\n\nexport function hasCitationMarkers(content: string): boolean {\n return CITATION_MARKER_TEST_RE.test(content);\n}\n\n/**\n * Split assistant output into hidden reasoning and visible answer.\n * RAGFlow / reasoning models may wrap chain-of-thought in think tags.\n */\nexport function parseAssistantContent(content: string, streaming = false): ParsedAssistantContent {\n if (!content) {\n return { thinking: '', answer: '', isThinking: streaming };\n }\n\n const lower = content.toLowerCase();\n const lastClose = lower.lastIndexOf(THINK_CLOSE);\n const lastOpen = lower.lastIndexOf(THINK_OPEN);\n\n const thinkingParts: string[] = [];\n for (const match of content.matchAll(THINK_BLOCK_RE)) {\n const part = match[1]?.trim();\n if (part) thinkingParts.push(part);\n }\n\n // Streaming: before arrives, treat all output as reasoning\n if (streaming && lastClose === -1) {\n return {\n thinking: normalizeDisplayText(content.replace(THINK_TAG_RE, '').trim()),\n answer: '',\n isThinking: true,\n };\n }\n\n // Streaming: unclosed think block at the end\n if (lastOpen > lastClose) {\n const beforeOpen = content.slice(0, lastOpen).replace(THINK_TAG_RE, '').trim();\n const insideThink = content\n .slice(lastOpen + THINK_OPEN.length)\n .replace(THINK_TAG_RE, '')\n .trim();\n const thinking = [\n ...(beforeOpen ? [beforeOpen] : []),\n ...thinkingParts,\n ...(insideThink ? [insideThink] : []),\n ].join('\\n\\n');\n\n return {\n thinking: normalizeDisplayText(thinking),\n answer: '',\n isThinking: streaming,\n };\n }\n\n // Prefer final answer after the last closing think tag\n if (lastClose !== -1) {\n const answer = normalizeDisplayText(\n content\n .slice(lastClose + THINK_CLOSE.length)\n .replace(THINK_TAG_RE, '')\n .trim(),\n );\n if (answer) {\n return {\n thinking: normalizeDisplayText(thinkingParts.join('\\n\\n')),\n answer,\n isThinking: false,\n };\n }\n }\n\n const answer = normalizeDisplayText(\n content.replace(THINK_BLOCK_RE, '').replace(THINK_TAG_RE, '').trim(),\n );\n\n return {\n thinking: normalizeDisplayText(thinkingParts.join('\\n\\n')),\n answer,\n isThinking: false,\n };\n}\n"],"names":["THINK_OPEN","THINK_CLOSE","THINK_BLOCK_RE","THINK_TAG_RE","normalizeDisplayText","text","CITATION_MARKER_TEST_RE","normalizeAssistantMarkdown","content","_","chart","prose","hasCitationMarkers","parseAssistantContent","streaming","_a","lower","lastClose","lastOpen","thinkingParts","match","part","beforeOpen","insideThink","thinking","answer"],"mappings":"AAAA,MAAMA,IAAa,WACbC,IAAc,YACdC,IAAiB,IAAI;AAAA,EACzBF,EAAW,QAAQ,uBAAuB,MAAM,IAC9C,iBACAC,EAAY,QAAQ,uBAAuB,MAAM;AAAA,EACnD;AACF,GACME,IAAe;AAYd,SAASC,EAAqBC,GAAsB;AACzD,SAAOA,EAAK,QAAQ,WAAW;AAAA;AAAA,CAAM,EAAE,QAAA;AACzC;AAEA,MAAMC,IAA0B;AAGzB,SAASC,EAA2BC,GAAyB;AAClE,MAAI,CAACA,EAAS,QAAOA;AAErB,MAAIH,IAAOG,EAAQ,QAAQ,SAAS;AAAA,CAAI;AAGxC,SAAAH,IAAOA,EAAK,QAAQ,+BAA+B,cAAc,GAGjEA,IAAOA,EAAK;AAAA,IACV;AAAA,IACA,CAACI,GAAGC,GAAOC,MAEF;AAAA,EADcD,EAAM,QAAA,CACU;AAAA;AAAA,EAAaC,EAAM,MAAM;AAAA,EAChE,GAGKN;AACT;AAEO,SAASO,EAAmBJ,GAA0B;AAC3D,SAAOF,EAAwB,KAAKE,CAAO;AAC7C;AAMO,SAASK,EAAsBL,GAAiBM,IAAY,IAA+B;AAvDlG,MAAAC;AAwDE,MAAI,CAACP;AACH,WAAO,EAAE,UAAU,IAAI,QAAQ,IAAI,YAAYM,EAAA;AAGjD,QAAME,IAAQR,EAAQ,YAAA,GAChBS,IAAYD,EAAM,YAAYf,CAAW,GACzCiB,IAAWF,EAAM,YAAYhB,CAAU,GAEvCmB,IAA0B,CAAA;AAChC,aAAWC,KAASZ,EAAQ,SAASN,CAAc,GAAG;AACpD,UAAMmB,KAAON,IAAAK,EAAM,CAAC,MAAP,gBAAAL,EAAU;AACvB,IAAIM,KAAMF,EAAc,KAAKE,CAAI;AAAA,EACnC;AAGA,MAAIP,KAAaG,MAAc;AAC7B,WAAO;AAAA,MACL,UAAUb,EAAqBI,EAAQ,QAAQL,GAAc,EAAE,EAAE,MAAM;AAAA,MACvE,QAAQ;AAAA,MACR,YAAY;AAAA,IAAA;AAKhB,MAAIe,IAAWD,GAAW;AACxB,UAAMK,IAAad,EAAQ,MAAM,GAAGU,CAAQ,EAAE,QAAQf,GAAc,EAAE,EAAE,KAAA,GAClEoB,IAAcf,EACjB,MAAMU,IAAWlB,EAAW,MAAM,EAClC,QAAQG,GAAc,EAAE,EACxB,KAAA,GACGqB,IAAW;AAAA,MACf,GAAIF,IAAa,CAACA,CAAU,IAAI,CAAA;AAAA,MAChC,GAAGH;AAAA,MACH,GAAII,IAAc,CAACA,CAAW,IAAI,CAAA;AAAA,IAAC,EACnC,KAAK;AAAA;AAAA,CAAM;AAEb,WAAO;AAAA,MACL,UAAUnB,EAAqBoB,CAAQ;AAAA,MACvC,QAAQ;AAAA,MACR,YAAYV;AAAA,IAAA;AAAA,EAEhB;AAGA,MAAIG,MAAc,IAAI;AACpB,UAAMQ,IAASrB;AAAA,MACbI,EACG,MAAMS,IAAYhB,EAAY,MAAM,EACpC,QAAQE,GAAc,EAAE,EACxB,KAAA;AAAA,IAAK;AAEV,QAAIsB;AACF,aAAO;AAAA,QACL,UAAUrB,EAAqBe,EAAc,KAAK;AAAA;AAAA,CAAM,CAAC;AAAA,QACzD,QAAAM;AAAAA,QACA,YAAY;AAAA,MAAA;AAAA,EAGlB;AAEA,QAAMA,IAASrB;AAAA,IACbI,EAAQ,QAAQN,GAAgB,EAAE,EAAE,QAAQC,GAAc,EAAE,EAAE,KAAA;AAAA,EAAK;AAGrE,SAAO;AAAA,IACL,UAAUC,EAAqBe,EAAc,KAAK;AAAA;AAAA,CAAM,CAAC;AAAA,IACzD,QAAAM;AAAA,IACA,YAAY;AAAA,EAAA;AAEhB;"}
1
+ {"version":3,"file":"messageContent.js","sources":["../../../../../src/components/AgentHub/Chat/utils/messageContent.ts"],"sourcesContent":["const THINK_OPEN = '<' + 'think>';\nconst THINK_CLOSE = '<' + '/think>';\nconst THINK_BLOCK_RE = new RegExp(\n THINK_OPEN.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&') +\n '([\\\\s\\\\S]*?)' +\n THINK_CLOSE.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'),\n 'gi',\n);\nconst THINK_TAG_RE = /<\\/?think>/gi;\n\nexport interface ParsedAssistantContent {\n /** Reasoning text extracted from think blocks */\n thinking: string;\n /** User-facing answer (outside think blocks) */\n answer: string;\n /** Stream still inside an unclosed think block */\n isThinking: boolean;\n}\n\n/** Collapse excessive blank lines and trim trailing whitespace for display */\nexport function normalizeDisplayText(text: string): string {\n return text.replace(/\\n{3,}/g, '\\n\\n').trimEnd();\n}\n\nconst CITATION_MARKER_TEST_RE = /\\[ID[:-]\\d+\\]/;\n\n/** Normalize assistant markdown from persisted sessions (fences, mermaid blocks). */\nexport function normalizeAssistantMarkdown(content: string): string {\n if (!content) return content;\n\n let text = content.replace(/\\r\\n/g, '\\n');\n\n // Ensure newline after ```mermaid opening fence\n text = text.replace(/```\\s*mermaid[ \\t]*(?!\\n)/gi, '```mermaid\\n');\n\n // Move trailing prose after mermaid block out of the fence when closing ``` is missing\n text = text.replace(\n /```mermaid\\n([\\s\\S]*?)(\\n(?:风格说明|Style)[^\\n`]*[\\s\\S]*?)(?=```|$)/gi,\n (_, chart, prose) => {\n const trimmedChart = chart.trimEnd();\n return `\\`\\`\\`mermaid\\n${trimmedChart}\\n\\`\\`\\`\\n${prose.trim()}`;\n },\n );\n\n return text;\n}\n\nexport function hasCitationMarkers(content: string): boolean {\n return CITATION_MARKER_TEST_RE.test(content);\n}\n\n/**\n * Split assistant output into hidden reasoning and visible answer.\n * RAGFlow / reasoning models may wrap chain-of-thought in think tags.\n */\nexport function parseAssistantContent(content: string, streaming = false): ParsedAssistantContent {\n if (!content) {\n return { thinking: '', answer: '', isThinking: streaming };\n }\n\n const lower = content.toLowerCase();\n const lastClose = lower.lastIndexOf(THINK_CLOSE);\n const lastOpen = lower.lastIndexOf(THINK_OPEN);\n\n const thinkingParts: string[] = [];\n for (const match of content.matchAll(THINK_BLOCK_RE)) {\n const part = match[1]?.trim();\n if (part) thinkingParts.push(part);\n }\n\n // Streaming: unclosed think block — treat buffered text as reasoning until </think>\n if (streaming && lastClose === -1 && lastOpen !== -1) {\n return {\n thinking: normalizeDisplayText(content.replace(THINK_TAG_RE, '').trim()),\n answer: '',\n isThinking: true,\n };\n }\n\n // Streaming: unclosed think block at the end (open after last close)\n if (lastOpen > lastClose) {\n const beforeOpen = content.slice(0, lastOpen).replace(THINK_TAG_RE, '').trim();\n const insideThink = content\n .slice(lastOpen + THINK_OPEN.length)\n .replace(THINK_TAG_RE, '')\n .trim();\n const thinking = [\n ...(beforeOpen ? [beforeOpen] : []),\n ...thinkingParts,\n ...(insideThink ? [insideThink] : []),\n ].join('\\n\\n');\n\n return {\n thinking: normalizeDisplayText(thinking),\n answer: '',\n isThinking: streaming,\n };\n }\n\n // Prefer final answer after the last closing think tag\n if (lastClose !== -1) {\n const answer = normalizeDisplayText(\n content\n .slice(lastClose + THINK_CLOSE.length)\n .replace(THINK_TAG_RE, '')\n .trim(),\n );\n if (answer) {\n return {\n thinking: normalizeDisplayText(thinkingParts.join('\\n\\n')),\n answer,\n isThinking: false,\n };\n }\n }\n\n const answer = normalizeDisplayText(\n content.replace(THINK_BLOCK_RE, '').replace(THINK_TAG_RE, '').trim(),\n );\n\n return {\n thinking: normalizeDisplayText(thinkingParts.join('\\n\\n')),\n answer,\n isThinking: false,\n };\n}\n"],"names":["THINK_OPEN","THINK_CLOSE","THINK_BLOCK_RE","THINK_TAG_RE","normalizeDisplayText","text","CITATION_MARKER_TEST_RE","normalizeAssistantMarkdown","content","_","chart","prose","hasCitationMarkers","parseAssistantContent","streaming","_a","lower","lastClose","lastOpen","thinkingParts","match","part","beforeOpen","insideThink","thinking","answer"],"mappings":"AAAA,MAAMA,IAAa,WACbC,IAAc,YACdC,IAAiB,IAAI;AAAA,EACzBF,EAAW,QAAQ,uBAAuB,MAAM,IAC9C,iBACAC,EAAY,QAAQ,uBAAuB,MAAM;AAAA,EACnD;AACF,GACME,IAAe;AAYd,SAASC,EAAqBC,GAAsB;AACzD,SAAOA,EAAK,QAAQ,WAAW;AAAA;AAAA,CAAM,EAAE,QAAA;AACzC;AAEA,MAAMC,IAA0B;AAGzB,SAASC,EAA2BC,GAAyB;AAClE,MAAI,CAACA,EAAS,QAAOA;AAErB,MAAIH,IAAOG,EAAQ,QAAQ,SAAS;AAAA,CAAI;AAGxC,SAAAH,IAAOA,EAAK,QAAQ,+BAA+B,cAAc,GAGjEA,IAAOA,EAAK;AAAA,IACV;AAAA,IACA,CAACI,GAAGC,GAAOC,MAEF;AAAA,EADcD,EAAM,QAAA,CACU;AAAA;AAAA,EAAaC,EAAM,MAAM;AAAA,EAChE,GAGKN;AACT;AAEO,SAASO,EAAmBJ,GAA0B;AAC3D,SAAOF,EAAwB,KAAKE,CAAO;AAC7C;AAMO,SAASK,EAAsBL,GAAiBM,IAAY,IAA+B;AAvDlG,MAAAC;AAwDE,MAAI,CAACP;AACH,WAAO,EAAE,UAAU,IAAI,QAAQ,IAAI,YAAYM,EAAA;AAGjD,QAAME,IAAQR,EAAQ,YAAA,GAChBS,IAAYD,EAAM,YAAYf,CAAW,GACzCiB,IAAWF,EAAM,YAAYhB,CAAU,GAEvCmB,IAA0B,CAAA;AAChC,aAAWC,KAASZ,EAAQ,SAASN,CAAc,GAAG;AACpD,UAAMmB,KAAON,IAAAK,EAAM,CAAC,MAAP,gBAAAL,EAAU;AACvB,IAAIM,KAAMF,EAAc,KAAKE,CAAI;AAAA,EACnC;AAGA,MAAIP,KAAaG,MAAc,MAAMC,MAAa;AAChD,WAAO;AAAA,MACL,UAAUd,EAAqBI,EAAQ,QAAQL,GAAc,EAAE,EAAE,MAAM;AAAA,MACvE,QAAQ;AAAA,MACR,YAAY;AAAA,IAAA;AAKhB,MAAIe,IAAWD,GAAW;AACxB,UAAMK,IAAad,EAAQ,MAAM,GAAGU,CAAQ,EAAE,QAAQf,GAAc,EAAE,EAAE,KAAA,GAClEoB,IAAcf,EACjB,MAAMU,IAAWlB,EAAW,MAAM,EAClC,QAAQG,GAAc,EAAE,EACxB,KAAA,GACGqB,IAAW;AAAA,MACf,GAAIF,IAAa,CAACA,CAAU,IAAI,CAAA;AAAA,MAChC,GAAGH;AAAA,MACH,GAAII,IAAc,CAACA,CAAW,IAAI,CAAA;AAAA,IAAC,EACnC,KAAK;AAAA;AAAA,CAAM;AAEb,WAAO;AAAA,MACL,UAAUnB,EAAqBoB,CAAQ;AAAA,MACvC,QAAQ;AAAA,MACR,YAAYV;AAAA,IAAA;AAAA,EAEhB;AAGA,MAAIG,MAAc,IAAI;AACpB,UAAMQ,IAASrB;AAAA,MACbI,EACG,MAAMS,IAAYhB,EAAY,MAAM,EACpC,QAAQE,GAAc,EAAE,EACxB,KAAA;AAAA,IAAK;AAEV,QAAIsB;AACF,aAAO;AAAA,QACL,UAAUrB,EAAqBe,EAAc,KAAK;AAAA;AAAA,CAAM,CAAC;AAAA,QACzD,QAAAM;AAAAA,QACA,YAAY;AAAA,MAAA;AAAA,EAGlB;AAEA,QAAMA,IAASrB;AAAA,IACbI,EAAQ,QAAQN,GAAgB,EAAE,EAAE,QAAQC,GAAc,EAAE,EAAE,KAAA;AAAA,EAAK;AAGrE,SAAO;AAAA,IACL,UAAUC,EAAqBe,EAAc,KAAK;AAAA;AAAA,CAAM,CAAC;AAAA,IACzD,QAAAM;AAAA,IACA,YAAY;AAAA,EAAA;AAEhB;"}
@@ -0,0 +1,38 @@
1
+ import { default as React, ReactNode } from 'react';
2
+ export type OrgTreeNode = {
3
+ id: string;
4
+ name: string;
5
+ parentId?: string | null;
6
+ children?: OrgTreeNode[];
7
+ /** 名称旁附加文案(如 mapped) */
8
+ nameExtra?: ReactNode;
9
+ };
10
+ export type OrgTreeProps = {
11
+ nodes: OrgTreeNode[];
12
+ loading?: boolean;
13
+ /** 展示节点内增删改操作 */
14
+ editable?: boolean;
15
+ className?: string;
16
+ onAdd?: (parentId: string) => void;
17
+ onEdit?: (node: {
18
+ id: string;
19
+ name: string;
20
+ parentId: string | null;
21
+ }) => void;
22
+ /** 确认删除后回调;由业务执行 API */
23
+ onDelete?: (node: {
24
+ id: string;
25
+ name: string;
26
+ }) => void | Promise<void>;
27
+ /** 删除确认文案 */
28
+ deleteConfirmTitle?: string;
29
+ /** 确认钮文案(软禁用场景可传「禁用」) */
30
+ deleteOkText?: string;
31
+ deleteOkType?: 'primary' | 'danger';
32
+ };
33
+ /**
34
+ * 组织树(对齐 Assets 组织架构行为):默认展开、节点 hover 增删改。
35
+ * 纯 UI,无业务 API。
36
+ */
37
+ declare const OrgTree: React.FC<OrgTreeProps>;
38
+ export default OrgTree;
@@ -0,0 +1,123 @@
1
+ import { jsx as a, jsxs as c } from "react/jsx-runtime";
2
+ import { Plus as C, Pencil as E, Trash2 as K } from "../Icons/index.js";
3
+ import { Spin as w, Tree as S, Tooltip as j, Space as v, Button as p, Popconfirm as I } from "antd";
4
+ import l from "classnames";
5
+ import { useMemo as B, useState as L, useEffect as M } from "react";
6
+ import i from "./style.module.scss.js";
7
+ function P(t) {
8
+ var o;
9
+ const n = [];
10
+ for (const s of t)
11
+ n.push(s.id), (o = s.children) != null && o.length && n.push(...P(s.children));
12
+ return n;
13
+ }
14
+ const J = ({
15
+ nodes: t,
16
+ loading: n = !1,
17
+ editable: o = !1,
18
+ className: s,
19
+ onAdd: u,
20
+ onEdit: g,
21
+ onDelete: h,
22
+ deleteConfirmTitle: k = "确认删除该节点?",
23
+ deleteOkText: f = "删除",
24
+ deleteOkType: z = "danger"
25
+ }) => {
26
+ const d = B(() => P(t), [t]), [T, x] = L([]);
27
+ M(() => {
28
+ x(d);
29
+ }, [d]);
30
+ const y = (m) => m.map((e) => {
31
+ var N;
32
+ return {
33
+ key: e.id,
34
+ title: /* @__PURE__ */ c("div", { className: l("marsun-org-tree-row", i["marsun-org-tree-row"]), children: [
35
+ /* @__PURE__ */ a(j, { title: e.name, children: /* @__PURE__ */ c("span", { className: l("marsun-org-tree-name", i["marsun-org-tree-name"]), children: [
36
+ e.name,
37
+ e.nameExtra ? /* @__PURE__ */ a(
38
+ "span",
39
+ {
40
+ className: l("marsun-org-tree-extra", i["marsun-org-tree-extra"]),
41
+ children: e.nameExtra
42
+ }
43
+ ) : null
44
+ ] }) }),
45
+ o ? /* @__PURE__ */ c(
46
+ v,
47
+ {
48
+ size: 0,
49
+ className: l("marsun-org-tree-actions", i["marsun-org-tree-actions"]),
50
+ children: [
51
+ u ? /* @__PURE__ */ a(
52
+ p,
53
+ {
54
+ type: "text",
55
+ size: "small",
56
+ "aria-label": "添加子节点",
57
+ icon: /* @__PURE__ */ a(C, { size: 14 }),
58
+ onClick: (r) => {
59
+ r.stopPropagation(), u(e.id);
60
+ }
61
+ }
62
+ ) : null,
63
+ g ? /* @__PURE__ */ a(
64
+ p,
65
+ {
66
+ type: "text",
67
+ size: "small",
68
+ "aria-label": "编辑",
69
+ icon: /* @__PURE__ */ a(E, { size: 14 }),
70
+ onClick: (r) => {
71
+ r.stopPropagation(), g({
72
+ id: e.id,
73
+ name: e.name,
74
+ parentId: e.parentId ?? null
75
+ });
76
+ }
77
+ }
78
+ ) : null,
79
+ h ? /* @__PURE__ */ a(
80
+ I,
81
+ {
82
+ title: k,
83
+ okText: f,
84
+ okType: z,
85
+ cancelText: "取消",
86
+ onConfirm: (r) => (r == null || r.stopPropagation(), h({ id: e.id, name: e.name })),
87
+ onCancel: (r) => r == null ? void 0 : r.stopPropagation(),
88
+ children: /* @__PURE__ */ a(
89
+ p,
90
+ {
91
+ type: "text",
92
+ size: "small",
93
+ danger: !0,
94
+ "aria-label": f,
95
+ icon: /* @__PURE__ */ a(K, { size: 14 }),
96
+ onClick: (r) => r.stopPropagation()
97
+ }
98
+ )
99
+ }
100
+ ) : null
101
+ ]
102
+ }
103
+ ) : null
104
+ ] }),
105
+ children: (N = e.children) != null && N.length ? y(e.children) : void 0
106
+ };
107
+ }), b = y(t);
108
+ return /* @__PURE__ */ a(w, { spinning: n, children: /* @__PURE__ */ a(
109
+ S,
110
+ {
111
+ className: l("marsun-org-tree", i["marsun-org-tree"], s),
112
+ treeData: b,
113
+ expandedKeys: T,
114
+ onExpand: (m) => x(m),
115
+ showLine: !0,
116
+ blockNode: !0
117
+ }
118
+ ) });
119
+ };
120
+ export {
121
+ J as default
122
+ };
123
+ //# sourceMappingURL=OrgTree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OrgTree.js","sources":["../../../src/components/OrgTree/OrgTree.tsx"],"sourcesContent":["import { Pencil, Plus, Trash2 } from '../Icons';\nimport { Button, Popconfirm, Space, Spin, Tooltip, Tree } from 'antd';\nimport type { DataNode } from 'antd/es/tree';\nimport classNames from 'classnames';\nimport React, { useEffect, useMemo, useState, type Key, type ReactNode } from 'react';\nimport styles from './style.module.scss';\n\nexport type OrgTreeNode = {\n id: string;\n name: string;\n parentId?: string | null;\n children?: OrgTreeNode[];\n /** 名称旁附加文案(如 mapped) */\n nameExtra?: ReactNode;\n};\n\nexport type OrgTreeProps = {\n nodes: OrgTreeNode[];\n loading?: boolean;\n /** 展示节点内增删改操作 */\n editable?: boolean;\n className?: string;\n onAdd?: (parentId: string) => void;\n onEdit?: (node: { id: string; name: string; parentId: string | null }) => void;\n /** 确认删除后回调;由业务执行 API */\n onDelete?: (node: { id: string; name: string }) => void | Promise<void>;\n /** 删除确认文案 */\n deleteConfirmTitle?: string;\n /** 确认钮文案(软禁用场景可传「禁用」) */\n deleteOkText?: string;\n deleteOkType?: 'primary' | 'danger';\n};\n\nfunction collectAllKeys(nodes: OrgTreeNode[]): string[] {\n const keys: string[] = [];\n for (const n of nodes) {\n keys.push(n.id);\n if (n.children?.length) keys.push(...collectAllKeys(n.children));\n }\n return keys;\n}\n\n/**\n * 组织树(对齐 Assets 组织架构行为):默认展开、节点 hover 增删改。\n * 纯 UI,无业务 API。\n */\nconst OrgTree: React.FC<OrgTreeProps> = ({\n nodes,\n loading = false,\n editable = false,\n className,\n onAdd,\n onEdit,\n onDelete,\n deleteConfirmTitle = '确认删除该节点?',\n deleteOkText = '删除',\n deleteOkType = 'danger',\n}) => {\n const allKeys = useMemo(() => collectAllKeys(nodes), [nodes]);\n const [expandedKeys, setExpandedKeys] = useState<Key[]>([]);\n\n useEffect(() => {\n setExpandedKeys(allKeys);\n }, [allKeys]);\n\n const buildTreeNodes = (list: OrgTreeNode[]): DataNode[] =>\n list.map((node) => ({\n key: node.id,\n title: (\n <div className={classNames('marsun-org-tree-row', styles['marsun-org-tree-row'])}>\n <Tooltip title={node.name}>\n <span className={classNames('marsun-org-tree-name', styles['marsun-org-tree-name'])}>\n {node.name}\n {node.nameExtra ? (\n <span\n className={classNames('marsun-org-tree-extra', styles['marsun-org-tree-extra'])}\n >\n {node.nameExtra}\n </span>\n ) : null}\n </span>\n </Tooltip>\n {editable ? (\n <Space\n size={0}\n className={classNames('marsun-org-tree-actions', styles['marsun-org-tree-actions'])}\n >\n {onAdd ? (\n <Button\n type=\"text\"\n size=\"small\"\n aria-label=\"添加子节点\"\n icon={<Plus size={14} />}\n onClick={(e) => {\n e.stopPropagation();\n onAdd(node.id);\n }}\n />\n ) : null}\n {onEdit ? (\n <Button\n type=\"text\"\n size=\"small\"\n aria-label=\"编辑\"\n icon={<Pencil size={14} />}\n onClick={(e) => {\n e.stopPropagation();\n onEdit({\n id: node.id,\n name: node.name,\n parentId: node.parentId ?? null,\n });\n }}\n />\n ) : null}\n {onDelete ? (\n <Popconfirm\n title={deleteConfirmTitle}\n okText={deleteOkText}\n okType={deleteOkType}\n cancelText=\"取消\"\n onConfirm={(e) => {\n e?.stopPropagation();\n return onDelete({ id: node.id, name: node.name });\n }}\n onCancel={(e) => e?.stopPropagation()}\n >\n <Button\n type=\"text\"\n size=\"small\"\n danger\n aria-label={deleteOkText}\n icon={<Trash2 size={14} />}\n onClick={(e) => e.stopPropagation()}\n />\n </Popconfirm>\n ) : null}\n </Space>\n ) : null}\n </div>\n ),\n children: node.children?.length ? buildTreeNodes(node.children) : undefined,\n }));\n\n const treeData = buildTreeNodes(nodes);\n\n return (\n <Spin spinning={loading}>\n <Tree\n className={classNames('marsun-org-tree', styles['marsun-org-tree'], className)}\n treeData={treeData}\n expandedKeys={expandedKeys}\n onExpand={(keys) => setExpandedKeys(keys)}\n showLine\n blockNode\n />\n </Spin>\n );\n};\n\nexport default OrgTree;\n"],"names":["collectAllKeys","nodes","keys","n","_a","OrgTree","loading","editable","className","onAdd","onEdit","onDelete","deleteConfirmTitle","deleteOkText","deleteOkType","allKeys","useMemo","expandedKeys","setExpandedKeys","useState","useEffect","buildTreeNodes","list","node","classNames","styles","jsx","Tooltip","jsxs","Space","Button","Plus","e","Pencil","Popconfirm","Trash2","treeData","Spin","Tree"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { default as OrgTree, default } from './OrgTree';
2
+ export type { OrgTreeNode, OrgTreeProps } from './OrgTree';
@@ -0,0 +1,11 @@
1
+ const r = {
2
+ "marsun-org-tree": "_marsun-org-tree_1hg7h_2",
3
+ "marsun-org-tree-row": "_marsun-org-tree-row_1hg7h_10",
4
+ "marsun-org-tree-actions": "_marsun-org-tree-actions_1hg7h_18",
5
+ "marsun-org-tree-name": "_marsun-org-tree-name_1hg7h_22",
6
+ "marsun-org-tree-extra": "_marsun-org-tree-extra_1hg7h_32"
7
+ };
8
+ export {
9
+ r as default
10
+ };
11
+ //# sourceMappingURL=style.module.scss.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;"}
@@ -0,0 +1,28 @@
1
+ import { TabsProps } from 'antd';
2
+ import { CSSProperties, ReactNode } from 'react';
3
+ export type StateBarType = 'tab' | 'radio' | 'step';
4
+ export type StateBarOption = {
5
+ key: string;
6
+ /** 选项卡标题(优先于 label) */
7
+ tab?: ReactNode;
8
+ label?: ReactNode;
9
+ children?: ReactNode;
10
+ disabled?: boolean;
11
+ className?: string;
12
+ style?: CSSProperties;
13
+ };
14
+ export type StateBarProps = Omit<TabsProps, 'items' | 'type'> & {
15
+ /** 状态项列表 */
16
+ stateOption?: StateBarOption[];
17
+ /** 展示样式 */
18
+ type?: StateBarType;
19
+ /** 底部线延展至容器全宽 */
20
+ isInner?: boolean;
21
+ className?: string;
22
+ };
23
+ /**
24
+ * 基于 antd Tabs 的状态栏(对齐 kne-union StateBar)。
25
+ * 无 children 时仅作切换条(隐藏 content-holder);有 children 时展示面板。
26
+ */
27
+ declare const StateBar: React.FC<StateBarProps>;
28
+ export default StateBar;
@@ -0,0 +1,43 @@
1
+ import { jsx as d } from "react/jsx-runtime";
2
+ import { Tabs as f } from "antd";
3
+ import h from "classnames";
4
+ import a from "./style.module.scss.js";
5
+ const N = ({
6
+ className: r,
7
+ type: s = "tab",
8
+ stateOption: t = [],
9
+ isInner: o,
10
+ style: l,
11
+ ...m
12
+ }) => {
13
+ const n = t.some((e) => e.children != null);
14
+ return /* @__PURE__ */ d(
15
+ f,
16
+ {
17
+ ...m,
18
+ "data-testid": "components-core-state-bar",
19
+ animated: !1,
20
+ className: h(
21
+ "marsun-state-bar",
22
+ a["state-bar"],
23
+ a[`tab-${s}-control`],
24
+ o && a["inner-state-bar"],
25
+ n && a["has-children"],
26
+ r
27
+ ),
28
+ style: {
29
+ "--total-count": t.length,
30
+ ...l
31
+ },
32
+ items: t.map(({ tab: e, label: c, key: i, ...b }) => ({
33
+ key: i,
34
+ label: e ?? c,
35
+ ...b
36
+ }))
37
+ }
38
+ );
39
+ };
40
+ export {
41
+ N as default
42
+ };
43
+ //# sourceMappingURL=StateBar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StateBar.js","sources":["../../../src/components/StateBar/StateBar.tsx"],"sourcesContent":["import { Tabs } from 'antd';\nimport type { TabsProps } from 'antd';\nimport classNames from 'classnames';\nimport type { CSSProperties, ReactNode } from 'react';\nimport styles from './style.module.scss';\n\nexport type StateBarType = 'tab' | 'radio' | 'step';\n\nexport type StateBarOption = {\n key: string;\n /** 选项卡标题(优先于 label) */\n tab?: ReactNode;\n label?: ReactNode;\n children?: ReactNode;\n disabled?: boolean;\n className?: string;\n style?: CSSProperties;\n};\n\nexport type StateBarProps = Omit<TabsProps, 'items' | 'type'> & {\n /** 状态项列表 */\n stateOption?: StateBarOption[];\n /** 展示样式 */\n type?: StateBarType;\n /** 底部线延展至容器全宽 */\n isInner?: boolean;\n className?: string;\n};\n\n/**\n * 基于 antd Tabs 的状态栏(对齐 kne-union StateBar)。\n * 无 children 时仅作切换条(隐藏 content-holder);有 children 时展示面板。\n */\nconst StateBar: React.FC<StateBarProps> = ({\n className,\n type = 'tab',\n stateOption = [],\n isInner,\n style,\n ...props\n}) => {\n const hasChildren = stateOption.some((item) => item.children != null);\n\n return (\n <Tabs\n {...props}\n data-testid=\"components-core-state-bar\"\n animated={false}\n className={classNames(\n 'marsun-state-bar',\n styles['state-bar'],\n styles[`tab-${type}-control`],\n isInner && styles['inner-state-bar'],\n hasChildren && styles['has-children'],\n className,\n )}\n style={\n {\n ['--total-count' as string]: stateOption.length,\n ...style,\n } as CSSProperties\n }\n items={stateOption.map(({ tab, label, key, ...rest }) => ({\n key,\n label: tab ?? label,\n ...rest,\n }))}\n />\n );\n};\n\nexport default StateBar;\n"],"names":["StateBar","className","type","stateOption","isInner","style","props","hasChildren","item","jsx","Tabs","classNames","styles","tab","label","key","rest"],"mappings":";;;;AAiCA,MAAMA,IAAoC,CAAC;AAAA,EACzC,WAAAC;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,aAAAC,IAAc,CAAA;AAAA,EACd,SAAAC;AAAA,EACA,OAAAC;AAAA,EACA,GAAGC;AACL,MAAM;AACJ,QAAMC,IAAcJ,EAAY,KAAK,CAACK,MAASA,EAAK,YAAY,IAAI;AAEpE,SACE,gBAAAC;AAAA,IAACC;AAAA,IAAA;AAAA,MACE,GAAGJ;AAAA,MACJ,eAAY;AAAA,MACZ,UAAU;AAAA,MACV,WAAWK;AAAA,QACT;AAAA,QACAC,EAAO,WAAW;AAAA,QAClBA,EAAO,OAAOV,CAAI,UAAU;AAAA,QAC5BE,KAAWQ,EAAO,iBAAiB;AAAA,QACnCL,KAAeK,EAAO,cAAc;AAAA,QACpCX;AAAA,MAAA;AAAA,MAEF,OACE;AAAA,QACG,iBAA4BE,EAAY;AAAA,QACzC,GAAGE;AAAA,MAAA;AAAA,MAGP,OAAOF,EAAY,IAAI,CAAC,EAAE,KAAAU,GAAK,OAAAC,GAAO,KAAAC,GAAK,GAAGC,SAAY;AAAA,QACxD,KAAAD;AAAA,QACA,OAAOF,KAAOC;AAAA,QACd,GAAGE;AAAA,MAAA,EACH;AAAA,IAAA;AAAA,EAAA;AAGR;"}
@@ -0,0 +1,2 @@
1
+ export { default as StateBar, default } from './StateBar';
2
+ export type { StateBarOption, StateBarProps, StateBarType } from './StateBar';
@@ -0,0 +1,12 @@
1
+ const t = {
2
+ "state-bar": "_state-bar_nrtjt_1",
3
+ "has-children": "_has-children_nrtjt_7",
4
+ "tab-tab-control": "_tab-tab-control_nrtjt_14",
5
+ "tab-radio-control": "_tab-radio-control_nrtjt_21",
6
+ "tab-step-control": "_tab-step-control_nrtjt_55",
7
+ "inner-state-bar": "_inner-state-bar_nrtjt_145"
8
+ };
9
+ export {
10
+ t as default
11
+ };
12
+ //# sourceMappingURL=style.module.scss.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
@@ -8,6 +8,8 @@ export * from './InteractiveBlock';
8
8
  export * from './Layout';
9
9
  export * from './Modal';
10
10
  export * from './Permissions';
11
+ export * from './OrgTree';
12
+ export * from './StateBar';
11
13
  export * from './Stat';
12
14
  export * from './Table';
13
15
  export * from './Tag';
package/dist/index.d.ts CHANGED
@@ -31,6 +31,8 @@ export * from './components/InteractiveBlock';
31
31
  export * from './components/Layout';
32
32
  export * from './components/Modal';
33
33
  export * from './components/Permissions';
34
+ export * from './components/OrgTree';
35
+ export * from './components/StateBar';
34
36
  export * from './components/Stat';
35
37
  export * from './components/Table';
36
38
  export * from './components/Tag';