@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,106 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { DataGrid, FilterPanel, InfoNotice, RiskNotice } from '../components/data-grid.js';
|
|
4
|
+
import { ConfirmDialog, FormField, Modal } from '../components/forms.js';
|
|
5
|
+
import { HsCodeLookupDialog } from './catalogs.js';
|
|
6
|
+
const PAGE_SIZE = 20;
|
|
7
|
+
const customerFilters = [
|
|
8
|
+
{ type: 'text', key: 'code', label: '客户代码' }, { type: 'text', key: 'name', label: '客户名称' }, { type: 'text', key: 'country', label: '国家地区' },
|
|
9
|
+
{ type: 'select', key: 'profitRateStatus', label: '默认定价利润率状态', options: [{ value: 'CONFIGURED', label: '已维护' }, { value: 'MISSING', label: '未维护' }] },
|
|
10
|
+
{ type: 'select', key: 'sanctionStatus', label: '制裁风险', options: [{ value: 'UNCHECKED', label: '未检查' }, { value: 'CLEAR', label: '无命中' }, { value: 'HIT', label: '命中提醒' }] },
|
|
11
|
+
{ type: 'date-range', key: 'complianceCheckedAt', label: '最近检查日期' }
|
|
12
|
+
];
|
|
13
|
+
const orderFilters = [
|
|
14
|
+
{ type: 'text', key: 'salesOrderNo', label: '订单号' }, { type: 'text', key: 'customerContractNo', label: '客户合同号' }, { type: 'text', key: 'purchaseContractNo', label: '采购合同号' },
|
|
15
|
+
{ type: 'date-range', key: 'orderDate', label: '下单日期' }, { type: 'select', key: 'paymentStatus', label: '收款状态', options: [{ value: 'UNPAID', label: '未收款' }, { value: 'PARTIAL', label: '部分收款' }, { value: 'PAID', label: '已收款' }] }
|
|
16
|
+
];
|
|
17
|
+
const lineFilters = [
|
|
18
|
+
{ type: 'text', key: 'productName', label: '商品名称' }, { type: 'text', key: 'productDescription', label: '商品描述' }, { type: 'text', key: 'hsCode', label: '海关编码' },
|
|
19
|
+
{ type: 'select', key: 'complianceCategory', label: '合规分类', options: [{ value: 'DUAL_USE', label: '军民两用' }, { value: 'OVERSEAS_SANCTION', label: '海外制裁' }] }
|
|
20
|
+
];
|
|
21
|
+
export function SalesPage(props) {
|
|
22
|
+
const [filters, setFilters] = React.useState({});
|
|
23
|
+
const [confirmCustomer, setConfirmCustomer] = React.useState(null);
|
|
24
|
+
const [rateDialog, setRateDialog] = React.useState(null);
|
|
25
|
+
const [manualDialog, setManualDialog] = React.useState(null);
|
|
26
|
+
const [hsQuery, setHsQuery] = React.useState(null);
|
|
27
|
+
const [riskLine, setRiskLine] = React.useState(null);
|
|
28
|
+
const hsAction = React.useMemo(() => createSalesLineLookupAction(props.onAction), [props.onAction]);
|
|
29
|
+
const openHsLookup = (line, field) => {
|
|
30
|
+
const request = dispatchSalesLineLookup(line, field, props.onSalesLineLookup);
|
|
31
|
+
setHsQuery(request.query);
|
|
32
|
+
};
|
|
33
|
+
const query = (collection, page = 1, next = filters) => props.onQuery(collection, { page, pageSize: PAGE_SIZE, filters: next });
|
|
34
|
+
const reset = (collection) => { setFilters({}); void query(collection, 1, {}); };
|
|
35
|
+
if (props.route.level === 'customers') {
|
|
36
|
+
const columns = [
|
|
37
|
+
{ type: 'ellipsis', key: 'code', header: '客户代码', width: 130 }, { type: 'ellipsis', key: 'name', header: '客户名称', width: 220, maxWidth: 220 }, { type: 'ellipsis', key: 'country', header: '国家地区', width: 130 },
|
|
38
|
+
{ type: 'custom', key: 'defaultPricingProfitRate', header: '默认定价利润率', width: 150, render: (_, row) => row.profitRateStatus === 'MISSING' ? _jsx("span", { className: "tcw-tag tcw-tag--warning", children: "\u672A\u7EF4\u62A4" }) : percent(row.defaultPricingProfitRate) },
|
|
39
|
+
{ type: 'custom', key: 'sanctionStatus', header: '制裁风险', width: 120, render: (_, row) => _jsx(Status, { value: row.sanctionStatus }) }, { type: 'text', key: 'complianceCheckedAt', header: '最近检查日期', width: 150, format: dateText }
|
|
40
|
+
];
|
|
41
|
+
const openOrders = (row) => row.profitRateStatus === 'MISSING' ? setConfirmCustomer(row) : props.onRouteChange({ type: 'sales', level: 'orders', customerId: row.id });
|
|
42
|
+
return _jsxs(_Fragment, { children: [_jsx(ListHeading, { children: "\u5BA2\u6237\u4FE1\u606F\u5217\u8868" }), _jsx(FilterPanel, { definitions: customerFilters, values: filters, onChange: (key, value) => setFilters(current => ({ ...current, [key]: value })), onQuery: () => void query('salesCustomers'), onReset: () => reset('salesCustomers') }), _jsx(DataGrid, { columns: columns, rows: props.customers.items, rowKey: "id", pagination: pagination(props.customers), onPageChange: page => void query('salesCustomers', page), emptyText: "\u6682\u65E0\u5BA2\u6237\u6570\u636E", actionWidth: 230, actions: row => _jsxs(_Fragment, { children: [_jsx("button", { type: "button", onClick: () => openOrders(row), children: "\u8BA2\u5355\u8BE6\u60C5" }), _jsx("button", { type: "button", onClick: () => setRateDialog({ customer: row, enterOrders: false }), children: "\u7EF4\u62A4\u9ED8\u8BA4\u5229\u6DA6\u7387" })] }) }), _jsx(ConfirmDialog, { open: Boolean(confirmCustomer), title: "\u9ED8\u8BA4\u5229\u6DA6\u7387\u672A\u7EF4\u62A4", message: "\u8BE5\u5BA2\u6237\u5C1A\u672A\u7EF4\u62A4\u9ED8\u8BA4\u5B9A\u4EF7\u5229\u6DA6\u7387\u3002\u662F\u5426\u5148\u7EF4\u62A4\u5229\u6DA6\u7387\u540E\u8FDB\u5165\u8BA2\u5355\u5217\u8868\uFF1F", onCancel: () => setConfirmCustomer(null), onConfirm: () => { if (confirmCustomer)
|
|
43
|
+
setRateDialog({ customer: confirmCustomer, enterOrders: true }); setConfirmCustomer(null); } }), rateDialog && _jsx(ProfitRateDialog, { state: rateDialog, busy: props.busy, onClose: () => setRateDialog(null), onSave: async (rate) => { await props.onAction('save_customer_profit_rate', { customerId: rateDialog.customer.id, rate }); const next = rateDialog.enterOrders; const id = rateDialog.customer.id; setRateDialog(null); if (next)
|
|
44
|
+
props.onRouteChange({ type: 'sales', level: 'orders', customerId: id });
|
|
45
|
+
else
|
|
46
|
+
void query('salesCustomers'); } })] });
|
|
47
|
+
}
|
|
48
|
+
if (props.route.level === 'orders') {
|
|
49
|
+
const metrics = props.orders.metrics ?? { orderCount: 0, salesAmountCny: '0', receivedAmountCny: '0', unreceivedAmountCny: '0', currentYearOrderCount: 0, currentYearSalesAmountCny: '0', topProducts: [] };
|
|
50
|
+
const columns = [
|
|
51
|
+
{ type: 'ellipsis', key: 'salesOrderNo', header: '订单号', width: 170 }, { type: 'ellipsis', key: 'customerContractNo', header: '客户合同号', width: 170 }, { type: 'ellipsis', key: 'purchaseContractNo', header: '采购合同号', width: 170 }, { type: 'text', key: 'orderDate', header: '下单日期', width: 120 },
|
|
52
|
+
{ type: 'text', key: 'orderAmountCny', header: '销售总额 CNY', width: 140, align: 'right', format: money }, { type: 'text', key: 'receivedAmountCny', header: '已收款 CNY', width: 140, align: 'right', format: money }, { type: 'text', key: 'unreceivedAmountCny', header: '未收款 CNY', width: 140, align: 'right', format: money },
|
|
53
|
+
{ type: 'custom', key: 'paymentStatus', header: '收款状态', width: 110, render: (_, row) => paymentLabel(row.paymentStatus) }, { type: 'text', key: 'effectivePricingProfitRate', header: '订单利润率', width: 120, format: percent }, { type: 'text', key: 'pricingProfitRateSource', header: '利润率来源', width: 150, format: sourceLabel }
|
|
54
|
+
];
|
|
55
|
+
return _jsxs(_Fragment, { children: [_jsx(ListHeading, { children: "\u9500\u552E\u8BA2\u5355\u5217\u8868" }), _jsxs("section", { className: "tcw-context-bar", children: [_jsx("strong", { children: "\u5BA2\u6237\u6458\u8981" }), _jsxs("span", { children: [props.orders.customer?.code || '—', " \u00B7 ", props.orders.customer?.name || '—'] }), _jsx("span", { children: props.orders.customer?.country || '—' })] }), _jsx("section", { className: "tcw-metric-grid", children: [['订单总数', String(metrics.orderCount)], ['销售总额', money(metrics.salesAmountCny)], ['已收款', money(metrics.receivedAmountCny)], ['未收款', money(metrics.unreceivedAmountCny)], ['本年订单数', String(metrics.currentYearOrderCount)], ['本年销售金额', money(metrics.currentYearSalesAmountCny)]].map(([label, value]) => _jsxs("article", { children: [_jsx("span", { children: label }), _jsx("strong", { children: value }), _jsx("small", { children: label.includes('订单数') || label === '订单总数' ? '笔' : 'CNY' })] }, label)) }), _jsxs("section", { className: "tcw-sales-top", children: [_jsx("strong", { children: "\u9500\u552E\u5546\u54C1 TOP5" }), metrics.topProducts.length ? _jsx("ol", { children: metrics.topProducts.map(item => _jsxs("li", { children: [_jsx("span", { title: item.productName, children: item.productName }), _jsxs("b", { children: [money(item.amountCny), " CNY"] })] }, item.productName)) }) : _jsx("small", { children: "\u6682\u65E0\u5546\u54C1\u6570\u636E" })] }), _jsx(FilterPanel, { definitions: orderFilters, values: filters, onChange: (key, value) => setFilters(current => ({ ...current, [key]: value })), onQuery: () => void query('salesOrders'), onReset: () => reset('salesOrders') }), _jsx(DataGrid, { columns: columns, rows: props.orders.items, rowKey: row => `${row.customerContractId}:${row.purchaseOrderId}`, pagination: pagination(props.orders), onPageChange: page => void query('salesOrders', page), emptyText: "\u6682\u65E0\u9500\u552E\u8BA2\u5355", actionWidth: 410, actions: row => _jsxs(_Fragment, { children: [_jsx("button", { type: "button", onClick: () => props.onRouteChange({ type: 'sales', level: 'lines', customerId: row.customerId, orderKey: `${row.customerContractId}:${row.purchaseOrderId}` }), children: "\u5546\u54C1\u8BE6\u60C5" }), _jsx("button", { type: "button", onClick: () => setManualDialog({ order: row, field: 'pricingProfitRateOverride' }), children: "\u7EF4\u62A4\u8BA2\u5355\u5229\u6DA6\u7387" }), _jsx("button", { type: "button", onClick: () => setManualDialog({ order: row, field: 'receivedAmountCny' }), children: "\u7EF4\u62A4\u5DF2\u6536\u6B3E" }), _jsx("button", { type: "button", onClick: () => props.onOpenFiles?.(row), children: "\u751F\u6210\u6587\u4EF6/\u8FDB\u5165\u9500\u552E\u6587\u4EF6" })] }) }), manualDialog && _jsx(ManualDataDialog, { state: manualDialog, busy: props.busy, onClose: () => setManualDialog(null), onSave: async (value) => { const { order, field } = manualDialog; await props.onAction('save_derived_manual_data', { customerContractId: order.customerContractId, purchaseOrderId: order.purchaseOrderId, [field]: value }); setManualDialog(null); void query('salesOrders'); } })] });
|
|
56
|
+
}
|
|
57
|
+
const order = props.lines.order;
|
|
58
|
+
const columns = [
|
|
59
|
+
{ type: 'custom', key: 'productName', header: '商品名称', width: 190, render: (_, row) => _jsx("button", { type: "button", className: "tcw-table-link", title: `按商品名称查询海关编码:${row.productName}`, onClick: () => openHsLookup(row, 'PRODUCT_NAME'), children: row.productName }) }, { type: 'ellipsis', key: 'productDescription', header: '商品描述', width: 190, maxWidth: 190 }, { type: 'ellipsis', key: 'modelSpecification', header: '规格型号', width: 150 }, { type: 'custom', key: 'hsCode', header: '海关编码', width: 130, render: (_, row) => row.hsCode ? _jsx("button", { type: "button", className: "tcw-table-link", title: `查询海关编码:${row.hsCode}`, onClick: () => openHsLookup(row, 'HS_CODE'), children: row.hsCode }) : '—' },
|
|
60
|
+
{ type: 'text', key: 'vatRate', header: '增值税率', width: 100, align: 'right', format: percent }, { type: 'text', key: 'refundRate', header: '退税率', width: 90, align: 'right', format: percent }, { type: 'custom', key: 'hsCodeStatus', header: '编码确认状态', width: 120, render: (_, row) => hsCodeStatusLabel(row.hsCodeStatus) },
|
|
61
|
+
{ type: 'custom', key: 'complianceCategories', header: '合规分类', width: 170, render: (_, row) => _jsx(Tags, { values: row.complianceCategories ?? [] }) }, { type: 'custom', key: 'complianceMatches', header: '制裁/管控命中', width: 160, render: (_, row) => row.complianceMatches.length ? _jsxs("button", { type: "button", className: "tcw-table-link", title: `查看商品风险明细:${row.productName}`, onClick: () => setRiskLine(row), children: ["\u547D\u4E2D ", row.complianceMatches.length] }) : _jsx("span", { className: "tcw-tag", children: "\u65E0\u547D\u4E2D" }) },
|
|
62
|
+
{ type: 'text', key: 'quantity', header: '数量', width: 100, align: 'right' }, { type: 'text', key: 'salesUnitPriceCny', header: '销售单价 CNY', width: 140, align: 'right', format: money }, { type: 'text', key: 'salesLineAmountCny', header: '销售金额 CNY', width: 140, align: 'right', format: money }
|
|
63
|
+
];
|
|
64
|
+
return _jsxs(_Fragment, { children: [_jsx(ListHeading, { children: "\u9500\u552E\u5546\u54C1\u5217\u8868" }), _jsxs("section", { className: "tcw-context-bar", children: [_jsx("strong", { children: order?.salesOrderNo ?? '销售商品' }), _jsx("span", { children: order?.customerContractNo }), _jsx("span", { children: order?.purchaseContractNo })] }), order && _jsxs(InfoNotice, { children: [sourceLabel(order.pricingProfitRateSource), "\uFF1A\u5F53\u524D\u9500\u552E\u4EF7\u683C\u6309 ", percent(order.effectivePricingProfitRate), " \u8BA1\u7B97\u3002"] }), _jsx(FilterPanel, { definitions: lineFilters, values: filters, onChange: (key, value) => setFilters(current => ({ ...current, [key]: value })), onQuery: () => void query('salesLines'), onReset: () => reset('salesLines') }), _jsx(DataGrid, { columns: columns, rows: props.lines.items, rowKey: "purchaseOrderLineId", pagination: pagination(props.lines), onPageChange: page => void query('salesLines', page), emptyText: "\u6682\u65E0\u6D3E\u751F\u9500\u552E\u5546\u54C1" }), riskLine && _jsx(SalesProductRiskDialog, { line: riskLine, onClose: () => setRiskLine(null) }), _jsx(HsCodeLookupDialog, { open: hsQuery !== null, initialQuery: hsQuery ?? '', onAction: hsAction, onClose: () => setHsQuery(null) })] });
|
|
65
|
+
}
|
|
66
|
+
export function salesLineLookupQuery(line, field) { return field === 'productName' ? line.productName : line.hsCode ?? ''; }
|
|
67
|
+
export function createSalesLineLookupRequest(line, field) {
|
|
68
|
+
return { type: 'HS_CODE_LOOKUP', field, query: salesLineLookupQuery(line, field === 'PRODUCT_NAME' ? 'productName' : 'hsCode'), purchaseOrderLineId: line.purchaseOrderLineId };
|
|
69
|
+
}
|
|
70
|
+
export function dispatchSalesLineLookup(line, field, onLookup) {
|
|
71
|
+
const request = createSalesLineLookupRequest(line, field);
|
|
72
|
+
onLookup?.(request);
|
|
73
|
+
return request;
|
|
74
|
+
}
|
|
75
|
+
export function createSalesLineLookupAction(onAction) {
|
|
76
|
+
return (actionKey, input) => {
|
|
77
|
+
if (actionKey !== 'search_hs_code' && actionKey !== 'get_hs_code_detail')
|
|
78
|
+
return Promise.resolve({ success: false, message: '销售商品仅支持海关编码查询' });
|
|
79
|
+
return onAction(actionKey, input);
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
export function SalesProductRiskDialog({ line, onClose }) {
|
|
83
|
+
const riskTypes = [...new Set([...(line.complianceCategories ?? []), ...line.complianceMatches.map(match => match.catalogType)])];
|
|
84
|
+
const riskDescriptions = matchValues(line.complianceMatches, 'riskDescription');
|
|
85
|
+
const recommendations = matchValues(line.complianceMatches, 'recommendation');
|
|
86
|
+
return _jsxs(Modal, { open: true, title: "\u5546\u54C1\u98CE\u9669\u8BE6\u60C5", size: "wide", onClose: onClose, footer: _jsx("button", { type: "button", className: "tcw-button tcw-button--primary", onClick: onClose, children: "\u5173\u95ED" }), children: [_jsxs("section", { "aria-labelledby": "sales-product-summary-title", children: [_jsx("h3", { id: "sales-product-summary-title", children: "\u5546\u54C1\u4E0E\u4EF7\u683C" }), _jsxs("dl", { className: "tcw-preflight-summary", children: [_jsxs("div", { children: [_jsx("dt", { children: "\u5546\u54C1\u540D\u79F0" }), _jsx("dd", { children: line.productName })] }), _jsxs("div", { children: [_jsx("dt", { children: "\u82F1\u6587\u540D\u79F0" }), _jsx("dd", { children: line.englishName || '暂无' })] }), _jsxs("div", { children: [_jsx("dt", { children: "\u6D77\u5173\u7F16\u7801" }), _jsx("dd", { children: line.hsCode || '暂无' })] }), _jsxs("div", { children: [_jsx("dt", { children: "\u6570\u91CF" }), _jsxs("dd", { children: [line.quantity, line.unit ? ` ${line.unit}` : ''] })] }), _jsxs("div", { children: [_jsx("dt", { children: "\u9500\u552E\u5355\u4EF7" }), _jsxs("dd", { children: [money(line.salesUnitPriceCny), " CNY"] })] }), _jsxs("div", { children: [_jsx("dt", { children: "\u9500\u552E\u91D1\u989D" }), _jsxs("dd", { children: [money(line.salesLineAmountCny), " CNY"] })] }), _jsxs("div", { children: [_jsx("dt", { children: "\u5546\u54C1\u63CF\u8FF0" }), _jsx("dd", { children: line.productDescription || '暂无' })] }), _jsxs("div", { children: [_jsx("dt", { children: "\u89C4\u683C\u578B\u53F7" }), _jsx("dd", { children: line.modelSpecification || '暂无' })] })] })] }), _jsxs("section", { "aria-labelledby": "sales-product-risk-title", children: [_jsx("h3", { id: "sales-product-risk-title", children: "\u98CE\u9669\u8BF4\u660E" }), _jsxs("dl", { className: "tcw-preflight-summary", children: [_jsxs("div", { children: [_jsx("dt", { children: "\u98CE\u9669\u7C7B\u578B" }), _jsx("dd", { children: riskTypes.length ? riskTypes.map(complianceCategoryLabel).join('、') : '无' })] }), _jsxs("div", { children: [_jsx("dt", { children: "\u547D\u4E2D\u7ED3\u679C" }), _jsx("dd", { children: line.complianceMatches.length ? `命中 ${line.complianceMatches.length} 项` : '无命中' })] }), _jsxs("div", { children: [_jsx("dt", { children: "\u98CE\u9669\u8BF4\u660E" }), _jsx("dd", { children: riskDescriptions.length ? riskDescriptions.join(';') : '暂无' })] }), _jsxs("div", { children: [_jsx("dt", { children: "\u5904\u7406\u5EFA\u8BAE" }), _jsx("dd", { children: recommendations.length ? recommendations.join(';') : '暂无' })] })] })] }), _jsxs("section", { "aria-labelledby": "sales-product-match-title", children: [_jsx("h3", { id: "sales-product-match-title", children: "\u7BA1\u63A7/\u5236\u88C1\u5339\u914D\u660E\u7EC6" }), line.complianceMatches.length ? _jsx("div", { className: "tcw-grid-section", children: _jsx("div", { className: "tcw-table-scroll", children: _jsxs("table", { className: "tcw-data-table", children: [_jsx("thead", { children: _jsxs("tr", { children: [_jsx("th", { children: "\u5E8F\u53F7" }), _jsx("th", { children: "\u76EE\u5F55\u7C7B\u578B" }), _jsx("th", { children: "\u547D\u4E2D\u6761\u76EE" }), _jsx("th", { children: "\u5339\u914D\u65B9\u5F0F" }), _jsx("th", { children: "\u76F8\u4F3C\u5EA6" })] }) }), _jsx("tbody", { children: line.complianceMatches.map((match, index) => _jsxs("tr", { children: [_jsx("td", { children: index + 1 }), _jsx("td", { children: complianceCategoryLabel(match.catalogType) }), _jsx("td", { children: match.matchedItemName || match.controlledGoodsId || '暂无' }), _jsx("td", { children: matchMethodLabel(match.matchMethod) }), _jsx("td", { children: similarityLabel(match.similarityScore) })] }, `${match.controlledGoodsId ?? match.catalogType}-${index}`)) })] }) }) }) : _jsx("p", { children: "\u6682\u65E0" })] })] });
|
|
87
|
+
}
|
|
88
|
+
function ListHeading({ children }) { return _jsx("h2", { className: "tcw-list-heading", children: children }); }
|
|
89
|
+
function ProfitRateDialog({ state, busy, onClose, onSave }) { const [rate, setRate] = React.useState(state.customer.defaultPricingProfitRate ?? ''); return _jsxs(Modal, { open: true, title: "\u7EF4\u62A4\u5BA2\u6237\u9ED8\u8BA4\u5229\u6DA6\u7387", onClose: onClose, footer: _jsxs(_Fragment, { children: [_jsx("button", { type: "button", className: "tcw-button tcw-button--secondary", onClick: onClose, children: "\u53D6\u6D88" }), _jsx("button", { type: "button", className: "tcw-button tcw-button--primary", disabled: busy || !validRate(rate), onClick: () => void onSave(rate), children: "\u4FDD\u5B58" })] }), children: [_jsx(FormField, { label: "\u9ED8\u8BA4\u5B9A\u4EF7\u5229\u6DA6\u7387", children: _jsx("input", { type: "number", min: "0", step: "0.0001", value: rate, onChange: event => setRate(event.target.value) }) }), _jsx(InfoNotice, { children: "\u8BF7\u8F93\u5165\u5C0F\u6570\uFF0C\u4F8B\u5982 0.08 \u8868\u793A 8%\u3002" })] }); }
|
|
90
|
+
function ManualDataDialog({ state, busy, onClose, onSave }) { const receipt = state.field === 'receivedAmountCny'; const [value, setValue] = React.useState(receipt ? state.order.receivedAmountCny : state.order.pricingProfitRateSource === 'ORDER_OVERRIDE' ? state.order.effectivePricingProfitRate : ''); const invalid = receipt ? !validAmount(value) || Number(value) > Number(state.order.orderAmountCny) : value !== '' && !validRate(value); return _jsxs(Modal, { open: true, title: receipt ? '维护已收款' : '维护订单利润率', onClose: onClose, footer: _jsxs(_Fragment, { children: [_jsx("button", { type: "button", className: "tcw-button tcw-button--secondary", onClick: onClose, children: "\u53D6\u6D88" }), _jsx("button", { type: "button", className: "tcw-button tcw-button--primary", disabled: busy || invalid, onClick: () => void onSave(value), children: "\u4FDD\u5B58" })] }), children: [_jsx(FormField, { label: receipt ? '已收款 CNY' : '订单利润率(留空继承客户默认)', children: _jsx("input", { type: "number", min: "0", max: receipt ? state.order.orderAmountCny : undefined, step: "0.01", value: value, onChange: event => setValue(event.target.value) }) }), receipt && Number(value) > Number(state.order.orderAmountCny) && _jsx(RiskNotice, { children: "\u5DF2\u6536\u6B3E\u4E0D\u5F97\u8D85\u8FC7\u5B9E\u65F6\u8BA2\u5355\u603B\u989D\u3002" })] }); }
|
|
91
|
+
function Status({ value }) { return _jsx("span", { className: `tcw-tag${value === 'HIT' ? ' tcw-tag--danger' : value === 'UNCHECKED' ? ' tcw-tag--warning' : ''}`, children: value === 'HIT' ? '命中提醒' : value === 'CLEAR' ? '无命中' : '未检查' }); }
|
|
92
|
+
function Tags({ values }) { return _jsx("div", { className: "tcw-tag-list", children: values.length ? values.map(value => _jsx("span", { className: "tcw-tag", children: value === 'DUAL_USE' ? '军民两用' : '海外制裁' }, value)) : _jsx("span", { children: "\u2014" }) }); }
|
|
93
|
+
function complianceCategoryLabel(value) { return value === 'DUAL_USE' ? '军民两用' : '海外制裁'; }
|
|
94
|
+
function pagination(value) { const pageSize = value.pageSize ?? PAGE_SIZE; const total = value.total ?? 0; return { total, page: value.page ?? 1, pageSize, pageCount: Math.max(1, Math.ceil(total / pageSize)) }; }
|
|
95
|
+
function money(value) { const number = Number(value); return Number.isFinite(number) ? number.toLocaleString('zh-CN', { minimumFractionDigits: 2, maximumFractionDigits: 2 }) : '—'; }
|
|
96
|
+
function percent(value) { const number = Number(value); return Number.isFinite(number) ? `${(number * 100).toFixed(2)}%` : '—'; }
|
|
97
|
+
function dateText(value) { return value ? String(value).slice(0, 10) : '—'; }
|
|
98
|
+
function paymentLabel(value) { return value === 'PAID' ? '已收款' : value === 'PARTIAL' ? '部分收款' : '未收款'; }
|
|
99
|
+
function sourceLabel(value) { return value === 'ORDER_OVERRIDE' ? '订单单独利润率' : '继承客户默认利润率'; }
|
|
100
|
+
function hsCodeStatusLabel(value) { return value === 'AI_CONFIRMED' ? 'AI确认' : value === 'MANUALLY_CONFIRMED' ? '人工确认' : '未确认'; }
|
|
101
|
+
function matchMethodLabel(value) { return value === 'HS_CODE_EXACT' ? '海关编码精确匹配' : value === 'NAME_CONTAINS' ? '商品名称包含匹配' : '名称相似度匹配'; }
|
|
102
|
+
function similarityLabel(value) { const number = Number(value); return value != null && value !== '' && Number.isFinite(number) ? `${(number * 100).toFixed(2)}%` : '暂无'; }
|
|
103
|
+
function matchValues(matches, field) { return [...new Set(matches.map(match => match[field]?.trim()).filter((value) => Boolean(value)))]; }
|
|
104
|
+
function validRate(value) { return value.trim() !== '' && Number.isFinite(Number(value)) && Number(value) >= 0; }
|
|
105
|
+
function validAmount(value) { return value.trim() !== '' && Number.isFinite(Number(value)) && Number(value) >= 0; }
|
|
106
|
+
//# sourceMappingURL=sales.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sales.js","sourceRoot":"","sources":["../../../../src/lib/remote-ui/pages/sales.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { BankSettings, CompanySettings, MonthlyRateSettings, ProfitRuleSettings, SettingsData, SettingsDeleteRateRequest, SettingsHistoryOperationType, SettingsHistoryTransition, SettingsHistoryType, SettingsRestoreRequest, SettingsSaveRequest } from '../settings-contracts.js';
|
|
2
|
+
export type SettingsPageProps = {
|
|
3
|
+
data: SettingsData;
|
|
4
|
+
busy: boolean;
|
|
5
|
+
onSave: (request: SettingsSaveRequest) => void | Promise<void>;
|
|
6
|
+
onRestoreDefault: (request: SettingsRestoreRequest) => void | Promise<void>;
|
|
7
|
+
onDeleteRate: (request: SettingsDeleteRateRequest) => void | Promise<void>;
|
|
8
|
+
onUploadLogo: (file: File) => string | Promise<string>;
|
|
9
|
+
onDiscardLogo: (logoFileId: string) => void | Promise<void>;
|
|
10
|
+
};
|
|
11
|
+
export declare function createSettingsActionApi({ onSave, onRestoreDefault, onDeleteRate }: Pick<SettingsPageProps, 'onSave' | 'onRestoreDefault' | 'onDeleteRate'>): {
|
|
12
|
+
saveRisk: (content: string, revision: number) => void | Promise<void>;
|
|
13
|
+
saveCompany: (value: CompanySettings) => void | Promise<void>;
|
|
14
|
+
saveBank: (value: BankSettings) => void | Promise<void>;
|
|
15
|
+
saveProfit: (value: ProfitRuleSettings) => void | Promise<void>;
|
|
16
|
+
saveRate: (values: MonthlyRateSettings) => void | Promise<void>;
|
|
17
|
+
restoreRisk: (revision: number) => void | Promise<void>;
|
|
18
|
+
restoreCompany: (revision: number) => void | Promise<void>;
|
|
19
|
+
restoreBank: (value: BankSettings) => void | Promise<void>;
|
|
20
|
+
restoreProfit: (revision: number) => void | Promise<void>;
|
|
21
|
+
deleteRate: (value: MonthlyRateSettings) => void | Promise<void>;
|
|
22
|
+
};
|
|
23
|
+
export declare function buildSettingsHistoryTransition<T extends {
|
|
24
|
+
revision: number;
|
|
25
|
+
}>(settingsType: SettingsHistoryType, operationType: SettingsHistoryOperationType, before: T, next: T): SettingsHistoryTransition<T>;
|
|
26
|
+
export declare function reconcileRevisionedSettings<T extends {
|
|
27
|
+
revision: number;
|
|
28
|
+
}>(local: T, incoming: T): T;
|
|
29
|
+
export declare function completeRateDeletion(request: SettingsDeleteRateRequest, confirmed: boolean, onDelete: (request: SettingsDeleteRateRequest) => void | Promise<void>): Promise<void>;
|
|
30
|
+
export declare function SettingsPage({ data, busy, onSave, onRestoreDefault, onDeleteRate, onUploadLogo, onDiscardLogo }: SettingsPageProps): import("react/jsx-runtime").JSX.Element;
|
|
31
|
+
export declare function validateBankSettings(value: BankSettings): string | null;
|
|
32
|
+
export declare function validateMonthlyRate(value: Pick<MonthlyRateSettings, 'year' | 'month' | 'usdToCnyRate' | 'sourceType' | 'sourceReference'>): string | null;
|
|
33
|
+
export declare function sanitizeRiskNoticeHtml(html: string): string;
|
|
34
|
+
//# sourceMappingURL=settings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../../../src/lib/remote-ui/pages/settings.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAmB,YAAY,EAAE,eAAe,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,YAAY,EAAE,yBAAyB,EAAE,4BAA4B,EAAE,yBAAyB,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,mBAAmB,EAAmB,MAAM,0BAA0B,CAAA;AAI5T,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,YAAY,CAAA;IAClB,IAAI,EAAE,OAAO,CAAA;IACb,MAAM,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC9D,gBAAgB,EAAE,CAAC,OAAO,EAAE,sBAAsB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3E,YAAY,EAAE,CAAC,OAAO,EAAE,yBAAyB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1E,YAAY,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACtD,aAAa,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAC5D,CAAA;AAED,wBAAgB,uBAAuB,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE,YAAY,EAAE,EAAE,IAAI,CAAC,iBAAiB,EAAE,QAAQ,GAAG,kBAAkB,GAAG,cAAc,CAAC;wBAEnI,MAAM,YAAY,MAAM;yBACvB,eAAe;sBAClB,YAAY;wBACV,kBAAkB;uBACnB,mBAAmB;4BACd,MAAM;+BACH,MAAM;yBACZ,YAAY;8BACP,MAAM;wBACZ,mBAAmB;EAE1C;AAED,wBAAgB,8BAA8B,CAAC,CAAC,SAAS;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,EAAE,YAAY,EAAE,mBAAmB,EAAE,aAAa,EAAE,4BAA4B,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,yBAAyB,CAAC,CAAC,CAAC,CAK/M;AAED,wBAAgB,2BAA2B,CAAC,CAAC,SAAS;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC,CAEpG;AAED,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,yBAAyB,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,yBAAyB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,iBAExK;AAYD,wBAAgB,YAAY,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,gBAAgB,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,EAAE,iBAAiB,2CA8BlI;AA2KD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,GAAG,IAAI,CAGvE;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,mBAAmB,EAAE,MAAM,GAAG,OAAO,GAAG,cAAc,GAAG,YAAY,GAAG,iBAAiB,CAAC,GAAG,MAAM,GAAG,IAAI,CASzJ;AAWD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAI3D"}
|
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { DataGrid, InfoNotice, RiskNotice } from '../components/data-grid.js';
|
|
4
|
+
import { ConfirmDialog, FieldGrid, FormField, Modal, Toast } from '../components/forms.js';
|
|
5
|
+
export function createSettingsActionApi({ onSave, onRestoreDefault, onDeleteRate }) {
|
|
6
|
+
return {
|
|
7
|
+
saveRisk: (content, revision) => onSave({ settingsType: 'risk', expectedRevision: revision, values: { content } }),
|
|
8
|
+
saveCompany: (value) => { const { revision, ...values } = value; return onSave({ settingsType: 'company', expectedRevision: revision, values }); },
|
|
9
|
+
saveBank: (value) => { const { revision, ...values } = value; return onSave({ settingsType: 'bank', expectedRevision: revision, values }); },
|
|
10
|
+
saveProfit: (value) => onSave({ settingsType: 'profit', expectedRevision: value.revision, values: { status: value.status, minimumOrderProfitRate: value.minimumOrderProfitRate, exchangeCostMinimum: value.exchangeCostMinimum, exchangeCostMaximum: value.exchangeCostMaximum } }),
|
|
11
|
+
saveRate: (values) => onSave({ settingsType: 'rate', expectedRevision: values.revision ?? 0, values: { ...values, sourceType: 'MANUAL', currencyCode: 'USD' } }),
|
|
12
|
+
restoreRisk: (revision) => onRestoreDefault({ settingsType: 'risk', expectedRevision: revision }),
|
|
13
|
+
restoreCompany: (revision) => onRestoreDefault({ settingsType: 'company', expectedRevision: revision }),
|
|
14
|
+
restoreBank: (value) => onRestoreDefault({ settingsType: 'bank', bankType: value.bankType, expectedRevision: value.revision }),
|
|
15
|
+
restoreProfit: (revision) => onRestoreDefault({ settingsType: 'profit', expectedRevision: revision }),
|
|
16
|
+
deleteRate: (value) => onDeleteRate({ settingsType: 'rate', id: value.id ?? '', expectedRevision: value.revision ?? 0 })
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
export function buildSettingsHistoryTransition(settingsType, operationType, before, next) {
|
|
20
|
+
const afterRevision = before.revision + 1;
|
|
21
|
+
const beforeSnapshot = Object.freeze({ ...before });
|
|
22
|
+
const afterSnapshot = Object.freeze({ ...next, revision: afterRevision });
|
|
23
|
+
return Object.freeze({ settingsType, operationType, snapshotVersion: 'v1', beforeRevision: before.revision, afterRevision, beforeSnapshot, afterSnapshot });
|
|
24
|
+
}
|
|
25
|
+
export function reconcileRevisionedSettings(local, incoming) {
|
|
26
|
+
return local.revision === incoming.revision ? local : incoming;
|
|
27
|
+
}
|
|
28
|
+
export async function completeRateDeletion(request, confirmed, onDelete) {
|
|
29
|
+
if (confirmed)
|
|
30
|
+
await onDelete(request);
|
|
31
|
+
}
|
|
32
|
+
const sectionItems = [
|
|
33
|
+
{ key: 'RISK', label: '风险提示', icon: 'ri-alarm-warning-line' },
|
|
34
|
+
{ key: 'COMPANY', label: '企业信息', icon: 'ri-building-line' },
|
|
35
|
+
{ key: 'BANK', label: '银行信息', icon: 'ri-bank-line', note: 'OVERSEAS_CNY · OVERSEAS_USD' },
|
|
36
|
+
{ key: 'PROFIT', label: '利润与换汇规则', icon: 'ri-funds-line', note: 'COMPLIANCE_V1 · 公式固定,不可编辑' },
|
|
37
|
+
{ key: 'MONTHLY_RATE', label: '月度美元汇率', icon: 'ri-exchange-dollar-line' }
|
|
38
|
+
];
|
|
39
|
+
export function SettingsPage({ data, busy, onSave, onRestoreDefault, onDeleteRate, onUploadLogo, onDiscardLogo }) {
|
|
40
|
+
const [active, setActive] = React.useState('BANK');
|
|
41
|
+
const [restore, setRestore] = React.useState(null);
|
|
42
|
+
const [feedback, setFeedback] = React.useState(null);
|
|
43
|
+
const run = async (operation, successMessage) => {
|
|
44
|
+
try {
|
|
45
|
+
await operation();
|
|
46
|
+
setFeedback({ message: successMessage, tone: 'success' });
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
setFeedback({ message: error instanceof Error ? `保存失败:${error.message}` : '保存失败,请稍后重试', tone: 'error' });
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
const confirmRestore = async () => {
|
|
53
|
+
if (!restore)
|
|
54
|
+
return;
|
|
55
|
+
await run(() => onRestoreDefault(restore), '已恢复系统默认配置');
|
|
56
|
+
setRestore(null);
|
|
57
|
+
};
|
|
58
|
+
return _jsxs("section", { className: "tcw-settings-page", "data-settings-page": "typed", children: [_jsx("aside", { className: "tcw-settings-navigation", "aria-label": "\u8BBE\u7F6E\u5206\u533A", children: sectionItems.map(item => _jsxs("button", { type: "button", className: active === item.key ? 'is-active' : '', "aria-current": active === item.key ? 'page' : undefined, onClick: () => setActive(item.key), children: [_jsx("i", { className: item.icon, "aria-hidden": "true" }), _jsxs("span", { children: [item.label, item.note && _jsx("small", { children: item.note })] })] }, item.key)) }), _jsxs("div", { className: "tcw-settings-content", children: [active === 'RISK' && _jsx(RiskSection, { value: data.risk.content, revision: data.risk.revision, busy: busy, onSave: content => run(() => onSave({ settingsType: 'risk', expectedRevision: data.risk.revision, values: { content } }), '风险提示保存成功'), onRestore: () => setRestore({ settingsType: 'risk', expectedRevision: data.risk.revision }) }), active === 'COMPANY' && _jsx(CompanySection, { value: data.company, busy: busy, onSave: async (values) => { try {
|
|
59
|
+
await onSave({ settingsType: 'company', expectedRevision: data.company.revision, values });
|
|
60
|
+
setFeedback({ message: '企业信息保存成功', tone: 'success' });
|
|
61
|
+
return true;
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
setFeedback({ message: error instanceof Error ? `保存失败:${error.message}` : '保存失败,请稍后重试', tone: 'error' });
|
|
65
|
+
return false;
|
|
66
|
+
} }, onUploadLogo: onUploadLogo, onDiscardLogo: onDiscardLogo, onRestore: () => setRestore({ settingsType: 'company', expectedRevision: data.company.revision }) }), active === 'BANK' && _jsx(BankOverviewSection, { data: data, busy: busy, onEdit: bankType => setActive(bankEditSection(bankType)), onRestore: bankType => { const bank = bankOf(data, bankType); setRestore({ settingsType: 'bank', bankType, expectedRevision: bank.revision }); } }), active === 'BANK_CNY' && _jsx(BankSection, { bankType: "OVERSEAS_CNY", value: bankOf(data, 'OVERSEAS_CNY'), busy: busy, onSave: values => run(() => onSave({ settingsType: 'bank', expectedRevision: bankOf(data, 'OVERSEAS_CNY').revision, values }), '人民币收款银行保存成功'), onRestore: () => setRestore({ settingsType: 'bank', bankType: 'OVERSEAS_CNY', expectedRevision: bankOf(data, 'OVERSEAS_CNY').revision }), onBack: () => setActive('BANK') }), active === 'BANK_USD' && _jsx(BankSection, { bankType: "OVERSEAS_USD", value: bankOf(data, 'OVERSEAS_USD'), busy: busy, onSave: values => run(() => onSave({ settingsType: 'bank', expectedRevision: bankOf(data, 'OVERSEAS_USD').revision, values }), '美元收款银行保存成功'), onRestore: () => setRestore({ settingsType: 'bank', bankType: 'OVERSEAS_USD', expectedRevision: bankOf(data, 'OVERSEAS_USD').revision }), onBack: () => setActive('BANK') }), active === 'PROFIT' && _jsx(ProfitSection, { value: data.profit, busy: busy, onSave: values => run(() => onSave({ settingsType: 'profit', expectedRevision: data.profit.revision, values }), '利润与换汇规则保存成功'), onRestore: () => setRestore({ settingsType: 'profit', expectedRevision: data.profit.revision }) }), active === 'MONTHLY_RATE' && _jsx(MonthlyRateSection, { rates: data.rates, busy: busy, onSave: values => run(() => onSave({ settingsType: 'rate', expectedRevision: values.revision ?? 0, values }), '月度美元汇率保存成功'), onDelete: request => run(() => onDeleteRate(request), '月度美元汇率删除成功') })] }), _jsx(ConfirmDialog, { open: Boolean(restore), title: "\u6062\u590D\u7CFB\u7EDF\u9ED8\u8BA4", message: "\u5F53\u524D\u81EA\u5B9A\u4E49\u5185\u5BB9\u5C06\u88AB\u7CFB\u7EDF\u9ED8\u8BA4\u503C\u8986\u76D6\uFF0C\u539F\u914D\u7F6E\u4ECD\u4F1A\u4FDD\u7559\u5728\u8BBE\u7F6E\u5386\u53F2\u4E2D\u3002", confirmText: "\u786E\u8BA4\u6062\u590D\u9ED8\u8BA4", onCancel: () => setRestore(null), onConfirm: () => void confirmRestore() }), feedback && _jsx(Toast, { message: feedback.message, tone: feedback.tone, onClose: () => setFeedback(null) })] });
|
|
67
|
+
}
|
|
68
|
+
function RiskSection({ value, revision, busy, onSave, onRestore }) {
|
|
69
|
+
const editorRef = React.useRef(null);
|
|
70
|
+
return _jsxs(SettingsPanel, { title: "\u98CE\u9669\u63D0\u793A", revision: revision, actions: _jsxs(_Fragment, { children: [_jsxs("button", { type: "button", className: "tcw-button tcw-button--primary", disabled: busy, onClick: () => onSave(sanitizeRiskNoticeHtml(editorRef.current?.innerHTML ?? value)), children: [_jsx("i", { className: "ri-save-line" }), "\u4FDD\u5B58"] }), _jsx(RestoreButton, { busy: busy, onClick: onRestore })] }), children: [_jsx(InfoNotice, { children: "\u4EC5\u652F\u6301\u6807\u9898\u3001\u6BB5\u843D\u3001\u52A0\u7C97\u548C\u5217\u8868\u683C\u5F0F\u3002" }), _jsxs("div", { className: "tcw-rich-toolbar", role: "toolbar", "aria-label": "\u98CE\u9669\u63D0\u793A\u683C\u5F0F", children: [_jsx(FormatButton, { title: "\u6807\u9898", icon: "ri-heading", command: "formatBlock", value: "h2" }), _jsx(FormatButton, { title: "\u6BB5\u843D", icon: "ri-paragraph", command: "formatBlock", value: "p" }), _jsx(FormatButton, { title: "\u52A0\u7C97", icon: "ri-bold", command: "bold" }), _jsx(FormatButton, { title: "\u65E0\u5E8F\u5217\u8868", icon: "ri-list-unordered", command: "insertUnorderedList" }), _jsx(FormatButton, { title: "\u6709\u5E8F\u5217\u8868", icon: "ri-list-ordered", command: "insertOrderedList" })] }), _jsx("div", { ref: editorRef, className: "tcw-risk-editor", contentEditable: true, suppressContentEditableWarning: true, dangerouslySetInnerHTML: { __html: sanitizeRiskNoticeHtml(value) } }, revision)] });
|
|
71
|
+
}
|
|
72
|
+
function FormatButton({ title, icon, command, value }) {
|
|
73
|
+
return _jsx("button", { type: "button", className: "tcw-icon-button", title: title, "aria-label": title, onMouseDown: event => { event.preventDefault(); if (typeof document !== 'undefined')
|
|
74
|
+
document.execCommand(command, false, value); }, children: _jsx("i", { className: icon, "aria-hidden": "true" }) });
|
|
75
|
+
}
|
|
76
|
+
function CompanySection({ value, busy, onSave, onUploadLogo, onDiscardLogo, onRestore }) {
|
|
77
|
+
const [form, setForm] = React.useState(value);
|
|
78
|
+
const [uploadError, setUploadError] = React.useState(null);
|
|
79
|
+
const draftLogoRef = React.useRef(null);
|
|
80
|
+
const revisionRef = React.useRef(value.revision);
|
|
81
|
+
React.useEffect(() => {
|
|
82
|
+
if (revisionRef.current !== value.revision) {
|
|
83
|
+
revisionRef.current = value.revision;
|
|
84
|
+
const draft = draftLogoRef.current;
|
|
85
|
+
draftLogoRef.current = null;
|
|
86
|
+
if (draft)
|
|
87
|
+
void Promise.resolve(onDiscardLogo(draft)).catch(() => undefined);
|
|
88
|
+
}
|
|
89
|
+
setForm(current => reconcileRevisionedSettings(current, value));
|
|
90
|
+
}, [value, onDiscardLogo]);
|
|
91
|
+
React.useEffect(() => () => { if (draftLogoRef.current)
|
|
92
|
+
void Promise.resolve(onDiscardLogo(draftLogoRef.current)).catch(() => undefined); }, [onDiscardLogo]);
|
|
93
|
+
const uploadLogo = async (file) => {
|
|
94
|
+
setUploadError(null);
|
|
95
|
+
try {
|
|
96
|
+
const logoFileId = await onUploadLogo(file);
|
|
97
|
+
const previous = draftLogoRef.current;
|
|
98
|
+
draftLogoRef.current = logoFileId;
|
|
99
|
+
if (previous && previous !== logoFileId)
|
|
100
|
+
void Promise.resolve(onDiscardLogo(previous)).catch(() => undefined);
|
|
101
|
+
setForm(current => ({ ...current, logoFileId }));
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
setUploadError(error instanceof Error ? error.message : '公司 Logo 上传失败');
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
const save = async () => {
|
|
108
|
+
const draft = draftLogoRef.current;
|
|
109
|
+
const { revision: _, ...values } = form;
|
|
110
|
+
if (await onSave(values) && draftLogoRef.current === draft)
|
|
111
|
+
draftLogoRef.current = null;
|
|
112
|
+
};
|
|
113
|
+
const field = (key) => ({ value: String(form[key] ?? ''), onChange: (event) => setForm(current => ({ ...current, [key]: event.target.value || null })) });
|
|
114
|
+
return _jsxs(SettingsPanel, { title: "\u4F01\u4E1A\u4FE1\u606F", revision: value.revision, actions: _jsxs(_Fragment, { children: [_jsxs("button", { type: "button", className: "tcw-button tcw-button--primary", disabled: busy, onClick: () => void save(), children: [_jsx("i", { className: "ri-save-line" }), "\u4FDD\u5B58"] }), _jsx(RestoreButton, { busy: busy, onClick: onRestore })] }), children: [_jsx(InfoNotice, { children: "\u4F01\u4E1A\u914D\u7F6E\u5141\u8BB8\u4FDD\u7559\u7A7A\u503C\uFF1B\u751F\u6210\u6587\u4EF6\u65F6\u7F3A\u5931\u5B57\u6BB5\u4FDD\u7559\u6A21\u677F\u9ED8\u8BA4\u503C\u3002" }), _jsxs(FieldGrid, { columns: 2, children: [_jsxs(FormField, { label: "\u516C\u53F8 Logo", full: true, hint: form.logoFileId ? `已上传:${form.logoFileId}` : '支持 PNG、JPG/JPEG,最大 2 MB', children: [_jsx("input", { type: "file", accept: "image/png,image/jpeg", disabled: busy, onChange: event => { const file = event.target.files?.[0]; event.currentTarget.value = ''; if (file)
|
|
115
|
+
void uploadLogo(file); } }), uploadError && _jsx("small", { className: "tcw-field-error", children: uploadError })] }), _jsx(FormField, { label: "\u516C\u53F8\u4E2D\u6587\u540D\u79F0", children: _jsx("input", { ...field('companyNameZh') }) }), _jsx(FormField, { label: "\u516C\u53F8\u82F1\u6587\u540D\u79F0", children: _jsx("input", { ...field('companyNameEn') }) }), _jsx(FormField, { label: "\u7EDF\u4E00\u793E\u4F1A\u4FE1\u7528\u4EE3\u7801", children: _jsx("input", { ...field('unifiedSocialCreditCode') }) }), _jsx(FormField, { label: "\u7535\u8BDD", children: _jsx("input", { ...field('phone') }) }), _jsx(FormField, { label: "\u4E2D\u6587\u5730\u5740", full: true, children: _jsx("textarea", { ...field('addressZh') }) }), _jsx(FormField, { label: "\u82F1\u6587\u5730\u5740", full: true, children: _jsx("textarea", { ...field('addressEn') }) }), _jsx(FormField, { label: "\u90AE\u7BB1", children: _jsx("input", { type: "email", ...field('email') }) })] })] });
|
|
116
|
+
}
|
|
117
|
+
function BankOverviewSection({ data, busy, onEdit, onRestore }) {
|
|
118
|
+
return _jsx(SettingsPanel, { title: "\u94F6\u884C\u4FE1\u606F", actions: null, children: bankTypes.map(bankType => {
|
|
119
|
+
const bank = bankOf(data, bankType);
|
|
120
|
+
return _jsxs("section", { className: "tcw-settings-panel", "aria-labelledby": `bank-overview-${bankType}`, children: [_jsxs("header", { children: [_jsxs("div", { children: [_jsx("h2", { id: `bank-overview-${bankType}`, children: bankTitle(bankType) }), _jsx("span", { className: "tcw-tag", children: bankType }), _jsxs("small", { children: ["\u4FEE\u8BA2\u53F7 ", bank.revision] })] }), _jsxs("div", { className: "tcw-page-commands", children: [_jsxs("button", { type: "button", className: "tcw-button tcw-button--primary", disabled: busy, onClick: () => onEdit(bankType), children: [_jsx("i", { className: "ri-edit-line", "aria-hidden": "true" }), "\u7F16\u8F91"] }), _jsx(RestoreButton, { busy: busy, onClick: () => onRestore(bankType) })] })] }), _jsx(FieldGrid, { columns: 2, children: bankFields.map(item => _jsx(FormField, { label: item.label, full: item.key === 'bankAddress', children: _jsx("input", { value: bank[item.key], readOnly: true }) }, item.key)) })] }, bankType);
|
|
121
|
+
}) });
|
|
122
|
+
}
|
|
123
|
+
function BankSection({ bankType, value, busy, onSave, onRestore, onBack }) {
|
|
124
|
+
const [form, setForm] = React.useState(value);
|
|
125
|
+
const [error, setError] = React.useState(null);
|
|
126
|
+
React.useEffect(() => setForm(current => reconcileRevisionedSettings(current, value)), [value]);
|
|
127
|
+
const update = (key, next) => setForm(current => ({ ...current, [key]: next }));
|
|
128
|
+
const save = () => { const message = validateBankSettings(form); setError(message); if (!message) {
|
|
129
|
+
const { revision: _, ...values } = form;
|
|
130
|
+
onSave(values);
|
|
131
|
+
} };
|
|
132
|
+
return _jsxs(SettingsPanel, { title: bankTitle(bankType), revision: value.revision, badge: bankType, actions: _jsxs(_Fragment, { children: [_jsxs("button", { type: "button", className: "tcw-button tcw-button--secondary", onClick: onBack, children: [_jsx("i", { className: "ri-arrow-left-line", "aria-hidden": "true" }), "\u8FD4\u56DE\u94F6\u884C\u603B\u89C8"] }), _jsxs("button", { type: "button", className: "tcw-button tcw-button--primary", disabled: busy, onClick: save, children: [_jsx("i", { className: "ri-save-line" }), "\u4FDD\u5B58"] }), _jsx(RestoreButton, { busy: busy, onClick: onRestore })] }), children: [error && _jsx(RiskNotice, { children: error }), _jsx(FieldGrid, { columns: 2, children: bankFields.map(item => _jsx(FormField, { label: item.label, required: true, full: item.key === 'bankAddress', children: _jsx("input", { value: form[item.key], onChange: event => update(item.key, event.target.value) }) }, item.key)) })] });
|
|
133
|
+
}
|
|
134
|
+
const bankFields = [
|
|
135
|
+
{ key: 'beneficiary', label: 'Beneficiary(收款人)' }, { key: 'bankName', label: 'Bank Name(银行名称)' }, { key: 'bankAddress', label: 'Bank Address(银行地址)' },
|
|
136
|
+
{ key: 'cnapsCode', label: 'CNAPS Code' }, { key: 'accountNo', label: 'Account No.(账号)' }, { key: 'swiftCode', label: 'SWIFT Code' }
|
|
137
|
+
];
|
|
138
|
+
const bankTypes = ['OVERSEAS_CNY', 'OVERSEAS_USD'];
|
|
139
|
+
function bankTitle(bankType) {
|
|
140
|
+
switch (bankType) {
|
|
141
|
+
case 'OVERSEAS_CNY': return '国外收款银行(人民币)';
|
|
142
|
+
case 'OVERSEAS_USD': return '国外收款银行(美元)';
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
function bankEditSection(bankType) {
|
|
146
|
+
switch (bankType) {
|
|
147
|
+
case 'OVERSEAS_CNY': return 'BANK_CNY';
|
|
148
|
+
case 'OVERSEAS_USD': return 'BANK_USD';
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
function ProfitSection({ value, busy, onSave, onRestore }) {
|
|
152
|
+
const [form, setForm] = React.useState(value);
|
|
153
|
+
const [error, setError] = React.useState(null);
|
|
154
|
+
React.useEffect(() => setForm(current => reconcileRevisionedSettings(current, value)), [value]);
|
|
155
|
+
const save = () => { const message = validateProfitRule(form); setError(message); if (!message)
|
|
156
|
+
onSave(form); };
|
|
157
|
+
return _jsxs(SettingsPanel, { title: "\u5229\u6DA6\u4E0E\u6362\u6C47\u89C4\u5219", revision: value.revision, actions: _jsxs(_Fragment, { children: [_jsxs("button", { type: "button", className: "tcw-button tcw-button--primary", disabled: busy, onClick: save, children: [_jsx("i", { className: "ri-save-line" }), "\u4FDD\u5B58"] }), _jsx(RestoreButton, { busy: busy, onClick: onRestore })] }), children: [_jsx(InfoNotice, { children: "\u5408\u89C4\u5229\u6DA6\u516C\u5F0F\u56FA\u5B9A\uFF0C\u4E0D\u53EF\u7F16\u8F91\uFF1B\u6708\u5EA6\u7F8E\u5143\u6C47\u7387\u4EC5\u7528\u4E8E\u6362\u6C47\u6210\u672C\uFF0C\u4E0D\u7528\u4E8E\u4E1A\u52A1\u91D1\u989D\u5E01\u79CD\u8F6C\u6362\u3002" }), error && _jsx(RiskNotice, { children: error }), _jsxs(FieldGrid, { columns: 2, children: [_jsx(FormField, { label: "\u914D\u7F6E\u72B6\u6001", required: true, children: _jsxs("select", { value: form.status, onChange: event => setForm(current => ({ ...current, status: event.target.value })), children: [_jsx("option", { value: "ACTIVE", children: "ACTIVE" }), _jsx("option", { value: "UNCONFIGURED", children: "UNCONFIGURED" })] }) }), _jsx(FormField, { label: "\u56FA\u5B9A\u516C\u5F0F\u7248\u672C", children: _jsx("input", { value: form.ruleVersion, readOnly: true }) }), _jsx(FormField, { label: "\u6700\u4F4E\u6574\u5355\u5229\u6DA6\u7387", required: true, hint: "\u5C0F\u6570 0.05 \u8868\u793A 5%", children: _jsx("input", { type: "number", min: "0", step: "0.0001", value: form.minimumOrderProfitRate, onChange: event => setForm(current => ({ ...current, minimumOrderProfitRate: event.target.value })) }) }), _jsx(FormField, { label: "\u6362\u6C47\u6210\u672C\u4E0B\u9650", required: true, children: _jsx("input", { type: "number", step: "0.01", value: form.exchangeCostMinimum, onChange: event => setForm(current => ({ ...current, exchangeCostMinimum: event.target.value })) }) }), _jsx(FormField, { label: "\u6362\u6C47\u6210\u672C\u4E0A\u9650", required: true, children: _jsx("input", { type: "number", step: "0.01", value: form.exchangeCostMaximum, onChange: event => setForm(current => ({ ...current, exchangeCostMaximum: event.target.value })) }) })] })] });
|
|
158
|
+
}
|
|
159
|
+
function MonthlyRateSection({ rates, busy, onSave, onDelete }) {
|
|
160
|
+
const [editing, setEditing] = React.useState(null);
|
|
161
|
+
const [deleting, setDeleting] = React.useState(null);
|
|
162
|
+
const completeDelete = (confirmed) => {
|
|
163
|
+
if (!deleting)
|
|
164
|
+
return;
|
|
165
|
+
const request = deleting;
|
|
166
|
+
setDeleting(null);
|
|
167
|
+
void completeRateDeletion(request, confirmed, onDelete);
|
|
168
|
+
};
|
|
169
|
+
const columns = [
|
|
170
|
+
{ type: 'text', key: 'year', header: '年份', width: 100 }, { type: 'text', key: 'month', header: '月份', width: 90 },
|
|
171
|
+
{ type: 'text', key: 'currencyCode', header: '币种', width: 90 }, { type: 'text', key: 'usdToCnyRate', header: '美元兑人民币汇率', width: 180 },
|
|
172
|
+
{ type: 'ellipsis', key: 'sourceReference', header: '来源', width: 220, maxWidth: 220 }, { type: 'text', key: 'revision', header: '修订号', width: 100 }
|
|
173
|
+
];
|
|
174
|
+
return _jsxs(SettingsPanel, { title: "\u6708\u5EA6\u7F8E\u5143\u6C47\u7387", actions: _jsxs("button", { type: "button", className: "tcw-button tcw-button--primary", disabled: busy, onClick: () => setEditing(defaultRate()), children: [_jsx("i", { className: "ri-add-line" }), "\u65B0\u589E\u6708\u5EA6\u6C47\u7387"] }), children: [_jsx(InfoNotice, { children: "\u6BCF\u4E2A\u81EA\u7136\u6708\u4E00\u6761 USD \u4EBA\u5DE5\u6C47\u7387\uFF0C\u65B9\u5411\u56FA\u5B9A\u4E3A 1 \u7F8E\u5143\u5151\u6362\u4EBA\u6C11\u5E01\u3002" }), _jsx(DataGrid, { columns: columns, rows: rates, rowKey: row => row.id ?? `${row.year}-${row.month}`, emptyText: "\u6682\u65E0\u6708\u5EA6\u6C47\u7387", actionWidth: 120, actions: row => _jsxs(_Fragment, { children: [_jsx("button", { type: "button", onClick: () => setEditing(row), children: "\u7F16\u8F91" }), row.id && _jsx("button", { type: "button", className: "is-danger", onClick: () => setDeleting({ settingsType: 'rate', id: row.id, expectedRevision: row.revision ?? 0 }), children: "\u5220\u9664" })] }) }), editing && _jsx(RateDialog, { value: editing, busy: busy, onClose: () => setEditing(null), onSave: value => { onSave(value); setEditing(null); } }), _jsx(ConfirmDialog, { open: Boolean(deleting), title: "\u5220\u9664\u6708\u5EA6\u6C47\u7387", message: "\u5220\u9664\u540E\uFF0C\u8BE5\u6708\u6C47\u7387\u5C06\u4E0D\u518D\u7528\u4E8E\u6362\u6C47\u6210\u672C\u8BA1\u7B97\u3002\u786E\u8BA4\u5220\u9664\u8FD9\u6761\u6708\u5EA6\u6C47\u7387\u5417\uFF1F", confirmText: "\u786E\u8BA4\u5220\u9664", danger: true, confirmDisabled: busy, onCancel: () => completeDelete(false), onConfirm: () => completeDelete(true) })] });
|
|
175
|
+
}
|
|
176
|
+
function RateDialog({ value, busy, onClose, onSave }) {
|
|
177
|
+
const [form, setForm] = React.useState(value);
|
|
178
|
+
const [error, setError] = React.useState(null);
|
|
179
|
+
const save = () => { const message = validateMonthlyRate(form); setError(message); if (!message)
|
|
180
|
+
onSave({ ...form, sourceType: 'MANUAL', currencyCode: 'USD' }); };
|
|
181
|
+
return _jsxs(Modal, { open: true, title: form.id ? '编辑月度汇率' : '新增月度汇率', onClose: onClose, footer: _jsxs(_Fragment, { children: [_jsx("button", { type: "button", className: "tcw-button tcw-button--secondary", onClick: onClose, children: "\u53D6\u6D88" }), _jsx("button", { type: "button", className: "tcw-button tcw-button--primary", disabled: busy, onClick: save, children: "\u4FDD\u5B58" })] }), children: [error && _jsx(RiskNotice, { children: error }), _jsxs(FieldGrid, { columns: 2, children: [_jsx(FormField, { label: "\u5E74\u4EFD", required: true, children: _jsx("input", { type: "number", min: "2000", max: "9999", value: form.year, onChange: event => setForm(current => ({ ...current, year: Number(event.target.value) })) }) }), _jsx(FormField, { label: "\u6708\u4EFD", required: true, children: _jsx("input", { type: "number", min: "1", max: "12", value: form.month, onChange: event => setForm(current => ({ ...current, month: Number(event.target.value) })) }) }), _jsx(FormField, { label: "\u5E01\u79CD", children: _jsx("input", { value: "USD", readOnly: true }) }), _jsx(FormField, { label: "\u6765\u6E90", children: _jsx("input", { value: "\u4EBA\u5DE5\u6C47\u7387", readOnly: true }) }), _jsx(FormField, { label: "\u7F8E\u5143\u5151\u4EBA\u6C11\u5E01\u6C47\u7387", required: true, children: _jsx("input", { type: "number", min: "0", step: "0.00000001", value: form.usdToCnyRate, onChange: event => setForm(current => ({ ...current, usdToCnyRate: event.target.value })) }) }), _jsx(FormField, { label: "\u6765\u6E90\u8BF4\u660E", required: true, children: _jsx("input", { value: form.sourceReference, onChange: event => setForm(current => ({ ...current, sourceReference: event.target.value })) }) })] })] });
|
|
182
|
+
}
|
|
183
|
+
function SettingsPanel({ title, revision, badge, actions, children }) {
|
|
184
|
+
return _jsxs("section", { className: "tcw-settings-panel", children: [_jsxs("header", { children: [_jsxs("div", { children: [_jsx("h2", { children: title }), badge && _jsx("span", { className: "tcw-tag", children: badge }), revision != null && _jsxs("small", { children: ["\u4FEE\u8BA2\u53F7 ", revision] })] }), _jsx("div", { className: "tcw-page-commands", children: actions })] }), children] });
|
|
185
|
+
}
|
|
186
|
+
function RestoreButton({ busy, onClick }) { return _jsxs("button", { type: "button", className: "tcw-button tcw-button--secondary", disabled: busy, onClick: onClick, children: [_jsx("i", { className: "ri-restart-line" }), "\u6062\u590D\u7CFB\u7EDF\u9ED8\u8BA4"] }); }
|
|
187
|
+
function bankOf(data, bankType) { return data.banks.find(item => item.bankType === bankType) ?? { bankType, beneficiary: '', bankName: '', bankAddress: '', cnapsCode: '', accountNo: '', swiftCode: '', revision: 0 }; }
|
|
188
|
+
function defaultRate() { const now = new Date(); return { year: now.getFullYear(), month: now.getMonth() + 1, currencyCode: 'USD', usdToCnyRate: '', sourceType: 'MANUAL', sourceReference: '人工汇率' }; }
|
|
189
|
+
export function validateBankSettings(value) {
|
|
190
|
+
for (const field of bankFields)
|
|
191
|
+
if (!value[field.key].trim())
|
|
192
|
+
return `${field.label.split('(')[0]} 为必填项`;
|
|
193
|
+
return null;
|
|
194
|
+
}
|
|
195
|
+
export function validateMonthlyRate(value) {
|
|
196
|
+
if (!Number.isInteger(value.year) || value.year < 2000 || value.year > 9999)
|
|
197
|
+
return '年份必须是 2000 至 9999 之间的整数';
|
|
198
|
+
if (!Number.isInteger(value.month) || value.month < 1 || value.month > 12)
|
|
199
|
+
return '月份必须是 1 至 12 之间的整数';
|
|
200
|
+
const rate = Number(value.usdToCnyRate);
|
|
201
|
+
if (!Number.isFinite(rate))
|
|
202
|
+
return '美元兑人民币汇率必须是有限数值';
|
|
203
|
+
if (rate <= 0)
|
|
204
|
+
return '美元兑人民币汇率必须大于 0';
|
|
205
|
+
if (value.sourceType !== 'MANUAL')
|
|
206
|
+
return '汇率来源必须为人工汇率';
|
|
207
|
+
if (!value.sourceReference.trim())
|
|
208
|
+
return '来源说明为必填项';
|
|
209
|
+
return null;
|
|
210
|
+
}
|
|
211
|
+
function validateProfitRule(value) {
|
|
212
|
+
const rate = Number(value.minimumOrderProfitRate), minimum = Number(value.exchangeCostMinimum), maximum = Number(value.exchangeCostMaximum);
|
|
213
|
+
if (![rate, minimum, maximum].every(Number.isFinite))
|
|
214
|
+
return '利润率和换汇成本必须是有限数值';
|
|
215
|
+
if (rate < 0)
|
|
216
|
+
return '最低整单利润率不能小于 0';
|
|
217
|
+
if (minimum > maximum)
|
|
218
|
+
return '换汇成本下限不能大于上限';
|
|
219
|
+
return null;
|
|
220
|
+
}
|
|
221
|
+
const allowedRichTags = new Set(['H1', 'H2', 'H3', 'H4', 'P', 'STRONG', 'B', 'UL', 'OL', 'LI', 'BR']);
|
|
222
|
+
export function sanitizeRiskNoticeHtml(html) {
|
|
223
|
+
if (typeof DOMParser === 'undefined')
|
|
224
|
+
return sanitizeWithoutDom(html);
|
|
225
|
+
const document = new DOMParser().parseFromString(html, 'text/html');
|
|
226
|
+
return Array.from(document.body.childNodes).map(sanitizeNode).join('');
|
|
227
|
+
}
|
|
228
|
+
function sanitizeNode(node) {
|
|
229
|
+
if (node.nodeType === 3)
|
|
230
|
+
return escapeHtml(node.textContent ?? '');
|
|
231
|
+
if (!(node instanceof Element))
|
|
232
|
+
return '';
|
|
233
|
+
const tag = node.tagName.toUpperCase();
|
|
234
|
+
if (tag === 'SCRIPT' || tag === 'STYLE' || tag === 'IMG' || tag === 'TABLE')
|
|
235
|
+
return tag === 'TABLE' ? Array.from(node.childNodes).map(sanitizeNode).join('') : '';
|
|
236
|
+
const children = Array.from(node.childNodes).map(sanitizeNode).join('');
|
|
237
|
+
if (!allowedRichTags.has(tag))
|
|
238
|
+
return children;
|
|
239
|
+
const normalized = tag === 'B' ? 'strong' : tag.toLowerCase();
|
|
240
|
+
return normalized === 'br' ? '<br>' : `<${normalized}>${children}</${normalized}>`;
|
|
241
|
+
}
|
|
242
|
+
function sanitizeWithoutDom(html) {
|
|
243
|
+
const withoutUnsafeContent = html.replace(/<(script|style)[^>]*>[\s\S]*?<\/\1\s*>/gi, '').replace(/<img\b[^>]*>/gi, '');
|
|
244
|
+
return withoutUnsafeContent.split(/(<[^>]+>)/g).map(token => {
|
|
245
|
+
if (!token.startsWith('<'))
|
|
246
|
+
return escapeHtml(token);
|
|
247
|
+
const match = token.match(/^<\s*(\/?)\s*([a-z0-9]+)[^>]*>/i);
|
|
248
|
+
if (!match)
|
|
249
|
+
return '';
|
|
250
|
+
const closing = Boolean(match[1]);
|
|
251
|
+
const tag = match[2].toUpperCase();
|
|
252
|
+
if (!allowedRichTags.has(tag))
|
|
253
|
+
return '';
|
|
254
|
+
const normalized = tag === 'B' ? 'strong' : tag.toLowerCase();
|
|
255
|
+
return normalized === 'br' ? '<br>' : `<${closing ? '/' : ''}${normalized}>`;
|
|
256
|
+
}).join('');
|
|
257
|
+
}
|
|
258
|
+
function escapeHtml(value) { return value.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"').replace(/'/g, '''); }
|
|
259
|
+
//# sourceMappingURL=settings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../../../../src/lib/remote-ui/pages/settings.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAC7E,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAY1F,MAAM,UAAU,uBAAuB,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE,YAAY,EAA2E;IACzJ,OAAO;QACL,QAAQ,EAAE,CAAC,OAAe,EAAE,QAAgB,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC;QAClI,WAAW,EAAE,CAAC,KAAsB,EAAE,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,OAAO,MAAM,CAAC,EAAE,YAAY,EAAE,SAAS,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAA,CAAC,CAAC;QAClK,QAAQ,EAAE,CAAC,KAAmB,EAAE,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,OAAO,MAAM,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAA,CAAC,CAAC;QACzJ,UAAU,EAAE,CAAC,KAAyB,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,YAAY,EAAE,QAAQ,EAAE,gBAAgB,EAAE,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,sBAAsB,EAAE,KAAK,CAAC,sBAAsB,EAAE,mBAAmB,EAAE,KAAK,CAAC,mBAAmB,EAAE,mBAAmB,EAAE,KAAK,CAAC,mBAAmB,EAAE,EAAE,CAAC;QACvS,QAAQ,EAAE,CAAC,MAA2B,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,CAAC,QAAQ,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,CAAC;QACrL,WAAW,EAAE,CAAC,QAAgB,EAAE,EAAE,CAAC,gBAAgB,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,CAAC;QACzG,cAAc,EAAE,CAAC,QAAgB,EAAE,EAAE,CAAC,gBAAgB,CAAC,EAAE,YAAY,EAAE,SAAS,EAAE,gBAAgB,EAAE,QAAQ,EAAE,CAAC;QAC/G,WAAW,EAAE,CAAC,KAAmB,EAAE,EAAE,CAAC,gBAAgB,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,gBAAgB,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC5I,aAAa,EAAE,CAAC,QAAgB,EAAE,EAAE,CAAC,gBAAgB,CAAC,EAAE,YAAY,EAAE,QAAQ,EAAE,gBAAgB,EAAE,QAAQ,EAAE,CAAC;QAC7G,UAAU,EAAE,CAAC,KAA0B,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,EAAE,gBAAgB,EAAE,KAAK,CAAC,QAAQ,IAAI,CAAC,EAAE,CAAC;KAC9I,CAAA;AACH,CAAC;AAED,MAAM,UAAU,8BAA8B,CAAiC,YAAiC,EAAE,aAA2C,EAAE,MAAS,EAAE,IAAO;IAC/K,MAAM,aAAa,GAAG,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAA;IACzC,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,MAAM,EAAE,CAAgB,CAAA;IAClE,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAgB,CAAA;IACxF,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,CAAC,QAAQ,EAAE,aAAa,EAAE,cAAc,EAAE,aAAa,EAAE,CAAC,CAAA;AAC7J,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAiC,KAAQ,EAAE,QAAW;IAC/F,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAA;AAChE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,OAAkC,EAAE,SAAkB,EAAE,QAAsE;IACvK,IAAI,SAAS;QAAE,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAA;AACxC,CAAC;AAID,MAAM,YAAY,GAAoF;IACpG,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,uBAAuB,EAAE;IAC7D,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,EAAE;IAC3D,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,6BAA6B,EAAE;IACzF,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,2BAA2B,EAAE;IAC7F,EAAE,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,yBAAyB,EAAE;CAC1E,CAAA;AAED,MAAM,UAAU,YAAY,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,gBAAgB,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAqB;IACjI,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAsB,MAAM,CAAC,CAAA;IACvE,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAgC,IAAI,CAAC,CAAA;IACjF,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAwD,IAAI,CAAC,CAAA;IAC3G,MAAM,GAAG,GAAG,KAAK,EAAE,SAAqC,EAAE,cAAsB,EAAE,EAAE;QAClF,IAAI,CAAC;YAAC,MAAM,SAAS,EAAE,CAAC;YAAC,WAAW,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAA;QAAC,CAAC;QACpF,OAAO,KAAK,EAAE,CAAC;YAAC,WAAW,CAAC,EAAE,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,YAAY,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;QAAC,CAAC;IAC5H,CAAC,CAAA;IACD,MAAM,cAAc,GAAG,KAAK,IAAI,EAAE;QAChC,IAAI,CAAC,OAAO;YAAE,OAAM;QACpB,MAAM,GAAG,CAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC,CAAA;QACvD,UAAU,CAAC,IAAI,CAAC,CAAA;IAClB,CAAC,CAAA;IAED,OAAO,mBAAS,SAAS,EAAC,mBAAmB,wBAAoB,OAAO,aACtE,gBAAO,SAAS,EAAC,yBAAyB,gBAAY,0BAAM,YACzD,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,kBAAuB,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,kBAAgB,MAAM,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,aAAE,YAAG,SAAS,EAAE,IAAI,CAAC,IAAI,iBAAc,MAAM,GAAG,EAAA,2BAAO,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,IAAI,0BAAQ,IAAI,CAAC,IAAI,GAAS,IAAQ,KAAvR,IAAI,CAAC,GAAG,CAAwR,CAAC,GAClU,EACR,eAAK,SAAS,EAAC,sBAAsB,aAClC,MAAM,KAAK,MAAM,IAAI,KAAC,WAAW,IAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,gBAAgB,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,gBAAgB,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAI,EAC5U,MAAM,KAAK,SAAS,IAAI,KAAC,cAAc,IAAC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAC,MAAM,EAAC,EAAE,GAAG,IAAI,CAAC;4BAAC,MAAM,MAAM,CAAC,EAAE,YAAY,EAAE,SAAS,EAAE,gBAAgB,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;4BAAC,WAAW,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;4BAAC,OAAO,IAAI,CAAA;wBAAC,CAAC;wBAAC,OAAO,KAAK,EAAE,CAAC;4BAAC,WAAW,CAAC,EAAE,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,YAAY,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;4BAAC,OAAO,KAAK,CAAA;wBAAC,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,EAAE,YAAY,EAAE,SAAS,EAAE,gBAAgB,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,GAAI,EACrjB,MAAM,KAAK,MAAM,IAAI,KAAC,mBAAmB,IAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,SAAS,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,GAAG,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAA,CAAC,CAAC,GAAI,EAC/Q,MAAM,KAAK,UAAU,IAAI,KAAC,WAAW,IAAC,QAAQ,EAAC,cAAc,EAAC,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,cAAc,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,EAAE,aAAa,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,GAAI,EAC3a,MAAM,KAAK,UAAU,IAAI,KAAC,WAAW,IAAC,QAAQ,EAAC,cAAc,EAAC,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,cAAc,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,EAAE,YAAY,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,GAAI,EAC1a,MAAM,KAAK,QAAQ,IAAI,KAAC,aAAa,IAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE,YAAY,EAAE,QAAQ,EAAE,gBAAgB,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,EAAE,aAAa,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,EAAE,YAAY,EAAE,QAAQ,EAAE,gBAAgB,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,GAAI,EACzS,MAAM,KAAK,cAAc,IAAI,KAAC,kBAAkB,IAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,CAAC,QAAQ,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,YAAY,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC,GAAI,IACjR,EACN,KAAC,aAAa,IAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,KAAK,EAAC,sCAAQ,EAAC,OAAO,EAAC,4LAAiC,EAAC,WAAW,EAAC,sCAAQ,EAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,KAAK,cAAc,EAAE,GAAI,EAChM,QAAQ,IAAI,KAAC,KAAK,IAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,GAAI,IAChG,CAAA;AACZ,CAAC;AAED,SAAS,WAAW,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAgH;IAC7K,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAiB,IAAI,CAAC,CAAA;IACpD,OAAO,MAAC,aAAa,IAAC,KAAK,EAAC,0BAAM,EAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,8BAAE,kBAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,gCAAgC,EAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,sBAAsB,CAAC,SAAS,CAAC,OAAO,EAAE,SAAS,IAAI,KAAK,CAAC,CAAC,aAAE,YAAG,SAAS,EAAC,cAAc,GAAG,oBAAW,EAAA,KAAC,aAAa,IAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,GAAI,IAAG,aACpU,KAAC,UAAU,yHAA+B,EAC1C,eAAK,SAAS,EAAC,kBAAkB,EAAC,IAAI,EAAC,SAAS,gBAAY,sCAAQ,aAClE,KAAC,YAAY,IAAC,KAAK,EAAC,cAAI,EAAC,IAAI,EAAC,YAAY,EAAC,OAAO,EAAC,aAAa,EAAC,KAAK,EAAC,IAAI,GAAG,EAC9E,KAAC,YAAY,IAAC,KAAK,EAAC,cAAI,EAAC,IAAI,EAAC,cAAc,EAAC,OAAO,EAAC,aAAa,EAAC,KAAK,EAAC,GAAG,GAAG,EAC/E,KAAC,YAAY,IAAC,KAAK,EAAC,cAAI,EAAC,IAAI,EAAC,SAAS,EAAC,OAAO,EAAC,MAAM,GAAG,EACzD,KAAC,YAAY,IAAC,KAAK,EAAC,0BAAM,EAAC,IAAI,EAAC,mBAAmB,EAAC,OAAO,EAAC,qBAAqB,GAAG,EACpF,KAAC,YAAY,IAAC,KAAK,EAAC,0BAAM,EAAC,IAAI,EAAC,iBAAiB,EAAC,OAAO,EAAC,mBAAmB,GAAG,IAC5E,EACN,cAAoB,GAAG,EAAE,SAAS,EAAE,SAAS,EAAC,iBAAiB,EAAC,eAAe,QAAC,8BAA8B,QAAC,uBAAuB,EAAE,EAAE,MAAM,EAAE,sBAAsB,CAAC,KAAK,CAAC,EAAE,IAAvK,QAAQ,CAAmK,IACvK,CAAA;AAClB,CAAC;AAED,SAAS,YAAY,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAoE;IACrH,OAAO,iBAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,iBAAiB,EAAC,KAAK,EAAE,KAAK,gBAAc,KAAK,EAAE,WAAW,EAAE,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC,IAAI,OAAO,QAAQ,KAAK,WAAW;YAAE,QAAQ,CAAC,WAAW,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA,CAAC,CAAC,YAAE,YAAG,SAAS,EAAE,IAAI,iBAAc,MAAM,GAAG,GAAS,CAAA;AAClR,CAAC;AAED,SAAS,cAAc,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAiQ;IACpV,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC7C,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAgB,IAAI,CAAC,CAAA;IACzE,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,CAAgB,IAAI,CAAC,CAAA;IACtD,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;IAChD,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,IAAI,WAAW,CAAC,OAAO,KAAK,KAAK,CAAC,QAAQ,EAAE,CAAC;YAC3C,WAAW,CAAC,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAA;YACpC,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAA;YAClC,YAAY,CAAC,OAAO,GAAG,IAAI,CAAA;YAC3B,IAAI,KAAK;gBAAE,KAAK,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA;QAC9E,CAAC;QACD,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,2BAA2B,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAA;IACjE,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAA;IAC1B,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,YAAY,CAAC,OAAO;QAAE,KAAK,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAA;IAC5J,MAAM,UAAU,GAAG,KAAK,EAAE,IAAU,EAAE,EAAE;QACtC,cAAc,CAAC,IAAI,CAAC,CAAA;QACpB,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,CAAA;YAC3C,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAA;YACrC,YAAY,CAAC,OAAO,GAAG,UAAU,CAAA;YACjC,IAAI,QAAQ,IAAI,QAAQ,KAAK,UAAU;gBAAE,KAAK,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA;YAC7G,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC,CAAA;QAClD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAAC,cAAc,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,CAAA;QAAC,CAAC;IAC7F,CAAC,CAAA;IACD,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE;QACtB,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAA;QAClC,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,MAAM,EAAE,GAAG,IAAI,CAAA;QACvC,IAAI,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,YAAY,CAAC,OAAO,KAAK,KAAK;YAAE,YAAY,CAAC,OAAO,GAAG,IAAI,CAAA;IACzF,CAAC,CAAA;IACD,MAAM,KAAK,GAAG,CAAC,GAA0B,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,KAAgE,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAA;IAC3O,OAAO,MAAC,aAAa,IAAC,KAAK,EAAC,0BAAM,EAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,8BAAE,kBAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,gCAAgC,EAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,IAAI,EAAE,aAAE,YAAG,SAAS,EAAC,cAAc,GAAG,oBAAW,EAAA,KAAC,aAAa,IAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,GAAI,IAAG,aAChR,KAAC,UAAU,2LAA0C,EACrD,MAAC,SAAS,IAAC,OAAO,EAAE,CAAC,aACnB,MAAC,SAAS,IAAC,KAAK,EAAC,mBAAS,EAAC,IAAI,QAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,yBAAyB,aAAE,gBAAO,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,sBAAsB,EAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,GAAG,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,IAAI,IAAI;oCAAE,KAAK,UAAU,CAAC,IAAI,CAAC,CAAA,CAAC,CAAC,GAAI,EAAC,WAAW,IAAI,gBAAO,SAAS,EAAC,iBAAiB,YAAE,WAAW,GAAS,IAAa,EACpY,KAAC,SAAS,IAAC,KAAK,EAAC,sCAAQ,YAAC,mBAAW,KAAK,CAAC,eAAe,CAAC,GAAI,GAAY,EAAA,KAAC,SAAS,IAAC,KAAK,EAAC,sCAAQ,YAAC,mBAAW,KAAK,CAAC,eAAe,CAAC,GAAI,GAAY,EACtJ,KAAC,SAAS,IAAC,KAAK,EAAC,kDAAU,YAAC,mBAAW,KAAK,CAAC,yBAAyB,CAAC,GAAI,GAAY,EAAA,KAAC,SAAS,IAAC,KAAK,EAAC,cAAI,YAAC,mBAAW,KAAK,CAAC,OAAO,CAAC,GAAI,GAAY,EACtJ,KAAC,SAAS,IAAC,KAAK,EAAC,0BAAM,EAAC,IAAI,kBAAC,sBAAc,KAAK,CAAC,WAAW,CAAC,GAAI,GAAY,EAAA,KAAC,SAAS,IAAC,KAAK,EAAC,0BAAM,EAAC,IAAI,kBAAC,sBAAc,KAAK,CAAC,WAAW,CAAC,GAAI,GAAY,EAC1J,KAAC,SAAS,IAAC,KAAK,EAAC,cAAI,YAAC,gBAAO,IAAI,EAAC,OAAO,KAAK,KAAK,CAAC,OAAO,CAAC,GAAI,GAAY,IAClE,IACE,CAAA;AAClB,CAAC;AAED,SAAS,mBAAmB,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAsI;IAChM,OAAO,KAAC,aAAa,IAAC,KAAK,EAAC,0BAAM,EAAC,OAAO,EAAE,IAAI,YAC7C,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;YACxB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;YACnC,OAAO,mBAAwB,SAAS,EAAC,oBAAoB,qBAAkB,iBAAiB,QAAQ,EAAE,aACxG,6BAAQ,0BAAK,aAAI,EAAE,EAAE,iBAAiB,QAAQ,EAAE,YAAG,SAAS,CAAC,QAAQ,CAAC,GAAM,EAAA,eAAM,SAAS,EAAC,SAAS,YAAE,QAAQ,GAAQ,EAAA,mDAAY,IAAI,CAAC,QAAQ,IAAS,IAAM,EAAA,eAAK,SAAS,EAAC,mBAAmB,aAAC,kBAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,gCAAgC,EAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAE,YAAG,SAAS,EAAC,cAAc,iBAAa,MAAM,GAAG,oBAAW,EAAA,KAAC,aAAa,IAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAI,IAAM,IAAS,EAChc,KAAC,SAAS,IAAC,OAAO,EAAE,CAAC,YAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,KAAC,SAAS,IAAgB,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,KAAK,aAAa,YAAE,gBAAO,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,QAAQ,SAAG,IAAxG,IAAI,CAAC,GAAG,CAA4G,CAAC,GAAa,KAF9K,QAAQ,CAGnB,CAAA;QACZ,CAAC,CAAC,GACY,CAAA;AAClB,CAAC;AAED,SAAS,WAAW,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAyK;IAC9O,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC7C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAgB,IAAI,CAAC,CAAA;IAC7D,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,2BAA2B,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAA;IAC/F,MAAM,MAAM,GAAG,CAAC,GAAuB,EAAE,IAAY,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;IAC3G,MAAM,IAAI,GAAG,GAAG,EAAE,GAAG,MAAM,OAAO,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC;QAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IAAC,CAAC,CAAC,CAAC,CAAA;IAC/J,OAAO,MAAC,aAAa,IAAC,KAAK,EAAE,SAAS,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,8BAAE,kBAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,kCAAkC,EAAC,OAAO,EAAE,MAAM,aAAE,YAAG,SAAS,EAAC,oBAAoB,iBAAa,MAAM,GAAG,4CAAe,EAAA,kBAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,gCAAgC,EAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,aAAE,YAAG,SAAS,EAAC,cAAc,GAAG,oBAAW,EAAA,KAAC,aAAa,IAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,GAAI,IAAG,aAC5b,KAAK,IAAI,KAAC,UAAU,cAAE,KAAK,GAAc,EAC1C,KAAC,SAAS,IAAC,OAAO,EAAE,CAAC,YAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,KAAC,SAAS,IAAgB,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,QAAC,IAAI,EAAE,IAAI,CAAC,GAAG,KAAK,aAAa,YAAE,gBAAO,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,GAAI,IAAjK,IAAI,CAAC,GAAG,CAAqK,CAAC,GAAa,IAC5O,CAAA;AAClB,CAAC;AAED,MAAM,UAAU,GAAwH;IACtI,EAAE,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,kBAAkB,EAAE,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,EAAE,EAAE,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,oBAAoB,EAAE;IACrJ,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,iBAAiB,EAAE,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,EAAE;CACrI,CAAA;AAED,MAAM,SAAS,GAA+B,CAAC,cAAc,EAAE,cAAc,CAAC,CAAA;AAE9E,SAAS,SAAS,CAAC,QAAyB;IAC1C,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,cAAc,CAAC,CAAC,OAAO,aAAa,CAAA;QACzC,KAAK,cAAc,CAAC,CAAC,OAAO,YAAY,CAAA;IAC1C,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,QAAyB;IAChD,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,cAAc,CAAC,CAAC,OAAO,UAAU,CAAA;QACtC,KAAK,cAAc,CAAC,CAAC,OAAO,UAAU,CAAA;IACxC,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAA+M;IACpQ,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC7C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAgB,IAAI,CAAC,CAAA;IAC7D,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,2BAA2B,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAA;IAC/F,MAAM,IAAI,GAAG,GAAG,EAAE,GAAG,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO;QAAE,MAAM,CAAC,IAAI,CAAC,CAAA,CAAC,CAAC,CAAA;IAC9G,OAAO,MAAC,aAAa,IAAC,KAAK,EAAC,4CAAS,EAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,8BAAE,kBAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,gCAAgC,EAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,aAAE,YAAG,SAAS,EAAC,cAAc,GAAG,oBAAW,EAAA,KAAC,aAAa,IAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,GAAI,IAAG,aACtQ,KAAC,UAAU,mQAAsD,EAChE,KAAK,IAAI,KAAC,UAAU,cAAE,KAAK,GAAc,EAC1C,MAAC,SAAS,IAAC,OAAO,EAAE,CAAC,aACnB,KAAC,SAAS,IAAC,KAAK,EAAC,0BAAM,EAAC,QAAQ,kBAAC,kBAAQ,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,KAAqC,EAAE,CAAC,CAAC,aAAE,iBAAQ,KAAK,EAAC,QAAQ,uBAAgB,EAAA,iBAAQ,KAAK,EAAC,cAAc,6BAAsB,IAAS,GAAY,EAC/R,KAAC,SAAS,IAAC,KAAK,EAAC,sCAAQ,YAAC,gBAAO,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,QAAQ,SAAG,GAAY,EACjF,KAAC,SAAS,IAAC,KAAK,EAAC,4CAAS,EAAC,QAAQ,QAAC,IAAI,EAAC,mCAAe,YAAC,gBAAO,IAAI,EAAC,QAAQ,EAAC,GAAG,EAAC,GAAG,EAAC,IAAI,EAAC,QAAQ,EAAC,KAAK,EAAE,IAAI,CAAC,sBAAsB,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,sBAAsB,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,GAAI,GAAY,EAC3P,KAAC,SAAS,IAAC,KAAK,EAAC,sCAAQ,EAAC,QAAQ,kBAAC,gBAAO,IAAI,EAAC,QAAQ,EAAC,IAAI,EAAC,MAAM,EAAC,KAAK,EAAE,IAAI,CAAC,mBAAmB,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,mBAAmB,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,GAAI,GAAY,EACrN,KAAC,SAAS,IAAC,KAAK,EAAC,sCAAQ,EAAC,QAAQ,kBAAC,gBAAO,IAAI,EAAC,QAAQ,EAAC,IAAI,EAAC,MAAM,EAAC,KAAK,EAAE,IAAI,CAAC,mBAAmB,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,mBAAmB,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,GAAI,GAAY,IAC3M,IACE,CAAA;AAClB,CAAC;AAED,SAAS,kBAAkB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAyJ;IAClN,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,KAAK,CAAC,QAAQ,CAA6B,IAAI,CAAC,CAAA;IAC9E,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAmC,IAAI,CAAC,CAAA;IACtF,MAAM,cAAc,GAAG,CAAC,SAAkB,EAAE,EAAE;QAC5C,IAAI,CAAC,QAAQ;YAAE,OAAM;QACrB,MAAM,OAAO,GAAG,QAAQ,CAAA;QACxB,WAAW,CAAC,IAAI,CAAC,CAAA;QACjB,KAAK,oBAAoB,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAA;IACzD,CAAC,CAAA;IACD,MAAM,OAAO,GAAG;QACd,EAAE,IAAI,EAAE,MAAe,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,MAAe,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;QAClI,EAAE,IAAI,EAAE,MAAe,EAAE,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,MAAe,EAAE,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE;QACvJ,EAAE,IAAI,EAAE,UAAmB,EAAE,GAAG,EAAE,iBAAiB,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,MAAe,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE;KACtK,CAAA;IACD,OAAO,MAAC,aAAa,IAAC,KAAK,EAAC,sCAAQ,EAAC,OAAO,EAAE,kBAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,gCAAgC,EAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,aAAE,YAAG,SAAS,EAAC,aAAa,GAAG,4CAAe,aACnN,KAAC,UAAU,iLAA+C,EAC1D,KAAC,QAAQ,IAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,KAAK,EAAE,EAAE,SAAS,EAAC,sCAAQ,EAAC,WAAW,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC,8BAAE,iBAAQ,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,6BAAa,EAAC,GAAG,CAAC,EAAE,IAAI,iBAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,WAAW,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,CAAC,EAAG,EAAE,gBAAgB,EAAE,GAAG,CAAC,QAAQ,IAAI,CAAC,EAAE,CAAC,6BAAa,IAAI,GAAI,EACvY,OAAO,IAAI,KAAC,UAAU,IAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA,CAAC,CAAC,GAAI,EAC7I,KAAC,aAAa,IAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAC,sCAAQ,EAAC,OAAO,EAAC,kMAAkC,EAAC,WAAW,EAAC,0BAAM,EAAC,MAAM,QAAC,eAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,GAAI,IACrN,CAAA;AAClB,CAAC;AAED,SAAS,UAAU,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAoH;IACpK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC7C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAgB,IAAI,CAAC,CAAA;IAC7D,MAAM,IAAI,GAAG,GAAG,EAAE,GAAG,MAAM,OAAO,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO;QAAE,MAAM,CAAC,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAA,CAAC,CAAC,CAAA;IACjK,OAAO,MAAC,KAAK,IAAC,IAAI,QAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,8BAAE,iBAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,kCAAkC,EAAC,OAAO,EAAE,OAAO,6BAAa,EAAA,iBAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,gCAAgC,EAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,6BAAa,IAAG,aAChS,KAAK,IAAI,KAAC,UAAU,cAAE,KAAK,GAAc,EAAC,MAAC,SAAS,IAAC,OAAO,EAAE,CAAC,aAC9D,KAAC,SAAS,IAAC,KAAK,EAAC,cAAI,EAAC,QAAQ,kBAAC,gBAAO,IAAI,EAAC,QAAQ,EAAC,GAAG,EAAC,MAAM,EAAC,GAAG,EAAC,MAAM,EAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAI,GAAY,EACrM,KAAC,SAAS,IAAC,KAAK,EAAC,cAAI,EAAC,QAAQ,kBAAC,gBAAO,IAAI,EAAC,QAAQ,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,IAAI,EAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAI,GAAY,EAClM,KAAC,SAAS,IAAC,KAAK,EAAC,cAAI,YAAC,gBAAO,KAAK,EAAC,KAAK,EAAC,QAAQ,SAAG,GAAY,EAAA,KAAC,SAAS,IAAC,KAAK,EAAC,cAAI,YAAC,gBAAO,KAAK,EAAC,0BAAM,EAAC,QAAQ,SAAG,GAAY,EACjI,KAAC,SAAS,IAAC,KAAK,EAAC,kDAAU,EAAC,QAAQ,kBAAC,gBAAO,IAAI,EAAC,QAAQ,EAAC,GAAG,EAAC,GAAG,EAAC,IAAI,EAAC,YAAY,EAAC,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,GAAI,GAAY,EACvN,KAAC,SAAS,IAAC,KAAK,EAAC,0BAAM,EAAC,QAAQ,kBAAC,gBAAO,KAAK,EAAE,IAAI,CAAC,eAAe,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,GAAI,GAAY,IACvK,IACN,CAAA;AACV,CAAC;AAED,SAAS,aAAa,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAA6G;IAC7K,OAAO,mBAAS,SAAS,EAAC,oBAAoB,aAAC,6BAAQ,0BAAK,uBAAK,KAAK,GAAM,EAAC,KAAK,IAAI,eAAM,SAAS,EAAC,SAAS,YAAE,KAAK,GAAQ,EAAE,QAAQ,IAAI,IAAI,IAAI,mDAAY,QAAQ,IAAS,IAAO,EAAA,cAAK,SAAS,EAAC,mBAAmB,YAAE,OAAO,GAAO,IAAS,EAAC,QAAQ,IAAW,CAAA;AACzQ,CAAC;AACD,SAAS,aAAa,CAAC,EAAE,IAAI,EAAE,OAAO,EAA0C,IAAI,OAAO,kBAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,kCAAkC,EAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,aAAE,YAAG,SAAS,EAAC,iBAAiB,GAAG,4CAAe,CAAA,CAAC,CAAC;AAClP,SAAS,MAAM,CAAC,IAAkB,EAAE,QAAyB,IAAkB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAA,CAAC,CAAC;AACrQ,SAAS,WAAW,KAA0B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,EAAE,CAAA,CAAC,CAAC;AAE3N,MAAM,UAAU,oBAAoB,CAAC,KAAmB;IACtD,KAAK,MAAM,KAAK,IAAI,UAAU;QAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE;YAAE,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAA;IACxG,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAsG;IACxI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,GAAG,IAAI,IAAI,KAAK,CAAC,IAAI,GAAG,IAAI;QAAE,OAAO,yBAAyB,CAAA;IAC7G,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,GAAG,EAAE;QAAE,OAAO,oBAAoB,CAAA;IACtG,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;IACvC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,iBAAiB,CAAA;IACpD,IAAI,IAAI,IAAI,CAAC;QAAE,OAAO,gBAAgB,CAAA;IACtC,IAAI,KAAK,CAAC,UAAU,KAAK,QAAQ;QAAE,OAAO,aAAa,CAAA;IACvD,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,EAAE;QAAE,OAAO,UAAU,CAAA;IACpD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAyB;IACnD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAA;IAC3I,IAAI,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC;QAAE,OAAO,iBAAiB,CAAA;IAC9E,IAAI,IAAI,GAAG,CAAC;QAAE,OAAO,eAAe,CAAA;IACpC,IAAI,OAAO,GAAG,OAAO;QAAE,OAAO,cAAc,CAAA;IAC5C,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;AACrG,MAAM,UAAU,sBAAsB,CAAC,IAAY;IACjD,IAAI,OAAO,SAAS,KAAK,WAAW;QAAE,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAA;IACrE,MAAM,QAAQ,GAAG,IAAI,SAAS,EAAE,CAAC,eAAe,CAAC,IAAI,EAAE,WAAW,CAAC,CAAA;IACnE,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AACxE,CAAC;AACD,SAAS,YAAY,CAAC,IAAU;IAC9B,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC;QAAE,OAAO,UAAU,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC,CAAA;IAClE,IAAI,CAAC,CAAC,IAAI,YAAY,OAAO,CAAC;QAAE,OAAO,EAAE,CAAA;IACzC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAA;IACtC,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,OAAO;QAAE,OAAO,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IACjK,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACvE,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC;QAAE,OAAO,QAAQ,CAAA;IAC9C,MAAM,UAAU,GAAG,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,CAAA;IAC7D,OAAO,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,UAAU,IAAI,QAAQ,KAAK,UAAU,GAAG,CAAA;AACpF,CAAC;AACD,SAAS,kBAAkB,CAAC,IAAY;IACtC,MAAM,oBAAoB,GAAG,IAAI,CAAC,OAAO,CAAC,0CAA0C,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAA;IACvH,OAAO,oBAAoB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;QAC1D,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,OAAO,UAAU,CAAC,KAAK,CAAC,CAAA;QACpD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAA;QAC5D,IAAI,CAAC,KAAK;YAAE,OAAO,EAAE,CAAA;QACrB,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAA;QACrE,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO,EAAE,CAAA;QACxC,MAAM,UAAU,GAAG,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,CAAA;QAC7D,OAAO,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,UAAU,GAAG,CAAA;IAC9E,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AACb,CAAC;AACD,SAAS,UAAU,CAAC,KAAa,IAAI,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA,CAAC,CAAC"}
|