@chenchaolong/plugin-trade-compliance-workbench 1.0.0 → 1.0.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.
- package/README.md +46 -1
- package/dist/assets/branding/yuneec-logo.png +0 -0
- package/dist/assets/templates/CI.xlsx +0 -0
- package/dist/assets/templates/CUSTOMS_DECLARATION.xlsx +0 -0
- package/dist/assets/templates/PI.xlsx +0 -0
- package/dist/assets/templates/PL.xlsx +0 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/lib/adapters/file-storage.d.ts +4 -2
- package/dist/lib/adapters/file-storage.d.ts.map +1 -1
- package/dist/lib/adapters/file-storage.js +25 -10
- package/dist/lib/adapters/file-storage.js.map +1 -1
- package/dist/lib/adapters/hsbianma.provider.d.ts +1 -0
- package/dist/lib/adapters/hsbianma.provider.d.ts.map +1 -1
- package/dist/lib/adapters/hsbianma.provider.js +32 -3
- package/dist/lib/adapters/hsbianma.provider.js.map +1 -1
- package/dist/lib/adapters/translation.provider.d.ts +3 -0
- package/dist/lib/adapters/translation.provider.d.ts.map +1 -1
- package/dist/lib/adapters/translation.provider.js +15 -6
- package/dist/lib/adapters/translation.provider.js.map +1 -1
- package/dist/lib/constants.d.ts +3 -2
- package/dist/lib/constants.d.ts.map +1 -1
- package/dist/lib/constants.js +3 -2
- package/dist/lib/constants.js.map +1 -1
- package/dist/lib/demo-data.definitions.d.ts +28 -0
- package/dist/lib/demo-data.definitions.d.ts.map +1 -0
- package/dist/lib/demo-data.definitions.js +236 -0
- package/dist/lib/demo-data.definitions.js.map +1 -0
- package/dist/lib/demo-data.entity.d.ts +9 -0
- package/dist/lib/demo-data.entity.d.ts.map +1 -0
- package/dist/lib/demo-data.entity.js +24 -0
- package/dist/lib/demo-data.entity.js.map +1 -0
- package/dist/lib/demo-data.ids.d.ts +4 -0
- package/dist/lib/demo-data.ids.d.ts.map +1 -0
- package/dist/lib/demo-data.ids.js +19 -0
- package/dist/lib/demo-data.ids.js.map +1 -0
- package/dist/lib/demo-data.service.d.ts +26 -0
- package/dist/lib/demo-data.service.d.ts.map +1 -0
- package/dist/lib/demo-data.service.js +124 -0
- package/dist/lib/demo-data.service.js.map +1 -0
- package/dist/lib/domain/default-settings.d.ts +1 -0
- package/dist/lib/domain/default-settings.d.ts.map +1 -1
- package/dist/lib/domain/default-settings.js +1 -0
- package/dist/lib/domain/default-settings.js.map +1 -1
- package/dist/lib/domain/risk-notice.d.ts +59 -0
- package/dist/lib/domain/risk-notice.d.ts.map +1 -0
- package/dist/lib/domain/risk-notice.js +30 -0
- package/dist/lib/domain/risk-notice.js.map +1 -0
- package/dist/lib/entities/catalog.entity.d.ts.map +1 -1
- package/dist/lib/entities/catalog.entity.js +4 -2
- package/dist/lib/entities/catalog.entity.js.map +1 -1
- package/dist/lib/entities/customer.entity.d.ts +9 -2
- package/dist/lib/entities/customer.entity.d.ts.map +1 -1
- package/dist/lib/entities/customer.entity.js +29 -1
- package/dist/lib/entities/customer.entity.js.map +1 -1
- package/dist/lib/entities/index.d.ts +2 -2
- package/dist/lib/entities/index.d.ts.map +1 -1
- package/dist/lib/entities/index.js +2 -2
- package/dist/lib/entities/index.js.map +1 -1
- package/dist/lib/entities/procurement.entity.d.ts +6 -4
- package/dist/lib/entities/procurement.entity.d.ts.map +1 -1
- package/dist/lib/entities/procurement.entity.js +9 -1
- package/dist/lib/entities/procurement.entity.js.map +1 -1
- package/dist/lib/entities/settings.entity.d.ts +12 -2
- package/dist/lib/entities/settings.entity.d.ts.map +1 -1
- package/dist/lib/entities/settings.entity.js +40 -0
- package/dist/lib/entities/settings.entity.js.map +1 -1
- package/dist/lib/entities/shared.entity.d.ts +10 -5
- package/dist/lib/entities/shared.entity.d.ts.map +1 -1
- package/dist/lib/entities/shared.entity.js +22 -1
- package/dist/lib/entities/shared.entity.js.map +1 -1
- package/dist/lib/remote-components/trade-compliance-workbench/app.css +1 -0
- package/dist/lib/remote-components/trade-compliance-workbench/app.js +63 -277
- package/dist/lib/remote-ui/analytics-contracts.d.ts +106 -0
- package/dist/lib/remote-ui/analytics-contracts.d.ts.map +1 -0
- package/dist/lib/remote-ui/analytics-contracts.js +4 -0
- package/dist/lib/remote-ui/analytics-contracts.js.map +1 -0
- package/dist/lib/remote-ui/app-source.d.ts +2 -0
- package/dist/lib/remote-ui/app-source.d.ts.map +1 -0
- package/dist/lib/remote-ui/app-source.js +753 -0
- package/dist/lib/remote-ui/app-source.js.map +1 -0
- package/dist/lib/remote-ui/bridge.d.ts +36 -0
- package/dist/lib/remote-ui/bridge.d.ts.map +1 -0
- package/dist/lib/remote-ui/bridge.js +159 -0
- package/dist/lib/remote-ui/bridge.js.map +1 -0
- package/dist/lib/remote-ui/components/data-grid.d.ts +34 -0
- package/dist/lib/remote-ui/components/data-grid.d.ts.map +1 -0
- package/dist/lib/remote-ui/components/data-grid.js +59 -0
- package/dist/lib/remote-ui/components/data-grid.js.map +1 -0
- package/dist/lib/remote-ui/components/forms.d.ts +63 -0
- package/dist/lib/remote-ui/components/forms.d.ts.map +1 -0
- package/dist/lib/remote-ui/components/forms.js +117 -0
- package/dist/lib/remote-ui/components/forms.js.map +1 -0
- package/dist/lib/remote-ui/components/layout.d.ts +34 -0
- package/dist/lib/remote-ui/components/layout.d.ts.map +1 -0
- package/dist/lib/remote-ui/components/layout.js +89 -0
- package/dist/lib/remote-ui/components/layout.js.map +1 -0
- package/dist/lib/remote-ui/contract-import.d.ts +82 -0
- package/dist/lib/remote-ui/contract-import.d.ts.map +1 -0
- package/dist/lib/remote-ui/contract-import.js +102 -0
- package/dist/lib/remote-ui/contract-import.js.map +1 -0
- package/dist/lib/remote-ui/contracts.d.ts +257 -0
- package/dist/lib/remote-ui/contracts.d.ts.map +1 -0
- package/dist/lib/remote-ui/contracts.js +12 -0
- package/dist/lib/remote-ui/contracts.js.map +1 -0
- package/dist/lib/remote-ui/customer-contract-contracts.d.ts +227 -0
- package/dist/lib/remote-ui/customer-contract-contracts.d.ts.map +1 -0
- package/dist/lib/remote-ui/customer-contract-contracts.js +10 -0
- package/dist/lib/remote-ui/customer-contract-contracts.js.map +1 -0
- package/dist/lib/remote-ui/model.d.ts +31 -0
- package/dist/lib/remote-ui/model.d.ts.map +1 -0
- package/dist/lib/remote-ui/model.js +248 -0
- package/dist/lib/remote-ui/model.js.map +1 -0
- package/dist/lib/remote-ui/pages/analytics.d.ts +12 -0
- package/dist/lib/remote-ui/pages/analytics.d.ts.map +1 -0
- package/dist/lib/remote-ui/pages/analytics.js +123 -0
- package/dist/lib/remote-ui/pages/analytics.js.map +1 -0
- package/dist/lib/remote-ui/pages/catalogs.d.ts +225 -0
- package/dist/lib/remote-ui/pages/catalogs.d.ts.map +1 -0
- package/dist/lib/remote-ui/pages/catalogs.js +572 -0
- package/dist/lib/remote-ui/pages/catalogs.js.map +1 -0
- package/dist/lib/remote-ui/pages/contracts.d.ts +80 -0
- package/dist/lib/remote-ui/pages/contracts.d.ts.map +1 -0
- package/dist/lib/remote-ui/pages/contracts.js +396 -0
- package/dist/lib/remote-ui/pages/contracts.js.map +1 -0
- package/dist/lib/remote-ui/pages/files.d.ts +31 -0
- package/dist/lib/remote-ui/pages/files.d.ts.map +1 -0
- package/dist/lib/remote-ui/pages/files.js +64 -0
- package/dist/lib/remote-ui/pages/files.js.map +1 -0
- package/dist/lib/remote-ui/pages/home.d.ts +71 -0
- package/dist/lib/remote-ui/pages/home.d.ts.map +1 -0
- package/dist/lib/remote-ui/pages/home.js +136 -0
- package/dist/lib/remote-ui/pages/home.js.map +1 -0
- package/dist/lib/remote-ui/pages/procurement.d.ts +36 -0
- package/dist/lib/remote-ui/pages/procurement.d.ts.map +1 -0
- package/dist/lib/remote-ui/pages/procurement.js +370 -0
- package/dist/lib/remote-ui/pages/procurement.js.map +1 -0
- package/dist/lib/remote-ui/pages/sales.d.ts +12 -0
- package/dist/lib/remote-ui/pages/sales.d.ts.map +1 -0
- package/dist/lib/remote-ui/pages/sales.js +106 -0
- package/dist/lib/remote-ui/pages/sales.js.map +1 -0
- package/dist/lib/remote-ui/pages/settings.d.ts +34 -0
- package/dist/lib/remote-ui/pages/settings.d.ts.map +1 -0
- package/dist/lib/remote-ui/pages/settings.js +259 -0
- package/dist/lib/remote-ui/pages/settings.js.map +1 -0
- package/dist/lib/remote-ui/procurement-contracts.d.ts +177 -0
- package/dist/lib/remote-ui/procurement-contracts.d.ts.map +1 -0
- package/dist/lib/remote-ui/procurement-contracts.js +2 -0
- package/dist/lib/remote-ui/procurement-contracts.js.map +1 -0
- package/dist/lib/remote-ui/sales-contracts.d.ts +133 -0
- package/dist/lib/remote-ui/sales-contracts.d.ts.map +1 -0
- package/dist/lib/remote-ui/sales-contracts.js +2 -0
- package/dist/lib/remote-ui/sales-contracts.js.map +1 -0
- package/dist/lib/remote-ui/settings-contracts.d.ts +114 -0
- package/dist/lib/remote-ui/settings-contracts.d.ts.map +1 -0
- package/dist/lib/remote-ui/settings-contracts.js +6 -0
- package/dist/lib/remote-ui/settings-contracts.js.map +1 -0
- package/dist/lib/remote-ui/upload-policy.d.ts +18 -0
- package/dist/lib/remote-ui/upload-policy.d.ts.map +1 -0
- package/dist/lib/remote-ui/upload-policy.js +56 -0
- package/dist/lib/remote-ui/upload-policy.js.map +1 -0
- package/dist/lib/runtime-validation.d.ts +61 -0
- package/dist/lib/runtime-validation.d.ts.map +1 -0
- package/dist/lib/runtime-validation.js +243 -0
- package/dist/lib/runtime-validation.js.map +1 -0
- package/dist/lib/sales-file.service.d.ts +54 -6
- package/dist/lib/sales-file.service.d.ts.map +1 -1
- package/dist/lib/sales-file.service.js +278 -33
- package/dist/lib/sales-file.service.js.map +1 -1
- package/dist/lib/trade-compliance.config.d.ts +32 -0
- package/dist/lib/trade-compliance.config.d.ts.map +1 -1
- package/dist/lib/trade-compliance.config.js +16 -4
- package/dist/lib/trade-compliance.config.js.map +1 -1
- package/dist/lib/types.d.ts +253 -1
- package/dist/lib/types.d.ts.map +1 -1
- package/dist/lib/types.js +24 -0
- package/dist/lib/types.js.map +1 -1
- package/dist/lib/workbench-view.provider.d.ts +675 -38
- package/dist/lib/workbench-view.provider.d.ts.map +1 -1
- package/dist/lib/workbench-view.provider.js +411 -40
- package/dist/lib/workbench-view.provider.js.map +1 -1
- package/dist/lib/workbench.middleware.d.ts +70 -19
- package/dist/lib/workbench.middleware.d.ts.map +1 -1
- package/dist/lib/workbench.middleware.js +5 -1
- package/dist/lib/workbench.middleware.js.map +1 -1
- package/dist/lib/workbench.plugin.d.ts.map +1 -1
- package/dist/lib/workbench.plugin.js +6 -4
- package/dist/lib/workbench.plugin.js.map +1 -1
- package/dist/lib/workbench.service.d.ts +629 -48
- package/dist/lib/workbench.service.d.ts.map +1 -1
- package/dist/lib/workbench.service.js +1818 -300
- package/dist/lib/workbench.service.js.map +1 -1
- package/package.json +15 -4
- package/scripts/seed-demo-data.mjs +138 -0
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { getConfiguredUploadPolicy, validateUploadFile } from '../upload-policy.js';
|
|
4
|
+
export function Modal({ open, title, size = 'normal', children, footer, onClose }) {
|
|
5
|
+
const titleId = React.useId();
|
|
6
|
+
const dialogRef = React.useRef(null);
|
|
7
|
+
React.useEffect(() => {
|
|
8
|
+
if (!open)
|
|
9
|
+
return;
|
|
10
|
+
const dialog = dialogRef.current;
|
|
11
|
+
const previouslyFocused = document.activeElement instanceof HTMLElement ? document.activeElement : null;
|
|
12
|
+
const firstFocusable = focusableElements(dialog)[0];
|
|
13
|
+
(firstFocusable ?? dialog)?.focus();
|
|
14
|
+
return () => previouslyFocused?.focus();
|
|
15
|
+
}, [open]);
|
|
16
|
+
if (!open)
|
|
17
|
+
return null;
|
|
18
|
+
return (_jsx("div", { className: "tcw-modal-backdrop", role: "presentation", children: _jsxs("section", { ref: dialogRef, className: `tcw-modal tcw-modal--${size}`, role: "dialog", "aria-modal": "true", "aria-labelledby": titleId, tabIndex: -1, onKeyDown: (event) => handleModalKeyDown(event, dialogRef.current, onClose), children: [_jsxs("header", { children: [_jsx("h2", { id: titleId, children: title }), _jsx("button", { type: "button", className: "tcw-icon-button", title: "\u5173\u95ED", "aria-label": "\u5173\u95ED", onClick: onClose, children: _jsx("i", { className: "ri-close-line", "aria-hidden": "true" }) })] }), _jsx("div", { className: "tcw-modal-body", children: children }), footer && _jsx("footer", { children: footer })] }) }));
|
|
19
|
+
}
|
|
20
|
+
export function FieldGrid({ children, columns = 2 }) {
|
|
21
|
+
return _jsx("div", { className: `tcw-field-grid tcw-field-grid--${columns}`, children: children });
|
|
22
|
+
}
|
|
23
|
+
export function FormField({ label, required, full, hint, children }) {
|
|
24
|
+
return _jsxs("label", { className: `tcw-form-field${full ? ' tcw-form-field--full' : ''}`, children: [_jsxs("span", { children: [required && _jsx("b", { children: "*" }), label] }), children, hint && _jsx("small", { children: hint })] });
|
|
25
|
+
}
|
|
26
|
+
export function ReviewSplit({ editor, source, editorTitle = '识别内容', sourceTitle = '源文件内容' }) {
|
|
27
|
+
return _jsxs("div", { className: "tcw-review-split", children: [_jsxs("section", { children: [_jsx("h3", { children: editorTitle }), editor] }), _jsxs("section", { children: [_jsx("h3", { children: sourceTitle }), source] })] });
|
|
28
|
+
}
|
|
29
|
+
export function UploadZone({ accept, disabled, onFile, onError }) {
|
|
30
|
+
const uploadPolicy = getConfiguredUploadPolicy();
|
|
31
|
+
const selectFile = (file) => {
|
|
32
|
+
try {
|
|
33
|
+
validateUploadFile(file, accept);
|
|
34
|
+
onFile(file);
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
const message = error instanceof Error ? error.message : '文件校验失败';
|
|
38
|
+
if (onError)
|
|
39
|
+
onError(message);
|
|
40
|
+
else
|
|
41
|
+
throw error;
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
const onDragOver = (event) => {
|
|
45
|
+
event.preventDefault();
|
|
46
|
+
if (!disabled)
|
|
47
|
+
event.dataTransfer.dropEffect = 'copy';
|
|
48
|
+
};
|
|
49
|
+
const onDrop = (event) => {
|
|
50
|
+
event.preventDefault();
|
|
51
|
+
if (disabled)
|
|
52
|
+
return;
|
|
53
|
+
const file = event.dataTransfer.files?.[0];
|
|
54
|
+
if (file)
|
|
55
|
+
selectFile(file);
|
|
56
|
+
};
|
|
57
|
+
return (_jsxs("label", { className: `tcw-upload-zone${disabled ? ' is-disabled' : ''}`, "aria-disabled": disabled, onDragOver: onDragOver, onDrop: onDrop, children: [_jsx("i", { className: "ri-upload-cloud-2-line", "aria-hidden": "true" }), _jsx("strong", { children: "\u70B9\u51FB\u6216\u62D6\u62FD\u6587\u4EF6\u5230\u6B64\u5904\u4E0A\u4F20" }), _jsxs("span", { children: ["\u652F\u6301 PDF\u3001Word\u3001Excel \u548C\u5E38\u89C1\u56FE\u7247\u683C\u5F0F\uFF0C\u5355\u4E2A\u6587\u4EF6\u4E0D\u8D85\u8FC7 ", uploadPolicy.maxUploadMb, " MB"] }), _jsx("input", { type: "file", accept: accept, disabled: disabled, onChange: (event) => { const file = event.target.files?.[0]; if (file)
|
|
58
|
+
selectFile(file); } })] }));
|
|
59
|
+
}
|
|
60
|
+
export function resolveModalKeyboardAction({ key, shiftKey, activeIndex, focusableCount }) {
|
|
61
|
+
if (key === 'Escape')
|
|
62
|
+
return 'close';
|
|
63
|
+
if (key !== 'Tab' || focusableCount < 1)
|
|
64
|
+
return 'none';
|
|
65
|
+
if (shiftKey && activeIndex <= 0)
|
|
66
|
+
return 'last';
|
|
67
|
+
if (!shiftKey && activeIndex >= focusableCount - 1)
|
|
68
|
+
return 'first';
|
|
69
|
+
return 'none';
|
|
70
|
+
}
|
|
71
|
+
function handleModalKeyDown(event, dialog, onClose) {
|
|
72
|
+
const focusables = focusableElements(dialog);
|
|
73
|
+
const activeIndex = focusables.indexOf(document.activeElement);
|
|
74
|
+
const action = resolveModalKeyboardAction({ key: event.key, shiftKey: event.shiftKey, activeIndex, focusableCount: focusables.length });
|
|
75
|
+
if (action === 'close') {
|
|
76
|
+
event.preventDefault();
|
|
77
|
+
onClose();
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
if (event.key === 'Tab' && !focusables.length) {
|
|
81
|
+
event.preventDefault();
|
|
82
|
+
dialog?.focus();
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
if (action === 'first' || action === 'last') {
|
|
86
|
+
event.preventDefault();
|
|
87
|
+
focusables[action === 'first' ? 0 : focusables.length - 1]?.focus();
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
function focusableElements(container) {
|
|
91
|
+
if (!container)
|
|
92
|
+
return [];
|
|
93
|
+
return Array.from(container.querySelectorAll('button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])'));
|
|
94
|
+
}
|
|
95
|
+
export function ConfirmDialog({ open, title, message, confirmText = '确认', cancelText = '取消', danger, confirmDisabled, onCancel, onConfirm }) {
|
|
96
|
+
return (_jsx(Modal, { open: open, title: title, onClose: onCancel, footer: _jsxs(_Fragment, { children: [_jsx("button", { type: "button", className: "tcw-button tcw-button--secondary", onClick: onCancel, children: cancelText }), _jsx("button", { type: "button", className: `tcw-button tcw-button--${danger ? 'danger' : 'primary'}`, disabled: confirmDisabled, onClick: onConfirm, children: confirmText })] }), children: _jsxs("div", { className: `tcw-confirm-message${danger ? ' is-danger' : ''}`, children: [_jsx("i", { className: danger ? 'ri-error-warning-line' : 'ri-question-line', "aria-hidden": "true" }), _jsx("p", { children: message })] }) }));
|
|
97
|
+
}
|
|
98
|
+
export function LoadingBlocker({ visible, label = '处理中,请稍候' }) {
|
|
99
|
+
if (!visible)
|
|
100
|
+
return null;
|
|
101
|
+
return _jsxs("div", { className: "tcw-loading-blocker", role: "status", "aria-live": "polite", children: [_jsx("span", { className: "tcw-spinner", "aria-hidden": "true" }), _jsx("strong", { children: label })] });
|
|
102
|
+
}
|
|
103
|
+
export function Toast({ message, tone = 'success', onClose }) {
|
|
104
|
+
if (!message)
|
|
105
|
+
return null;
|
|
106
|
+
return _jsxs("div", { className: `tcw-toast tcw-toast--${tone}`, role: tone === 'error' ? 'alert' : 'status', children: [_jsx("i", { className: toastIcon(tone), "aria-hidden": "true" }), _jsx("span", { children: message }), onClose && _jsx("button", { type: "button", title: "\u5173\u95ED", "aria-label": "\u5173\u95ED", onClick: onClose, children: _jsx("i", { className: "ri-close-line" }) })] });
|
|
107
|
+
}
|
|
108
|
+
function toastIcon(tone) {
|
|
109
|
+
if (tone === 'success')
|
|
110
|
+
return 'ri-checkbox-circle-line';
|
|
111
|
+
if (tone === 'error')
|
|
112
|
+
return 'ri-close-circle-line';
|
|
113
|
+
if (tone === 'warning')
|
|
114
|
+
return 'ri-error-warning-line';
|
|
115
|
+
return 'ri-information-line';
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=forms.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"forms.js","sourceRoot":"","sources":["../../../../src/lib/remote-ui/components/forms.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import React, { type ReactNode } from 'react';
|
|
2
|
+
import type { WorkbenchRoute } from '../contracts.js';
|
|
3
|
+
export type Breadcrumb = {
|
|
4
|
+
label: string;
|
|
5
|
+
route?: WorkbenchRoute;
|
|
6
|
+
};
|
|
7
|
+
export type ExpandableMenu = 'procurement' | 'sales';
|
|
8
|
+
export type ExpandedMenus = Record<ExpandableMenu, boolean>;
|
|
9
|
+
type ShellProps = {
|
|
10
|
+
route: WorkbenchRoute;
|
|
11
|
+
breadcrumbs: Breadcrumb[];
|
|
12
|
+
expandedMenus: ExpandedMenus;
|
|
13
|
+
title: string;
|
|
14
|
+
subtitle?: string;
|
|
15
|
+
commands?: ReactNode;
|
|
16
|
+
busy?: boolean;
|
|
17
|
+
children: ReactNode;
|
|
18
|
+
onRouteChange: (route: WorkbenchRoute) => void;
|
|
19
|
+
onToggleMenu: (menu: ExpandableMenu) => void;
|
|
20
|
+
onRefresh: () => void;
|
|
21
|
+
};
|
|
22
|
+
export declare function WorkbenchShell({ route, breadcrumbs, expandedMenus, title, subtitle, commands, busy, children, onRouteChange, onToggleMenu, onRefresh }: ShellProps): import("react/jsx-runtime").JSX.Element;
|
|
23
|
+
export declare function RouteSubnavigation({ section, route, onRouteChange }: {
|
|
24
|
+
section: ExpandableMenu;
|
|
25
|
+
route: WorkbenchRoute;
|
|
26
|
+
onRouteChange: (route: WorkbenchRoute) => void;
|
|
27
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
28
|
+
export declare function buildBreadcrumbs(route: WorkbenchRoute): Breadcrumb[];
|
|
29
|
+
export declare function PageCommand({ children, icon, tone, ...props }: React.ButtonHTMLAttributes<HTMLButtonElement> & {
|
|
30
|
+
icon?: string;
|
|
31
|
+
tone?: 'primary' | 'secondary' | 'danger';
|
|
32
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
33
|
+
export {};
|
|
34
|
+
//# sourceMappingURL=layout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../../../src/lib/remote-ui/components/layout.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAC7C,OAAO,KAAK,EAAW,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAE9D,MAAM,MAAM,UAAU,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,cAAc,CAAA;CAAE,CAAA;AAClE,MAAM,MAAM,cAAc,GAAG,aAAa,GAAG,OAAO,CAAA;AACpD,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,cAAc,EAAE,OAAO,CAAC,CAAA;AAE3D,KAAK,UAAU,GAAG;IAChB,KAAK,EAAE,cAAc,CAAA;IACrB,WAAW,EAAE,UAAU,EAAE,CAAA;IACzB,aAAa,EAAE,aAAa,CAAA;IAC5B,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,QAAQ,EAAE,SAAS,CAAA;IACnB,aAAa,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAA;IAC9C,YAAY,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,CAAA;IAC5C,SAAS,EAAE,MAAM,IAAI,CAAA;CACtB,CAAA;AAsBD,wBAAgB,cAAc,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,aAAa,EAAE,YAAY,EAAE,SAAS,EAAE,EAAE,UAAU,2CA4ElK;AAED,wBAAgB,kBAAkB,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE;IAAE,OAAO,EAAE,cAAc,CAAC;IAAC,KAAK,EAAE,cAAc,CAAC;IAAC,aAAa,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAA;CAAE,2CAiBvK;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,cAAc,GAAG,UAAU,EAAE,CAqBpE;AAED,wBAAgB,WAAW,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAgB,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,GAAG;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAA;CAAE,2CAEvL"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
const navigation = [
|
|
4
|
+
{ page: 'home', label: '首页', icon: 'ri-home-5-line', route: { type: 'page', page: 'home' } },
|
|
5
|
+
{ page: 'controlled-goods', label: '管控商品目录', icon: 'ri-shield-check-line', route: { type: 'page', page: 'controlled-goods' } },
|
|
6
|
+
{ page: 'sanctioned-companies', label: '公司制裁目录', icon: 'ri-building-2-line', route: { type: 'page', page: 'sanctioned-companies' } },
|
|
7
|
+
{ page: 'procurement', label: '采购合规管理', icon: 'ri-file-list-3-line', route: { type: 'procurement', level: 'suppliers' }, expandable: 'procurement' },
|
|
8
|
+
{ page: 'customer-contract-review', label: '客户合同审核', icon: 'ri-file-search-line', route: { type: 'page', page: 'customer-contract-review' } },
|
|
9
|
+
{ page: 'sales', label: '销售合规管理', icon: 'ri-shopping-bag-3-line', route: { type: 'sales', level: 'customers' }, expandable: 'sales' },
|
|
10
|
+
{ page: 'sales-files', label: '销售文件管理', icon: 'ri-file-excel-2-line', route: { type: 'page', page: 'sales-files' } },
|
|
11
|
+
{ page: 'analytics', label: '数据分析', icon: 'ri-pie-chart-line', route: { type: 'page', page: 'analytics' } },
|
|
12
|
+
{ page: 'settings', label: '系统设置', icon: 'ri-settings-3-line', route: { type: 'page', page: 'settings' } }
|
|
13
|
+
];
|
|
14
|
+
export function WorkbenchShell({ route, breadcrumbs, expandedMenus, title, subtitle, commands, busy, children, onRouteChange, onToggleMenu, onRefresh }) {
|
|
15
|
+
const selected = selectedPage(route);
|
|
16
|
+
return (_jsxs("div", { className: "tcw-app-frame", children: [_jsxs("aside", { className: "tcw-sidebar", children: [_jsxs("div", { className: "tcw-brand", children: [_jsx("span", { className: "tcw-brand-mark", "aria-hidden": "true", children: "G" }), _jsx("strong", { children: "\u5916\u8D38\u5408\u89C4\u5DE5\u4F5C\u53F0" })] }), _jsx("nav", { className: "tcw-navigation", "aria-label": "\u5916\u8D38\u5408\u89C4\u5DE5\u4F5C\u53F0\u5BFC\u822A", children: navigation.map((item) => {
|
|
17
|
+
const active = selected === item.page;
|
|
18
|
+
const expanded = item.expandable ? expandedMenus[item.expandable] : false;
|
|
19
|
+
return (_jsxs(React.Fragment, { children: [_jsxs("div", { className: `tcw-nav-row${active ? ' is-active' : ''}`, children: [_jsxs("button", { type: "button", className: "tcw-nav-item", "aria-label": `进入${item.label}`, "aria-current": active ? 'page' : undefined, onClick: () => onRouteChange(item.route), children: [_jsx("i", { className: item.icon, "aria-hidden": "true" }), _jsx("span", { children: item.label })] }), item.expandable && (_jsx("button", { type: "button", className: "tcw-nav-toggle", "aria-label": `${expanded ? '折叠' : '展开'}${item.label}`, "aria-expanded": expanded, onClick: () => onToggleMenu(item.expandable), children: _jsx("i", { className: `ri-arrow-${expanded ? 'up' : 'down'}-s-line`, "aria-hidden": "true" }) }))] }), item.expandable && expanded && _jsx(RouteSubnavigation, { section: item.expandable, route: route, onRouteChange: onRouteChange })] }, item.page));
|
|
20
|
+
}) })] }), _jsxs("main", { className: "tcw-main", children: [_jsxs("header", { className: "tcw-topbar", children: [_jsx("nav", { className: "tcw-breadcrumbs", "aria-label": "\u9762\u5305\u5C51", children: breadcrumbs.map((crumb, index) => {
|
|
21
|
+
const terminal = index === breadcrumbs.length - 1;
|
|
22
|
+
return (_jsxs(React.Fragment, { children: [index > 0 && _jsx("i", { className: "ri-arrow-right-s-line", "aria-hidden": "true" }), !terminal && crumb.route
|
|
23
|
+
? _jsx("button", { type: "button", "data-breadcrumb": "true", onClick: () => onRouteChange(crumb.route), children: crumb.label })
|
|
24
|
+
: _jsx("span", { "aria-current": terminal ? 'page' : undefined, children: crumb.label })] }, `${crumb.label}-${index}`));
|
|
25
|
+
}) }), _jsx("button", { type: "button", className: "tcw-icon-button", title: "\u5237\u65B0", "aria-label": "\u5237\u65B0", disabled: busy, onClick: onRefresh, children: _jsx("i", { className: "ri-refresh-line", "aria-hidden": "true" }) })] }), _jsxs("div", { className: "tcw-content", children: [_jsxs("div", { className: "tcw-page-heading", children: [_jsxs("div", { children: [_jsx("h1", { children: title }), subtitle && _jsx("p", { children: subtitle })] }), commands && _jsx("div", { className: "tcw-page-commands", children: commands })] }), children] })] })] }));
|
|
26
|
+
}
|
|
27
|
+
export function RouteSubnavigation({ section, route, onRouteChange }) {
|
|
28
|
+
const entries = section === 'procurement' ? procurementEntries(route) : salesEntries(route);
|
|
29
|
+
return (_jsx("div", { className: "tcw-subnavigation", children: entries.map((entry) => (_jsx("button", { type: "button", className: entry.current ? 'is-current' : '', disabled: !entry.route, onClick: () => entry.route && onRouteChange(entry.route), children: entry.label }, entry.level))) }));
|
|
30
|
+
}
|
|
31
|
+
export function buildBreadcrumbs(route) {
|
|
32
|
+
if (route.type === 'page') {
|
|
33
|
+
if (route.page === 'home')
|
|
34
|
+
return [{ label: '首页' }];
|
|
35
|
+
return [{ label: '首页', route: { type: 'page', page: 'home' } }, { label: pageLabel(route.page) }];
|
|
36
|
+
}
|
|
37
|
+
if (route.type === 'procurement') {
|
|
38
|
+
const crumbs = [
|
|
39
|
+
{ label: '首页', route: { type: 'page', page: 'home' } },
|
|
40
|
+
route.level === 'suppliers' ? { label: '采购合规管理' } : { label: '采购合规管理', route: { type: 'procurement', level: 'suppliers' } }
|
|
41
|
+
];
|
|
42
|
+
if (route.level === 'orders')
|
|
43
|
+
crumbs.push({ label: '采购订单' });
|
|
44
|
+
if (route.level === 'lines')
|
|
45
|
+
crumbs.push({ label: '采购订单', route: { type: 'procurement', level: 'orders', supplierId: route.supplierId } }, { label: '采购商品' });
|
|
46
|
+
return crumbs;
|
|
47
|
+
}
|
|
48
|
+
const crumbs = [
|
|
49
|
+
{ label: '首页', route: { type: 'page', page: 'home' } },
|
|
50
|
+
route.level === 'customers' ? { label: '销售合规管理' } : { label: '销售合规管理', route: { type: 'sales', level: 'customers' } }
|
|
51
|
+
];
|
|
52
|
+
if (route.level === 'orders')
|
|
53
|
+
crumbs.push({ label: '销售订单' });
|
|
54
|
+
if (route.level === 'lines')
|
|
55
|
+
crumbs.push({ label: '销售订单', route: { type: 'sales', level: 'orders', customerId: route.customerId } }, { label: '销售商品' });
|
|
56
|
+
return crumbs;
|
|
57
|
+
}
|
|
58
|
+
export function PageCommand({ children, icon, tone = 'primary', ...props }) {
|
|
59
|
+
return _jsxs("button", { type: "button", className: `tcw-button tcw-button--${tone}`, ...props, children: [icon && _jsx("i", { className: icon, "aria-hidden": "true" }), children] });
|
|
60
|
+
}
|
|
61
|
+
function procurementEntries(route) {
|
|
62
|
+
const supplierId = route.type === 'procurement' && route.level !== 'suppliers' ? route.supplierId : null;
|
|
63
|
+
const orderId = route.type === 'procurement' && route.level === 'lines' ? route.orderId : null;
|
|
64
|
+
return [
|
|
65
|
+
{ level: 'suppliers', label: '供应商列表', current: route.type === 'procurement' && route.level === 'suppliers', route: { type: 'procurement', level: 'suppliers' } },
|
|
66
|
+
{ level: 'orders', label: '采购订单', current: route.type === 'procurement' && route.level === 'orders', route: supplierId ? { type: 'procurement', level: 'orders', supplierId } : null },
|
|
67
|
+
{ level: 'lines', label: '采购商品', current: route.type === 'procurement' && route.level === 'lines', route: supplierId && orderId ? { type: 'procurement', level: 'lines', supplierId, orderId } : null }
|
|
68
|
+
];
|
|
69
|
+
}
|
|
70
|
+
function salesEntries(route) {
|
|
71
|
+
const customerId = route.type === 'sales' && route.level !== 'customers' ? route.customerId : null;
|
|
72
|
+
const orderKey = route.type === 'sales' && route.level === 'lines' ? route.orderKey : null;
|
|
73
|
+
return [
|
|
74
|
+
{ level: 'customers', label: '客户列表', current: route.type === 'sales' && route.level === 'customers', route: { type: 'sales', level: 'customers' } },
|
|
75
|
+
{ level: 'orders', label: '销售订单', current: route.type === 'sales' && route.level === 'orders', route: customerId ? { type: 'sales', level: 'orders', customerId } : null },
|
|
76
|
+
{ level: 'lines', label: '销售商品', current: route.type === 'sales' && route.level === 'lines', route: customerId && orderKey ? { type: 'sales', level: 'lines', customerId, orderKey } : null }
|
|
77
|
+
];
|
|
78
|
+
}
|
|
79
|
+
function pageLabel(page) {
|
|
80
|
+
return navigation.find((item) => item.page === page)?.label ?? page;
|
|
81
|
+
}
|
|
82
|
+
function selectedPage(route) {
|
|
83
|
+
if (route.type === 'procurement')
|
|
84
|
+
return 'procurement';
|
|
85
|
+
if (route.type === 'sales')
|
|
86
|
+
return 'sales';
|
|
87
|
+
return route.page;
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=layout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layout.js","sourceRoot":"","sources":["../../../../src/lib/remote-ui/components/layout.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAyB,MAAM,OAAO,CAAA;AA6B7C,MAAM,UAAU,GAAqB;IACnC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE;IAC5F,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,sBAAsB,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,EAAE,EAAE;IAC9H,EAAE,IAAI,EAAE,sBAAsB,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,sBAAsB,EAAE,EAAE;IACpI,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,qBAAqB,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,UAAU,EAAE,aAAa,EAAE;IACpJ,EAAE,IAAI,EAAE,0BAA0B,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,qBAAqB,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,0BAA0B,EAAE,EAAE;IAC7I,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,wBAAwB,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE;IACrI,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,sBAAsB,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE;IACpH,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE;IAC3G,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE;CAC3G,CAAA;AAED,MAAM,UAAU,cAAc,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,aAAa,EAAE,YAAY,EAAE,SAAS,EAAc;IACjK,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC,CAAA;IACpC,OAAO,CACL,eAAK,SAAS,EAAC,eAAe,aAC5B,iBAAO,SAAS,EAAC,aAAa,aAC5B,eAAK,SAAS,EAAC,WAAW,aACxB,eAAM,SAAS,EAAC,gBAAgB,iBAAa,MAAM,kBAAS,EAC5D,0EAAwB,IACpB,EACN,cAAK,SAAS,EAAC,gBAAgB,gBAAY,wDAAW,YACnD,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;4BACvB,MAAM,MAAM,GAAG,QAAQ,KAAK,IAAI,CAAC,IAAI,CAAA;4BACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;4BACzE,OAAO,CACL,MAAC,KAAK,CAAC,QAAQ,eACb,eAAK,SAAS,EAAE,cAAc,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,aACxD,kBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,cAAc,gBACZ,KAAK,IAAI,CAAC,KAAK,EAAE,kBACf,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EACzC,OAAO,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,aAExC,YAAG,SAAS,EAAE,IAAI,CAAC,IAAI,iBAAc,MAAM,GAAG,EAC9C,yBAAO,IAAI,CAAC,KAAK,GAAQ,IAClB,EACR,IAAI,CAAC,UAAU,IAAI,CAClB,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,gBAAgB,gBACd,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,mBACrC,QAAQ,EACvB,OAAO,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,UAAW,CAAC,YAE7C,YAAG,SAAS,EAAE,YAAY,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,SAAS,iBAAc,MAAM,GAAG,GAC3E,CACV,IACG,EACL,IAAI,CAAC,UAAU,IAAI,QAAQ,IAAI,KAAC,kBAAkB,IAAC,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,aAAa,GAAI,KAxBzG,IAAI,CAAC,IAAI,CAyBb,CAClB,CAAA;wBACH,CAAC,CAAC,GACE,IACA,EACR,gBAAM,SAAS,EAAC,UAAU,aACxB,kBAAQ,SAAS,EAAC,YAAY,aAC5B,cAAK,SAAS,EAAC,iBAAiB,gBAAY,oBAAK,YAC9C,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;oCAChC,MAAM,QAAQ,GAAG,KAAK,KAAK,WAAW,CAAC,MAAM,GAAG,CAAC,CAAA;oCACjD,OAAO,CACL,MAAC,KAAK,CAAC,QAAQ,eACZ,KAAK,GAAG,CAAC,IAAI,YAAG,SAAS,EAAC,uBAAuB,iBAAa,MAAM,GAAG,EACvE,CAAC,QAAQ,IAAI,KAAK,CAAC,KAAK;gDACvB,CAAC,CAAC,iBAAQ,IAAI,EAAC,QAAQ,qBAAiB,MAAM,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,KAAM,CAAC,YAAG,KAAK,CAAC,KAAK,GAAU;gDACjH,CAAC,CAAC,+BAAoB,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,YAAG,KAAK,CAAC,KAAK,GAAQ,KAJxD,GAAG,KAAK,CAAC,KAAK,IAAI,KAAK,EAAE,CAK7B,CAClB,CAAA;gCACH,CAAC,CAAC,GACE,EACN,iBAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,iBAAiB,EAAC,KAAK,EAAC,cAAI,gBAAY,cAAI,EAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,YAC7G,YAAG,SAAS,EAAC,iBAAiB,iBAAa,MAAM,GAAG,GAC7C,IACF,EACT,eAAK,SAAS,EAAC,aAAa,aAC1B,eAAK,SAAS,EAAC,kBAAkB,aAC/B,0BACE,uBAAK,KAAK,GAAM,EACf,QAAQ,IAAI,sBAAI,QAAQ,GAAK,IAC1B,EACL,QAAQ,IAAI,cAAK,SAAS,EAAC,mBAAmB,YAAE,QAAQ,GAAO,IAC5D,EACL,QAAQ,IACL,IACD,IACH,CACP,CAAA;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAsG;IACtK,MAAM,OAAO,GAAG,OAAO,KAAK,aAAa,CAAC,CAAC,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;IAC3F,OAAO,CACL,cAAK,SAAS,EAAC,mBAAmB,YAC/B,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CACtB,iBACE,IAAI,EAAC,QAAQ,EAEb,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,EAC5C,QAAQ,EAAE,CAAC,KAAK,CAAC,KAAK,EACtB,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,IAAI,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,YAEvD,KAAK,CAAC,KAAK,IALP,KAAK,CAAC,KAAK,CAMT,CACV,CAAC,GACE,CACP,CAAA;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAqB;IACpD,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC1B,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;YAAE,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;QACnD,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACnG,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;QACjC,MAAM,MAAM,GAAiB;YAC3B,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE;YACtD,KAAK,CAAC,KAAK,KAAK,WAAW,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE;SAC5H,CAAA;QACD,IAAI,KAAK,CAAC,KAAK,KAAK,QAAQ;YAAE,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;QAC5D,IAAI,KAAK,CAAC,KAAK,KAAK,OAAO;YAAE,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;QAC7J,OAAO,MAAM,CAAA;IACf,CAAC;IACD,MAAM,MAAM,GAAiB;QAC3B,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE;QACtD,KAAK,CAAC,KAAK,KAAK,WAAW,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE;KACtH,CAAA;IACD,IAAI,KAAK,CAAC,KAAK,KAAK,QAAQ;QAAE,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;IAC5D,IAAI,KAAK,CAAC,KAAK,KAAK,OAAO;QAAE,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;IACvJ,OAAO,MAAM,CAAA;AACf,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,GAAG,SAAS,EAAE,GAAG,KAAK,EAAgH;IACtL,OAAO,kBAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAE,0BAA0B,IAAI,EAAE,KAAM,KAAK,aAAG,IAAI,IAAI,YAAG,SAAS,EAAE,IAAI,iBAAc,MAAM,GAAG,EAAE,QAAQ,IAAU,CAAA;AAC7J,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAqB;IAC/C,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,KAAK,aAAa,IAAI,KAAK,CAAC,KAAK,KAAK,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAA;IACxG,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,KAAK,aAAa,IAAI,KAAK,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAA;IAC9F,OAAO;QACL,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,KAAK,aAAa,IAAI,KAAK,CAAC,KAAK,KAAK,WAAW,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,WAAW,EAAoB,EAAE;QAClL,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,KAAK,aAAa,IAAI,KAAK,CAAC,KAAK,KAAK,QAAQ,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAoB,CAAC,CAAC,CAAC,IAAI,EAAE;QACxM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,KAAK,aAAa,IAAI,KAAK,CAAC,KAAK,KAAK,OAAO,EAAE,KAAK,EAAE,UAAU,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAoB,CAAC,CAAC,CAAC,IAAI,EAAE;KAC1N,CAAA;AACH,CAAC;AAED,SAAS,YAAY,CAAC,KAAqB;IACzC,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,KAAK,KAAK,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAA;IAClG,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAA;IAC1F,OAAO;QACL,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,KAAK,KAAK,WAAW,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAoB,EAAE;QACrK,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,KAAK,KAAK,QAAQ,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAoB,CAAC,CAAC,CAAC,IAAI,EAAE;QAC5L,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,KAAK,KAAK,OAAO,EAAE,KAAK,EAAE,UAAU,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAoB,CAAC,CAAC,CAAC,IAAI,EAAE;KAChN,CAAA;AACH,CAAC;AAED,SAAS,SAAS,CAAC,IAA+C;IAChE,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,IAAI,CAAA;AACrE,CAAC;AAED,SAAS,YAAY,CAAC,KAAqB;IACzC,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa;QAAE,OAAO,aAAa,CAAA;IACtD,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO;QAAE,OAAO,OAAO,CAAA;IAC1C,OAAO,KAAK,CAAC,IAAI,CAAA;AACnB,CAAC"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
export type ContractDocumentType = 'PURCHASE_CONTRACT' | 'CUSTOMER_CONTRACT';
|
|
2
|
+
export type ContractImportTaskStatus = 'QUEUED' | 'EXTRACTING' | 'AI_PARSING' | 'VALIDATING' | 'AWAITING_REVIEW' | 'PERSISTING' | 'SUCCEEDED' | 'FAILED' | 'TIMED_OUT';
|
|
3
|
+
export type ContractImportTask = {
|
|
4
|
+
id: string;
|
|
5
|
+
documentType: ContractDocumentType;
|
|
6
|
+
status: ContractImportTaskStatus;
|
|
7
|
+
sourceFileId?: string | null;
|
|
8
|
+
sourceFileName?: string | null;
|
|
9
|
+
resultPayload?: Record<string, unknown> | null;
|
|
10
|
+
executionCommand?: ContractImportCommand | null;
|
|
11
|
+
commandDispatchedAt?: string | null;
|
|
12
|
+
retryOfTaskId?: string | null;
|
|
13
|
+
errorCode?: string | null;
|
|
14
|
+
errorMessage?: string | null;
|
|
15
|
+
updatedAt?: string | null;
|
|
16
|
+
};
|
|
17
|
+
export type ContractImportCommand = {
|
|
18
|
+
commandKey: string;
|
|
19
|
+
payload: Record<string, unknown>;
|
|
20
|
+
};
|
|
21
|
+
export type ContractImportCompletion = {
|
|
22
|
+
task: ContractImportTask;
|
|
23
|
+
};
|
|
24
|
+
export type ContractImportStartData = {
|
|
25
|
+
task: ContractImportTask;
|
|
26
|
+
commands: ContractImportCommand[];
|
|
27
|
+
polling: {
|
|
28
|
+
intervalMs: number;
|
|
29
|
+
timeoutMs: number;
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
export type ContractImportStart = {
|
|
33
|
+
success?: boolean;
|
|
34
|
+
message?: string;
|
|
35
|
+
data?: ContractImportStartData;
|
|
36
|
+
};
|
|
37
|
+
export type CustomerContractReanalysisRun = {
|
|
38
|
+
id: string;
|
|
39
|
+
status: 'PENDING' | 'RUNNING' | 'SUCCEEDED' | 'FAILED' | 'TIMED_OUT';
|
|
40
|
+
errorCode?: string | null;
|
|
41
|
+
errorMessage?: string | null;
|
|
42
|
+
commandDispatchedAt?: string | null;
|
|
43
|
+
};
|
|
44
|
+
export type CustomerContractReanalysisResult = {
|
|
45
|
+
run: CustomerContractReanalysisRun;
|
|
46
|
+
review?: unknown;
|
|
47
|
+
task?: ContractImportTask;
|
|
48
|
+
};
|
|
49
|
+
export type CustomerContractReanalysisStart = CustomerContractReanalysisResult & {
|
|
50
|
+
commands: ContractImportCommand[];
|
|
51
|
+
polling: {
|
|
52
|
+
intervalMs: number;
|
|
53
|
+
timeoutMs: number;
|
|
54
|
+
};
|
|
55
|
+
};
|
|
56
|
+
export declare class ContractImportError extends Error {
|
|
57
|
+
readonly task: ContractImportTask;
|
|
58
|
+
constructor(message: string, task: ContractImportTask);
|
|
59
|
+
}
|
|
60
|
+
export declare function runContractImportOrchestration({ start, invokeClientCommand, markCommandDispatched, pollTask, wait, now }: {
|
|
61
|
+
start: ContractImportStart;
|
|
62
|
+
invokeClientCommand: (commandKey: string, payload: Record<string, unknown>) => Promise<unknown>;
|
|
63
|
+
markCommandDispatched: (taskId: string) => Promise<unknown>;
|
|
64
|
+
pollTask: (taskId: string) => Promise<ContractImportCompletion>;
|
|
65
|
+
wait?: (milliseconds: number) => Promise<void>;
|
|
66
|
+
now?: () => number;
|
|
67
|
+
}): Promise<ContractImportCompletion>;
|
|
68
|
+
export declare function findResumableContractImport(items: ContractImportTask[], documentType: ContractDocumentType): ContractImportTask | null;
|
|
69
|
+
export declare function findRecoverableContractImport(items: ContractImportTask[], documentType: ContractDocumentType): ContractImportTask | null;
|
|
70
|
+
export declare function runCustomerContractReanalysis({ start, invokeClientCommand, markCommandDispatched, markFailed, poll, wait, now }: {
|
|
71
|
+
start: CustomerContractReanalysisStart;
|
|
72
|
+
invokeClientCommand: (commandKey: string, payload: Record<string, unknown>) => Promise<unknown>;
|
|
73
|
+
markCommandDispatched: (runId: string) => Promise<unknown>;
|
|
74
|
+
markFailed: (runId: string, failure: {
|
|
75
|
+
errorCode: 'COMMAND_DISPATCH_FAILED' | 'POLLING_FAILED' | 'AI_REANALYSIS_TIMEOUT';
|
|
76
|
+
errorMessage: string;
|
|
77
|
+
}) => Promise<unknown>;
|
|
78
|
+
poll: (runId: string) => Promise<CustomerContractReanalysisResult>;
|
|
79
|
+
wait?: (milliseconds: number) => Promise<void>;
|
|
80
|
+
now?: () => number;
|
|
81
|
+
}): Promise<CustomerContractReanalysisResult>;
|
|
82
|
+
//# sourceMappingURL=contract-import.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contract-import.d.ts","sourceRoot":"","sources":["../../../src/lib/remote-ui/contract-import.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
const PROCESSING_STATUSES = new Set(['QUEUED', 'EXTRACTING', 'AI_PARSING', 'VALIDATING', 'PERSISTING']);
|
|
2
|
+
const MAX_TIMEOUT_MS = 20 * 60 * 1000;
|
|
3
|
+
export class ContractImportError extends Error {
|
|
4
|
+
constructor(message, task) {
|
|
5
|
+
super(message);
|
|
6
|
+
this.task = task;
|
|
7
|
+
this.name = 'ContractImportError';
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
export async function runContractImportOrchestration({ start, invokeClientCommand, markCommandDispatched, pollTask, wait = delay, now = Date.now }) {
|
|
11
|
+
if (start.success === false)
|
|
12
|
+
throw new Error(start.message || '合同解析启动失败');
|
|
13
|
+
if (!start.data?.task || !start.data.polling)
|
|
14
|
+
throw new Error('上传响应缺少合同解析任务信息');
|
|
15
|
+
let task = start.data.task;
|
|
16
|
+
if (task.status === 'AWAITING_REVIEW' || task.status === 'SUCCEEDED')
|
|
17
|
+
return { task };
|
|
18
|
+
assertNotFailed(task);
|
|
19
|
+
if (!task.commandDispatchedAt) {
|
|
20
|
+
let marked = false;
|
|
21
|
+
for (const command of start.data.commands) {
|
|
22
|
+
await invokeClientCommand(command.commandKey, command.payload);
|
|
23
|
+
if (!marked) {
|
|
24
|
+
await markCommandDispatched(task.id);
|
|
25
|
+
marked = true;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
const deadline = now() + Math.min(MAX_TIMEOUT_MS, Math.max(1, start.data.polling.timeoutMs));
|
|
30
|
+
const intervalMs = Math.max(1, start.data.polling.intervalMs);
|
|
31
|
+
while (now() < deadline) {
|
|
32
|
+
await wait(intervalMs);
|
|
33
|
+
task = (await pollTask(task.id)).task;
|
|
34
|
+
if (task.status === 'AWAITING_REVIEW' || task.status === 'SUCCEEDED')
|
|
35
|
+
return { task };
|
|
36
|
+
assertNotFailed(task);
|
|
37
|
+
if (!PROCESSING_STATUSES.has(task.status))
|
|
38
|
+
throw new Error(`不支持的合同导入任务状态:${task.status}`);
|
|
39
|
+
}
|
|
40
|
+
throw new ContractImportError('合同解析超过 20 分钟,请重新解析', { ...task, status: 'TIMED_OUT', errorMessage: '合同解析超过 20 分钟,请重新解析' });
|
|
41
|
+
}
|
|
42
|
+
export function findResumableContractImport(items, documentType) {
|
|
43
|
+
return newest(items.filter(task => task.documentType === documentType && (task.status === 'AWAITING_REVIEW' || PROCESSING_STATUSES.has(task.status))));
|
|
44
|
+
}
|
|
45
|
+
export function findRecoverableContractImport(items, documentType) {
|
|
46
|
+
const retriedTaskIds = new Set(items.map(task => task.retryOfTaskId).filter((id) => Boolean(id)));
|
|
47
|
+
return newest(items.filter(task => task.documentType === documentType && (task.status === 'FAILED' || task.status === 'TIMED_OUT') && !retriedTaskIds.has(task.id)));
|
|
48
|
+
}
|
|
49
|
+
export async function runCustomerContractReanalysis({ start, invokeClientCommand, markCommandDispatched, markFailed, poll, wait = delay, now = Date.now }) {
|
|
50
|
+
if (!start.run || !start.polling)
|
|
51
|
+
throw new Error('重新分析响应缺少任务信息');
|
|
52
|
+
if (start.run.status === 'SUCCEEDED')
|
|
53
|
+
return start;
|
|
54
|
+
assertReanalysisNotFailed(start.run);
|
|
55
|
+
let failureCode = 'COMMAND_DISPATCH_FAILED';
|
|
56
|
+
try {
|
|
57
|
+
if (!start.run.commandDispatchedAt) {
|
|
58
|
+
let marked = false;
|
|
59
|
+
for (const command of start.commands) {
|
|
60
|
+
await invokeClientCommand(command.commandKey, command.payload);
|
|
61
|
+
if (!marked) {
|
|
62
|
+
await markCommandDispatched(start.run.id);
|
|
63
|
+
marked = true;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
failureCode = 'POLLING_FAILED';
|
|
68
|
+
const deadline = now() + Math.min(MAX_TIMEOUT_MS, Math.max(1, start.polling.timeoutMs));
|
|
69
|
+
const intervalMs = Math.max(1, start.polling.intervalMs);
|
|
70
|
+
while (now() < deadline) {
|
|
71
|
+
await wait(intervalMs);
|
|
72
|
+
const result = await poll(start.run.id);
|
|
73
|
+
if (result.run.status === 'SUCCEEDED')
|
|
74
|
+
return result;
|
|
75
|
+
if (result.run.status === 'FAILED' || result.run.status === 'TIMED_OUT')
|
|
76
|
+
throw new PersistedReanalysisFailure(result.run.errorMessage || 'AI 重新分析失败');
|
|
77
|
+
if (result.run.status !== 'PENDING' && result.run.status !== 'RUNNING')
|
|
78
|
+
throw new Error(`不支持的重新分析状态:${result.run.status}`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
if (error instanceof PersistedReanalysisFailure)
|
|
83
|
+
throw error;
|
|
84
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
85
|
+
await markFailed(start.run.id, { errorCode: failureCode, errorMessage });
|
|
86
|
+
throw error;
|
|
87
|
+
}
|
|
88
|
+
const timeoutMessage = 'AI 重新分析超过 20 分钟';
|
|
89
|
+
await markFailed(start.run.id, { errorCode: 'AI_REANALYSIS_TIMEOUT', errorMessage: timeoutMessage });
|
|
90
|
+
throw new Error(timeoutMessage);
|
|
91
|
+
}
|
|
92
|
+
class PersistedReanalysisFailure extends Error {
|
|
93
|
+
}
|
|
94
|
+
function assertNotFailed(task) {
|
|
95
|
+
if (task.status === 'FAILED' || task.status === 'TIMED_OUT')
|
|
96
|
+
throw new ContractImportError(task.errorMessage || (task.status === 'TIMED_OUT' ? '合同解析超时,请重新解析' : '合同解析失败,请重新解析'), task);
|
|
97
|
+
}
|
|
98
|
+
function assertReanalysisNotFailed(run) { if (run.status === 'FAILED' || run.status === 'TIMED_OUT')
|
|
99
|
+
throw new Error(run.errorMessage || 'AI 重新分析失败'); }
|
|
100
|
+
function newest(items) { return [...items].sort((left, right) => String(right.updatedAt ?? '').localeCompare(String(left.updatedAt ?? '')))[0] ?? null; }
|
|
101
|
+
function delay(milliseconds) { return new Promise(resolve => setTimeout(resolve, milliseconds)); }
|
|
102
|
+
//# sourceMappingURL=contract-import.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contract-import.js","sourceRoot":"","sources":["../../../src/lib/remote-ui/contract-import.ts"],"names":[],"mappings":"AA8BA,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAA2B,CAAC,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC,CAAA;AACjI,MAAM,cAAc,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA;AAErC,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IAC5C,YAAY,OAAe,EAAkB,IAAwB;QAAI,KAAK,CAAC,OAAO,CAAC,CAAC;QAA3C,SAAI,GAAJ,IAAI,CAAoB;QAAoB,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAA;IAAC,CAAC;CAC7H;AAED,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,QAAQ,EAAE,IAAI,GAAG,KAAK,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,EAO/I;IACC,IAAI,KAAK,CAAC,OAAO,KAAK,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,IAAI,UAAU,CAAC,CAAA;IACzE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAA;IAC/E,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAA;IAC1B,IAAI,IAAI,CAAC,MAAM,KAAK,iBAAiB,IAAI,IAAI,CAAC,MAAM,KAAK,WAAW;QAAE,OAAO,EAAE,IAAI,EAAE,CAAA;IACrF,eAAe,CAAC,IAAI,CAAC,CAAA;IAErB,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC9B,IAAI,MAAM,GAAG,KAAK,CAAA;QAClB,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC1C,MAAM,mBAAmB,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;YAC9D,IAAI,CAAC,MAAM,EAAE,CAAC;gBAAC,MAAM,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAAC,MAAM,GAAG,IAAI,CAAA;YAAC,CAAC;QACtE,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAA;IAC5F,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;IAC7D,OAAO,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QACxB,MAAM,IAAI,CAAC,UAAU,CAAC,CAAA;QACtB,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;QACrC,IAAI,IAAI,CAAC,MAAM,KAAK,iBAAiB,IAAI,IAAI,CAAC,MAAM,KAAK,WAAW;YAAE,OAAO,EAAE,IAAI,EAAE,CAAA;QACrF,eAAe,CAAC,IAAI,CAAC,CAAA;QACrB,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,gBAAgB,IAAI,CAAC,MAAM,EAAE,CAAC,CAAA;IAC3F,CAAC;IACD,MAAM,IAAI,mBAAmB,CAAC,oBAAoB,EAAE,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,oBAAoB,EAAE,CAAC,CAAA;AAC3H,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,KAA2B,EAAE,YAAkC;IACzG,OAAO,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,YAAY,KAAK,YAAY,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,iBAAiB,IAAI,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;AACxJ,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,KAA2B,EAAE,YAAkC;IAC3G,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAgB,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IAC/G,OAAO,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,YAAY,KAAK,YAAY,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;AACtK,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,6BAA6B,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,GAAG,KAAK,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,EAQtJ;IACC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAA;IACjE,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,KAAK,WAAW;QAAE,OAAO,KAAK,CAAA;IAClD,yBAAyB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACpC,IAAI,WAAW,GAAiD,yBAAyB,CAAA;IACzF,IAAI,CAAC;QACH,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,mBAAmB,EAAE,CAAC;YACnC,IAAI,MAAM,GAAG,KAAK,CAAA;YAClB,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACrC,MAAM,mBAAmB,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;gBAC9D,IAAI,CAAC,MAAM,EAAE,CAAC;oBAAC,MAAM,qBAAqB,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBAAC,MAAM,GAAG,IAAI,CAAA;gBAAC,CAAC;YAC3E,CAAC;QACH,CAAC;QACD,WAAW,GAAG,gBAAgB,CAAA;QAC9B,MAAM,QAAQ,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAA;QACvF,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;QACxD,OAAO,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;YACxB,MAAM,IAAI,CAAC,UAAU,CAAC,CAAA;YACtB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YACvC,IAAI,MAAM,CAAC,GAAG,CAAC,MAAM,KAAK,WAAW;gBAAE,OAAO,MAAM,CAAA;YACpD,IAAI,MAAM,CAAC,GAAG,CAAC,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,GAAG,CAAC,MAAM,KAAK,WAAW;gBAAE,MAAM,IAAI,0BAA0B,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,IAAI,WAAW,CAAC,CAAA;YACrJ,IAAI,MAAM,CAAC,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,GAAG,CAAC,MAAM,KAAK,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,cAAc,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAA;QAC5H,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,0BAA0B;YAAE,MAAM,KAAK,CAAA;QAC5D,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAC3E,MAAM,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC,CAAA;QACxE,MAAM,KAAK,CAAA;IACb,CAAC;IACD,MAAM,cAAc,GAAG,iBAAiB,CAAA;IACxC,MAAM,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,uBAAuB,EAAE,YAAY,EAAE,cAAc,EAAE,CAAC,CAAA;IACpG,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAA;AACjC,CAAC;AAED,MAAM,0BAA2B,SAAQ,KAAK;CAAG;AAEjD,SAAS,eAAe,CAAC,IAAwB;IAC/C,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,WAAW;QAAE,MAAM,IAAI,mBAAmB,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,EAAE,IAAI,CAAC,CAAA;AACxL,CAAC;AACD,SAAS,yBAAyB,CAAC,GAAkC,IAAI,IAAI,GAAG,CAAC,MAAM,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,KAAK,WAAW;IAAE,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,YAAY,IAAI,WAAW,CAAC,CAAA,CAAC,CAAC;AAEtL,SAAS,MAAM,CAAC,KAA2B,IAAI,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAA,CAAC,CAAC;AAC9K,SAAS,KAAK,CAAC,YAAoB,IAAI,OAAO,IAAI,OAAO,CAAO,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAA,CAAC,CAAC"}
|