@hkyhy/marsun-components-core 0.1.117 → 0.1.118

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/dist/components/AgentHub/Chat/Action/ManageActionButtons.js +1 -1
  2. package/dist/components/AgentHub/Chat/Action/ManageActionButtons.js.map +1 -1
  3. package/dist/components/AgentHub/Chat/Action/SessionActionButtons.js +1 -1
  4. package/dist/components/AgentHub/Chat/Action/SessionActionButtons.js.map +1 -1
  5. package/dist/components/AgentHub/Chat/Detail/ChatWidgetBlock/index.js +93 -72
  6. package/dist/components/AgentHub/Chat/Detail/ChatWidgetBlock/index.js.map +1 -1
  7. package/dist/components/AgentHub/Chat/List/ChatCard/index.js +121 -60
  8. package/dist/components/AgentHub/Chat/List/ChatCard/index.js.map +1 -1
  9. package/dist/components/AgentHub/KnowledgeBase/Action/ManageActionButtons.js +1 -1
  10. package/dist/components/AgentHub/KnowledgeBase/Action/ManageActionButtons.js.map +1 -1
  11. package/dist/components/AgentHub/KnowledgeBase/Detail/DocumentTable/index.js +9 -2
  12. package/dist/components/AgentHub/KnowledgeBase/Detail/DocumentTable/index.js.map +1 -1
  13. package/dist/components/AgentHub/KnowledgeBase/List/KnowledgeCard/index.js +84 -11
  14. package/dist/components/AgentHub/KnowledgeBase/List/KnowledgeCard/index.js.map +1 -1
  15. package/dist/components/ButtonGroup/index.d.ts +22 -0
  16. package/dist/components/ButtonGroup/index.js +32 -0
  17. package/dist/components/ButtonGroup/index.js.map +1 -0
  18. package/dist/components/ButtonGroup/normalizeActionList.d.ts +35 -0
  19. package/dist/components/ButtonGroup/normalizeActionList.js +20 -0
  20. package/dist/components/ButtonGroup/normalizeActionList.js.map +1 -0
  21. package/dist/components/ButtonGroup/style.module.scss.js +7 -0
  22. package/dist/components/ButtonGroup/style.module.scss.js.map +1 -0
  23. package/dist/components/Disposition/DispositionBar/style.module.scss.js +6 -6
  24. package/dist/components/FormInfo/List.js +79 -69
  25. package/dist/components/FormInfo/List.js.map +1 -1
  26. package/dist/components/FormInfo/MultiField.js +55 -33
  27. package/dist/components/FormInfo/MultiField.js.map +1 -1
  28. package/dist/components/FormInfo/TableList.js +119 -97
  29. package/dist/components/FormInfo/TableList.js.map +1 -1
  30. package/dist/components/FormInfo/locale/zh-CN.d.ts +2 -0
  31. package/dist/components/FormInfo/locale/zh-CN.js +2 -0
  32. package/dist/components/FormInfo/locale/zh-CN.js.map +1 -1
  33. package/dist/components/InteractiveBlock/InteractiveBlock.js +1 -1
  34. package/dist/components/InteractiveBlock/InteractiveBlock.js.map +1 -1
  35. package/dist/components/Modal/Modal/index.js +1 -1
  36. package/dist/components/Modal/Modal/index.js.map +1 -1
  37. package/dist/components/ReactModal/Footer.js +1 -1
  38. package/dist/components/ReactModal/Footer.js.map +1 -1
  39. package/dist/components/Tag/TagGroup/index.d.ts +27 -0
  40. package/dist/components/Tag/TagGroup/index.js +34 -0
  41. package/dist/components/Tag/TagGroup/index.js.map +1 -0
  42. package/dist/components/Tag/TagGroup/style.module.scss.js +8 -0
  43. package/dist/components/Tag/TagGroup/style.module.scss.js.map +1 -0
  44. package/dist/components/Tag/index.d.ts +2 -0
  45. package/dist/components/index.d.ts +2 -0
  46. package/dist/index.d.ts +2 -0
  47. package/dist/index.js +802 -795
  48. package/dist/index.js.map +1 -1
  49. package/dist/marsun-components-core.css +1 -1
  50. package/dist/styles/global.css +1 -1
  51. package/package.json +1 -1
@@ -1,25 +1,25 @@
1
- import { jsx as t, jsxs as v } from "react/jsx-runtime";
2
- import { TableList as V, SubList as W, FieldList as q } from "@kne/react-form-plus";
3
- import { useIsMobile as H } from "@kne/responsive-utils";
4
- import $, { isRenderMobileActive as G, resolveRenderMobile as J } from "@kne/table-view";
5
- import { Row as k, Col as p, Button as h } from "antd";
6
- import d from "classnames";
7
- import { useMemo as N, useRef as K, useState as Q, useLayoutEffect as U } from "react";
8
- import { markNestBlock as X } from "./nestBlock.js";
9
- import Y, { useFormInfoLocale as Z } from "./withLocale.js";
10
- import s from "./style.module.scss.js";
1
+ import { jsx as t, jsxs as h } from "react/jsx-runtime";
2
+ import { TableList as W, SubList as q, FieldList as H } from "@kne/react-form-plus";
3
+ import { useIsMobile as $ } from "@kne/responsive-utils";
4
+ import G, { isRenderMobileActive as J, resolveRenderMobile as K } from "@kne/table-view";
5
+ import { Row as O, Col as p, Popconfirm as I, Button as v } from "antd";
6
+ import f from "classnames";
7
+ import { useMemo as N, useRef as Q, useState as U, useLayoutEffect as X } from "react";
8
+ import { markNestBlock as Y } from "./nestBlock.js";
9
+ import Z, { useFormInfoLocale as ee } from "./withLocale.js";
10
+ import i from "./style.module.scss.js";
11
11
  /* empty css */
12
- import { Trash2 as ee } from "../Icons/Trash2.js";
13
- import { Plus as re } from "../Icons/Plus.js";
14
- import te from "../Empty/Empty.js";
12
+ import { Trash2 as re } from "../Icons/Trash2.js";
13
+ import { Plus as te } from "../Icons/Plus.js";
14
+ import ie from "../Empty/Empty.js";
15
15
  import se from "../InfoPage/InfoPage/index.js";
16
- const ie = (a) => !!(a && a.scrollWidth - a.clientWidth > 8), ne = (a, { removeText: c }) => [
17
- ...(Array.isArray(a) ? a : []).filter((l) => {
18
- if (!l || typeof l != "object" || !("props" in l)) return !1;
19
- const o = l.props;
16
+ const ne = (d) => !!(d && d.scrollWidth - d.clientWidth > 8), oe = (d, { removeText: l }) => [
17
+ ...(Array.isArray(d) ? d : []).filter((a) => {
18
+ if (!a || typeof a != "object" || !("props" in a)) return !1;
19
+ const o = a.props;
20
20
  return (o == null ? void 0 : o.display) !== !1 && !(o != null && o.hidden);
21
- }).map((l) => {
22
- const o = l;
21
+ }).map((a) => {
22
+ const o = a;
23
23
  return {
24
24
  name: o.props.name,
25
25
  title: o.props.label,
@@ -29,120 +29,131 @@ const ie = (a) => !!(a && a.scrollWidth - a.clientWidth > 8), ne = (a, { removeT
29
29
  {
30
30
  name: "__options__",
31
31
  type: "options",
32
- title: c || "",
32
+ title: l || "",
33
33
  width: 100,
34
- render: (l) => l
34
+ render: (a) => a
35
35
  }
36
- ], oe = Y((a) => {
37
- const { formatMessage: c } = Z(), {
38
- className: w,
39
- addIcon: l,
36
+ ], le = Z((d) => {
37
+ const { formatMessage: l } = ee(), {
38
+ className: x,
39
+ addIcon: a,
40
40
  addText: o,
41
41
  removeIcon: u,
42
42
  removeText: b,
43
- title: O,
44
- bordered: z,
45
- renderMobile: f = !0,
43
+ title: z,
44
+ bordered: P,
45
+ renderMobile: c = !0,
46
46
  list: m,
47
- styles: C,
48
- style: j,
49
- ...M
47
+ styles: j,
48
+ style: A,
49
+ ...T
50
50
  } = Object.assign(
51
51
  {
52
52
  empty: /* @__PURE__ */ t(
53
- te,
53
+ ie,
54
54
  {
55
55
  iconType: "simple",
56
56
  description: !1,
57
- className: s["marsun-form-info-table-list-empty"]
57
+ className: i["marsun-form-info-table-list-empty"]
58
58
  }
59
59
  ),
60
- addIcon: /* @__PURE__ */ t(re, { size: 14 }),
61
- addText: c({ id: "addText" }),
62
- removeIcon: /* @__PURE__ */ t(ee, { size: 14 }),
63
- removeText: c({ id: "deleteText" })
60
+ addIcon: /* @__PURE__ */ t(te, { size: 14 }),
61
+ addText: l({ id: "addText" }),
62
+ removeIcon: /* @__PURE__ */ t(re, { size: 14 }),
63
+ removeText: l({ id: "deleteText" })
64
64
  },
65
- a
66
- ), A = H(), R = G(f, A), y = N(() => J(f), [f]), L = N(
67
- () => ne(m || [], { removeText: b }),
65
+ d
66
+ ), S = $(), w = J(c, S), y = N(() => K(c), [c]), M = N(
67
+ () => oe(m || [], { removeText: b }),
68
68
  [m, b]
69
- ), S = N(
69
+ ), _ = N(
70
70
  () => (Array.isArray(m) ? m : []).filter((e) => {
71
71
  if (!e || typeof e != "object" || !("props" in e)) return !1;
72
72
  const r = e.props;
73
73
  return (r == null ? void 0 : r.display) !== !1 && !(r != null && r.hidden);
74
74
  }).length,
75
75
  [m]
76
- ), x = K(null), [_, T] = Q(!1);
77
- U(() => {
78
- if (R) {
79
- T(!1);
76
+ ), L = Q(null), [B, R] = U(!1);
77
+ X(() => {
78
+ if (w) {
79
+ R(!1);
80
80
  return;
81
81
  }
82
- const e = x.current;
82
+ const e = L.current;
83
83
  if (!e) return;
84
- const r = () => T(ie(e));
84
+ const r = () => R(ne(e));
85
85
  r();
86
- const i = typeof ResizeObserver < "u" ? new ResizeObserver(r) : null;
87
- i == null || i.observe(e);
86
+ const s = typeof ResizeObserver < "u" ? new ResizeObserver(r) : null;
87
+ s == null || s.observe(e);
88
88
  const n = typeof MutationObserver < "u" ? new MutationObserver(r) : null;
89
89
  return n == null || n.observe(e, { childList: !0, subtree: !0, characterData: !0 }), window.addEventListener("resize", r), () => {
90
- i == null || i.disconnect(), n == null || n.disconnect(), window.removeEventListener("resize", r);
90
+ s == null || s.disconnect(), n == null || n.disconnect(), window.removeEventListener("resize", r);
91
91
  };
92
- }, [R, m, L]);
93
- const g = (e, { onAdd: r, allowAdd: i }, n) => /* @__PURE__ */ t(
92
+ }, [w, m, M]);
93
+ const g = (e, { onAdd: r, allowAdd: s }, n) => /* @__PURE__ */ t(
94
94
  se.Part,
95
95
  {
96
- title: O,
97
- className: d(w, s["marsun-form-info-table-list"], n),
98
- bordered: z,
99
- styles: C,
100
- style: j,
101
- extra: /* @__PURE__ */ t("div", { className: s["marsun-form-info-extra-container"], children: i && /* @__PURE__ */ t(h, { className: s["marsun-form-info-extra-btn"], icon: l, onClick: r, children: o }) }),
96
+ title: z,
97
+ className: f(x, i["marsun-form-info-table-list"], n),
98
+ bordered: P,
99
+ styles: j,
100
+ style: A,
101
+ extra: /* @__PURE__ */ t("div", { className: i["marsun-form-info-extra-container"], children: s && /* @__PURE__ */ t(v, { className: i["marsun-form-info-extra-btn"], icon: a, onClick: r, children: o }) }),
102
102
  children: e
103
103
  }
104
104
  ), E = () => /* @__PURE__ */ t(
105
- V,
105
+ W,
106
106
  {
107
- ...M,
107
+ ...T,
108
108
  list: m,
109
- headerRender: (e) => /* @__PURE__ */ v(k, { className: s["marsun-form-info-table-list-header"], wrap: !1, children: [
109
+ headerRender: (e) => /* @__PURE__ */ h(O, { className: i["marsun-form-info-table-list-header"], wrap: !1, children: [
110
110
  e,
111
111
  /* @__PURE__ */ t(
112
112
  p,
113
113
  {
114
- className: d(
115
- s["marsun-form-info-table-options"],
116
- s["marsun-form-info-table-options-header"]
114
+ className: f(
115
+ i["marsun-form-info-table-options"],
116
+ i["marsun-form-info-table-options-header"]
117
117
  )
118
118
  }
119
119
  )
120
120
  ] }),
121
- headerItemRender: (e, { id: r, isReq: i }) => /* @__PURE__ */ t(
121
+ headerItemRender: (e, { id: r, isReq: s }) => /* @__PURE__ */ t(
122
122
  p,
123
123
  {
124
- className: d({
125
- [s["marsun-form-info-is-req"]]: i
124
+ className: f({
125
+ [i["marsun-form-info-is-req"]]: s
126
126
  }),
127
127
  children: e
128
128
  },
129
129
  r
130
130
  ),
131
- itemRender: (e) => /* @__PURE__ */ t(p, { className: s["marsun-form-info-table-list-field"], children: e }),
132
- listRender: (e, { id: r, onRemove: i, allowRemove: n }) => /* @__PURE__ */ v(k, { wrap: !1, align: "top", children: [
131
+ itemRender: (e) => /* @__PURE__ */ t(p, { className: i["marsun-form-info-table-list-field"], children: e }),
132
+ listRender: (e, { id: r, onRemove: s, allowRemove: n }) => /* @__PURE__ */ h(O, { wrap: !1, align: "top", children: [
133
133
  e,
134
- /* @__PURE__ */ t(p, { className: s["marsun-form-info-table-options"], children: /* @__PURE__ */ t(h, { type: "link", onClick: i, danger: !0, disabled: !n, icon: u, children: b }) })
134
+ /* @__PURE__ */ t(p, { className: i["marsun-form-info-table-options"], children: /* @__PURE__ */ t(
135
+ I,
136
+ {
137
+ title: l({ id: "deleteConfirm" }),
138
+ okText: l({ id: "deleteConfirmOk" }),
139
+ cancelText: l({ id: "cancel" }),
140
+ okButtonProps: { danger: !0 },
141
+ disabled: !n,
142
+ onConfirm: s,
143
+ children: /* @__PURE__ */ t(v, { type: "link", danger: !0, disabled: !n, icon: u, children: b })
144
+ }
145
+ ) })
135
146
  ] }, r),
136
147
  children: (e, r) => g(
137
148
  /* @__PURE__ */ t(
138
149
  "div",
139
150
  {
140
- ref: x,
141
- className: d(s["marsun-form-info-table-list-inner"], {
142
- [s["marsun-form-info-is-overflow"]]: _
151
+ ref: L,
152
+ className: f(i["marsun-form-info-table-list-inner"], {
153
+ [i["marsun-form-info-is-overflow"]]: B
143
154
  }),
144
155
  style: {
145
- "--table-list-field-count": Math.max(S, 1)
156
+ "--table-list-field-count": Math.max(_, 1)
146
157
  },
147
158
  children: e
148
159
  }
@@ -150,34 +161,45 @@ const ie = (a) => !!(a && a.scrollWidth - a.clientWidth > 8), ne = (a, { removeT
150
161
  r
151
162
  )
152
163
  }
153
- ), P = () => /* @__PURE__ */ t(
154
- W,
164
+ ), D = () => /* @__PURE__ */ t(
165
+ q,
155
166
  {
156
- ...M,
167
+ ...T,
157
168
  list: m,
158
169
  listRender: ({
159
170
  id: e,
160
171
  list: r,
161
- groupArgs: i,
172
+ groupArgs: s,
162
173
  onRemove: n,
163
- allowRemove: D
164
- }) => /* @__PURE__ */ v(
174
+ allowRemove: k
175
+ }) => /* @__PURE__ */ h(
165
176
  "div",
166
177
  {
167
- className: d(
168
- s["marsun-form-info-table-list-mobile-card"],
178
+ className: f(
179
+ i["marsun-form-info-table-list-mobile-card"],
169
180
  "info-page-table-mobile-card"
170
181
  ),
171
182
  children: [
172
- /* @__PURE__ */ t("div", { className: s["marsun-form-info-table-list-mobile-card-body"], children: /* @__PURE__ */ t(
173
- q,
183
+ /* @__PURE__ */ t("div", { className: i["marsun-form-info-table-list-mobile-card-body"], children: /* @__PURE__ */ t(
184
+ H,
174
185
  {
175
186
  list: r,
176
- groupArgs: i,
177
- itemRender: (I, F) => F.hidden ? /* @__PURE__ */ t("div", { style: { display: "none" }, children: I }) : /* @__PURE__ */ t("div", { className: s["marsun-form-info-table-list-mobile-field"], children: I })
187
+ groupArgs: s,
188
+ itemRender: (C, V) => V.hidden ? /* @__PURE__ */ t("div", { style: { display: "none" }, children: C }) : /* @__PURE__ */ t("div", { className: i["marsun-form-info-table-list-mobile-field"], children: C })
178
189
  }
179
190
  ) }),
180
- /* @__PURE__ */ t("div", { className: s["marsun-form-info-table-list-mobile-actions"], children: /* @__PURE__ */ t(h, { type: "link", onClick: n, danger: !0, disabled: !D, icon: u, children: b }) })
191
+ /* @__PURE__ */ t("div", { className: i["marsun-form-info-table-list-mobile-actions"], children: /* @__PURE__ */ t(
192
+ I,
193
+ {
194
+ title: l({ id: "deleteConfirm" }),
195
+ okText: l({ id: "deleteConfirmOk" }),
196
+ cancelText: l({ id: "cancel" }),
197
+ okButtonProps: { danger: !0 },
198
+ disabled: !k,
199
+ onConfirm: n,
200
+ children: /* @__PURE__ */ t(v, { type: "link", danger: !0, disabled: !k, icon: u, children: b })
201
+ }
202
+ ) })
181
203
  ]
182
204
  },
183
205
  e
@@ -186,31 +208,31 @@ const ie = (a) => !!(a && a.scrollWidth - a.clientWidth > 8), ne = (a, { removeT
186
208
  /* @__PURE__ */ t(
187
209
  "div",
188
210
  {
189
- className: d(
190
- s["marsun-form-info-table-list-mobile-list"],
211
+ className: f(
212
+ i["marsun-form-info-table-list-mobile-list"],
191
213
  "info-page-table-mobile-card-list"
192
214
  ),
193
215
  children: e
194
216
  }
195
217
  ),
196
218
  r,
197
- s["marsun-form-info-is-mobile"]
219
+ i["marsun-form-info-is-mobile"]
198
220
  )
199
221
  }
200
- ), B = f === !1 ? !1 : typeof y == "function" ? y : f === !0 || y === !0 ? () => P() : !1;
222
+ ), F = c === !1 ? !1 : typeof y == "function" ? y : c === !0 || y === !0 ? () => D() : !1;
201
223
  return /* @__PURE__ */ t(
202
- $,
224
+ G,
203
225
  {
204
- columns: L,
226
+ columns: M,
205
227
  dataSource: [],
206
228
  empty: null,
207
- className: s["marsun-form-info-table-list-view"],
208
- renderMobile: B,
229
+ className: i["marsun-form-info-table-list-view"],
230
+ renderMobile: F,
209
231
  render: () => E()
210
232
  }
211
233
  );
212
- }), Re = X(oe);
234
+ }), Me = Y(le);
213
235
  export {
214
- Re as default
236
+ Me as default
215
237
  };
216
238
  //# sourceMappingURL=TableList.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TableList.js","sources":["../../../src/components/FormInfo/TableList.tsx"],"sourcesContent":["// @ts-nocheck\nimport { FieldList, SubList, TableList as TableListBase } from '@kne/react-form-plus';\nimport { useIsMobile } from '@kne/responsive-utils';\nimport TableView, { isRenderMobileActive, resolveRenderMobile } from '@kne/table-view';\nimport { Button, Col, Row } from 'antd';\nimport classnames from 'classnames';\nimport { useLayoutEffect, useMemo, useRef, useState, type ReactNode } from 'react';\nimport { Empty } from '@/components/Empty';\nimport { Plus, Trash2 } from '@/components/Icons';\nimport InfoPage from '@/components/InfoPage';\nimport { markNestBlock } from './nestBlock';\nimport type { TableListProps } from './types';\nimport withLocale, { useFormInfoLocale } from './withLocale';\nimport style from './style.module.scss';\nimport '@kne/table-view/dist/index.css';\n\nconst isHorizontallyOverflowing = (el: HTMLElement | null) =>\n !!(el && el.scrollWidth - el.clientWidth > 8);\n\nconst buildColumns = (list: ReactNode[], { removeText }: { removeText?: ReactNode }) => {\n const fieldList = Array.isArray(list) ? list : [];\n return [\n ...fieldList\n .filter((item) => {\n if (!item || typeof item !== 'object' || !('props' in item)) return false;\n const props = (item as React.ReactElement).props as {\n display?: boolean;\n hidden?: boolean;\n };\n return props?.display !== false && !props?.hidden;\n })\n .map((item) => {\n const el = item as React.ReactElement;\n return {\n name: el.props.name,\n title: el.props.label,\n render: (value: unknown) => value,\n };\n }),\n {\n name: '__options__',\n type: 'options',\n title: removeText || '',\n width: 100,\n render: (value: unknown) => value,\n },\n ];\n};\n\nconst TableList = withLocale((p: TableListProps) => {\n const { formatMessage } = useFormInfoLocale();\n const {\n className,\n addIcon,\n addText,\n removeIcon,\n removeText,\n title,\n bordered,\n renderMobile = true,\n list,\n styles: partStyles,\n style: partStyle,\n ...others\n } = Object.assign(\n {\n empty: (\n <Empty\n iconType=\"simple\"\n description={false}\n className={style['marsun-form-info-table-list-empty']}\n />\n ),\n addIcon: <Plus size={14} />,\n addText: formatMessage({ id: 'addText' }),\n removeIcon: <Trash2 size={14} />,\n removeText: formatMessage({ id: 'deleteText' }),\n },\n p,\n );\n\n const isMobile = useIsMobile();\n const useMobileRender = isRenderMobileActive(renderMobile, isMobile);\n const resolvedRenderMobile = useMemo(() => resolveRenderMobile(renderMobile), [renderMobile]);\n const columns = useMemo(\n () => buildColumns((list || []) as ReactNode[], { removeText }),\n [list, removeText],\n );\n const fieldCount = useMemo(\n () =>\n (Array.isArray(list) ? list : []).filter((item) => {\n if (!item || typeof item !== 'object' || !('props' in item)) return false;\n const props = (item as React.ReactElement).props as {\n display?: boolean;\n hidden?: boolean;\n };\n return props?.display !== false && !props?.hidden;\n }).length,\n [list],\n );\n const innerRef = useRef<HTMLDivElement>(null);\n const [isOverflow, setIsOverflow] = useState(false);\n\n useLayoutEffect(() => {\n if (useMobileRender) {\n setIsOverflow(false);\n return;\n }\n const el = innerRef.current;\n if (!el) return;\n const update = () => setIsOverflow(isHorizontallyOverflowing(el));\n update();\n const ro = typeof ResizeObserver !== 'undefined' ? new ResizeObserver(update) : null;\n ro?.observe(el);\n const mo = typeof MutationObserver !== 'undefined' ? new MutationObserver(update) : null;\n mo?.observe(el, { childList: true, subtree: true, characterData: true });\n window.addEventListener('resize', update);\n return () => {\n ro?.disconnect();\n mo?.disconnect();\n window.removeEventListener('resize', update);\n };\n }, [useMobileRender, list, columns]);\n\n const renderPart = (\n children: ReactNode,\n { onAdd, allowAdd }: { onAdd: () => void; allowAdd: boolean },\n extraClassName?: string,\n ) => (\n <InfoPage.Part\n title={title}\n className={classnames(className, style['marsun-form-info-table-list'], extraClassName)}\n bordered={bordered}\n styles={partStyles as never}\n style={partStyle as never}\n extra={\n <div className={style['marsun-form-info-extra-container']}>\n {allowAdd && (\n <Button className={style['marsun-form-info-extra-btn']} icon={addIcon} onClick={onAdd}>\n {addText}\n </Button>\n )}\n </div>\n }\n >\n {children}\n </InfoPage.Part>\n );\n\n const renderDesktop = () => (\n <TableListBase\n {...others}\n list={list as never}\n headerRender={(children: ReactNode) => (\n <Row className={style['marsun-form-info-table-list-header']} wrap={false}>\n {children}\n <Col\n className={classnames(\n style['marsun-form-info-table-options'],\n style['marsun-form-info-table-options-header'],\n )}\n />\n </Row>\n )}\n headerItemRender={(children: ReactNode, { id, isReq }: { id: string; isReq?: boolean }) => (\n <Col\n className={classnames({\n [style['marsun-form-info-is-req']]: isReq,\n })}\n key={id}\n >\n {children}\n </Col>\n )}\n itemRender={(children: ReactNode) => (\n <Col className={style['marsun-form-info-table-list-field']}>{children}</Col>\n )}\n listRender={(\n children: ReactNode,\n { id, onRemove, allowRemove }: { id: string; onRemove: () => void; allowRemove: boolean },\n ) => (\n <Row key={id} wrap={false} align=\"top\">\n {children}\n <Col className={style['marsun-form-info-table-options']}>\n <Button type=\"link\" onClick={onRemove} danger disabled={!allowRemove} icon={removeIcon}>\n {removeText}\n </Button>\n </Col>\n </Row>\n )}\n >\n {(children: ReactNode, controls: { onAdd: () => void; allowAdd: boolean }) =>\n renderPart(\n <div\n ref={innerRef}\n className={classnames(style['marsun-form-info-table-list-inner'], {\n [style['marsun-form-info-is-overflow']]: isOverflow,\n })}\n style={\n {\n '--table-list-field-count': Math.max(fieldCount, 1),\n } as React.CSSProperties\n }\n >\n {children}\n </div>,\n controls,\n )\n }\n </TableListBase>\n );\n\n const renderMobileList = () => (\n <SubList\n {...others}\n list={list as never}\n listRender={({\n id,\n list: rowList,\n groupArgs,\n onRemove,\n allowRemove,\n }: {\n id: string;\n list?: ReactNode[];\n groupArgs?: unknown[];\n onRemove: () => void;\n allowRemove: boolean;\n }) => (\n <div\n key={id}\n className={classnames(\n style['marsun-form-info-table-list-mobile-card'],\n 'info-page-table-mobile-card',\n )}\n >\n <div className={style['marsun-form-info-table-list-mobile-card-body']}>\n <FieldList\n list={rowList as never}\n groupArgs={groupArgs}\n itemRender={(children: ReactNode, targetProps: { hidden?: boolean }) => {\n if (targetProps.hidden) {\n return <div style={{ display: 'none' }}>{children}</div>;\n }\n return (\n <div className={style['marsun-form-info-table-list-mobile-field']}>\n {children}\n </div>\n );\n }}\n />\n </div>\n <div className={style['marsun-form-info-table-list-mobile-actions']}>\n <Button type=\"link\" onClick={onRemove} danger disabled={!allowRemove} icon={removeIcon}>\n {removeText}\n </Button>\n </div>\n </div>\n )}\n >\n {(children: ReactNode, controls: { onAdd: () => void; allowAdd: boolean }) =>\n renderPart(\n <div\n className={classnames(\n style['marsun-form-info-table-list-mobile-list'],\n 'info-page-table-mobile-card-list',\n )}\n >\n {children}\n </div>,\n controls,\n style['marsun-form-info-is-mobile'],\n )\n }\n </SubList>\n );\n\n const tableViewRenderMobile =\n renderMobile === false\n ? false\n : typeof resolvedRenderMobile === 'function'\n ? resolvedRenderMobile\n : renderMobile === true || resolvedRenderMobile === true\n ? () => renderMobileList()\n : false;\n\n return (\n <TableView\n columns={columns}\n dataSource={[]}\n empty={null}\n className={style['marsun-form-info-table-list-view']}\n renderMobile={tableViewRenderMobile}\n render={() => renderDesktop()}\n />\n );\n});\n\nexport default markNestBlock(TableList);\n"],"names":["isHorizontallyOverflowing","el","buildColumns","list","removeText","item","props","value","TableList","withLocale","p","formatMessage","useFormInfoLocale","className","addIcon","addText","removeIcon","title","bordered","renderMobile","partStyles","partStyle","others","jsx","Empty","style","Plus","Trash2","isMobile","useIsMobile","useMobileRender","isRenderMobileActive","resolvedRenderMobile","useMemo","resolveRenderMobile","columns","fieldCount","innerRef","useRef","isOverflow","setIsOverflow","useState","useLayoutEffect","update","ro","mo","renderPart","children","onAdd","allowAdd","extraClassName","InfoPage","classnames","Button","renderDesktop","TableListBase","jsxs","Row","Col","id","isReq","onRemove","allowRemove","controls","renderMobileList","SubList","rowList","groupArgs","FieldList","targetProps","tableViewRenderMobile","TableView","TableList_default","markNestBlock"],"mappings":"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"}
1
+ {"version":3,"file":"TableList.js","sources":["../../../src/components/FormInfo/TableList.tsx"],"sourcesContent":["// @ts-nocheck\nimport { FieldList, SubList, TableList as TableListBase } from '@kne/react-form-plus';\nimport { useIsMobile } from '@kne/responsive-utils';\nimport TableView, { isRenderMobileActive, resolveRenderMobile } from '@kne/table-view';\nimport { Button, Col, Popconfirm, Row } from 'antd';\nimport classnames from 'classnames';\nimport { useLayoutEffect, useMemo, useRef, useState, type ReactNode } from 'react';\nimport { Empty } from '@/components/Empty';\nimport { Plus, Trash2 } from '@/components/Icons';\nimport InfoPage from '@/components/InfoPage';\nimport { markNestBlock } from './nestBlock';\nimport type { TableListProps } from './types';\nimport withLocale, { useFormInfoLocale } from './withLocale';\nimport style from './style.module.scss';\nimport '@kne/table-view/dist/index.css';\n\nconst isHorizontallyOverflowing = (el: HTMLElement | null) =>\n !!(el && el.scrollWidth - el.clientWidth > 8);\n\nconst buildColumns = (list: ReactNode[], { removeText }: { removeText?: ReactNode }) => {\n const fieldList = Array.isArray(list) ? list : [];\n return [\n ...fieldList\n .filter((item) => {\n if (!item || typeof item !== 'object' || !('props' in item)) return false;\n const props = (item as React.ReactElement).props as {\n display?: boolean;\n hidden?: boolean;\n };\n return props?.display !== false && !props?.hidden;\n })\n .map((item) => {\n const el = item as React.ReactElement;\n return {\n name: el.props.name,\n title: el.props.label,\n render: (value: unknown) => value,\n };\n }),\n {\n name: '__options__',\n type: 'options',\n title: removeText || '',\n width: 100,\n render: (value: unknown) => value,\n },\n ];\n};\n\nconst TableList = withLocale((p: TableListProps) => {\n const { formatMessage } = useFormInfoLocale();\n const {\n className,\n addIcon,\n addText,\n removeIcon,\n removeText,\n title,\n bordered,\n renderMobile = true,\n list,\n styles: partStyles,\n style: partStyle,\n ...others\n } = Object.assign(\n {\n empty: (\n <Empty\n iconType=\"simple\"\n description={false}\n className={style['marsun-form-info-table-list-empty']}\n />\n ),\n addIcon: <Plus size={14} />,\n addText: formatMessage({ id: 'addText' }),\n removeIcon: <Trash2 size={14} />,\n removeText: formatMessage({ id: 'deleteText' }),\n },\n p,\n );\n\n const isMobile = useIsMobile();\n const useMobileRender = isRenderMobileActive(renderMobile, isMobile);\n const resolvedRenderMobile = useMemo(() => resolveRenderMobile(renderMobile), [renderMobile]);\n const columns = useMemo(\n () => buildColumns((list || []) as ReactNode[], { removeText }),\n [list, removeText],\n );\n const fieldCount = useMemo(\n () =>\n (Array.isArray(list) ? list : []).filter((item) => {\n if (!item || typeof item !== 'object' || !('props' in item)) return false;\n const props = (item as React.ReactElement).props as {\n display?: boolean;\n hidden?: boolean;\n };\n return props?.display !== false && !props?.hidden;\n }).length,\n [list],\n );\n const innerRef = useRef<HTMLDivElement>(null);\n const [isOverflow, setIsOverflow] = useState(false);\n\n useLayoutEffect(() => {\n if (useMobileRender) {\n setIsOverflow(false);\n return;\n }\n const el = innerRef.current;\n if (!el) return;\n const update = () => setIsOverflow(isHorizontallyOverflowing(el));\n update();\n const ro = typeof ResizeObserver !== 'undefined' ? new ResizeObserver(update) : null;\n ro?.observe(el);\n const mo = typeof MutationObserver !== 'undefined' ? new MutationObserver(update) : null;\n mo?.observe(el, { childList: true, subtree: true, characterData: true });\n window.addEventListener('resize', update);\n return () => {\n ro?.disconnect();\n mo?.disconnect();\n window.removeEventListener('resize', update);\n };\n }, [useMobileRender, list, columns]);\n\n const renderPart = (\n children: ReactNode,\n { onAdd, allowAdd }: { onAdd: () => void; allowAdd: boolean },\n extraClassName?: string,\n ) => (\n <InfoPage.Part\n title={title}\n className={classnames(className, style['marsun-form-info-table-list'], extraClassName)}\n bordered={bordered}\n styles={partStyles as never}\n style={partStyle as never}\n extra={\n <div className={style['marsun-form-info-extra-container']}>\n {allowAdd && (\n <Button className={style['marsun-form-info-extra-btn']} icon={addIcon} onClick={onAdd}>\n {addText}\n </Button>\n )}\n </div>\n }\n >\n {children}\n </InfoPage.Part>\n );\n\n const renderDesktop = () => (\n <TableListBase\n {...others}\n list={list as never}\n headerRender={(children: ReactNode) => (\n <Row className={style['marsun-form-info-table-list-header']} wrap={false}>\n {children}\n <Col\n className={classnames(\n style['marsun-form-info-table-options'],\n style['marsun-form-info-table-options-header'],\n )}\n />\n </Row>\n )}\n headerItemRender={(children: ReactNode, { id, isReq }: { id: string; isReq?: boolean }) => (\n <Col\n className={classnames({\n [style['marsun-form-info-is-req']]: isReq,\n })}\n key={id}\n >\n {children}\n </Col>\n )}\n itemRender={(children: ReactNode) => (\n <Col className={style['marsun-form-info-table-list-field']}>{children}</Col>\n )}\n listRender={(\n children: ReactNode,\n { id, onRemove, allowRemove }: { id: string; onRemove: () => void; allowRemove: boolean },\n ) => (\n <Row key={id} wrap={false} align=\"top\">\n {children}\n <Col className={style['marsun-form-info-table-options']}>\n <Popconfirm\n title={formatMessage({ id: 'deleteConfirm' })}\n okText={formatMessage({ id: 'deleteConfirmOk' })}\n cancelText={formatMessage({ id: 'cancel' })}\n okButtonProps={{ danger: true }}\n disabled={!allowRemove}\n onConfirm={onRemove}\n >\n <Button type=\"link\" danger disabled={!allowRemove} icon={removeIcon}>\n {removeText}\n </Button>\n </Popconfirm>\n </Col>\n </Row>\n )}\n >\n {(children: ReactNode, controls: { onAdd: () => void; allowAdd: boolean }) =>\n renderPart(\n <div\n ref={innerRef}\n className={classnames(style['marsun-form-info-table-list-inner'], {\n [style['marsun-form-info-is-overflow']]: isOverflow,\n })}\n style={\n {\n '--table-list-field-count': Math.max(fieldCount, 1),\n } as React.CSSProperties\n }\n >\n {children}\n </div>,\n controls,\n )\n }\n </TableListBase>\n );\n\n const renderMobileList = () => (\n <SubList\n {...others}\n list={list as never}\n listRender={({\n id,\n list: rowList,\n groupArgs,\n onRemove,\n allowRemove,\n }: {\n id: string;\n list?: ReactNode[];\n groupArgs?: unknown[];\n onRemove: () => void;\n allowRemove: boolean;\n }) => (\n <div\n key={id}\n className={classnames(\n style['marsun-form-info-table-list-mobile-card'],\n 'info-page-table-mobile-card',\n )}\n >\n <div className={style['marsun-form-info-table-list-mobile-card-body']}>\n <FieldList\n list={rowList as never}\n groupArgs={groupArgs}\n itemRender={(children: ReactNode, targetProps: { hidden?: boolean }) => {\n if (targetProps.hidden) {\n return <div style={{ display: 'none' }}>{children}</div>;\n }\n return (\n <div className={style['marsun-form-info-table-list-mobile-field']}>\n {children}\n </div>\n );\n }}\n />\n </div>\n <div className={style['marsun-form-info-table-list-mobile-actions']}>\n <Popconfirm\n title={formatMessage({ id: 'deleteConfirm' })}\n okText={formatMessage({ id: 'deleteConfirmOk' })}\n cancelText={formatMessage({ id: 'cancel' })}\n okButtonProps={{ danger: true }}\n disabled={!allowRemove}\n onConfirm={onRemove}\n >\n <Button type=\"link\" danger disabled={!allowRemove} icon={removeIcon}>\n {removeText}\n </Button>\n </Popconfirm>\n </div>\n </div>\n )}\n >\n {(children: ReactNode, controls: { onAdd: () => void; allowAdd: boolean }) =>\n renderPart(\n <div\n className={classnames(\n style['marsun-form-info-table-list-mobile-list'],\n 'info-page-table-mobile-card-list',\n )}\n >\n {children}\n </div>,\n controls,\n style['marsun-form-info-is-mobile'],\n )\n }\n </SubList>\n );\n\n const tableViewRenderMobile =\n renderMobile === false\n ? false\n : typeof resolvedRenderMobile === 'function'\n ? resolvedRenderMobile\n : renderMobile === true || resolvedRenderMobile === true\n ? () => renderMobileList()\n : false;\n\n return (\n <TableView\n columns={columns}\n dataSource={[]}\n empty={null}\n className={style['marsun-form-info-table-list-view']}\n renderMobile={tableViewRenderMobile}\n render={() => renderDesktop()}\n />\n );\n});\n\nexport default markNestBlock(TableList);\n"],"names":["isHorizontallyOverflowing","el","buildColumns","list","removeText","item","props","value","TableList","withLocale","p","formatMessage","useFormInfoLocale","className","addIcon","addText","removeIcon","title","bordered","renderMobile","partStyles","partStyle","others","jsx","Empty","style","Plus","Trash2","isMobile","useIsMobile","useMobileRender","isRenderMobileActive","resolvedRenderMobile","useMemo","resolveRenderMobile","columns","fieldCount","innerRef","useRef","isOverflow","setIsOverflow","useState","useLayoutEffect","update","ro","mo","renderPart","children","onAdd","allowAdd","extraClassName","InfoPage","classnames","Button","renderDesktop","TableListBase","jsxs","Row","Col","id","isReq","onRemove","allowRemove","Popconfirm","controls","renderMobileList","SubList","rowList","groupArgs","FieldList","targetProps","tableViewRenderMobile","TableView","TableList_default","markNestBlock"],"mappings":"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"}
@@ -7,6 +7,8 @@ declare const locale: {
7
7
  readonly next: "下一步";
8
8
  readonly addText: "添加";
9
9
  readonly deleteText: "删除";
10
+ readonly deleteConfirm: "确定删除吗?";
11
+ readonly deleteConfirmOk: "删除";
10
12
  readonly untitledStep: "第{index}步";
11
13
  readonly nestLevel: "第{level}级";
12
14
  readonly nestExpand: "展开第{level}级";
@@ -6,6 +6,8 @@ const e = {
6
6
  next: "下一步",
7
7
  addText: "添加",
8
8
  deleteText: "删除",
9
+ deleteConfirm: "确定删除吗?",
10
+ deleteConfirmOk: "删除",
9
11
  untitledStep: "第{index}步",
10
12
  nestLevel: "第{level}级",
11
13
  nestExpand: "展开第{level}级",
@@ -1 +1 @@
1
- {"version":3,"file":"zh-CN.js","sources":["../../../../src/components/FormInfo/locale/zh-CN.ts"],"sourcesContent":["/** 中文 stub;不引入 @kne/react-intl */\nconst locale = {\n submit: '提交',\n cancel: '取消',\n complete: '完成',\n prev: '上一步',\n next: '下一步',\n addText: '添加',\n deleteText: '删除',\n untitledStep: '第{index}步',\n nestLevel: '第{level}级',\n nestExpand: '展开第{level}级',\n nestCollapse: '收起第{level}级',\n} as const;\n\nexport type FormInfoLocaleKey = keyof typeof locale;\nexport default locale;\n"],"names":["locale"],"mappings":"AACA,MAAMA,IAAS;AAAA,EACb,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,MAAM;AAAA,EACN,MAAM;AAAA,EACN,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,cAAc;AAChB;"}
1
+ {"version":3,"file":"zh-CN.js","sources":["../../../../src/components/FormInfo/locale/zh-CN.ts"],"sourcesContent":["/** 中文 stub;不引入 @kne/react-intl */\nconst locale = {\n submit: '提交',\n cancel: '取消',\n complete: '完成',\n prev: '上一步',\n next: '下一步',\n addText: '添加',\n deleteText: '删除',\n deleteConfirm: '确定删除吗?',\n deleteConfirmOk: '删除',\n untitledStep: '第{index}步',\n nestLevel: '第{level}级',\n nestExpand: '展开第{level}级',\n nestCollapse: '收起第{level}级',\n} as const;\n\nexport type FormInfoLocaleKey = keyof typeof locale;\nexport default locale;\n"],"names":["locale"],"mappings":"AACA,MAAMA,IAAS;AAAA,EACb,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,MAAM;AAAA,EACN,MAAM;AAAA,EACN,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,eAAe;AAAA,EACf,iBAAiB;AAAA,EACjB,cAAc;AAAA,EACd,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,cAAc;AAChB;"}
@@ -1,5 +1,5 @@
1
1
  import { jsx as i, jsxs as l, Fragment as g } from "react/jsx-runtime";
2
- import w from "@kne/button-group";
2
+ import w from "../ButtonGroup/index.js";
3
3
  import t from "classnames";
4
4
  import n from "./style.module.scss.js";
5
5
  import x from "../Tag/SemanticTag.js";
@@ -1 +1 @@
1
- {"version":3,"file":"InteractiveBlock.js","sources":["../../../src/components/InteractiveBlock/InteractiveBlock.tsx"],"sourcesContent":["import ButtonGroup from '@kne/button-group';\nimport classNames from 'classnames';\nimport type { ReactNode } from 'react';\nimport type { DescriptionItem } from '../Descriptions/CommonDescriptions';\nimport { Info } from '../Icons';\nimport { SemanticTag } from '../Tag';\nimport { TooltipInfo } from '../TooltipInfo';\nimport styles from './style.module.scss';\n\nexport type InteractiveBlockTag = {\n label: string;\n color: string;\n};\n\nexport type InteractiveBlockAction = {\n key: string;\n label: string;\n icon?: ReactNode;\n onClick?: () => void;\n hidden?: boolean;\n};\n\nexport type InteractiveBlockTagsPlacement = 'inline' | 'below';\n\nexport type InteractiveBlockSurface = 'plain' | 'inset';\n\nexport type InteractiveBlockProps = {\n title: ReactNode;\n info?: DescriptionItem[];\n subtitle?: ReactNode;\n description?: ReactNode;\n tags?: InteractiveBlockTag[];\n tagsPlacement?: InteractiveBlockTagsPlacement;\n actions?: InteractiveBlockAction[];\n /** 列表表面:inset 对齐归档检索灰底项 */\n surface?: InteractiveBlockSurface;\n selected?: boolean;\n onClick?: () => void;\n className?: string;\n};\n\n/**\n * 带操作性的展示块:title → Info+TooltipInfo → actions;tags 紧贴 subtitle。\n */\nconst InteractiveBlock: React.FC<InteractiveBlockProps> = ({\n title,\n info,\n subtitle,\n description,\n tags,\n tagsPlacement = 'inline',\n actions,\n surface = 'plain',\n selected,\n onClick,\n className,\n}) => {\n const visibleActions = (actions ?? []).filter((a) => !a.hidden);\n const hasMeta = Boolean(subtitle || tags?.length);\n\n const actionList = visibleActions.map((action) => ({\n type: 'link' as const,\n key: action.key,\n icon: action.icon,\n children: action.label,\n onClick: action.onClick,\n }));\n\n const tagsNode = tags?.length ? (\n <div\n className={classNames(\n 'marsun-interactive-block-tags',\n styles['marsun-interactive-block-tags'],\n )}\n >\n {tags.map((tag) => (\n <SemanticTag key={tag.label} color={tag.color}>\n {tag.label}\n </SemanticTag>\n ))}\n </div>\n ) : null;\n\n const body = (\n <>\n <div\n className={classNames(\n 'marsun-interactive-block-header',\n styles['marsun-interactive-block-header'],\n )}\n >\n <div\n className={classNames(\n 'marsun-interactive-block-title-group',\n styles['marsun-interactive-block-title-group'],\n )}\n >\n <p\n className={classNames(\n 'marsun-interactive-block-title',\n styles['marsun-interactive-block-title'],\n )}\n >\n {title}\n </p>\n {info?.length ? (\n <TooltipInfo\n content={info}\n placement=\"topLeft\"\n overlayStyle={{ minWidth: 220, maxWidth: 360 }}\n overlayClassName=\"marsun-interactive-block-info-tooltip\"\n >\n <span\n className={classNames(\n 'marsun-interactive-block-info-trigger',\n styles['marsun-interactive-block-info-trigger'],\n )}\n onClick={(e) => e.stopPropagation()}\n onMouseDown={(e) => e.stopPropagation()}\n onKeyDown={(e) => e.stopPropagation()}\n >\n <Info size={16} aria-hidden />\n </span>\n </TooltipInfo>\n ) : null}\n </div>\n {visibleActions.length ? (\n <div\n className={classNames(\n 'marsun-interactive-block-actions',\n styles['marsun-interactive-block-actions'],\n )}\n onClick={(e) => e.stopPropagation()}\n onKeyDown={(e) => e.stopPropagation()}\n role=\"presentation\"\n >\n <ButtonGroup moreType=\"link\" list={actionList} />\n </div>\n ) : null}\n </div>\n {hasMeta ? (\n <div\n className={classNames(\n 'marsun-interactive-block-meta',\n styles['marsun-interactive-block-meta'],\n tagsPlacement === 'below' && styles['marsun-interactive-block-meta--below'],\n )}\n >\n {subtitle ? (\n <p\n className={classNames(\n 'marsun-interactive-block-subtitle',\n styles['marsun-interactive-block-subtitle'],\n )}\n >\n {subtitle}\n </p>\n ) : null}\n {tagsNode}\n </div>\n ) : null}\n {description ? (\n <p\n className={classNames(\n 'marsun-interactive-block-description',\n styles['marsun-interactive-block-description'],\n )}\n >\n {description}\n </p>\n ) : null}\n </>\n );\n\n if (onClick) {\n return (\n <div\n role=\"button\"\n tabIndex={0}\n className={classNames(\n 'marsun-interactive-block',\n styles['marsun-interactive-block'],\n styles['marsun-interactive-block--clickable'],\n surface === 'inset' && styles['marsun-interactive-block--inset'],\n selected && styles['marsun-interactive-block--selected'],\n className,\n )}\n onClick={onClick}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onClick();\n }\n }}\n >\n {body}\n </div>\n );\n }\n\n return (\n <div\n className={classNames(\n 'marsun-interactive-block',\n styles['marsun-interactive-block'],\n surface === 'inset' && styles['marsun-interactive-block--inset'],\n selected && styles['marsun-interactive-block--selected'],\n className,\n )}\n >\n {body}\n </div>\n );\n};\n\nexport default InteractiveBlock;\n"],"names":["InteractiveBlock","title","info","subtitle","description","tags","tagsPlacement","actions","surface","selected","onClick","className","visibleActions","a","hasMeta","actionList","action","tagsNode","jsx","classNames","styles","tag","SemanticTag","body","jsxs","Fragment","TooltipInfo","Info","ButtonGroup"],"mappings":"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"}
1
+ {"version":3,"file":"InteractiveBlock.js","sources":["../../../src/components/InteractiveBlock/InteractiveBlock.tsx"],"sourcesContent":["import ButtonGroup from '../ButtonGroup';\nimport classNames from 'classnames';\nimport type { ReactNode } from 'react';\nimport type { DescriptionItem } from '../Descriptions/CommonDescriptions';\nimport { Info } from '../Icons';\nimport { SemanticTag } from '../Tag';\nimport { TooltipInfo } from '../TooltipInfo';\nimport styles from './style.module.scss';\n\nexport type InteractiveBlockTag = {\n label: string;\n color: string;\n};\n\nexport type InteractiveBlockAction = {\n key: string;\n label: string;\n icon?: ReactNode;\n onClick?: () => void;\n hidden?: boolean;\n};\n\nexport type InteractiveBlockTagsPlacement = 'inline' | 'below';\n\nexport type InteractiveBlockSurface = 'plain' | 'inset';\n\nexport type InteractiveBlockProps = {\n title: ReactNode;\n info?: DescriptionItem[];\n subtitle?: ReactNode;\n description?: ReactNode;\n tags?: InteractiveBlockTag[];\n tagsPlacement?: InteractiveBlockTagsPlacement;\n actions?: InteractiveBlockAction[];\n /** 列表表面:inset 对齐归档检索灰底项 */\n surface?: InteractiveBlockSurface;\n selected?: boolean;\n onClick?: () => void;\n className?: string;\n};\n\n/**\n * 带操作性的展示块:title → Info+TooltipInfo → actions;tags 紧贴 subtitle。\n */\nconst InteractiveBlock: React.FC<InteractiveBlockProps> = ({\n title,\n info,\n subtitle,\n description,\n tags,\n tagsPlacement = 'inline',\n actions,\n surface = 'plain',\n selected,\n onClick,\n className,\n}) => {\n const visibleActions = (actions ?? []).filter((a) => !a.hidden);\n const hasMeta = Boolean(subtitle || tags?.length);\n\n const actionList = visibleActions.map((action) => ({\n type: 'link' as const,\n key: action.key,\n icon: action.icon,\n children: action.label,\n onClick: action.onClick,\n }));\n\n const tagsNode = tags?.length ? (\n <div\n className={classNames(\n 'marsun-interactive-block-tags',\n styles['marsun-interactive-block-tags'],\n )}\n >\n {tags.map((tag) => (\n <SemanticTag key={tag.label} color={tag.color}>\n {tag.label}\n </SemanticTag>\n ))}\n </div>\n ) : null;\n\n const body = (\n <>\n <div\n className={classNames(\n 'marsun-interactive-block-header',\n styles['marsun-interactive-block-header'],\n )}\n >\n <div\n className={classNames(\n 'marsun-interactive-block-title-group',\n styles['marsun-interactive-block-title-group'],\n )}\n >\n <p\n className={classNames(\n 'marsun-interactive-block-title',\n styles['marsun-interactive-block-title'],\n )}\n >\n {title}\n </p>\n {info?.length ? (\n <TooltipInfo\n content={info}\n placement=\"topLeft\"\n overlayStyle={{ minWidth: 220, maxWidth: 360 }}\n overlayClassName=\"marsun-interactive-block-info-tooltip\"\n >\n <span\n className={classNames(\n 'marsun-interactive-block-info-trigger',\n styles['marsun-interactive-block-info-trigger'],\n )}\n onClick={(e) => e.stopPropagation()}\n onMouseDown={(e) => e.stopPropagation()}\n onKeyDown={(e) => e.stopPropagation()}\n >\n <Info size={16} aria-hidden />\n </span>\n </TooltipInfo>\n ) : null}\n </div>\n {visibleActions.length ? (\n <div\n className={classNames(\n 'marsun-interactive-block-actions',\n styles['marsun-interactive-block-actions'],\n )}\n onClick={(e) => e.stopPropagation()}\n onKeyDown={(e) => e.stopPropagation()}\n role=\"presentation\"\n >\n <ButtonGroup moreType=\"link\" list={actionList} />\n </div>\n ) : null}\n </div>\n {hasMeta ? (\n <div\n className={classNames(\n 'marsun-interactive-block-meta',\n styles['marsun-interactive-block-meta'],\n tagsPlacement === 'below' && styles['marsun-interactive-block-meta--below'],\n )}\n >\n {subtitle ? (\n <p\n className={classNames(\n 'marsun-interactive-block-subtitle',\n styles['marsun-interactive-block-subtitle'],\n )}\n >\n {subtitle}\n </p>\n ) : null}\n {tagsNode}\n </div>\n ) : null}\n {description ? (\n <p\n className={classNames(\n 'marsun-interactive-block-description',\n styles['marsun-interactive-block-description'],\n )}\n >\n {description}\n </p>\n ) : null}\n </>\n );\n\n if (onClick) {\n return (\n <div\n role=\"button\"\n tabIndex={0}\n className={classNames(\n 'marsun-interactive-block',\n styles['marsun-interactive-block'],\n styles['marsun-interactive-block--clickable'],\n surface === 'inset' && styles['marsun-interactive-block--inset'],\n selected && styles['marsun-interactive-block--selected'],\n className,\n )}\n onClick={onClick}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onClick();\n }\n }}\n >\n {body}\n </div>\n );\n }\n\n return (\n <div\n className={classNames(\n 'marsun-interactive-block',\n styles['marsun-interactive-block'],\n surface === 'inset' && styles['marsun-interactive-block--inset'],\n selected && styles['marsun-interactive-block--selected'],\n className,\n )}\n >\n {body}\n </div>\n );\n};\n\nexport default InteractiveBlock;\n"],"names":["InteractiveBlock","title","info","subtitle","description","tags","tagsPlacement","actions","surface","selected","onClick","className","visibleActions","a","hasMeta","actionList","action","tagsNode","jsx","classNames","styles","tag","SemanticTag","body","jsxs","Fragment","TooltipInfo","Info","ButtonGroup"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { jsxs as p, jsx as t } from "react/jsx-runtime";
2
- import I from "@kne/button-group";
2
+ import I from "../../ButtonGroup/index.js";
3
3
  import { Modal as z } from "antd";
4
4
  import e from "classnames";
5
5
  import { useMemo as h, useState as B, useEffect as T } from "react";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/components/Modal/Modal/index.tsx"],"sourcesContent":["import ButtonGroup from '@kne/button-group';\nimport { Modal as AntModal } from 'antd';\nimport classNames from 'classnames';\nimport { useEffect, useMemo, useState, type ReactNode } from 'react';\nimport { Info } from '../../Icons';\nimport { TooltipInfo } from '../../TooltipInfo';\nimport { VirtualScrollbar } from '../../VirtualScrollbar';\nimport type { MarsunModalProps } from '../ModalTypes';\nimport {\n MODAL_SIZE_BODY_HEIGHT,\n resolveModalSizeAnchor,\n resolveModalWidth,\n} from '../utils/resolveModalSize';\nimport styles from './style.module.scss';\n\nfunction useViewportWidth(): number {\n const [vw, setVw] = useState(() => (typeof window !== 'undefined' ? window.innerWidth : 1200));\n\n useEffect(() => {\n const onResize = () => setVw(window.innerWidth);\n window.addEventListener('resize', onResize);\n return () => window.removeEventListener('resize', onResize);\n }, []);\n\n return vw;\n}\n\n/**\n * 通用居中 Modal:必填标题、可选 info/description、标题 Action(ButtonGroup)、S/M/L 宽度(只可缩小)、固定 body 高。\n */\nconst Modal: React.FC<MarsunModalProps> = ({\n open,\n onCancel,\n title,\n info,\n description,\n actions,\n footer = null,\n size,\n width,\n children,\n className,\n destroyOnHidden = true,\n maskClosable = false,\n scrollable = false,\n closable = true,\n}) => {\n const viewportWidth = useViewportWidth();\n const effectiveWidth = useMemo(\n () => resolveModalWidth({ size, width, viewportWidth }),\n [size, width, viewportWidth],\n );\n const sizeAnchor = useMemo(\n () => resolveModalSizeAnchor({ size, width, viewportWidth }),\n [size, width, viewportWidth],\n );\n const bodyHeight = MODAL_SIZE_BODY_HEIGHT[sizeAnchor];\n\n const visibleActions = useMemo(() => {\n const list = (actions ?? []).filter((a) => !a.hidden);\n const first = list[0];\n if (!first || first.type != null) return list;\n return [{ ...first, type: 'primary' as const }, ...list.slice(1)];\n }, [actions]);\n\n const titleNode = (\n <div className={classNames('marsun-modal-title-wrap', styles['marsun-modal-title-wrap'])}>\n <div className={classNames('marsun-modal-title-row', styles['marsun-modal-title-row'])}>\n <div className={classNames('marsun-modal-title-group', styles['marsun-modal-title-group'])}>\n <div className={classNames('marsun-modal-title', styles['marsun-modal-title'])}>\n {title}\n </div>\n {info?.length ? (\n <TooltipInfo\n content={info}\n placement=\"topLeft\"\n overlayStyle={{ minWidth: 220, maxWidth: 360 }}\n overlayClassName=\"marsun-modal-info-tooltip\"\n >\n <span\n className={classNames(\n 'marsun-modal-info-trigger',\n styles['marsun-modal-info-trigger'],\n )}\n >\n <Info size={16} aria-hidden />\n </span>\n </TooltipInfo>\n ) : null}\n </div>\n {visibleActions.length > 0 ? (\n <div\n className={classNames(\n 'marsun-modal-title-actions',\n styles['marsun-modal-title-actions'],\n )}\n >\n <ButtonGroup list={visibleActions} showLength={Math.max(visibleActions.length, 2)} />\n </div>\n ) : null}\n </div>\n {description ? (\n <div className={classNames('marsun-modal-description', styles['marsun-modal-description'])}>\n {description}\n </div>\n ) : null}\n </div>\n );\n\n const body: ReactNode = scrollable ? (\n <VirtualScrollbar\n wrapperClassName={classNames(\n 'marsun-modal-scroll-wrapper',\n styles['marsun-modal-scroll-wrapper'],\n )}\n className={classNames('marsun-modal-scroll', styles['marsun-modal-scroll'])}\n >\n {children}\n </VirtualScrollbar>\n ) : (\n <div className={classNames('marsun-modal-body-inner', styles['marsun-modal-body-inner'])}>\n {children}\n </div>\n );\n\n return (\n <AntModal\n open={open}\n onCancel={onCancel}\n title={titleNode}\n footer={footer}\n width={effectiveWidth}\n centered\n closable={closable}\n maskClosable={maskClosable}\n destroyOnHidden={destroyOnHidden}\n className={classNames('marsun-modal', styles['marsun-modal'], className)}\n styles={{\n body: {\n height: bodyHeight,\n maxHeight: bodyHeight,\n overflow: 'hidden',\n paddingTop: 12,\n paddingBottom: 12,\n },\n }}\n >\n {body}\n </AntModal>\n );\n};\n\nexport default Modal;\n"],"names":["useViewportWidth","vw","setVw","useState","useEffect","onResize","Modal","open","onCancel","title","info","description","actions","footer","size","width","children","className","destroyOnHidden","maskClosable","scrollable","closable","viewportWidth","effectiveWidth","useMemo","resolveModalWidth","sizeAnchor","resolveModalSizeAnchor","bodyHeight","MODAL_SIZE_BODY_HEIGHT","visibleActions","list","a","first","titleNode","classNames","styles","jsxs","jsx","TooltipInfo","Info","ButtonGroup","body","VirtualScrollbar","AntModal"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../src/components/Modal/Modal/index.tsx"],"sourcesContent":["import ButtonGroup from '../../ButtonGroup';\nimport { Modal as AntModal } from 'antd';\nimport classNames from 'classnames';\nimport { useEffect, useMemo, useState, type ReactNode } from 'react';\nimport { Info } from '../../Icons';\nimport { TooltipInfo } from '../../TooltipInfo';\nimport { VirtualScrollbar } from '../../VirtualScrollbar';\nimport type { MarsunModalProps } from '../ModalTypes';\nimport {\n MODAL_SIZE_BODY_HEIGHT,\n resolveModalSizeAnchor,\n resolveModalWidth,\n} from '../utils/resolveModalSize';\nimport styles from './style.module.scss';\n\nfunction useViewportWidth(): number {\n const [vw, setVw] = useState(() => (typeof window !== 'undefined' ? window.innerWidth : 1200));\n\n useEffect(() => {\n const onResize = () => setVw(window.innerWidth);\n window.addEventListener('resize', onResize);\n return () => window.removeEventListener('resize', onResize);\n }, []);\n\n return vw;\n}\n\n/**\n * 通用居中 Modal:必填标题、可选 info/description、标题 Action(ButtonGroup)、S/M/L 宽度(只可缩小)、固定 body 高。\n */\nconst Modal: React.FC<MarsunModalProps> = ({\n open,\n onCancel,\n title,\n info,\n description,\n actions,\n footer = null,\n size,\n width,\n children,\n className,\n destroyOnHidden = true,\n maskClosable = false,\n scrollable = false,\n closable = true,\n}) => {\n const viewportWidth = useViewportWidth();\n const effectiveWidth = useMemo(\n () => resolveModalWidth({ size, width, viewportWidth }),\n [size, width, viewportWidth],\n );\n const sizeAnchor = useMemo(\n () => resolveModalSizeAnchor({ size, width, viewportWidth }),\n [size, width, viewportWidth],\n );\n const bodyHeight = MODAL_SIZE_BODY_HEIGHT[sizeAnchor];\n\n const visibleActions = useMemo(() => {\n const list = (actions ?? []).filter((a) => !a.hidden);\n const first = list[0];\n if (!first || first.type != null) return list;\n return [{ ...first, type: 'primary' as const }, ...list.slice(1)];\n }, [actions]);\n\n const titleNode = (\n <div className={classNames('marsun-modal-title-wrap', styles['marsun-modal-title-wrap'])}>\n <div className={classNames('marsun-modal-title-row', styles['marsun-modal-title-row'])}>\n <div className={classNames('marsun-modal-title-group', styles['marsun-modal-title-group'])}>\n <div className={classNames('marsun-modal-title', styles['marsun-modal-title'])}>\n {title}\n </div>\n {info?.length ? (\n <TooltipInfo\n content={info}\n placement=\"topLeft\"\n overlayStyle={{ minWidth: 220, maxWidth: 360 }}\n overlayClassName=\"marsun-modal-info-tooltip\"\n >\n <span\n className={classNames(\n 'marsun-modal-info-trigger',\n styles['marsun-modal-info-trigger'],\n )}\n >\n <Info size={16} aria-hidden />\n </span>\n </TooltipInfo>\n ) : null}\n </div>\n {visibleActions.length > 0 ? (\n <div\n className={classNames(\n 'marsun-modal-title-actions',\n styles['marsun-modal-title-actions'],\n )}\n >\n <ButtonGroup list={visibleActions} showLength={Math.max(visibleActions.length, 2)} />\n </div>\n ) : null}\n </div>\n {description ? (\n <div className={classNames('marsun-modal-description', styles['marsun-modal-description'])}>\n {description}\n </div>\n ) : null}\n </div>\n );\n\n const body: ReactNode = scrollable ? (\n <VirtualScrollbar\n wrapperClassName={classNames(\n 'marsun-modal-scroll-wrapper',\n styles['marsun-modal-scroll-wrapper'],\n )}\n className={classNames('marsun-modal-scroll', styles['marsun-modal-scroll'])}\n >\n {children}\n </VirtualScrollbar>\n ) : (\n <div className={classNames('marsun-modal-body-inner', styles['marsun-modal-body-inner'])}>\n {children}\n </div>\n );\n\n return (\n <AntModal\n open={open}\n onCancel={onCancel}\n title={titleNode}\n footer={footer}\n width={effectiveWidth}\n centered\n closable={closable}\n maskClosable={maskClosable}\n destroyOnHidden={destroyOnHidden}\n className={classNames('marsun-modal', styles['marsun-modal'], className)}\n styles={{\n body: {\n height: bodyHeight,\n maxHeight: bodyHeight,\n overflow: 'hidden',\n paddingTop: 12,\n paddingBottom: 12,\n },\n }}\n >\n {body}\n </AntModal>\n );\n};\n\nexport default Modal;\n"],"names":["useViewportWidth","vw","setVw","useState","useEffect","onResize","Modal","open","onCancel","title","info","description","actions","footer","size","width","children","className","destroyOnHidden","maskClosable","scrollable","closable","viewportWidth","effectiveWidth","useMemo","resolveModalWidth","sizeAnchor","resolveModalSizeAnchor","bodyHeight","MODAL_SIZE_BODY_HEIGHT","visibleActions","list","a","first","titleNode","classNames","styles","jsxs","jsx","TooltipInfo","Info","ButtonGroup","body","VirtualScrollbar","AntModal"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { jsxs as j, jsx as e } from "react/jsx-runtime";
2
2
  import k from "classnames";
3
- import y from "@kne/button-group";
3
+ import y from "../ButtonGroup/index.js";
4
4
  import { useIntl as G } from "./intlStub.js";
5
5
  import o from "./style.module.scss.js";
6
6
  var f;
@@ -1 +1 @@
1
- {"version":3,"file":"Footer.js","sources":["../../../src/components/ReactModal/Footer.jsx"],"sourcesContent":["// @ts-nocheck\n// Ported from https://github.com/kne-union/react-modal/blob/master/src/Footer.js\nimport classnames from 'classnames';\nimport ButtonGroupModule from '@kne/button-group';\nimport { useIntl } from './intlStub';\nimport style from './style.module.scss';\n\n// CJS/ESM interop:vitest/node 下 default 可能是 { default: Component }\nconst ButtonGroup = ButtonGroupModule?.default ?? ButtonGroupModule;\n\nconst Footer = ({\n footer,\n footerButtons,\n onConfirm,\n onCancel,\n cancelText,\n confirmText,\n onClose,\n targetProps,\n isMobile,\n}) => {\n const { formatMessage } = useIntl();\n\n const defaultButtons = [\n {\n children: cancelText || formatMessage({ id: 'Cancel' }),\n onClick: onCancel,\n },\n {\n type: 'primary',\n children: confirmText || formatMessage({ id: 'Confirm' }),\n onClick: onConfirm,\n },\n ];\n\n const rawList = footerButtons === undefined ? defaultButtons : footerButtons;\n\n const list = (Array.isArray(rawList) ? rawList : [])\n .filter((item) => {\n if (typeof item?.display === 'function') {\n return item.display();\n }\n return item?.display !== false;\n })\n .map(({ ButtonComponent, onClick, autoClose = true, display, ...props }) => ({\n ...props,\n buttonComponent: ButtonComponent,\n onClick: async (...args) => {\n const res = await Promise.resolve(onClick && onClick(...args, targetProps));\n autoClose && res !== false && onClose && onClose();\n return res;\n },\n }));\n\n const showButtons =\n !(Array.isArray(footerButtons) && footerButtons.length === 0) && list.length > 0;\n const embeddedFooterOnly =\n Array.isArray(footerButtons) && footerButtons.length === 0 && footer != null;\n const showFooterSlot = !isMobile || footer;\n\n if (!showFooterSlot && !showButtons) {\n return null;\n }\n\n return (\n <div\n className={classnames(style['modal-footer'], 'modal-footer', {\n [style['is-mobile']]: isMobile,\n [style['is-embedded-footer']]: embeddedFooterOnly,\n })}\n >\n {showFooterSlot ? <div className={style['modal-footer-extra']}>{footer}</div> : null}\n {showButtons ? (\n <div className={style['modal-footer-actions']}>\n <ButtonGroup list={list} showLength={list.length} place={isMobile ? 'center' : 'end'} />\n </div>\n ) : null}\n </div>\n );\n};\n\nexport default Footer;\n"],"names":["ButtonGroup","ButtonGroupModule","Footer","footer","footerButtons","onConfirm","onCancel","cancelText","confirmText","onClose","targetProps","isMobile","formatMessage","useIntl","defaultButtons","rawList","list","item","ButtonComponent","onClick","autoClose","display","props","args","res","showButtons","embeddedFooterOnly","showFooterSlot","jsxs","classnames","style","jsx"],"mappings":";;;;;;AAQA,MAAMA,MAAcC,IAAAA,MAAAA,gBAAAA,EAAmB,YAAWA,GAE5CC,IAAS,CAAC;AAAA,EACd,QAAAC;AAAA,EACA,eAAAC;AAAA,EACA,WAAAC;AAAA,EACA,UAAAC;AAAA,EACA,YAAAC;AAAA,EACA,aAAAC;AAAA,EACA,SAAAC;AAAA,EACA,aAAAC;AAAA,EACA,UAAAC;AACF,MAAM;AACJ,QAAM,EAAE,eAAAC,EAAA,IAAkBC,EAAA,GAEpBC,IAAiB;AAAA,IACrB;AAAA,MACE,UAAUP,KAAcK,EAAc,EAAE,IAAI,UAAU;AAAA,MACtD,SAASN;AAAA,IAAA;AAAA,IAEX;AAAA,MACE,MAAM;AAAA,MACN,UAAUE,KAAeI,EAAc,EAAE,IAAI,WAAW;AAAA,MACxD,SAASP;AAAA,IAAA;AAAA,EACX,GAGIU,IAAUX,MAAkB,SAAYU,IAAiBV,GAEzDY,KAAQ,MAAM,QAAQD,CAAO,IAAIA,IAAU,CAAA,GAC9C,OAAO,CAACE,MACH,QAAOA,KAAA,gBAAAA,EAAM,YAAY,aACpBA,EAAK,QAAA,KAEPA,KAAA,gBAAAA,EAAM,aAAY,EAC1B,EACA,IAAI,CAAC,EAAE,iBAAAC,GAAiB,SAAAC,GAAS,WAAAC,IAAY,IAAM,SAAAC,GAAS,GAAGC,SAAa;AAAA,IAC3E,GAAGA;AAAA,IACH,iBAAiBJ;AAAA,IACjB,SAAS,UAAUK,MAAS;AAC1B,YAAMC,IAAM,MAAM,QAAQ,QAAQL,KAAWA,EAAQ,GAAGI,GAAMb,CAAW,CAAC;AAC1E,aAAAU,KAAaI,MAAQ,MAASf,KAAWA,EAAA,GAClCe;AAAA,IACT;AAAA,EAAA,EACA,GAEEC,IACJ,EAAE,MAAM,QAAQrB,CAAa,KAAKA,EAAc,WAAW,MAAMY,EAAK,SAAS,GAC3EU,IACJ,MAAM,QAAQtB,CAAa,KAAKA,EAAc,WAAW,KAAKD,KAAU,MACpEwB,IAAiB,CAAChB,KAAYR;AAEpC,SAAI,CAACwB,KAAkB,CAACF,IACf,OAIP,gBAAAG;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWC,EAAWC,EAAM,cAAc,GAAG,gBAAgB;AAAA,QAC3D,CAACA,EAAM,WAAW,CAAC,GAAGnB;AAAA,QACtB,CAACmB,EAAM,oBAAoB,CAAC,GAAGJ;AAAA,MAAA,CAChC;AAAA,MAEA,UAAA;AAAA,QAAAC,sBAAkB,OAAA,EAAI,WAAWG,EAAM,oBAAoB,GAAI,aAAO,IAAS;AAAA,QAC/EL,IACC,gBAAAM,EAAC,OAAA,EAAI,WAAWD,EAAM,sBAAsB,GAC1C,UAAA,gBAAAC,EAAC/B,GAAA,EAAY,MAAAgB,GAAY,YAAYA,EAAK,QAAQ,OAAOL,IAAW,WAAW,OAAO,GACxF,IACE;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGV;"}
1
+ {"version":3,"file":"Footer.js","sources":["../../../src/components/ReactModal/Footer.jsx"],"sourcesContent":["// @ts-nocheck\n// Ported from https://github.com/kne-union/react-modal/blob/master/src/Footer.js\nimport classnames from 'classnames';\nimport ButtonGroupModule from '../ButtonGroup';\nimport { useIntl } from './intlStub';\nimport style from './style.module.scss';\n\n// CJS/ESM interop:vitest/node 下 default 可能是 { default: Component }\nconst ButtonGroup = ButtonGroupModule?.default ?? ButtonGroupModule;\n\nconst Footer = ({\n footer,\n footerButtons,\n onConfirm,\n onCancel,\n cancelText,\n confirmText,\n onClose,\n targetProps,\n isMobile,\n}) => {\n const { formatMessage } = useIntl();\n\n const defaultButtons = [\n {\n children: cancelText || formatMessage({ id: 'Cancel' }),\n onClick: onCancel,\n },\n {\n type: 'primary',\n children: confirmText || formatMessage({ id: 'Confirm' }),\n onClick: onConfirm,\n },\n ];\n\n const rawList = footerButtons === undefined ? defaultButtons : footerButtons;\n\n const list = (Array.isArray(rawList) ? rawList : [])\n .filter((item) => {\n if (typeof item?.display === 'function') {\n return item.display();\n }\n return item?.display !== false;\n })\n .map(({ ButtonComponent, onClick, autoClose = true, display, ...props }) => ({\n ...props,\n buttonComponent: ButtonComponent,\n onClick: async (...args) => {\n const res = await Promise.resolve(onClick && onClick(...args, targetProps));\n autoClose && res !== false && onClose && onClose();\n return res;\n },\n }));\n\n const showButtons =\n !(Array.isArray(footerButtons) && footerButtons.length === 0) && list.length > 0;\n const embeddedFooterOnly =\n Array.isArray(footerButtons) && footerButtons.length === 0 && footer != null;\n const showFooterSlot = !isMobile || footer;\n\n if (!showFooterSlot && !showButtons) {\n return null;\n }\n\n return (\n <div\n className={classnames(style['modal-footer'], 'modal-footer', {\n [style['is-mobile']]: isMobile,\n [style['is-embedded-footer']]: embeddedFooterOnly,\n })}\n >\n {showFooterSlot ? <div className={style['modal-footer-extra']}>{footer}</div> : null}\n {showButtons ? (\n <div className={style['modal-footer-actions']}>\n <ButtonGroup list={list} showLength={list.length} place={isMobile ? 'center' : 'end'} />\n </div>\n ) : null}\n </div>\n );\n};\n\nexport default Footer;\n"],"names":["ButtonGroup","ButtonGroupModule","Footer","footer","footerButtons","onConfirm","onCancel","cancelText","confirmText","onClose","targetProps","isMobile","formatMessage","useIntl","defaultButtons","rawList","list","item","ButtonComponent","onClick","autoClose","display","props","args","res","showButtons","embeddedFooterOnly","showFooterSlot","jsxs","classnames","style","jsx"],"mappings":";;;;;;AAQA,MAAMA,MAAcC,IAAAA,MAAAA,gBAAAA,EAAmB,YAAWA,GAE5CC,IAAS,CAAC;AAAA,EACd,QAAAC;AAAA,EACA,eAAAC;AAAA,EACA,WAAAC;AAAA,EACA,UAAAC;AAAA,EACA,YAAAC;AAAA,EACA,aAAAC;AAAA,EACA,SAAAC;AAAA,EACA,aAAAC;AAAA,EACA,UAAAC;AACF,MAAM;AACJ,QAAM,EAAE,eAAAC,EAAA,IAAkBC,EAAA,GAEpBC,IAAiB;AAAA,IACrB;AAAA,MACE,UAAUP,KAAcK,EAAc,EAAE,IAAI,UAAU;AAAA,MACtD,SAASN;AAAA,IAAA;AAAA,IAEX;AAAA,MACE,MAAM;AAAA,MACN,UAAUE,KAAeI,EAAc,EAAE,IAAI,WAAW;AAAA,MACxD,SAASP;AAAA,IAAA;AAAA,EACX,GAGIU,IAAUX,MAAkB,SAAYU,IAAiBV,GAEzDY,KAAQ,MAAM,QAAQD,CAAO,IAAIA,IAAU,CAAA,GAC9C,OAAO,CAACE,MACH,QAAOA,KAAA,gBAAAA,EAAM,YAAY,aACpBA,EAAK,QAAA,KAEPA,KAAA,gBAAAA,EAAM,aAAY,EAC1B,EACA,IAAI,CAAC,EAAE,iBAAAC,GAAiB,SAAAC,GAAS,WAAAC,IAAY,IAAM,SAAAC,GAAS,GAAGC,SAAa;AAAA,IAC3E,GAAGA;AAAA,IACH,iBAAiBJ;AAAA,IACjB,SAAS,UAAUK,MAAS;AAC1B,YAAMC,IAAM,MAAM,QAAQ,QAAQL,KAAWA,EAAQ,GAAGI,GAAMb,CAAW,CAAC;AAC1E,aAAAU,KAAaI,MAAQ,MAASf,KAAWA,EAAA,GAClCe;AAAA,IACT;AAAA,EAAA,EACA,GAEEC,IACJ,EAAE,MAAM,QAAQrB,CAAa,KAAKA,EAAc,WAAW,MAAMY,EAAK,SAAS,GAC3EU,IACJ,MAAM,QAAQtB,CAAa,KAAKA,EAAc,WAAW,KAAKD,KAAU,MACpEwB,IAAiB,CAAChB,KAAYR;AAEpC,SAAI,CAACwB,KAAkB,CAACF,IACf,OAIP,gBAAAG;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWC,EAAWC,EAAM,cAAc,GAAG,gBAAgB;AAAA,QAC3D,CAACA,EAAM,WAAW,CAAC,GAAGnB;AAAA,QACtB,CAACmB,EAAM,oBAAoB,CAAC,GAAGJ;AAAA,MAAA,CAChC;AAAA,MAEA,UAAA;AAAA,QAAAC,sBAAkB,OAAA,EAAI,WAAWG,EAAM,oBAAoB,GAAI,aAAO,IAAS;AAAA,QAC/EL,IACC,gBAAAM,EAAC,OAAA,EAAI,WAAWD,EAAM,sBAAsB,GAC1C,UAAA,gBAAAC,EAAC/B,GAAA,EAAY,MAAAgB,GAAY,YAAYA,EAAK,QAAQ,OAAOL,IAAW,WAAW,OAAO,GACxF,IACE;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGV;"}