openxiangda 2.44.0 → 2.48.2

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 (97) hide show
  1. package/dist/browser/components/platform-fields/JsonField.d.ts.map +1 -1
  2. package/dist/browser/components/platform-fields/JsonField.js +6 -1
  3. package/dist/browser/components/platform-fields/JsonField.js.map +1 -1
  4. package/dist/browser/components/platform-fields/MobileManagedFileField.d.ts.map +1 -1
  5. package/dist/browser/components/platform-fields/MobileManagedFileField.js +6 -1
  6. package/dist/browser/components/platform-fields/MobileManagedFileField.js.map +1 -1
  7. package/dist/browser/components/platform-fields/MobileSubtableValidation.d.ts +2 -1
  8. package/dist/browser/components/platform-fields/MobileSubtableValidation.d.ts.map +1 -1
  9. package/dist/browser/components/platform-fields/MobileSubtableValidation.js +3 -1
  10. package/dist/browser/components/platform-fields/MobileSubtableValidation.js.map +1 -1
  11. package/dist/browser/components/platform-fields/RichTextField.d.ts +3 -2
  12. package/dist/browser/components/platform-fields/RichTextField.d.ts.map +1 -1
  13. package/dist/browser/components/platform-fields/RichTextField.js +96 -44
  14. package/dist/browser/components/platform-fields/RichTextField.js.map +1 -1
  15. package/dist/browser/components/platform-fields/SignatureField.d.ts +5 -4
  16. package/dist/browser/components/platform-fields/SignatureField.d.ts.map +1 -1
  17. package/dist/browser/components/platform-fields/SignatureField.js +69 -16
  18. package/dist/browser/components/platform-fields/SignatureField.js.map +1 -1
  19. package/dist/browser/components/platform-fields/SubtableField.d.ts +18 -2
  20. package/dist/browser/components/platform-fields/SubtableField.d.ts.map +1 -1
  21. package/dist/browser/components/platform-fields/SubtableField.js +146 -57
  22. package/dist/browser/components/platform-fields/SubtableField.js.map +1 -1
  23. package/dist/browser/components/platform-fields/subtable-pagination.d.ts +20 -0
  24. package/dist/browser/components/platform-fields/subtable-pagination.d.ts.map +1 -0
  25. package/dist/browser/components/platform-fields/subtable-pagination.js +39 -0
  26. package/dist/browser/components/platform-fields/subtable-pagination.js.map +1 -0
  27. package/dist/browser/components/platform-fields/subtable-value.d.ts.map +1 -1
  28. package/dist/browser/components/platform-fields/subtable-value.js +2 -1
  29. package/dist/browser/components/platform-fields/subtable-value.js.map +1 -1
  30. package/dist/browser/components/platform-fields/surface-field-validation.d.ts +31 -0
  31. package/dist/browser/components/platform-fields/surface-field-validation.d.ts.map +1 -0
  32. package/dist/browser/components/platform-fields/surface-field-validation.js +36 -0
  33. package/dist/browser/components/platform-fields/surface-field-validation.js.map +1 -0
  34. package/dist/browser/components/resource/SurfaceFields.d.ts +1 -1
  35. package/dist/browser/components/resource/SurfaceFields.d.ts.map +1 -1
  36. package/dist/browser/components/resource/SurfaceFields.js +38 -64
  37. package/dist/browser/components/resource/SurfaceFields.js.map +1 -1
  38. package/dist/browser/components/resource/resource-form-operations.d.ts.map +1 -1
  39. package/dist/browser/components/resource/resource-form-operations.js +5 -1
  40. package/dist/browser/components/resource/resource-form-operations.js.map +1 -1
  41. package/dist/browser/components/workflow/StandardWorkflowPages.d.ts.map +1 -1
  42. package/dist/browser/components/workflow/StandardWorkflowPages.js +30 -13
  43. package/dist/browser/components/workflow/StandardWorkflowPages.js.map +1 -1
  44. package/dist/browser/components/workflow/WorkflowDiagram.d.ts.map +1 -1
  45. package/dist/browser/components/workflow/WorkflowDiagram.js +14 -1
  46. package/dist/browser/components/workflow/WorkflowDiagram.js.map +1 -1
  47. package/dist/browser/components/workflow/WorkflowFlowCanvas.d.ts.map +1 -1
  48. package/dist/browser/components/workflow/WorkflowFlowCanvas.js +27 -8
  49. package/dist/browser/components/workflow/WorkflowFlowCanvas.js.map +1 -1
  50. package/dist/browser/components/workflow/WorkflowTaskFiles.d.ts +5 -3
  51. package/dist/browser/components/workflow/WorkflowTaskFiles.d.ts.map +1 -1
  52. package/dist/browser/components/workflow/WorkflowTaskFiles.js +67 -27
  53. package/dist/browser/components/workflow/WorkflowTaskFiles.js.map +1 -1
  54. package/dist/browser/components/workflow/WorkflowTaskForm.d.ts +4 -0
  55. package/dist/browser/components/workflow/WorkflowTaskForm.d.ts.map +1 -1
  56. package/dist/browser/components/workflow/WorkflowTaskForm.js +49 -15
  57. package/dist/browser/components/workflow/WorkflowTaskForm.js.map +1 -1
  58. package/dist/browser/components/workflow/standard-process-values.d.ts +10 -0
  59. package/dist/browser/components/workflow/standard-process-values.d.ts.map +1 -0
  60. package/dist/browser/components/workflow/standard-process-values.js +25 -0
  61. package/dist/browser/components/workflow/standard-process-values.js.map +1 -0
  62. package/dist/browser/components/workflow/workflow-graph-presentation.d.ts +19 -0
  63. package/dist/browser/components/workflow/workflow-graph-presentation.d.ts.map +1 -0
  64. package/dist/browser/components/workflow/workflow-graph-presentation.js +28 -0
  65. package/dist/browser/components/workflow/workflow-graph-presentation.js.map +1 -0
  66. package/dist/browser/components/workflow/workflow-task-field-codec.d.ts +4 -0
  67. package/dist/browser/components/workflow/workflow-task-field-codec.d.ts.map +1 -0
  68. package/dist/browser/components/workflow/workflow-task-field-codec.js +9 -0
  69. package/dist/browser/components/workflow/workflow-task-field-codec.js.map +1 -0
  70. package/dist/browser/components/workflow/workflow-task-subtable.d.ts +7 -0
  71. package/dist/browser/components/workflow/workflow-task-subtable.d.ts.map +1 -0
  72. package/dist/browser/components/workflow/workflow-task-subtable.js +58 -0
  73. package/dist/browser/components/workflow/workflow-task-subtable.js.map +1 -0
  74. package/dist/browser/mobile-fields.css +4 -0
  75. package/dist/browser/record-detail.css +4 -2
  76. package/dist/browser/styles.css +11 -0
  77. package/dist/browser/workflow-task-file-upload.d.ts.map +1 -1
  78. package/dist/browser/workflow-task-file-upload.js +1 -0
  79. package/dist/browser/workflow-task-file-upload.js.map +1 -1
  80. package/documentation/field-components.md +1 -1
  81. package/documentation/getting-started.md +7 -7
  82. package/documentation/manifest.json +4 -4
  83. package/documentation/workflow-events.md +94 -4
  84. package/package.json +21 -27
  85. package/releases/2.48.1.json +30 -0
  86. package/releases/2.48.2.json +29 -0
  87. package/skills/manifest.json +1 -1
  88. package/skills/openxiangda-v2/SKILL.md +4 -4
  89. package/skills/openxiangda-v2/references/field-components.md +1 -1
  90. package/skills/openxiangda-v2/references/getting-started.md +7 -7
  91. package/skills/openxiangda-v2/references/workflow-events.md +94 -4
  92. package/dist/browser/components/platform-fields/MobileRichTextField.d.ts +0 -4
  93. package/dist/browser/components/platform-fields/MobileRichTextField.d.ts.map +0 -1
  94. package/dist/browser/components/platform-fields/MobileRichTextField.js +0 -38
  95. package/dist/browser/components/platform-fields/MobileRichTextField.js.map +0 -1
  96. package/releases/2.43.0.json +0 -38
  97. package/releases/2.44.0.json +0 -36
@@ -7,6 +7,12 @@ import { Alert, Button, Image, Modal, Space, Spin, Typography, } from 'antd';
7
7
  import { useCallback, useEffect, useRef, useState, } from 'react';
8
8
  import { fetchDataFileBlob, fetchWorkflowDataFileBlob, } from '../../platform-client';
9
9
  const CANVAS_HEIGHT = 240;
10
+ const MAX_TASK_POINTS = 512;
11
+ function sampledPoints(input, maximum) {
12
+ if (input.length <= maximum)
13
+ return input.slice();
14
+ return Array.from({ length: maximum }, (_, index) => input[Math.round(index * (input.length - 1) / (maximum - 1))]);
15
+ }
10
16
  async function sha256(blob) {
11
17
  const digest = await crypto.subtle.digest('SHA-256', await blob.arrayBuffer());
12
18
  return [...new Uint8Array(digest)]
@@ -27,8 +33,11 @@ function SignatureImage({ value, resourceCode, workflowBinding, mobile = false,
27
33
  useEffect(() => {
28
34
  let active = true;
29
35
  let objectUrl = '';
30
- if (!resourceCode && !workflowBinding)
36
+ setSource('');
37
+ if (!resourceCode && !workflowBinding) {
38
+ setLoading(false);
31
39
  return;
40
+ }
32
41
  setLoading(true);
33
42
  const request = workflowBinding
34
43
  ? fetchWorkflowDataFileBlob(workflowBinding, value.file.id)
@@ -56,6 +65,7 @@ function SignatureImage({ value, resourceCode, workflowBinding, mobile = false,
56
65
  }, [
57
66
  resourceCode,
58
67
  value.file.id,
68
+ workflowBinding?.taskId,
59
69
  workflowBinding?.instanceId,
60
70
  workflowBinding?.resourceCode,
61
71
  workflowBinding?.recordId,
@@ -68,7 +78,7 @@ function SignatureImage({ value, resourceCode, workflowBinding, mobile = false,
68
78
  export function SignatureValueDisplay({ value, resourceCode, workflowBinding, }) {
69
79
  return (_jsxs("div", { className: "oxa-signature-value", children: [_jsx(SignatureImage, { resourceCode: resourceCode, value: value, workflowBinding: workflowBinding }), _jsxs(Typography.Text, { type: "secondary", children: [value.signer?.label || '业务签名', " \u00B7 ", _jsx(PresentationTime, { value: value.signedAt })] }), _jsxs(Typography.Text, { className: "oxa-signature-hash", type: "secondary", children: ["SHA-256 ", value.hash.slice(0, 16), "..."] })] }));
70
80
  }
71
- export function SignatureField({ value, onChange, onUpload, signer, resourceCode, disabled = false, mobile = false, }) {
81
+ export function SignatureField({ value, onChange, onUpload, signer, resourceCode, workflowBinding, disabled = false, mobile = false, }) {
72
82
  const canvas = useRef(null);
73
83
  const drawing = useRef(false);
74
84
  const points = useRef([]);
@@ -76,6 +86,18 @@ export function SignatureField({ value, onChange, onUpload, signer, resourceCode
76
86
  const [drawn, setDrawn] = useState(false);
77
87
  const [saving, setSaving] = useState(false);
78
88
  const [error, setError] = useState('');
89
+ const scope = JSON.stringify([resourceCode, workflowBinding?.taskId, workflowBinding?.instanceId,
90
+ workflowBinding?.resourceCode, workflowBinding?.recordId, workflowBinding?.fieldCode]);
91
+ const generation = useRef(0);
92
+ useEffect(() => {
93
+ generation.current += 1;
94
+ setOpen(false);
95
+ setSaving(false);
96
+ setError('');
97
+ drawing.current = false;
98
+ return () => { generation.current += 1; };
99
+ }, [scope]);
100
+ const locked = disabled || saving;
79
101
  const prepare = useCallback(() => {
80
102
  const element = canvas.current;
81
103
  if (!element)
@@ -112,12 +134,16 @@ export function SignatureField({ value, onChange, onUpload, signer, resourceCode
112
134
  };
113
135
  };
114
136
  const clear = () => {
137
+ if (locked)
138
+ return;
115
139
  points.current = [];
116
140
  setDrawn(false);
117
141
  setError('');
118
142
  prepare();
119
143
  };
120
144
  const save = async () => {
145
+ if (locked)
146
+ return;
121
147
  if (!canvas.current || !points.current.length) {
122
148
  setError('请先完成签名');
123
149
  return;
@@ -128,6 +154,11 @@ export function SignatureField({ value, onChange, onUpload, signer, resourceCode
128
154
  }
129
155
  setSaving(true);
130
156
  setError('');
157
+ const originalGeneration = generation.current;
158
+ const signedAt = new Date().toISOString();
159
+ const originalPoints = workflowBinding?.taskId
160
+ ? sampledPoints(points.current, MAX_TASK_POINTS) : points.current.slice();
161
+ let uploadStarted = false;
131
162
  try {
132
163
  const blob = await new Promise(resolve => canvas.current?.toBlob(resolve, 'image/png'));
133
164
  if (!blob)
@@ -136,25 +167,44 @@ export function SignatureField({ value, onChange, onUpload, signer, resourceCode
136
167
  const file = new File([blob], `signature-${Date.now()}.png`, {
137
168
  type: 'image/png',
138
169
  });
139
- const uploaded = await onUpload(file);
140
- onChange?.({
141
- file: managedFile(uploaded),
170
+ const envelope = {
142
171
  ...(signer ? { signer } : {}),
143
- signedAt: new Date().toISOString(),
144
- points: points.current.slice(),
172
+ signedAt,
173
+ points: originalPoints,
145
174
  hash,
146
- });
147
- setOpen(false);
175
+ };
176
+ const adopt = (uploaded) => {
177
+ if (generation.current !== originalGeneration)
178
+ return;
179
+ onChange?.({ ...envelope, file: managedFile(uploaded) });
180
+ setOpen(false);
181
+ setError('');
182
+ };
183
+ if (generation.current !== originalGeneration)
184
+ return;
185
+ uploadStarted = true;
186
+ adopt(await onUpload(file, adopt));
148
187
  }
149
188
  catch (reason) {
150
- setError(reason instanceof Error ? reason.message : String(reason));
189
+ if (generation.current !== originalGeneration)
190
+ return;
191
+ if (workflowBinding?.taskId && uploadStarted) {
192
+ // The task recovery panel owns upload failures and the original envelope.
193
+ setOpen(false);
194
+ setError('');
195
+ }
196
+ else
197
+ setError(reason instanceof Error ? reason.message : String(reason));
151
198
  }
152
199
  finally {
153
- setSaving(false);
200
+ if (generation.current === originalGeneration)
201
+ setSaving(false);
154
202
  }
155
203
  };
156
204
  const canvasContent = (_jsxs("div", { className: "oxa-signature-pad", children: [_jsx("canvas", { "aria-label": "\u624B\u5199\u7B7E\u540D\u753B\u5E03", className: "oxa-signature-canvas", onPointerCancel: () => { drawing.current = false; }, onPointerDown: event => {
157
205
  event.preventDefault();
206
+ if (locked)
207
+ return;
158
208
  event.currentTarget.setPointerCapture(event.pointerId);
159
209
  drawing.current = true;
160
210
  const next = point(event);
@@ -169,7 +219,7 @@ export function SignatureField({ value, onChange, onUpload, signer, resourceCode
169
219
  setDrawn(true);
170
220
  }, onPointerMove: event => {
171
221
  event.preventDefault();
172
- if (!drawing.current)
222
+ if (locked || !drawing.current)
173
223
  return;
174
224
  const previous = points.current[points.current.length - 1];
175
225
  const next = point(event);
@@ -181,15 +231,18 @@ export function SignatureField({ value, onChange, onUpload, signer, resourceCode
181
231
  context.stroke();
182
232
  }
183
233
  points.current.push(next);
234
+ if (workflowBinding?.taskId && points.current.length > 4096) {
235
+ points.current = sampledPoints(points.current, 2048);
236
+ }
184
237
  }, onPointerUp: event => {
185
238
  if (event.currentTarget.hasPointerCapture(event.pointerId)) {
186
239
  event.currentTarget.releasePointerCapture(event.pointerId);
187
240
  }
188
241
  drawing.current = false;
189
- }, ref: canvas }), error && _jsx(Alert, { showIcon: true, title: error, type: "error" }), mobile ? _jsx(MobileButton, { disabled: saving, onClick: clear, children: "\u6E05\u7A7A\u753B\u5E03" }) : _jsx(Button, { disabled: saving, icon: _jsx(ClearOutlined, {}), onClick: clear, children: "\u6E05\u7A7A\u753B\u5E03" })] }));
190
- const dialog = mobile ? (_jsx(Popup, { visible: open, bodyClassName: "oxa-mobile-signature-sheet", onMaskClick: () => !saving && setOpen(false), destroyOnClose: true, children: _jsxs("section", { role: "dialog", "aria-label": "\u624B\u5199\u7B7E\u540D", children: [_jsx(MobileSheetHeader, { title: "\u624B\u5199\u7B7E\u540D", disabled: !drawn || saving, confirmText: saving ? '保存中…' : '保存签名', onCancel: () => !saving && setOpen(false), onConfirm: () => void save() }), canvasContent] }) })) : (_jsx(Modal, { destroyOnHidden: true, okButtonProps: { disabled: !drawn }, okText: "\u4FDD\u5B58\u7B7E\u540D", onCancel: () => setOpen(false), onOk: () => void save(), open: open, confirmLoading: saving, title: "\u624B\u5199\u7B7E\u540D", width: 720, children: canvasContent }));
242
+ }, ref: canvas }), error && _jsx(Alert, { showIcon: true, title: error, type: "error" }), mobile ? _jsx(MobileButton, { disabled: locked, onClick: clear, children: "\u6E05\u7A7A\u753B\u5E03" }) : _jsx(Button, { disabled: locked, icon: _jsx(ClearOutlined, {}), onClick: clear, children: "\u6E05\u7A7A\u753B\u5E03" })] }));
243
+ const dialog = mobile ? (_jsx(Popup, { visible: open, bodyClassName: "oxa-mobile-signature-sheet", onMaskClick: () => !locked && setOpen(false), destroyOnClose: true, children: _jsxs("section", { role: "dialog", "aria-label": "\u624B\u5199\u7B7E\u540D", children: [_jsx(MobileSheetHeader, { title: "\u624B\u5199\u7B7E\u540D", disabled: !drawn || locked, confirmText: saving ? '保存中…' : '保存签名', onCancel: () => !locked && setOpen(false), onConfirm: () => void save() }), canvasContent] }) })) : (_jsx(Modal, { destroyOnHidden: true, okButtonProps: { disabled: !drawn || locked }, cancelButtonProps: { disabled: locked }, closable: !locked, maskClosable: !locked, keyboard: !locked, okText: "\u4FDD\u5B58\u7B7E\u540D", onCancel: () => !locked && setOpen(false), onOk: () => void save(), open: open, confirmLoading: saving, title: "\u624B\u5199\u7B7E\u540D", width: 720, children: canvasContent }));
191
244
  if (mobile)
192
- return _jsxs("div", { className: "oxa-mobile-signature-field oxa-mobile-scope", children: [_jsx(MobileButton, { className: "oxa-mobile-signature-preview", fill: "none", disabled: disabled, "aria-label": value ? '重新签名' : '开始签名', onClick: () => setOpen(true), children: value ? _jsx(SignatureImage, { mobile: true, resourceCode: resourceCode, value: value }) : _jsx("span", { children: "\u70B9\u51FB\u624B\u5199\u7B7E\u540D" }) }), value && !disabled && _jsx(MobileButton, { className: "oxa-mobile-signature-clear", fill: "none", "aria-label": "\u6E05\u9664\u7B7E\u540D", onClick: () => onChange?.(undefined), children: "\u00D7" }), dialog] });
193
- return (_jsxs("div", { className: "oxa-signature-field", children: [value ? (_jsx(SignatureValueDisplay, { resourceCode: resourceCode, value: value })) : (_jsx(Typography.Text, { type: "secondary", children: "\u5C1A\u672A\u7B7E\u540D" })), !disabled && (_jsxs(Space, { children: [_jsx(Button, { icon: _jsx(EditOutlined, {}), onClick: () => setOpen(true), children: value ? '重新签名' : '开始签名' }), value && (_jsx(Button, { "aria-label": "\u6E05\u9664\u7B7E\u540D", icon: _jsx(DeleteOutlined, {}), onClick: () => onChange?.(undefined) }))] })), dialog] }));
245
+ return _jsxs("div", { className: "oxa-mobile-signature-field oxa-mobile-scope", children: [_jsx(MobileButton, { className: "oxa-mobile-signature-preview", fill: "none", disabled: locked, "aria-label": value ? '重新签名' : '开始签名', onClick: () => setOpen(true), children: value ? _jsx(SignatureImage, { mobile: true, resourceCode: resourceCode, workflowBinding: workflowBinding, value: value }) : _jsx("span", { children: "\u70B9\u51FB\u624B\u5199\u7B7E\u540D" }) }), value && _jsx(MobileButton, { disabled: locked, className: "oxa-mobile-signature-clear", fill: "none", "aria-label": "\u6E05\u9664\u7B7E\u540D", onClick: () => onChange?.(null), children: "\u00D7" }), dialog] });
246
+ return (_jsxs("div", { className: "oxa-signature-field", children: [value ? (_jsx(SignatureValueDisplay, { resourceCode: resourceCode, workflowBinding: workflowBinding, value: value })) : (_jsx(Typography.Text, { type: "secondary", children: "\u5C1A\u672A\u7B7E\u540D" })), !disabled && (_jsxs(Space, { children: [_jsx(Button, { disabled: locked, icon: _jsx(EditOutlined, {}), onClick: () => setOpen(true), children: value ? '重新签名' : '开始签名' }), value && (_jsx(Button, { "aria-label": "\u6E05\u9664\u7B7E\u540D", icon: _jsx(DeleteOutlined, {}), disabled: locked, onClick: () => onChange?.(null) }))] })), dialog] }));
194
247
  }
195
248
  //# sourceMappingURL=SignatureField.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SignatureField.js","sourceRoot":"","sources":["../../../../src/browser/components/platform-fields/SignatureField.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SignatureField.js","sourceRoot":"","sources":["../../../../src/browser/components/platform-fields/SignatureField.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EACL,aAAa,EACb,cAAc,EACd,YAAY,GACb,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,KAAK,EACL,MAAM,EACN,KAAK,EACL,KAAK,EACL,KAAK,EACL,IAAI,EACJ,UAAU,GACX,MAAM,MAAM,CAAC;AAOd,OAAO,EACL,WAAW,EACX,SAAS,EACT,MAAM,EACN,QAAQ,GAGT,MAAM,OAAO,CAAC;AACf,OAAO,EACL,iBAAiB,EACjB,yBAAyB,GAE1B,MAAM,uBAAuB,CAAC;AAE/B,MAAM,aAAa,GAAG,GAAG,CAAC;AAC1B,MAAM,eAAe,GAAG,GAAG,CAAC;AAE5B,SAAS,aAAa,CAAC,KAA6B,EAAE,OAAe;IACnE,IAAI,KAAK,CAAC,MAAM,IAAI,OAAO;QAAE,OAAO,KAAK,CAAC,KAAK,EAAE,CAAC;IAClD,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAClD,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAE,CAC/D,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,MAAM,CAAC,IAAU;IAC9B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IAC/E,OAAO,CAAC,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;SAC/B,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;SAC/C,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC;AAED,SAAS,WAAW,CAAC,IAAiB;IACpC,OAAO;QACL,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,WAAW,EAAE,IAAI,CAAC,WAAW;KAC9B,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,EACtB,KAAK,EACL,YAAY,EACZ,eAAe,EACf,MAAM,GAAG,KAAK,GAMf;IACC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACzC,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CACpC,OAAO,CAAC,YAAY,IAAI,eAAe,CAAC,CACzC,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,MAAM,GAAG,IAAI,CAAC;QAClB,IAAI,SAAS,GAAG,EAAE,CAAC;QACnB,SAAS,CAAC,EAAE,CAAC,CAAC;QACd,IAAI,CAAC,YAAY,IAAI,CAAC,eAAe,EAAE,CAAC;YAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YAAC,OAAO;QAAC,CAAC;QACrE,UAAU,CAAC,IAAI,CAAC,CAAC;QACjB,MAAM,OAAO,GAAG,eAAe;YAC7B,CAAC,CAAC,yBAAyB,CAAC,eAAe,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3D,CAAC,CAAC,iBAAiB,CAAC,YAAa,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpD,OAAO;aACJ,IAAI,CAAC,IAAI,CAAC,EAAE;YACX,IAAI,MAAM,EAAE,CAAC;gBAAC,SAAS,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;gBAAC,SAAS,CAAC,SAAS,CAAC,CAAC;YAAC,CAAC;QAC9E,CAAC,CAAC;aACD,KAAK,CAAC,GAAG,EAAE;YACV,IAAI,MAAM;gBAAE,SAAS,CAAC,EAAE,CAAC,CAAC;QAC5B,CAAC,CAAC;aACD,OAAO,CAAC,GAAG,EAAE;YACZ,IAAI,MAAM;gBAAE,UAAU,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;QACL,OAAO,GAAG,EAAE;YACV,MAAM,GAAG,KAAK,CAAC;YACf,IAAI,SAAS;gBAAE,GAAG,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;QAChD,CAAC,CAAC;IACJ,CAAC,EAAE;QACD,YAAY;QACZ,KAAK,CAAC,IAAI,CAAC,EAAE;QACb,eAAe,EAAE,MAAM;QACvB,eAAe,EAAE,UAAU;QAC3B,eAAe,EAAE,YAAY;QAC7B,eAAe,EAAE,QAAQ;QACzB,eAAe,EAAE,SAAS;KAC3B,CAAC,CAAC;IAEH,IAAI,OAAO;QAAE,OAAO,KAAC,IAAI,IAAC,IAAI,EAAC,OAAO,GAAG,CAAC;IAC1C,OAAO,MAAM,CAAC,CAAC,CAAC,CACd,MAAM,CAAC,CAAC,CAAC,cAAK,GAAG,EAAC,0BAAM,EAAC,SAAS,EAAC,qBAAqB,EAAC,GAAG,EAAE,MAAM,GAAI,CAAC,CAAC,CAAC,KAAC,KAAK,IAAC,GAAG,EAAC,0BAAM,EAAC,SAAS,EAAC,qBAAqB,EAAC,OAAO,QAAC,GAAG,EAAE,MAAM,GAAI,CACrJ,CAAC,CAAC,CAAC,CACF,KAAC,UAAU,CAAC,IAAI,cAAE,KAAK,CAAC,IAAI,CAAC,IAAI,GAAmB,CACrD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,EACpC,KAAK,EACL,YAAY,EACZ,eAAe,GAKhB;IACC,OAAO,CACL,eAAK,SAAS,EAAC,qBAAqB,aAClC,KAAC,cAAc,IACb,YAAY,EAAE,YAAY,EAC1B,KAAK,EAAE,KAAK,EACZ,eAAe,EAAE,eAAe,GAChC,EACF,MAAC,UAAU,CAAC,IAAI,IAAC,IAAI,EAAC,WAAW,aAC9B,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,MAAM,cAAI,KAAC,gBAAgB,IAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,GAAI,IAC7D,EAClB,MAAC,UAAU,CAAC,IAAI,IAAC,SAAS,EAAC,oBAAoB,EAAC,IAAI,EAAC,WAAW,yBACrD,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,WAChB,IACd,CACP,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,EAC7B,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,YAAY,EACZ,eAAe,EACf,QAAQ,GAAG,KAAK,EAChB,MAAM,GAAG,KAAK,GAUf;IACC,MAAM,MAAM,GAAG,MAAM,CAA2B,IAAI,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9B,MAAM,MAAM,GAAG,MAAM,CAAyB,EAAE,CAAC,CAAC;IAClD,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC1C,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC5C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACvC,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,YAAY,EAAE,eAAe,EAAE,MAAM,EAAE,eAAe,EAAE,UAAU;QAC9F,eAAe,EAAE,YAAY,EAAE,eAAe,EAAE,QAAQ,EAAE,eAAe,EAAE,SAAS,CAAC,CAAC,CAAC;IACzF,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAC7B,SAAS,CAAC,GAAG,EAAE;QACb,UAAU,CAAC,OAAO,IAAI,CAAC,CAAC;QACxB,OAAO,CAAC,KAAK,CAAC,CAAC;QAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAAC,OAAO,CAAC,OAAO,GAAG,KAAK,CAAC;QACxE,OAAO,GAAG,EAAE,GAAG,UAAU,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IACZ,MAAM,MAAM,GAAG,QAAQ,IAAI,MAAM,CAAC;IAElC,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE;QAC/B,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,qBAAqB,EAAE,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC;QACxE,MAAM,KAAK,GAAG,MAAM,CAAC,gBAAgB,IAAI,CAAC,CAAC;QAC3C,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC;QAC1C,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC,CAAC;QACnD,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,OAAO,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/C,OAAO,CAAC,SAAS,GAAG,MAAM,CAAC;QAC3B,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;QAC7C,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC;QAC1B,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC;QAC3B,OAAO,CAAC,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QACrC,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;IAClC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,MAAM,CAAC,OAAO,GAAG,EAAE,CAAC;QACpB,QAAQ,CAAC,KAAK,CAAC,CAAC;QAChB,QAAQ,CAAC,EAAE,CAAC,CAAC;QACb,qBAAqB,CAAC,GAAG,EAAE,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAC;IAC9D,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IAEpB,MAAM,KAAK,GAAG,CAAC,KAA2C,EAAE,EAAE;QAC5D,MAAM,IAAI,GAAG,KAAK,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC;QACzD,OAAO;YACL,CAAC,EAAE,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI;YAC5B,CAAC,EAAE,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG;YAC3B,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE;SACd,CAAC;IACJ,CAAC,CAAC;IAEF,MAAM,KAAK,GAAG,GAAG,EAAE;QACjB,IAAI,MAAM;YAAE,OAAO;QACnB,MAAM,CAAC,OAAO,GAAG,EAAE,CAAC;QACpB,QAAQ,CAAC,KAAK,CAAC,CAAC;QAChB,QAAQ,CAAC,EAAE,CAAC,CAAC;QACb,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC;IAEF,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE;QACtB,IAAI,MAAM;YAAE,OAAO;QACnB,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YAC9C,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACnB,OAAO;QACT,CAAC;QACD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,QAAQ,CAAC,mBAAmB,CAAC,CAAC;YAC9B,OAAO;QACT,CAAC;QACD,SAAS,CAAC,IAAI,CAAC,CAAC;QAChB,QAAQ,CAAC,EAAE,CAAC,CAAC;QACb,MAAM,kBAAkB,GAAG,UAAU,CAAC,OAAO,CAAC;QAC9C,MAAM,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC1C,MAAM,cAAc,GAAG,eAAe,EAAE,MAAM;YAC5C,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QAC5E,IAAI,aAAa,GAAG,KAAK,CAAC;QAC1B,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,IAAI,OAAO,CAAc,OAAO,CAAC,EAAE,CACpD,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,CAC7C,CAAC;YACF,IAAI,CAAC,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;YAC1C,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;YAChC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,aAAa,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE;gBAC3D,IAAI,EAAE,WAAW;aAClB,CAAC,CAAC;YACH,MAAM,QAAQ,GAAG;gBACf,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7B,QAAQ;gBACR,MAAM,EAAE,cAAc;gBACtB,IAAI;aACL,CAAC;YACF,MAAM,KAAK,GAAG,CAAC,QAAqB,EAAE,EAAE;gBACtC,IAAI,UAAU,CAAC,OAAO,KAAK,kBAAkB;oBAAE,OAAO;gBACtD,QAAQ,EAAE,CAAC,EAAE,GAAG,QAAQ,EAAE,IAAI,EAAE,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;gBACzD,OAAO,CAAC,KAAK,CAAC,CAAC;gBAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YAC/B,CAAC,CAAC;YACF,IAAI,UAAU,CAAC,OAAO,KAAK,kBAAkB;gBAAE,OAAO;YACtD,aAAa,GAAG,IAAI,CAAC;YACrB,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;QACrC,CAAC;QAAC,OAAO,MAAM,EAAE,CAAC;YAChB,IAAI,UAAU,CAAC,OAAO,KAAK,kBAAkB;gBAAE,OAAO;YACtD,IAAI,eAAe,EAAE,MAAM,IAAI,aAAa,EAAE,CAAC;gBAC7C,0EAA0E;gBAC1E,OAAO,CAAC,KAAK,CAAC,CAAC;gBAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YAC/B,CAAC;;gBAAM,QAAQ,CAAC,MAAM,YAAY,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QAC7E,CAAC;gBAAS,CAAC;YACT,IAAI,UAAU,CAAC,OAAO,KAAK,kBAAkB;gBAAE,SAAS,CAAC,KAAK,CAAC,CAAC;QAClE,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,CACpB,eAAK,SAAS,EAAC,mBAAmB,aAChC,+BACa,sCAAQ,EACnB,SAAS,EAAC,sBAAsB,EAChC,eAAe,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,EACnD,aAAa,EAAE,KAAK,CAAC,EAAE;oBACrB,KAAK,CAAC,cAAc,EAAE,CAAC;oBACvB,IAAI,MAAM;wBAAE,OAAO;oBACnB,KAAK,CAAC,aAAa,CAAC,iBAAiB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;oBACvD,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;oBACvB,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;oBAC1B,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAC1B,MAAM,OAAO,GAAG,KAAK,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;oBACrD,IAAI,OAAO,EAAE,CAAC;wBACZ,OAAO,CAAC,SAAS,EAAE,CAAC;wBACpB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;wBAC/C,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;wBAC9B,OAAO,CAAC,IAAI,EAAE,CAAC;oBACjB,CAAC;oBACD,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACjB,CAAC,EACD,aAAa,EAAE,KAAK,CAAC,EAAE;oBACrB,KAAK,CAAC,cAAc,EAAE,CAAC;oBACvB,IAAI,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO;wBAAE,OAAO;oBACvC,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;oBAC3D,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;oBAC1B,MAAM,OAAO,GAAG,KAAK,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;oBACrD,IAAI,OAAO,IAAI,QAAQ,EAAE,CAAC;wBACxB,OAAO,CAAC,SAAS,EAAE,CAAC;wBACpB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;wBACvC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;wBAC/B,OAAO,CAAC,MAAM,EAAE,CAAC;oBACnB,CAAC;oBACD,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAC1B,IAAI,eAAe,EAAE,MAAM,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC;wBAC5D,MAAM,CAAC,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;oBACvD,CAAC;gBACH,CAAC,EACD,WAAW,EAAE,KAAK,CAAC,EAAE;oBACnB,IAAI,KAAK,CAAC,aAAa,CAAC,iBAAiB,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;wBAC3D,KAAK,CAAC,aAAa,CAAC,qBAAqB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;oBAC7D,CAAC;oBACD,OAAO,CAAC,OAAO,GAAG,KAAK,CAAC;gBAC1B,CAAC,EACD,GAAG,EAAE,MAAM,GACX,EACD,KAAK,IAAI,KAAC,KAAK,IAAC,QAAQ,QAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAC,OAAO,GAAG,EACtD,MAAM,CAAC,CAAC,CAAC,KAAC,YAAY,IAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,yCAAqB,CAAC,CAAC,CAAC,KAAC,MAAM,IAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,KAAC,aAAa,KAAG,EAAE,OAAO,EAAE,KAAK,yCAAe,IAC5J,CACP,CAAC;IAEF,MAAM,MAAM,GAAc,MAAM,CAAC,CAAC,CAAC,CACjC,KAAC,KAAK,IAAC,OAAO,EAAE,IAAI,EAAE,aAAa,EAAC,4BAA4B,EAAC,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE,cAAc,kBAC3H,mBAAS,IAAI,EAAC,QAAQ,gBAAY,0BAAM,aAAC,KAAC,iBAAiB,IAAC,KAAK,EAAC,0BAAM,EAAC,QAAQ,EAAE,CAAC,KAAK,IAAI,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EACxI,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,KAAK,IAAI,EAAE,GAAI,EAAC,aAAa,IAAW,GAChG,CACT,CAAC,CAAC,CAAC,CACF,KAAC,KAAK,IACJ,eAAe,QACf,aAAa,EAAE,EAAE,QAAQ,EAAE,CAAC,KAAK,IAAI,MAAM,EAAE,EAC7C,iBAAiB,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,EACvC,QAAQ,EAAE,CAAC,MAAM,EACjB,YAAY,EAAE,CAAC,MAAM,EACrB,QAAQ,EAAE,CAAC,MAAM,EACjB,MAAM,EAAC,0BAAM,EACb,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,IAAI,OAAO,CAAC,KAAK,CAAC,EACzC,IAAI,EAAE,GAAG,EAAE,CAAC,KAAK,IAAI,EAAE,EACvB,IAAI,EAAE,IAAI,EACV,cAAc,EAAE,MAAM,EACtB,KAAK,EAAC,0BAAM,EACZ,KAAK,EAAE,GAAG,YAET,aAAa,GACR,CACT,CAAC;IAEF,IAAI,MAAM;QAAE,OAAO,eAAK,SAAS,EAAC,6CAA6C,aAC7E,KAAC,YAAY,IAAC,SAAS,EAAC,8BAA8B,EAAC,IAAI,EAAC,MAAM,EAAC,QAAQ,EAAE,MAAM,gBAAc,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,YACnJ,KAAK,CAAC,CAAC,CAAC,KAAC,cAAc,IAAC,MAAM,QAAC,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,KAAK,EAAE,KAAK,GAAI,CAAC,CAAC,CAAC,kEAAmB,GACvH,EACd,KAAK,IAAI,KAAC,YAAY,IAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAC,4BAA4B,EAAC,IAAI,EAAC,MAAM,gBAAY,0BAAM,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,uBAAkB,EAC/J,MAAM,IACH,CAAC;IACP,OAAO,CACL,eAAK,SAAS,EAAC,qBAAqB,aACjC,KAAK,CAAC,CAAC,CAAC,CACP,KAAC,qBAAqB,IAAC,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,KAAK,EAAE,KAAK,GAAI,CACtG,CAAC,CAAC,CAAC,CACF,KAAC,UAAU,CAAC,IAAI,IAAC,IAAI,EAAC,WAAW,yCAAuB,CACzD,EACA,CAAC,QAAQ,IAAI,CACZ,MAAC,KAAK,eACJ,KAAC,MAAM,IAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,KAAC,YAAY,KAAG,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,YAC3E,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,GACjB,EACR,KAAK,IAAI,CACR,KAAC,MAAM,kBACM,0BAAM,EACjB,IAAI,EAAE,KAAC,cAAc,KAAG,EACxB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,GAC/B,CACH,IACK,CACT,EACA,MAAM,IACH,CACP,CAAC;AACJ,CAAC"}
@@ -1,4 +1,6 @@
1
- import { type SurfaceField } from '../resource/SurfaceFields';
1
+ import type { DataResourceSurface, WorkflowTaskSubtablePage } from 'openxiangda-contracts/browser';
2
+ import { type WorkflowFileBinding } from '../../platform-client';
3
+ import { type SurfaceField, type SurfaceFieldRenderers } from '../resource/SurfaceFields';
2
4
  import type { SubtableDraftRow } from './subtable-value';
3
5
  export interface SubtableFieldProps {
4
6
  field: SurfaceField;
@@ -9,8 +11,22 @@ export interface SubtableFieldProps {
9
11
  value?: SubtableDraftRow[];
10
12
  onChange?: (value: SubtableDraftRow[]) => void;
11
13
  view?: 'form' | 'detail';
14
+ /** Absolute visible-row position supplied by the task's complete validation. */
15
+ revealRow?: {
16
+ index: number;
17
+ };
18
+ /** Already qualified task projection. Never use ordinary child CRUD here. */
19
+ task?: {
20
+ surface: DataResourceSurface;
21
+ page: WorkflowTaskSubtablePage;
22
+ binding?: WorkflowFileBinding;
23
+ rows?: Array<Record<string, unknown>>;
24
+ uploadEnabled?: boolean;
25
+ upload?: (rowKey: string, ...args: Parameters<NonNullable<SurfaceFieldRenderers['upload']>>) => Promise<import('openxiangda-contracts/browser').DataFileRef>;
26
+ signer?: SurfaceFieldRenderers['signer'];
27
+ };
12
28
  }
13
- export declare function SubtableField({ field, disabled, mobile, operation, parentRecordId, value, onChange, view, }: SubtableFieldProps): import("react/jsx-runtime").JSX.Element;
29
+ export declare function SubtableField({ field, disabled, mobile, operation, parentRecordId, value, onChange, view, revealRow, task, }: SubtableFieldProps): import("react/jsx-runtime").JSX.Element;
14
30
  export declare function SubtableValueDisplay({ field, parentRecordId, mobile, }: {
15
31
  field: SurfaceField;
16
32
  parentRecordId: string;
@@ -1 +1 @@
1
- {"version":3,"file":"SubtableField.d.ts","sourceRoot":"","sources":["../../../../src/browser/components/platform-fields/SubtableField.tsx"],"names":[],"mappings":"AAkCA,OAAO,EAIL,KAAK,YAAY,EAClB,MAAM,2BAA2B,CAAC;AAKnC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAgBzD,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,YAAY,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC3B,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,EAAE,KAAK,IAAI,CAAC;IAC/C,IAAI,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;CAC1B;AAED,wBAAgB,aAAa,CAAC,EAC5B,KAAK,EACL,QAAQ,EACR,MAAM,EACN,SAAS,EACT,cAAc,EACd,KAAK,EACL,QAAQ,EACR,IAAa,GACd,EAAE,kBAAkB,2CAwLpB;AAuBD,wBAAgB,oBAAoB,CAAC,EACnC,KAAK,EACL,cAAc,EACd,MAAM,GACP,EAAE;IACD,KAAK,EAAE,YAAY,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,2CAWA"}
1
+ {"version":3,"file":"SubtableField.d.ts","sourceRoot":"","sources":["../../../../src/browser/components/platform-fields/SubtableField.tsx"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAEV,mBAAmB,EACnB,wBAAwB,EACzB,MAAM,+BAA+B,CAAC;AAIvC,OAAO,EAA8B,KAAK,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAI7F,OAAO,EAIL,KAAK,YAAY,EACjB,KAAK,qBAAqB,EAC3B,MAAM,2BAA2B,CAAC;AAKnC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAgBzD,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,YAAY,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC3B,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,EAAE,KAAK,IAAI,CAAC;IAC/C,IAAI,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;IACzB,gFAAgF;IAChF,SAAS,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9B,6EAA6E;IAC7E,IAAI,CAAC,EAAE;QAAE,OAAO,EAAE,mBAAmB,CAAC;QAAC,IAAI,EAAE,wBAAwB,CAAC;QAAC,OAAO,CAAC,EAAE,mBAAmB,CAAC;QACnG,IAAI,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;QAAC,aAAa,CAAC,EAAE,OAAO,CAAC;QAC/D,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,OAAO,+BAA+B,EAAE,WAAW,CAAC,CAAC;QAC7J,MAAM,CAAC,EAAE,qBAAqB,CAAC,QAAQ,CAAC,CAAC;KAAE,CAAC;CAC/C;AAED,wBAAgB,aAAa,CAAC,EAC5B,KAAK,EACL,QAAQ,EACR,MAAM,EACN,SAAS,EACT,cAAc,EACd,KAAK,EACL,QAAQ,EACR,IAAa,EACb,SAAS,EACT,IAAI,GACL,EAAE,kBAAkB,2CAgQpB;AAkCD,wBAAgB,oBAAoB,CAAC,EACnC,KAAK,EACL,cAAc,EACd,MAAM,GACP,EAAE;IACD,KAAK,EAAE,YAAY,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,2CAWA"}
@@ -1,20 +1,22 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import { Button as MobileButton } from '../../mobile';
3
3
  import { DownOutlined, ExpandOutlined, CompressOutlined, ImportOutlined, DownloadOutlined, PlusOutlined, UpOutlined, } from '@ant-design/icons';
4
- import { Alert, Button, Empty, Form, Upload, App, Space, Spin, Tooltip, Typography, } from 'antd';
5
- import { useContext, useEffect, useMemo, useRef, useState } from 'react';
6
- import { MobileSubtableValidationContext } from './MobileSubtableValidation';
4
+ import { Alert, Button, Empty, Form, Pagination, Upload, App, Space, Spin, Tooltip, Typography, } from 'antd';
5
+ import { useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';
6
+ import { MobileSubtableValidationContext, SubtableEditActivityContext } from './MobileSubtableValidation';
7
+ import { moveSubtableRow, subtablePage, SUBTABLE_PAGE_SIZE, SubtableRowValidationError, validateSubtableRows } from './subtable-pagination';
7
8
  import { createNativeResourceClient } from '../../platform-client';
9
+ import { workflowTaskPageFieldState } from 'openxiangda-contracts/browser';
8
10
  import { useRuntime } from '../../runtime';
9
11
  import { useResourceDefinitions } from '../../resource-definitions';
10
12
  import { MobileSurfaceFieldControl, SurfaceFieldControl, SurfaceFieldValue, } from '../resource/SurfaceFields';
11
13
  import { fieldValueForData, fieldValueForForm, } from './field-form-codec';
12
14
  import { buildResourceImportTemplate, parseResourceImportFile } from '../resource/resource-import';
13
15
  import { selectedSurfaceFields } from '../resource/resource-field-selection';
14
- export function SubtableField({ field, disabled, mobile, operation, parentRecordId, value, onChange, view = 'form', }) {
16
+ export function SubtableField({ field, disabled, mobile, operation, parentRecordId, value, onChange, view = 'form', revealRow, task, }) {
15
17
  const definitions = useResourceDefinitions();
16
18
  const config = field.subtable;
17
- const definition = config ? definitions[config.resourceCode] : undefined;
19
+ const definition = config ? task ? { code: config.resourceCode, name: field.label, capabilities: { read: '', create: '', update: '', delete: '' }, surface: task.surface } : definitions[config.resourceCode] : undefined;
18
20
  const { hasCapability, hasReadCapability, identity } = useRuntime();
19
21
  const [internalRows, setInternalRows] = useState([]);
20
22
  const [loading, setLoading] = useState(false);
@@ -22,27 +24,101 @@ export function SubtableField({ field, disabled, mobile, operation, parentRecord
22
24
  const [loadAttempt, setLoadAttempt] = useState(0);
23
25
  const [fullScreen, setFullScreen] = useState(false);
24
26
  const [importing, setImporting] = useState(false);
27
+ const [requestedPage, setRequestedPage] = useState(1);
28
+ const [uploads, setUploads] = useState(0);
29
+ const [pendingEdits, setPendingEdits] = useState(() => new Set());
30
+ const reportPending = useCallback((key, pending) => setPendingEdits(current => {
31
+ if (current.has(key) === pending)
32
+ return current;
33
+ const next = new Set(current);
34
+ if (pending)
35
+ next.add(key);
36
+ else
37
+ next.delete(key);
38
+ return next;
39
+ }), []);
40
+ const registerValidation = useContext(MobileSubtableValidationContext);
25
41
  const { message } = App.useApp();
26
42
  const loadedKey = useRef('');
27
43
  const rows = value ?? internalRows;
28
44
  const maxRows = config?.maxRows ?? 20;
29
- const visibleRows = rows.filter(row => row.state !== 'deleted');
45
+ const rowsRef = useRef(rows);
46
+ rowsRef.current = rows;
47
+ const page = subtablePage(rows, requestedPage);
48
+ const visibleRows = page.visible;
49
+ const navigationBlocked = Boolean((task && disabled) || importing || uploads || pendingEdits.size);
50
+ useEffect(() => { setRequestedPage(current => Math.min(current, page.pages)); }, [page.pages]);
51
+ useEffect(() => { if (revealRow)
52
+ setRequestedPage(Math.floor(revealRow.index / SUBTABLE_PAGE_SIZE) + 1); }, [revealRow]);
30
53
  const childFields = useMemo(() => childSurfaceFields(definition?.surface, config?.foreignKey, config?.orderField, view), [config?.foreignKey, config?.orderField, definition?.surface, view]);
31
- const readableFields = childFields.filter(child => fieldReadable(child, hasReadCapability, identity.isAppSuperAdmin));
54
+ const readableFields = childFields.filter(child => task || fieldReadable(child, hasReadCapability, identity.isAppSuperAdmin));
32
55
  const canCreate = Boolean(definition &&
33
56
  !disabled &&
34
- (identity.isAppSuperAdmin || hasCapability(definition.capabilities.create)));
57
+ (task ? task.page.create === true : identity.isAppSuperAdmin || hasCapability(definition.capabilities.create)));
35
58
  const canUpdate = Boolean(definition &&
36
59
  !disabled &&
37
- (identity.isAppSuperAdmin || hasCapability(definition.capabilities.update)));
60
+ (task ? true : identity.isAppSuperAdmin || hasCapability(definition.capabilities.update)));
38
61
  const canDelete = Boolean(definition &&
39
62
  !disabled &&
40
- (identity.isAppSuperAdmin || hasCapability(definition.capabilities.delete)));
63
+ (task ? task.page.delete === true : identity.isAppSuperAdmin || hasCapability(definition.capabilities.delete)));
41
64
  const emit = (next) => {
65
+ rowsRef.current = next;
42
66
  setInternalRows(next);
43
67
  onChange?.(next);
44
68
  };
69
+ const stateCache = new Map();
70
+ const taskState = (child, row) => {
71
+ if (!task)
72
+ return undefined;
73
+ if (!stateCache.has(row.key))
74
+ stateCache.set(row.key, workflowTaskPageFieldState({ title: field.label, fields: task.page.fields }, {
75
+ ...row.snapshot, ...Object.fromEntries(Object.entries(row.data).map(([code, value]) => [code, fieldValueForData(task.surface.fields[code], value)])),
76
+ }));
77
+ return stateCache.get(row.key).find(state => state.code === child.key);
78
+ };
79
+ const canReadField = (child, row) => task ? !row || taskState(child, row)?.visible === true : fieldReadable(child, hasReadCapability, identity.isAppSuperAdmin);
80
+ const canWriteField = (child, operation, row) => task
81
+ ? (!row ? task.page.fields.some(item => item.code === child.key && !item.readonly) : Boolean(taskState(child, row)?.visible && !taskState(child, row)?.readonly))
82
+ : fieldWritable(child, operation, hasCapability, identity.isAppSuperAdmin);
83
+ const uploadFor = (row) => async (current, file, recordId, onRecovered) => {
84
+ setUploads(count => count + 1);
85
+ try {
86
+ return await (task
87
+ ? task.upload ? task.upload(row.key, current, file, recordId, onRecovered) : Promise.reject(new Error('当前任务未提供子行上传能力'))
88
+ : createNativeResourceClient(definition.code, definition.surface).upload(current.key, file, recordId));
89
+ }
90
+ finally {
91
+ setUploads(count => count - 1);
92
+ }
93
+ };
94
+ const rowBinding = (row) => task?.binding ? { ...task.binding, resourceCode: config.resourceCode, recordId: row.key } : undefined;
95
+ const uploadBlocked = (child, row) => Boolean(task && ['file', 'image', 'signature', 'text.rich'].includes(child.type) &&
96
+ (task.uploadEnabled === false || !workflowTaskPageFieldState({ title: field.label, fields: task.page.fields }, task.rows?.find(value => String(value.id) === row.key) || {})
97
+ .some(state => state.code === child.key && state.visible && !state.readonly)));
98
+ const rowFields = (row) => childFields.map(child => task ? { ...child, requiredHint: false } : child);
99
+ const requiredHint = (child, row) => taskState(child, row)?.required
100
+ ? _jsx(Typography.Text, { type: "secondary", children: "\u5B8C\u6210\u4EFB\u52A1\u524D\u5FC5\u586B" }) : undefined;
101
+ useEffect(() => registerValidation?.(`all:${field.key}`, async () => {
102
+ if (disabled)
103
+ return;
104
+ if (uploads || pendingEdits.size)
105
+ throw new Error('请先完成当前页的编辑或处理待上传文件');
106
+ try {
107
+ await validateSubtableRows(rows, row => {
108
+ const operation = row.state === 'persisted' ? 'update' : 'create';
109
+ const writable = task ? row.state === 'persisted' || task.page.create === true : row.state === 'persisted' ? canUpdate : canCreate;
110
+ return rowFields(row).filter(child => writable && canWriteField(child, operation, row) && !uploadBlocked(child, row));
111
+ }, mobile);
112
+ }
113
+ catch (error) {
114
+ if (error instanceof SubtableRowValidationError)
115
+ setRequestedPage(Math.floor(error.rowIndex / SUBTABLE_PAGE_SIZE) + 1);
116
+ throw error;
117
+ }
118
+ }));
45
119
  useEffect(() => {
120
+ if (task)
121
+ return;
46
122
  if (!parentRecordId || !definition || !config) {
47
123
  if (operation === 'create' && value === undefined && internalRows.length === 0) {
48
124
  onChange?.([]);
@@ -95,28 +171,32 @@ export function SubtableField({ field, disabled, mobile, operation, parentRecord
95
171
  : rows.map(row => row.key === target.key ? { ...row, state: 'deleted' } : row));
96
172
  };
97
173
  const moveRow = (index, direction) => {
98
- const target = index + direction;
99
- if (target < 0 || target >= visibleRows.length)
174
+ if (navigationBlocked || (task && !task.page.reorder))
100
175
  return;
101
- const reordered = [...visibleRows];
102
- [reordered[index], reordered[target]] = [reordered[target], reordered[index]];
103
- emit([...reordered, ...rows.filter(row => row.state === 'deleted')]);
176
+ emit(moveSubtableRow(rowsRef.current, index, direction));
177
+ setRequestedPage(Math.floor((index + direction) / SUBTABLE_PAGE_SIZE) + 1);
104
178
  };
179
+ const changeRow = (row, data) => emit(rowsRef.current.map(current => current.key === row.key
180
+ ? { ...current, data: { ...current.data, ...data }, snapshot: { ...current.snapshot, ...Object.fromEntries(Object.entries(data).map(([key, item]) => [key, fieldValueForData(definition.surface.fields[key], item)])) } } : current));
181
+ const pagination = _jsxs("div", { className: "oxa-subtable-pagination", "aria-label": `${field.label}分页`, children: [_jsx("span", { role: "status", children: visibleRows.length ? `${page.start + 1}–${Math.min(page.start + SUBTABLE_PAGE_SIZE, visibleRows.length)} / ${visibleRows.length} 项` : '0 项' }), page.pages > 1 && (mobile ? _jsxs(Space, { children: [_jsx(MobileButton, { fill: "outline", "aria-label": `${field.label}上一页`, disabled: navigationBlocked || page.page === 1, onClick: () => setRequestedPage(page.page - 1), children: "\u4E0A\u4E00\u9875" }), _jsxs("span", { children: [page.page, " / ", page.pages] }), _jsx(MobileButton, { fill: "outline", "aria-label": `${field.label}下一页`, disabled: navigationBlocked || page.page === page.pages, onClick: () => setRequestedPage(page.page + 1), children: "\u4E0B\u4E00\u9875" })] }) : _jsx(Pagination, { size: "small", current: page.page, total: visibleRows.length, pageSize: SUBTABLE_PAGE_SIZE, showSizeChanger: false, disabled: navigationBlocked, onChange: setRequestedPage })), (uploads > 0 || pendingEdits.size > 0) && _jsx("span", { children: "\u8BF7\u5148\u5B8C\u6210\u5F53\u524D\u9875\u7684\u7F16\u8F91\u6216\u5904\u7406\u5F85\u4E0A\u4F20\u6587\u4EF6" })] });
105
182
  if (mobile)
106
- return _jsxs("div", { className: "oxa-mobile-inline-subtable oxa-mobile-scope", children: [loadError && _jsxs("div", { role: "alert", children: [loadError, _jsx(MobileButton, { onClick: () => { loadedKey.current = ''; setLoadAttempt(attempt => attempt + 1); }, children: "\u91CD\u8BD5" })] }), loading ? _jsx("span", { role: "status", children: "\u52A0\u8F7D\u4E2D\u2026" }) : visibleRows.map((row, index) => {
107
- const rowOperation = row.state === 'persisted' ? 'update' : 'create';
108
- const writable = row.state === 'persisted' ? canUpdate : canCreate;
109
- const fields = childFields.filter(child => fieldReadable(child, hasReadCapability, identity.isAppSuperAdmin) || (writable && fieldWritable(child, rowOperation, hasCapability, identity.isAppSuperAdmin)));
110
- return _jsx(MobileSubtableRow, { row: row, index: index, fields: fields, resourceCode: definition.code, operation: rowOperation, canWrite: child => writable && fieldWritable(child, rowOperation, hasCapability, identity.isAppSuperAdmin), canDelete: row.state === 'persisted' ? canDelete : canCreate, onRemove: () => removeRow(row), onChange: data => emit(rows.map(current => current.key === row.key ? { ...current, data, snapshot: { ...current.snapshot, ...Object.fromEntries(Object.entries(data).map(([key, item]) => [key, fieldValueForData(definition.surface.fields[key], item)])) } } : current)), upload: (current, file, recordId) => createNativeResourceClient(definition.code, definition.surface).upload(current.key, file, recordId) }, row.key);
111
- }), !disabled && _jsxs(MobileButton, { block: true, fill: "none", color: "primary", disabled: !canCreate || visibleRows.length >= maxRows, onClick: () => emit([...rows, { key: crypto.randomUUID(), state: 'created', data: {} }]), children: [_jsx(PlusOutlined, {}), " \u65B0\u589E\u4E00\u9879"] })] });
112
- const fields = childFields.filter(child => fieldReadable(child, hasReadCapability, identity.isAppSuperAdmin) ||
113
- (canCreate && fieldWritable(child, 'create', hasCapability, identity.isAppSuperAdmin)) ||
114
- (canUpdate && fieldWritable(child, 'update', hasCapability, identity.isAppSuperAdmin)));
115
- const writableCodes = fields.filter(child => fieldWritable(child, 'create', hasCapability, identity.isAppSuperAdmin)).map(child => child.key);
116
- const appendRows = (data) => emit([...rows, ...data.map(item => ({
117
- key: crypto.randomUUID(), state: 'created',
118
- data: Object.fromEntries(Object.entries(item).map(([key, value]) => [key, fieldValueForForm(definition.surface.fields[key], value)])),
119
- }))]);
183
+ return _jsx(SubtableEditActivityContext.Provider, { value: reportPending, children: _jsxs("div", { className: "oxa-mobile-inline-subtable oxa-mobile-scope", children: [loadError && _jsxs("div", { role: "alert", children: [loadError, _jsx(MobileButton, { onClick: () => { loadedKey.current = ''; setLoadAttempt(attempt => attempt + 1); }, children: "\u91CD\u8BD5" })] }), pagination, loading ? _jsx("span", { role: "status", children: "\u52A0\u8F7D\u4E2D\u2026" }) : page.rows.map((row, offset) => {
184
+ const index = page.start + offset;
185
+ const rowOperation = row.state === 'persisted' ? 'update' : 'create';
186
+ const writable = task ? row.state === 'persisted' || task.page.create === true : row.state === 'persisted' ? canUpdate : canCreate;
187
+ const fields = rowFields(row).filter(child => canReadField(child, row) || (writable && canWriteField(child, rowOperation, row)));
188
+ return _jsx(MobileSubtableRow, { row: row, index: index, fields: fields, disabled: disabled, resourceCode: definition.code, operation: rowOperation, canWrite: child => writable && canWriteField(child, rowOperation, row), canDelete: !navigationBlocked && (row.state === 'persisted' ? canDelete : canCreate), onRemove: () => removeRow(row), onChange: data => changeRow(row, data), workflowFileBinding: rowBinding(row), upload: uploadFor(row), signer: task?.signer, uploadBlocked: child => uploadBlocked(child, row), taskMode: Boolean(task), hint: child => requiredHint(child, row), actions: task?.page.reorder && _jsxs(Space, { children: [_jsx(MobileButton, { fill: "none", disabled: navigationBlocked || index === 0, "aria-label": `上移第${index + 1}项`, onClick: () => moveRow(index, -1), children: "\u4E0A\u79FB" }), _jsx(MobileButton, { fill: "none", disabled: navigationBlocked || index === visibleRows.length - 1, "aria-label": `下移第${index + 1}项`, onClick: () => moveRow(index, 1), children: "\u4E0B\u79FB" })] }) }, row.key);
189
+ }), !disabled && _jsxs(MobileButton, { block: true, fill: "none", color: "primary", disabled: navigationBlocked || !canCreate || visibleRows.length >= maxRows, onClick: () => { emit([...rows, { key: crypto.randomUUID(), state: 'created', data: {} }]); setRequestedPage(Math.floor(visibleRows.length / SUBTABLE_PAGE_SIZE) + 1); }, children: [_jsx(PlusOutlined, {}), " \u65B0\u589E\u4E00\u9879"] })] }) });
190
+ const fields = childFields.filter(child => canReadField(child) || (canCreate && canWriteField(child, 'create')) || (canUpdate && canWriteField(child, 'update')));
191
+ const writableCodes = fields.filter(child => canWriteField(child, 'create')).map(child => child.key);
192
+ const appendRows = (data) => {
193
+ const start = subtablePage(rowsRef.current, 1).visible.length;
194
+ emit([...rowsRef.current, ...data.map(item => ({
195
+ key: crypto.randomUUID(), state: 'created',
196
+ data: Object.fromEntries(Object.entries(item).map(([key, value]) => [key, fieldValueForForm(definition.surface.fields[key], value)])),
197
+ }))]);
198
+ setRequestedPage(Math.floor(start / SUBTABLE_PAGE_SIZE) + 1);
199
+ };
120
200
  const downloadTemplate = async () => {
121
201
  const template = await buildResourceImportTemplate(field.label, definition.surface, writableCodes);
122
202
  const url = URL.createObjectURL(new Blob([template.content]));
@@ -126,30 +206,37 @@ export function SubtableField({ field, disabled, mobile, operation, parentRecord
126
206
  link.click();
127
207
  setTimeout(() => URL.revokeObjectURL(url), 0);
128
208
  };
129
- return _jsxs("div", { className: `oxa-subtable-field oxa-subtable-inline ${fullScreen ? 'is-fullscreen' : ''}`, children: [loadError && _jsx(Alert, { type: "error", title: loadError, action: _jsx(Button, { onClick: () => { loadedKey.current = ''; setLoadAttempt(value => value + 1); }, children: "\u91CD\u8BD5" }) }), _jsx("div", { className: "oxa-subtable-scroll", children: _jsxs("table", { "aria-label": field.label, children: [_jsx("thead", { children: _jsxs("tr", { children: [_jsx("th", { className: "oxa-subtable-number", children: _jsx(Tooltip, { title: fullScreen ? '退出全屏' : '全屏', children: _jsx(Button, { type: "text", "aria-label": fullScreen ? '退出子表全屏' : '子表全屏', icon: fullScreen ? _jsx(CompressOutlined, {}) : _jsx(ExpandOutlined, {}), onClick: () => setFullScreen(!fullScreen) }) }) }), fields.map(child => _jsx("th", { children: child.label }, child.key)), !disabled && _jsx("th", { children: "\u64CD\u4F5C" })] }) }), _jsxs("tbody", { children: [loading ? _jsx("tr", { children: _jsx("td", { colSpan: fields.length + 2, children: _jsx(Spin, {}) }) }) : visibleRows.map((row, index) => {
130
- const rowOperation = row.state === 'persisted' ? 'update' : 'create';
131
- const writable = row.state === 'persisted' ? canUpdate : canCreate;
132
- return _jsx(DesktopSubtableRow, { row: row, index: index, fields: fields, operation: rowOperation, resourceCode: definition.code, disabled: disabled, canRead: child => fieldReadable(child, hasReadCapability, identity.isAppSuperAdmin), canWrite: child => writable && fieldWritable(child, rowOperation, hasCapability, identity.isAppSuperAdmin), onChange: data => emit(rows.map(current => current.key === row.key ? { ...current, data } : current)), upload: (current, file, recordId) => createNativeResourceClient(definition.code, definition.surface).upload(current.key, file, recordId), actions: _jsxs(Space, { size: 0, children: [_jsx(Button, { type: "text", "aria-label": `上移第${index + 1}项`, disabled: index === 0 || !writable, icon: _jsx(UpOutlined, {}), onClick: () => moveRow(index, -1) }), _jsx(Button, { type: "text", "aria-label": `下移第${index + 1}项`, disabled: index === visibleRows.length - 1 || !writable, icon: _jsx(DownOutlined, {}), onClick: () => moveRow(index, 1) }), _jsx(Button, { type: "link", danger: true, disabled: row.state === 'persisted' ? !canDelete : !canCreate, onClick: () => removeRow(row), children: "\u5220\u9664" })] }) }, row.key);
133
- }), !loading && !visibleRows.length && _jsx("tr", { children: _jsx("td", { colSpan: fields.length + 2, children: _jsx(Empty, { image: Empty.PRESENTED_IMAGE_SIMPLE, description: "\u6682\u65E0\u660E\u7EC6" }) }) })] })] }) }), !disabled && _jsxs("div", { className: "oxa-subtable-toolbar", children: [_jsxs(Space, { wrap: true, children: [_jsx(Button, { icon: _jsx(PlusOutlined, {}), disabled: !canCreate || visibleRows.length >= maxRows, onClick: () => appendRows([{}]), children: "\u65B0\u589E\u4E00\u9879" }), _jsx(Upload, { accept: ".csv,.xls,.xlsx", showUploadList: false, disabled: !canCreate || importing || visibleRows.length >= maxRows, beforeUpload: async (file) => {
134
- setImporting(true);
135
- try {
136
- const parsed = await parseResourceImportFile(file, definition.code, definition.surface, writableCodes);
137
- if (parsed.errors.length)
138
- throw new Error(parsed.errors.slice(0, 3).join(';'));
139
- if (visibleRows.length + parsed.rows.length > maxRows)
140
- throw new Error(`子表单最多 ${maxRows} 项`);
141
- appendRows(parsed.rows.map(row => row.data));
142
- }
143
- catch (error) {
144
- message.error(error instanceof Error ? error.message : '导入失败');
145
- }
146
- finally {
147
- setImporting(false);
148
- }
149
- return false;
150
- }, children: _jsx(Button, { icon: _jsx(ImportOutlined, {}), loading: importing, disabled: !canCreate || visibleRows.length >= maxRows, children: "\u6279\u91CF\u5BFC\u5165" }) }), _jsx(Button, { type: "link", icon: _jsx(DownloadOutlined, {}), disabled: !canCreate, onClick: () => void downloadTemplate().catch(error => message.error(String(error))), children: "\u4E0B\u8F7D\u6A21\u677F" })] }), _jsxs(Typography.Text, { type: "secondary", children: [visibleRows.length, " / ", maxRows] })] })] });
209
+ return _jsx(SubtableEditActivityContext.Provider, { value: reportPending, children: _jsxs("div", { className: `oxa-subtable-field oxa-subtable-inline ${fullScreen ? 'is-fullscreen' : ''}`, children: [loadError && _jsx(Alert, { type: "error", title: loadError, action: _jsx(Button, { onClick: () => { loadedKey.current = ''; setLoadAttempt(value => value + 1); }, children: "\u91CD\u8BD5" }) }), pagination, _jsx("div", { className: "oxa-subtable-scroll", children: _jsxs("table", { "aria-label": field.label, children: [_jsx("thead", { children: _jsxs("tr", { children: [_jsx("th", { className: "oxa-subtable-number", children: _jsx(Tooltip, { title: fullScreen ? '退出全屏' : '全屏', children: _jsx(Button, { type: "text", "aria-label": fullScreen ? '退出子表全屏' : '子表全屏', icon: fullScreen ? _jsx(CompressOutlined, {}) : _jsx(ExpandOutlined, {}), onClick: () => setFullScreen(!fullScreen) }) }) }), fields.map(child => _jsx("th", { children: child.label }, child.key)), !disabled && _jsx("th", { children: "\u64CD\u4F5C" })] }) }), _jsxs("tbody", { children: [loading ? _jsx("tr", { children: _jsx("td", { colSpan: fields.length + 2, children: _jsx(Spin, {}) }) }) : page.rows.map((row, offset) => {
210
+ const index = page.start + offset;
211
+ const rowOperation = row.state === 'persisted' ? 'update' : 'create';
212
+ const writable = task ? row.state === 'persisted' || task.page.create === true : row.state === 'persisted' ? canUpdate : canCreate;
213
+ return _jsx(DesktopSubtableRow, { row: row, index: index, fields: fields.map(child => task ? { ...child, requiredHint: false } : child), operation: rowOperation, resourceCode: definition.code, disabled: disabled, taskMode: Boolean(task), canRead: child => canReadField(child, row), canWrite: child => writable && canWriteField(child, rowOperation, row), onChange: data => changeRow(row, data), workflowFileBinding: rowBinding(row), upload: uploadFor(row), signer: task?.signer, uploadBlocked: child => uploadBlocked(child, row), hint: child => requiredHint(child, row), actions: _jsxs(Space, { size: 0, children: [_jsx(Button, { type: "text", "aria-label": `上移第${index + 1}项`, disabled: navigationBlocked || index === 0 || !writable || Boolean(task && !task.page.reorder), icon: _jsx(UpOutlined, {}), onClick: () => moveRow(index, -1) }), _jsx(Button, { type: "text", "aria-label": `下移第${index + 1}项`, disabled: navigationBlocked || index === visibleRows.length - 1 || !writable || Boolean(task && !task.page.reorder), icon: _jsx(DownOutlined, {}), onClick: () => moveRow(index, 1) }), _jsx(Button, { type: "link", danger: true, disabled: navigationBlocked || (row.state === 'persisted' ? !canDelete : !canCreate), onClick: () => removeRow(row), children: "\u5220\u9664" })] }) }, row.key);
214
+ }), !loading && !visibleRows.length && _jsx("tr", { children: _jsx("td", { colSpan: fields.length + 2, children: _jsx(Empty, { image: Empty.PRESENTED_IMAGE_SIMPLE, description: "\u6682\u65E0\u660E\u7EC6" }) }) })] })] }) }), !disabled && _jsxs("div", { className: "oxa-subtable-toolbar", children: [_jsxs(Space, { wrap: true, children: [_jsx(Button, { icon: _jsx(PlusOutlined, {}), disabled: navigationBlocked || !canCreate || visibleRows.length >= maxRows, onClick: () => appendRows([{}]), children: "\u65B0\u589E\u4E00\u9879" }), _jsx(Upload, { accept: ".csv,.xls,.xlsx", showUploadList: false, disabled: navigationBlocked || !canCreate || visibleRows.length >= maxRows, beforeUpload: async (file) => {
215
+ setImporting(true);
216
+ try {
217
+ const parsed = await parseResourceImportFile(file, definition.code, definition.surface, writableCodes);
218
+ if (parsed.errors.length)
219
+ throw new Error(parsed.errors.slice(0, 3).join(';'));
220
+ if (visibleRows.length + parsed.rows.length > maxRows)
221
+ throw new Error(`子表单最多 ${maxRows} 项`);
222
+ appendRows(parsed.rows.map(row => row.data));
223
+ }
224
+ catch (error) {
225
+ message.error(error instanceof Error ? error.message : '导入失败');
226
+ }
227
+ finally {
228
+ setImporting(false);
229
+ }
230
+ return false;
231
+ }, children: _jsx(Button, { icon: _jsx(ImportOutlined, {}), loading: importing, disabled: navigationBlocked || !canCreate || visibleRows.length >= maxRows, children: "\u6279\u91CF\u5BFC\u5165" }) }), _jsx(Button, { type: "link", icon: _jsx(DownloadOutlined, {}), disabled: !canCreate, onClick: () => void downloadTemplate().catch(error => message.error(String(error))), children: "\u4E0B\u8F7D\u6A21\u677F" })] }), _jsxs(Typography.Text, { type: "secondary", children: [visibleRows.length, " / ", maxRows] })] })] }) });
232
+ }
233
+ function rowDisplayValue(row, field, taskMode) {
234
+ if (taskMode && Object.prototype.hasOwnProperty.call(row.data, field.key)) {
235
+ return fieldValueForData(field, row.data[field.key]);
236
+ }
237
+ return row.snapshot?.[field.key] ?? row.data[field.key];
151
238
  }
152
- function DesktopSubtableRow({ row, index, fields, operation, resourceCode, disabled, canRead, canWrite, onChange, upload, actions }) {
239
+ function DesktopSubtableRow({ row, index, fields, operation, resourceCode, disabled, canRead, canWrite, onChange, upload, actions, workflowFileBinding, taskMode, hint, signer, uploadBlocked }) {
153
240
  const [form] = Form.useForm();
154
241
  const registerValidation = useContext(MobileSubtableValidationContext);
155
242
  useEffect(() => registerValidation?.(row.key, async () => {
@@ -161,8 +248,8 @@ function DesktopSubtableRow({ row, index, fields, operation, resourceCode, disab
161
248
  }
162
249
  }), [form, index, registerValidation, row.key]);
163
250
  useEffect(() => { form.setFieldsValue(row.data); }, [form, row.data]);
164
- return _jsx(Form, { component: false, name: `subtable-${row.key}`, form: form, initialValues: row.data, onValuesChange: (_changed, all) => onChange(all), children: _jsxs("tr", { children: [_jsx("td", { className: "oxa-subtable-number", children: index + 1 }), fields.map(field => _jsx("td", { children: canWrite(field) ? _jsx(SurfaceFieldControl, { field: field, disabled: false, operation: operation, recordId: row.id, resourceCode: resourceCode, renderers: { upload } })
165
- : canRead(field) ? _jsx(SurfaceFieldValue, { field: field, resourceCode: resourceCode, value: row.snapshot?.[field.key] ?? row.data[field.key] }) : '—' }, field.key)), !disabled && _jsx("td", { children: actions })] }) });
251
+ return _jsx(Form, { component: false, layout: "vertical", name: `subtable-${row.key}`, form: form, initialValues: row.data, onValuesChange: (_changed, all) => onChange(all), children: _jsxs("tr", { children: [_jsx("td", { className: "oxa-subtable-number", children: index + 1 }), fields.map(field => _jsx("td", { children: canWrite(field) ? _jsxs(_Fragment, { children: [_jsx(SurfaceFieldControl, { field: field, disabled: Boolean(disabled || uploadBlocked?.(field)), operation: operation, recordId: row.id, resourceCode: resourceCode, workflowFileBinding: workflowFileBinding && { ...workflowFileBinding, fieldCode: field.key }, renderers: { upload, signer } }), uploadBlocked?.(field) && _jsx(Typography.Text, { type: "secondary", children: "\u8BF7\u5148\u4FDD\u5B58\u8865\u586B\uFF0C\u8BA9\u8BE5\u9644\u4EF6\u5B57\u6BB5\u751F\u6548\uFF0C\u518D\u4E0A\u4F20\u6587\u4EF6\u3002" }), hint?.(field)] })
252
+ : canRead(field) ? _jsx(SurfaceFieldValue, { field: field, resourceCode: resourceCode, workflowFileBinding: workflowFileBinding && { ...workflowFileBinding, fieldCode: field.key }, value: rowDisplayValue(row, field, taskMode) }) : '—' }, field.key)), !disabled && _jsx("td", { children: actions })] }) });
166
253
  }
167
254
  export function SubtableValueDisplay({ field, parentRecordId, mobile, }) {
168
255
  return (_jsx(SubtableField, { disabled: true, field: field, mobile: mobile, operation: "update", parentRecordId: parentRecordId, view: "detail" }));
@@ -225,7 +312,7 @@ function draftFromRecord(record, surface, foreignKey, orderField) {
225
312
  snapshot: record,
226
313
  };
227
314
  }
228
- function MobileSubtableRow({ row, index, fields, operation, resourceCode, canWrite, canDelete, onRemove, onChange, upload }) {
315
+ function MobileSubtableRow({ row, index, fields, operation, resourceCode, canWrite, canDelete, onRemove, onChange, upload, actions, workflowFileBinding, taskMode, hint, signer, uploadBlocked, disabled }) {
229
316
  const [form] = Form.useForm();
230
317
  const [expanded, setExpanded] = useState(true);
231
318
  const registerValidation = useContext(MobileSubtableValidationContext);
@@ -239,6 +326,8 @@ function MobileSubtableRow({ row, index, fields, operation, resourceCode, canWri
239
326
  }
240
327
  }), [form, index, registerValidation, row.key]);
241
328
  useEffect(() => { form.setFieldsValue(row.data); }, [form, row.data]);
242
- return _jsxs("div", { className: "oxa-mobile-subtable-card", children: [_jsxs("header", { children: [_jsxs(MobileButton, { fill: "none", "aria-label": `${expanded ? '折叠' : '展开'}第${index + 1}项`, "aria-expanded": expanded, onClick: () => setExpanded(!expanded), children: [expanded ? '▾' : '▸', " ", index + 1] }), canDelete && _jsx(MobileButton, { fill: "none", onClick: onRemove, children: "\u5220\u9664" })] }), _jsx("div", { hidden: !expanded, style: !expanded ? { display: 'none' } : undefined, children: _jsx(Form, { component: false, name: `subtable-${row.key}`, form: form, initialValues: row.data, onValuesChange: (_changed, all) => onChange(all), children: fields.map(field => _jsx(MobileSurfaceFieldControl, { field: field, disabled: !canWrite(field), operation: operation, recordId: row.id, resourceCode: resourceCode, renderers: { upload } }, field.key)) }) })] });
329
+ return _jsxs("div", { className: "oxa-mobile-subtable-card", children: [_jsxs("header", { children: [_jsxs(MobileButton, { fill: "none", "aria-label": `${expanded ? '折叠' : '展开'}第${index + 1}项`, "aria-expanded": expanded, onClick: () => setExpanded(!expanded), children: [expanded ? '▾' : '▸', " ", index + 1] }), canDelete && _jsx(MobileButton, { fill: "none", onClick: onRemove, children: "\u5220\u9664" }), actions] }), _jsx("div", { hidden: !expanded, style: !expanded ? { display: 'none' } : undefined, children: _jsx(Form, { component: false, layout: "vertical", name: `subtable-${row.key}`, form: form, initialValues: row.data, onValuesChange: (_changed, all) => onChange(all), children: fields.map(field => canWrite(field) || !taskMode
330
+ ? _jsxs("div", { children: [_jsx(MobileSurfaceFieldControl, { field: field, disabled: Boolean(disabled || !canWrite(field) || uploadBlocked?.(field)), operation: operation, recordId: row.id, resourceCode: resourceCode, workflowFileBinding: workflowFileBinding && { ...workflowFileBinding, fieldCode: field.key }, renderers: { upload, signer } }), uploadBlocked?.(field) && _jsx(Typography.Text, { type: "secondary", children: "\u8BF7\u5148\u4FDD\u5B58\u8865\u586B\uFF0C\u8BA9\u8BE5\u9644\u4EF6\u5B57\u6BB5\u751F\u6548\uFF0C\u518D\u4E0A\u4F20\u6587\u4EF6\u3002" }), hint?.(field)] }, field.key)
331
+ : _jsxs("div", { children: [_jsx(Typography.Text, { type: "secondary", children: field.label }), _jsx(SurfaceFieldValue, { field: field, resourceCode: resourceCode, workflowFileBinding: workflowFileBinding && { ...workflowFileBinding, fieldCode: field.key }, mobile: true, value: rowDisplayValue(row, field, taskMode) })] }, field.key)) }) })] });
243
332
  }
244
333
  //# sourceMappingURL=SubtableField.js.map