@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.
Files changed (194) hide show
  1. package/README.md +46 -1
  2. package/dist/assets/branding/yuneec-logo.png +0 -0
  3. package/dist/assets/templates/CI.xlsx +0 -0
  4. package/dist/assets/templates/CUSTOMS_DECLARATION.xlsx +0 -0
  5. package/dist/assets/templates/PI.xlsx +0 -0
  6. package/dist/assets/templates/PL.xlsx +0 -0
  7. package/dist/index.d.ts +14 -0
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/lib/adapters/file-storage.d.ts +4 -2
  10. package/dist/lib/adapters/file-storage.d.ts.map +1 -1
  11. package/dist/lib/adapters/file-storage.js +25 -10
  12. package/dist/lib/adapters/file-storage.js.map +1 -1
  13. package/dist/lib/adapters/hsbianma.provider.d.ts +1 -0
  14. package/dist/lib/adapters/hsbianma.provider.d.ts.map +1 -1
  15. package/dist/lib/adapters/hsbianma.provider.js +32 -3
  16. package/dist/lib/adapters/hsbianma.provider.js.map +1 -1
  17. package/dist/lib/adapters/translation.provider.d.ts +3 -0
  18. package/dist/lib/adapters/translation.provider.d.ts.map +1 -1
  19. package/dist/lib/adapters/translation.provider.js +15 -6
  20. package/dist/lib/adapters/translation.provider.js.map +1 -1
  21. package/dist/lib/constants.d.ts +3 -2
  22. package/dist/lib/constants.d.ts.map +1 -1
  23. package/dist/lib/constants.js +3 -2
  24. package/dist/lib/constants.js.map +1 -1
  25. package/dist/lib/demo-data.definitions.d.ts +28 -0
  26. package/dist/lib/demo-data.definitions.d.ts.map +1 -0
  27. package/dist/lib/demo-data.definitions.js +236 -0
  28. package/dist/lib/demo-data.definitions.js.map +1 -0
  29. package/dist/lib/demo-data.entity.d.ts +9 -0
  30. package/dist/lib/demo-data.entity.d.ts.map +1 -0
  31. package/dist/lib/demo-data.entity.js +24 -0
  32. package/dist/lib/demo-data.entity.js.map +1 -0
  33. package/dist/lib/demo-data.ids.d.ts +4 -0
  34. package/dist/lib/demo-data.ids.d.ts.map +1 -0
  35. package/dist/lib/demo-data.ids.js +19 -0
  36. package/dist/lib/demo-data.ids.js.map +1 -0
  37. package/dist/lib/demo-data.service.d.ts +26 -0
  38. package/dist/lib/demo-data.service.d.ts.map +1 -0
  39. package/dist/lib/demo-data.service.js +124 -0
  40. package/dist/lib/demo-data.service.js.map +1 -0
  41. package/dist/lib/domain/default-settings.d.ts +1 -0
  42. package/dist/lib/domain/default-settings.d.ts.map +1 -1
  43. package/dist/lib/domain/default-settings.js +1 -0
  44. package/dist/lib/domain/default-settings.js.map +1 -1
  45. package/dist/lib/domain/risk-notice.d.ts +59 -0
  46. package/dist/lib/domain/risk-notice.d.ts.map +1 -0
  47. package/dist/lib/domain/risk-notice.js +30 -0
  48. package/dist/lib/domain/risk-notice.js.map +1 -0
  49. package/dist/lib/entities/catalog.entity.d.ts.map +1 -1
  50. package/dist/lib/entities/catalog.entity.js +4 -2
  51. package/dist/lib/entities/catalog.entity.js.map +1 -1
  52. package/dist/lib/entities/customer.entity.d.ts +9 -2
  53. package/dist/lib/entities/customer.entity.d.ts.map +1 -1
  54. package/dist/lib/entities/customer.entity.js +29 -1
  55. package/dist/lib/entities/customer.entity.js.map +1 -1
  56. package/dist/lib/entities/index.d.ts +2 -2
  57. package/dist/lib/entities/index.d.ts.map +1 -1
  58. package/dist/lib/entities/index.js +2 -2
  59. package/dist/lib/entities/index.js.map +1 -1
  60. package/dist/lib/entities/procurement.entity.d.ts +6 -4
  61. package/dist/lib/entities/procurement.entity.d.ts.map +1 -1
  62. package/dist/lib/entities/procurement.entity.js +9 -1
  63. package/dist/lib/entities/procurement.entity.js.map +1 -1
  64. package/dist/lib/entities/settings.entity.d.ts +12 -2
  65. package/dist/lib/entities/settings.entity.d.ts.map +1 -1
  66. package/dist/lib/entities/settings.entity.js +40 -0
  67. package/dist/lib/entities/settings.entity.js.map +1 -1
  68. package/dist/lib/entities/shared.entity.d.ts +10 -5
  69. package/dist/lib/entities/shared.entity.d.ts.map +1 -1
  70. package/dist/lib/entities/shared.entity.js +22 -1
  71. package/dist/lib/entities/shared.entity.js.map +1 -1
  72. package/dist/lib/remote-components/trade-compliance-workbench/app.css +1 -0
  73. package/dist/lib/remote-components/trade-compliance-workbench/app.js +63 -277
  74. package/dist/lib/remote-ui/analytics-contracts.d.ts +106 -0
  75. package/dist/lib/remote-ui/analytics-contracts.d.ts.map +1 -0
  76. package/dist/lib/remote-ui/analytics-contracts.js +4 -0
  77. package/dist/lib/remote-ui/analytics-contracts.js.map +1 -0
  78. package/dist/lib/remote-ui/app-source.d.ts +2 -0
  79. package/dist/lib/remote-ui/app-source.d.ts.map +1 -0
  80. package/dist/lib/remote-ui/app-source.js +753 -0
  81. package/dist/lib/remote-ui/app-source.js.map +1 -0
  82. package/dist/lib/remote-ui/bridge.d.ts +36 -0
  83. package/dist/lib/remote-ui/bridge.d.ts.map +1 -0
  84. package/dist/lib/remote-ui/bridge.js +159 -0
  85. package/dist/lib/remote-ui/bridge.js.map +1 -0
  86. package/dist/lib/remote-ui/components/data-grid.d.ts +34 -0
  87. package/dist/lib/remote-ui/components/data-grid.d.ts.map +1 -0
  88. package/dist/lib/remote-ui/components/data-grid.js +59 -0
  89. package/dist/lib/remote-ui/components/data-grid.js.map +1 -0
  90. package/dist/lib/remote-ui/components/forms.d.ts +63 -0
  91. package/dist/lib/remote-ui/components/forms.d.ts.map +1 -0
  92. package/dist/lib/remote-ui/components/forms.js +117 -0
  93. package/dist/lib/remote-ui/components/forms.js.map +1 -0
  94. package/dist/lib/remote-ui/components/layout.d.ts +34 -0
  95. package/dist/lib/remote-ui/components/layout.d.ts.map +1 -0
  96. package/dist/lib/remote-ui/components/layout.js +89 -0
  97. package/dist/lib/remote-ui/components/layout.js.map +1 -0
  98. package/dist/lib/remote-ui/contract-import.d.ts +82 -0
  99. package/dist/lib/remote-ui/contract-import.d.ts.map +1 -0
  100. package/dist/lib/remote-ui/contract-import.js +102 -0
  101. package/dist/lib/remote-ui/contract-import.js.map +1 -0
  102. package/dist/lib/remote-ui/contracts.d.ts +257 -0
  103. package/dist/lib/remote-ui/contracts.d.ts.map +1 -0
  104. package/dist/lib/remote-ui/contracts.js +12 -0
  105. package/dist/lib/remote-ui/contracts.js.map +1 -0
  106. package/dist/lib/remote-ui/customer-contract-contracts.d.ts +227 -0
  107. package/dist/lib/remote-ui/customer-contract-contracts.d.ts.map +1 -0
  108. package/dist/lib/remote-ui/customer-contract-contracts.js +10 -0
  109. package/dist/lib/remote-ui/customer-contract-contracts.js.map +1 -0
  110. package/dist/lib/remote-ui/model.d.ts +31 -0
  111. package/dist/lib/remote-ui/model.d.ts.map +1 -0
  112. package/dist/lib/remote-ui/model.js +248 -0
  113. package/dist/lib/remote-ui/model.js.map +1 -0
  114. package/dist/lib/remote-ui/pages/analytics.d.ts +12 -0
  115. package/dist/lib/remote-ui/pages/analytics.d.ts.map +1 -0
  116. package/dist/lib/remote-ui/pages/analytics.js +123 -0
  117. package/dist/lib/remote-ui/pages/analytics.js.map +1 -0
  118. package/dist/lib/remote-ui/pages/catalogs.d.ts +225 -0
  119. package/dist/lib/remote-ui/pages/catalogs.d.ts.map +1 -0
  120. package/dist/lib/remote-ui/pages/catalogs.js +572 -0
  121. package/dist/lib/remote-ui/pages/catalogs.js.map +1 -0
  122. package/dist/lib/remote-ui/pages/contracts.d.ts +80 -0
  123. package/dist/lib/remote-ui/pages/contracts.d.ts.map +1 -0
  124. package/dist/lib/remote-ui/pages/contracts.js +396 -0
  125. package/dist/lib/remote-ui/pages/contracts.js.map +1 -0
  126. package/dist/lib/remote-ui/pages/files.d.ts +31 -0
  127. package/dist/lib/remote-ui/pages/files.d.ts.map +1 -0
  128. package/dist/lib/remote-ui/pages/files.js +64 -0
  129. package/dist/lib/remote-ui/pages/files.js.map +1 -0
  130. package/dist/lib/remote-ui/pages/home.d.ts +71 -0
  131. package/dist/lib/remote-ui/pages/home.d.ts.map +1 -0
  132. package/dist/lib/remote-ui/pages/home.js +136 -0
  133. package/dist/lib/remote-ui/pages/home.js.map +1 -0
  134. package/dist/lib/remote-ui/pages/procurement.d.ts +36 -0
  135. package/dist/lib/remote-ui/pages/procurement.d.ts.map +1 -0
  136. package/dist/lib/remote-ui/pages/procurement.js +370 -0
  137. package/dist/lib/remote-ui/pages/procurement.js.map +1 -0
  138. package/dist/lib/remote-ui/pages/sales.d.ts +12 -0
  139. package/dist/lib/remote-ui/pages/sales.d.ts.map +1 -0
  140. package/dist/lib/remote-ui/pages/sales.js +106 -0
  141. package/dist/lib/remote-ui/pages/sales.js.map +1 -0
  142. package/dist/lib/remote-ui/pages/settings.d.ts +34 -0
  143. package/dist/lib/remote-ui/pages/settings.d.ts.map +1 -0
  144. package/dist/lib/remote-ui/pages/settings.js +259 -0
  145. package/dist/lib/remote-ui/pages/settings.js.map +1 -0
  146. package/dist/lib/remote-ui/procurement-contracts.d.ts +177 -0
  147. package/dist/lib/remote-ui/procurement-contracts.d.ts.map +1 -0
  148. package/dist/lib/remote-ui/procurement-contracts.js +2 -0
  149. package/dist/lib/remote-ui/procurement-contracts.js.map +1 -0
  150. package/dist/lib/remote-ui/sales-contracts.d.ts +133 -0
  151. package/dist/lib/remote-ui/sales-contracts.d.ts.map +1 -0
  152. package/dist/lib/remote-ui/sales-contracts.js +2 -0
  153. package/dist/lib/remote-ui/sales-contracts.js.map +1 -0
  154. package/dist/lib/remote-ui/settings-contracts.d.ts +114 -0
  155. package/dist/lib/remote-ui/settings-contracts.d.ts.map +1 -0
  156. package/dist/lib/remote-ui/settings-contracts.js +6 -0
  157. package/dist/lib/remote-ui/settings-contracts.js.map +1 -0
  158. package/dist/lib/remote-ui/upload-policy.d.ts +18 -0
  159. package/dist/lib/remote-ui/upload-policy.d.ts.map +1 -0
  160. package/dist/lib/remote-ui/upload-policy.js +56 -0
  161. package/dist/lib/remote-ui/upload-policy.js.map +1 -0
  162. package/dist/lib/runtime-validation.d.ts +61 -0
  163. package/dist/lib/runtime-validation.d.ts.map +1 -0
  164. package/dist/lib/runtime-validation.js +243 -0
  165. package/dist/lib/runtime-validation.js.map +1 -0
  166. package/dist/lib/sales-file.service.d.ts +54 -6
  167. package/dist/lib/sales-file.service.d.ts.map +1 -1
  168. package/dist/lib/sales-file.service.js +278 -33
  169. package/dist/lib/sales-file.service.js.map +1 -1
  170. package/dist/lib/trade-compliance.config.d.ts +32 -0
  171. package/dist/lib/trade-compliance.config.d.ts.map +1 -1
  172. package/dist/lib/trade-compliance.config.js +16 -4
  173. package/dist/lib/trade-compliance.config.js.map +1 -1
  174. package/dist/lib/types.d.ts +253 -1
  175. package/dist/lib/types.d.ts.map +1 -1
  176. package/dist/lib/types.js +24 -0
  177. package/dist/lib/types.js.map +1 -1
  178. package/dist/lib/workbench-view.provider.d.ts +675 -38
  179. package/dist/lib/workbench-view.provider.d.ts.map +1 -1
  180. package/dist/lib/workbench-view.provider.js +411 -40
  181. package/dist/lib/workbench-view.provider.js.map +1 -1
  182. package/dist/lib/workbench.middleware.d.ts +70 -19
  183. package/dist/lib/workbench.middleware.d.ts.map +1 -1
  184. package/dist/lib/workbench.middleware.js +5 -1
  185. package/dist/lib/workbench.middleware.js.map +1 -1
  186. package/dist/lib/workbench.plugin.d.ts.map +1 -1
  187. package/dist/lib/workbench.plugin.js +6 -4
  188. package/dist/lib/workbench.plugin.js.map +1 -1
  189. package/dist/lib/workbench.service.d.ts +629 -48
  190. package/dist/lib/workbench.service.d.ts.map +1 -1
  191. package/dist/lib/workbench.service.js +1818 -300
  192. package/dist/lib/workbench.service.js.map +1 -1
  193. package/package.json +15 -4
  194. package/scripts/seed-demo-data.mjs +138 -0
@@ -0,0 +1,177 @@
1
+ import type { FilterState, WorkbenchCollection, WorkbenchRoute } from './contracts.js';
2
+ import type { RefundValidationMethod } from '../types.js';
3
+ export type PurchaseOrderLineSourceType = 'CONTRACT_EXTRACTED' | 'MANUAL_ENTRY';
4
+ export type SanctionHitStatus = 'UNCHECKED' | 'CLEAR' | 'HIT';
5
+ export type HsCodeStatus = 'UNCONFIRMED' | 'AI_CONFIRMED' | 'MANUALLY_CONFIRMED';
6
+ export type ComplianceCategory = 'DUAL_USE' | 'OVERSEAS_SANCTION';
7
+ export type CustomerContractLinkStatus = 'LINKED' | 'UNLINKED';
8
+ export type SupplierRow = {
9
+ id: string;
10
+ code?: string | null;
11
+ name: string;
12
+ shortName?: string | null;
13
+ countryOrRegion?: string | null;
14
+ address?: string | null;
15
+ contactName?: string | null;
16
+ phone?: string | null;
17
+ wechat?: string | null;
18
+ email?: string | null;
19
+ taxNumber?: string | null;
20
+ paymentAccount?: string | null;
21
+ bankName?: string | null;
22
+ taxpayerRating?: string | null;
23
+ website?: string | null;
24
+ businessProducts?: string | null;
25
+ remarks?: string | null;
26
+ sanctionStatus?: SanctionHitStatus;
27
+ sanctionMatchCount?: number;
28
+ complianceCheckedAt?: string | null;
29
+ createdByName?: string | null;
30
+ createdAt?: string | null;
31
+ updatedByName?: string | null;
32
+ updatedAt?: string | null;
33
+ };
34
+ export type PurchaseOrderRow = {
35
+ id: string;
36
+ supplierId: string;
37
+ contractNo: string;
38
+ orderDate: string;
39
+ contractAmountCny: string;
40
+ paidAmountCny?: string | null;
41
+ refundedAmountCny?: string | null;
42
+ estimatedRefundAmountCny?: string | null;
43
+ customerContractId?: string | null;
44
+ customerContractNo?: string | null;
45
+ customerContractLinkStatus?: CustomerContractLinkStatus;
46
+ sourceFileId?: string | null;
47
+ sourceFileName?: string | null;
48
+ importTaskId?: string | null;
49
+ lineCount?: number;
50
+ amountMismatch?: boolean;
51
+ amountMismatchConfirmed?: boolean;
52
+ createdAt?: string | null;
53
+ updatedAt?: string | null;
54
+ };
55
+ export type PurchaseOrderLineRow = {
56
+ id: string;
57
+ purchaseOrderId: string;
58
+ lineNumber?: number;
59
+ sourceType: PurchaseOrderLineSourceType;
60
+ productName: string;
61
+ englishName?: string | null;
62
+ productDescription?: string | null;
63
+ modelSpecification?: string | null;
64
+ unit?: string | null;
65
+ quantity: string;
66
+ unitPriceTaxIncluded: string;
67
+ lineAmountTaxIncluded: string;
68
+ vatRate?: string | null;
69
+ hsCode?: string | null;
70
+ hsCodeStatus?: HsCodeStatus;
71
+ refundRate?: string | null;
72
+ refundPolicyReference?: string | null;
73
+ refundPolicyDate?: string | null;
74
+ refundValidationMethod?: RefundValidationMethod | null;
75
+ complianceCategories?: ComplianceCategory[];
76
+ amountMismatch?: boolean;
77
+ amountMismatchConfirmed?: boolean;
78
+ sourceLocation?: string | null;
79
+ sourceContent?: string | null;
80
+ createdAt?: string | null;
81
+ updatedAt?: string | null;
82
+ };
83
+ export type SupplierDraft = Omit<SupplierRow, 'id'> & {
84
+ id?: string;
85
+ };
86
+ export type PurchaseOrderDraft = Omit<PurchaseOrderRow, 'id'> & {
87
+ id?: string;
88
+ };
89
+ export type PurchaseOrderLineDraft = Omit<PurchaseOrderLineRow, 'id'> & {
90
+ id?: string;
91
+ };
92
+ export type PurchaseContractReviewDraft = {
93
+ supplier: SupplierDraft;
94
+ order: PurchaseOrderDraft;
95
+ lines: PurchaseOrderLineDraft[];
96
+ sourceFileName?: string | null;
97
+ sourceFileUrl?: string | null;
98
+ sourceText?: string | null;
99
+ };
100
+ export type PurchaseImportTaskStatus = 'QUEUED' | 'EXTRACTING' | 'AI_PARSING' | 'VALIDATING' | 'AWAITING_REVIEW' | 'PERSISTING' | 'SUCCEEDED' | 'FAILED' | 'TIMED_OUT';
101
+ export type PurchaseImportTask = {
102
+ id: string;
103
+ documentType: 'PURCHASE_CONTRACT';
104
+ status: PurchaseImportTaskStatus;
105
+ sourceFileId?: string | null;
106
+ sourceFileName?: string | null;
107
+ resultPayloadVersion?: string | null;
108
+ reviewSavedAt?: string | null;
109
+ resultEntityId?: string | null;
110
+ duplicateContractError?: string | null;
111
+ errorCode?: string | null;
112
+ errorMessage?: string | null;
113
+ resultPayload?: Record<string, unknown> | null;
114
+ executionCommand?: {
115
+ commandKey: string;
116
+ payload: Record<string, unknown>;
117
+ } | null;
118
+ commandDispatchedAt?: string | null;
119
+ retryOfTaskId?: string | null;
120
+ updatedAt?: string | null;
121
+ };
122
+ export type ProcurementCollectionKey = 'suppliers' | 'purchaseOrders' | 'purchaseLines';
123
+ export type ProcurementQuery = {
124
+ page: number;
125
+ pageSize: number;
126
+ filters: FilterState;
127
+ parameters?: {
128
+ supplierId?: string;
129
+ purchaseOrderId?: string;
130
+ };
131
+ };
132
+ export type ProcurementActionKey = 'save_purchase_review' | 'update_supplier' | 'update_purchase_order' | 'add_purchase_line' | 'update_purchase_line' | 'delete_entity' | 'search_hs_code' | 'get_hs_code_detail';
133
+ export type ProcurementFileActionKey = 'upload_purchase_contract';
134
+ export type ProcurementDeleteEntityType = 'supplier' | 'purchaseOrder' | 'purchaseLine';
135
+ export type ProcurementActionResult<T = unknown> = {
136
+ success?: boolean;
137
+ data?: T;
138
+ message?: string;
139
+ refresh?: boolean;
140
+ };
141
+ export type ProductAmountMetric = {
142
+ productName: string;
143
+ amountCny: number;
144
+ };
145
+ export type OrderBalanceMetric = {
146
+ unpaidAmountCny: number;
147
+ unrefundedAmountCny: number;
148
+ };
149
+ export type ProcurementMetrics = {
150
+ totalOrderCount: number;
151
+ totalPurchaseAmountCny: number;
152
+ currentYearOrderCount: number;
153
+ currentYearPurchaseAmountCny: number;
154
+ topProducts: ProductAmountMetric[];
155
+ orderBalances: Record<string, OrderBalanceMetric>;
156
+ };
157
+ export type ProcurementPageProps = {
158
+ route: Extract<WorkbenchRoute, {
159
+ type: 'procurement';
160
+ }>;
161
+ suppliers: WorkbenchCollection<SupplierRow>;
162
+ purchaseOrders: WorkbenchCollection<PurchaseOrderRow>;
163
+ purchaseLines: WorkbenchCollection<PurchaseOrderLineRow>;
164
+ supplier?: SupplierRow | null;
165
+ order?: PurchaseOrderRow | null;
166
+ metrics?: ProcurementMetrics | null;
167
+ importTask: PurchaseImportTask | null;
168
+ reviewDraft: PurchaseContractReviewDraft | null;
169
+ busy: boolean;
170
+ onQuery: (collection: ProcurementCollectionKey, query: ProcurementQuery) => Promise<void> | void;
171
+ onAction: (actionKey: ProcurementActionKey, input: Record<string, unknown>) => Promise<ProcurementActionResult>;
172
+ onFileAction: (actionKey: ProcurementFileActionKey, file: File, input: Record<string, unknown>) => Promise<ProcurementActionResult>;
173
+ onRouteChange: (route: WorkbenchRoute) => void;
174
+ onRetryImport?: (taskId: string) => Promise<void> | void;
175
+ onReviewClose?: () => void;
176
+ };
177
+ //# sourceMappingURL=procurement-contracts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"procurement-contracts.d.ts","sourceRoot":"","sources":["../../../src/lib/remote-ui/procurement-contracts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=procurement-contracts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"procurement-contracts.js","sourceRoot":"","sources":["../../../src/lib/remote-ui/procurement-contracts.ts"],"names":[],"mappings":""}
@@ -0,0 +1,133 @@
1
+ import type { FilterState, WorkbenchCollection, WorkbenchRoute } from './contracts.js';
2
+ import type { BankAccountType, CustomerProfitRateStatus, HsCodeStatus, PricingProfitRateSource, SalesFileGenerationResult, SalesFilePreflightResult, SalesFileType, SalesPaymentStatus as SharedSalesPaymentStatus, SanctionHitStatus as SharedSanctionHitStatus } from '../types.js';
3
+ export type ProfitRateStatus = CustomerProfitRateStatus;
4
+ export type SanctionHitStatus = SharedSanctionHitStatus;
5
+ export type SalesPaymentStatus = SharedSalesPaymentStatus;
6
+ export type ComplianceCategory = 'DUAL_USE' | 'OVERSEAS_SANCTION';
7
+ export type SalesComplianceMatchMethod = 'HS_CODE_EXACT' | 'NAME_CONTAINS' | 'NAME_DICE';
8
+ export type SalesComplianceMatch = {
9
+ controlledGoodsId?: string | null;
10
+ matchedItemName?: string | null;
11
+ catalogType: ComplianceCategory;
12
+ matchMethod: SalesComplianceMatchMethod;
13
+ similarityScore?: string | null;
14
+ riskDescription?: string | null;
15
+ recommendation?: string | null;
16
+ };
17
+ export type SalesLineLookupRequest = {
18
+ type: 'HS_CODE_LOOKUP';
19
+ field: 'PRODUCT_NAME' | 'HS_CODE';
20
+ query: string;
21
+ purchaseOrderLineId: string;
22
+ };
23
+ export type SalesCustomerRow = {
24
+ id: string;
25
+ code?: string | null;
26
+ name: string;
27
+ country?: string | null;
28
+ defaultPricingProfitRate?: string | null;
29
+ profitRateStatus: ProfitRateStatus;
30
+ sanctionStatus: SanctionHitStatus;
31
+ sanctionMatchCount: number;
32
+ complianceCheckedAt?: string | null;
33
+ };
34
+ export type SalesOrderLineRow = {
35
+ purchaseOrderLineId: string;
36
+ productName: string;
37
+ englishName?: string | null;
38
+ productDescription?: string | null;
39
+ modelSpecification?: string | null;
40
+ unit?: string | null;
41
+ quantity: string;
42
+ hsCode?: string | null;
43
+ vatRate?: string | null;
44
+ refundRate?: string | null;
45
+ hsCodeStatus?: HsCodeStatus | null;
46
+ salesUnitPriceCny: string;
47
+ salesLineAmountCny: string;
48
+ complianceCategories?: ComplianceCategory[];
49
+ complianceMatches: SalesComplianceMatch[];
50
+ };
51
+ export type SalesOrderRow = {
52
+ customerContractId: string;
53
+ purchaseOrderId: string;
54
+ customerId: string;
55
+ customerName: string;
56
+ supplierName: string;
57
+ salesOrderNo: string;
58
+ customerContractNo: string;
59
+ purchaseContractNo: string;
60
+ orderDate?: string | null;
61
+ currencyCode: 'CNY';
62
+ pricingProfitRateSource: PricingProfitRateSource;
63
+ effectivePricingProfitRate: string;
64
+ pricingProfitRateStatus: 'CONFIGURED';
65
+ orderAmountCny: string;
66
+ receivedAmountCny: string;
67
+ unreceivedAmountCny: string;
68
+ paymentStatus: SalesPaymentStatus;
69
+ lines: SalesOrderLineRow[];
70
+ };
71
+ export type SalesMetrics = {
72
+ orderCount: number;
73
+ salesAmountCny: string;
74
+ receivedAmountCny: string;
75
+ unreceivedAmountCny: string;
76
+ currentYearOrderCount: number;
77
+ currentYearSalesAmountCny: string;
78
+ topProducts: Array<{
79
+ productName: string;
80
+ amountCny: string;
81
+ }>;
82
+ };
83
+ export type SalesOrderCollection = WorkbenchCollection<SalesOrderRow> & {
84
+ customer?: SalesCustomerRow;
85
+ metrics?: SalesMetrics;
86
+ };
87
+ export type SalesLineCollection = WorkbenchCollection<SalesOrderLineRow> & {
88
+ order?: SalesOrderRow;
89
+ };
90
+ export type SalesCollectionKey = 'salesCustomers' | 'salesOrders' | 'salesLines';
91
+ export type SalesQuery = {
92
+ page: number;
93
+ pageSize: number;
94
+ filters: FilterState;
95
+ };
96
+ export type BankAccountRow = {
97
+ id?: string;
98
+ bankType: BankAccountType;
99
+ beneficiary?: string | null;
100
+ bankName?: string | null;
101
+ bankAddress?: string | null;
102
+ cnapsCode?: string | null;
103
+ accountNo?: string | null;
104
+ swiftCode?: string | null;
105
+ };
106
+ export type GeneratedSalesFileRow = {
107
+ id: string;
108
+ customerContractId: string;
109
+ purchaseOrderId: string;
110
+ salesOrderNoSnapshot: string;
111
+ fileType: SalesFileType;
112
+ fileName: string;
113
+ storageFileId: string;
114
+ editVersion: number;
115
+ generatedAt: string;
116
+ lastEditedAt?: string | null;
117
+ };
118
+ export type { SalesFileGenerationResult, SalesFilePreflightResult };
119
+ export type SalesPageProps = {
120
+ route: Extract<WorkbenchRoute, {
121
+ type: 'sales';
122
+ }>;
123
+ customers: WorkbenchCollection<SalesCustomerRow>;
124
+ orders: SalesOrderCollection;
125
+ lines: SalesLineCollection;
126
+ busy: boolean;
127
+ onQuery: (collection: SalesCollectionKey, query: SalesQuery) => Promise<void> | void;
128
+ onAction: (actionKey: 'save_customer_profit_rate' | 'save_derived_manual_data' | 'search_hs_code' | 'get_hs_code_detail', input: Record<string, unknown>) => Promise<unknown>;
129
+ onRouteChange: (route: WorkbenchRoute) => void;
130
+ onOpenFiles?: (order: SalesOrderRow) => void;
131
+ onSalesLineLookup?: (request: SalesLineLookupRequest) => void;
132
+ };
133
+ //# sourceMappingURL=sales-contracts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sales-contracts.d.ts","sourceRoot":"","sources":["../../../src/lib/remote-ui/sales-contracts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=sales-contracts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sales-contracts.js","sourceRoot":"","sources":["../../../src/lib/remote-ui/sales-contracts.ts"],"names":[],"mappings":""}
@@ -0,0 +1,114 @@
1
+ export declare const SettingsSections: readonly ["RISK", "COMPANY", "BANK_CNY", "BANK_USD", "PROFIT", "MONTHLY_RATE"];
2
+ export type SettingsSection = (typeof SettingsSections)[number];
3
+ export declare const BankAccountTypes: readonly ["OVERSEAS_CNY", "OVERSEAS_USD"];
4
+ export type BankAccountType = (typeof BankAccountTypes)[number];
5
+ export declare const ProfitRuleStatuses: readonly ["UNCONFIGURED", "ACTIVE"];
6
+ export type ProfitRuleStatus = (typeof ProfitRuleStatuses)[number];
7
+ export declare const SettingsHistoryTypes: readonly ["RISK", "COMPANY", "BANK", "PROFIT", "RATE"];
8
+ export type SettingsHistoryType = (typeof SettingsHistoryTypes)[number];
9
+ export declare const SettingsHistoryOperationTypes: readonly ["EDIT", "RESTORE_DEFAULT", "DELETE"];
10
+ export type SettingsHistoryOperationType = (typeof SettingsHistoryOperationTypes)[number];
11
+ export type RiskNoticeSettings = {
12
+ content: string;
13
+ revision: number;
14
+ };
15
+ export type CompanySettings = {
16
+ logoFileId: string | null;
17
+ companyNameZh: string | null;
18
+ companyNameEn: string | null;
19
+ unifiedSocialCreditCode: string | null;
20
+ addressZh: string | null;
21
+ addressEn: string | null;
22
+ phone: string | null;
23
+ email: string | null;
24
+ revision: number;
25
+ };
26
+ export type BankSettings = {
27
+ bankType: BankAccountType;
28
+ beneficiary: string;
29
+ bankName: string;
30
+ bankAddress: string;
31
+ cnapsCode: string;
32
+ accountNo: string;
33
+ swiftCode: string;
34
+ revision: number;
35
+ };
36
+ export type ProfitRuleSettings = {
37
+ status: ProfitRuleStatus;
38
+ ruleVersion: 'COMPLIANCE_V1';
39
+ minimumOrderProfitRate: string;
40
+ exchangeCostMinimum: string;
41
+ exchangeCostMaximum: string;
42
+ revision: number;
43
+ };
44
+ export type MonthlyRateSettings = {
45
+ id?: string;
46
+ year: number;
47
+ month: number;
48
+ currencyCode?: 'USD';
49
+ usdToCnyRate: string;
50
+ sourceType: 'MANUAL';
51
+ sourceReference: string;
52
+ revision?: number;
53
+ };
54
+ export type SettingsData = {
55
+ risk: RiskNoticeSettings;
56
+ company: CompanySettings;
57
+ banks: BankSettings[];
58
+ profit: ProfitRuleSettings;
59
+ rates: MonthlyRateSettings[];
60
+ };
61
+ export type SettingsSaveRequest = {
62
+ settingsType: 'risk';
63
+ expectedRevision: number;
64
+ values: {
65
+ content: string;
66
+ };
67
+ } | {
68
+ settingsType: 'company';
69
+ expectedRevision: number;
70
+ values: Omit<CompanySettings, 'revision'>;
71
+ } | {
72
+ settingsType: 'bank';
73
+ expectedRevision: number;
74
+ values: Omit<BankSettings, 'revision'>;
75
+ } | {
76
+ settingsType: 'profit';
77
+ expectedRevision: number;
78
+ values: Pick<ProfitRuleSettings, 'status' | 'minimumOrderProfitRate' | 'exchangeCostMinimum' | 'exchangeCostMaximum'>;
79
+ } | {
80
+ settingsType: 'rate';
81
+ expectedRevision: number;
82
+ values: MonthlyRateSettings;
83
+ };
84
+ export type SettingsRestoreRequest = {
85
+ settingsType: 'risk';
86
+ expectedRevision: number;
87
+ } | {
88
+ settingsType: 'company';
89
+ expectedRevision: number;
90
+ } | {
91
+ settingsType: 'bank';
92
+ bankType: BankAccountType;
93
+ expectedRevision: number;
94
+ } | {
95
+ settingsType: 'profit';
96
+ expectedRevision: number;
97
+ };
98
+ export type SettingsDeleteRateRequest = {
99
+ settingsType: 'rate';
100
+ id: string;
101
+ expectedRevision: number;
102
+ };
103
+ export type SettingsHistoryTransition<T extends {
104
+ revision: number;
105
+ }> = Readonly<{
106
+ settingsType: SettingsHistoryType;
107
+ operationType: SettingsHistoryOperationType;
108
+ snapshotVersion: 'v1';
109
+ beforeRevision: number;
110
+ afterRevision: number;
111
+ beforeSnapshot: Readonly<T>;
112
+ afterSnapshot: Readonly<T>;
113
+ }>;
114
+ //# sourceMappingURL=settings-contracts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings-contracts.d.ts","sourceRoot":"","sources":["../../../src/lib/remote-ui/settings-contracts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export const SettingsSections = ['RISK', 'COMPANY', 'BANK_CNY', 'BANK_USD', 'PROFIT', 'MONTHLY_RATE'];
2
+ export const BankAccountTypes = ['OVERSEAS_CNY', 'OVERSEAS_USD'];
3
+ export const ProfitRuleStatuses = ['UNCONFIGURED', 'ACTIVE'];
4
+ export const SettingsHistoryTypes = ['RISK', 'COMPANY', 'BANK', 'PROFIT', 'RATE'];
5
+ export const SettingsHistoryOperationTypes = ['EDIT', 'RESTORE_DEFAULT', 'DELETE'];
6
+ //# sourceMappingURL=settings-contracts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings-contracts.js","sourceRoot":"","sources":["../../../src/lib/remote-ui/settings-contracts.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,CAAU,CAAA;AAG9G,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,cAAc,EAAE,cAAc,CAAU,CAAA;AAEzE,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,cAAc,EAAE,QAAQ,CAAU,CAAA;AAErE,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAU,CAAA;AAE1F,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,MAAM,EAAE,iBAAiB,EAAE,QAAQ,CAAU,CAAA"}
@@ -0,0 +1,18 @@
1
+ type UploadFileDescriptor = {
2
+ name: string;
3
+ type: string;
4
+ size: number;
5
+ };
6
+ export type UploadPolicy = {
7
+ maxUploadMb: number;
8
+ };
9
+ export declare const DEFAULT_UPLOAD_POLICY: Readonly<UploadPolicy>;
10
+ export declare function normalizeUploadPolicy(value: unknown): UploadPolicy;
11
+ export declare function configureUploadPolicy(value: UploadPolicy): UploadPolicy;
12
+ export declare function getConfiguredUploadPolicy(): UploadPolicy;
13
+ export declare function validateUploadFile(file: UploadFileDescriptor, accept?: string, policy?: UploadPolicy): {
14
+ extension: string;
15
+ mimeType: string;
16
+ };
17
+ export {};
18
+ //# sourceMappingURL=upload-policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload-policy.d.ts","sourceRoot":"","sources":["../../../src/lib/remote-ui/upload-policy.ts"],"names":[],"mappings":"AAAA,KAAK,oBAAoB,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,CAAA;AAClD,eAAO,MAAM,qBAAqB,EAAE,QAAQ,CAAC,YAAY,CAAsC,CAAA;AAI/F,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY,CAKlE;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,YAAY,GAAG,YAAY,CAGvE;AAED,wBAAgB,yBAAyB,IAAI,YAAY,CAExD;AAcD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,oBAAoB,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,GAAE,YAAqC,GAAG;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CActK"}
@@ -0,0 +1,56 @@
1
+ export const DEFAULT_UPLOAD_POLICY = Object.freeze({ maxUploadMb: 20 });
2
+ let configuredUploadPolicy = { ...DEFAULT_UPLOAD_POLICY };
3
+ export function normalizeUploadPolicy(value) {
4
+ const maxUploadMb = value && typeof value === 'object' && !Array.isArray(value)
5
+ ? Number(value.maxUploadMb)
6
+ : Number.NaN;
7
+ return { maxUploadMb: Number.isInteger(maxUploadMb) && maxUploadMb > 0 ? maxUploadMb : DEFAULT_UPLOAD_POLICY.maxUploadMb };
8
+ }
9
+ export function configureUploadPolicy(value) {
10
+ configuredUploadPolicy = normalizeUploadPolicy(value);
11
+ return { ...configuredUploadPolicy };
12
+ }
13
+ export function getConfiguredUploadPolicy() {
14
+ return { ...configuredUploadPolicy };
15
+ }
16
+ const MIME_TYPES_BY_EXTENSION = {
17
+ pdf: ['application/pdf'],
18
+ doc: ['application/msword'],
19
+ docx: ['application/vnd.openxmlformats-officedocument.wordprocessingml.document'],
20
+ xls: ['application/vnd.ms-excel'],
21
+ xlsx: ['application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'],
22
+ png: ['image/png'],
23
+ jpg: ['image/jpeg'],
24
+ jpeg: ['image/jpeg'],
25
+ webp: ['image/webp']
26
+ };
27
+ export function validateUploadFile(file, accept, policy = configuredUploadPolicy) {
28
+ if (!Number.isFinite(file.size) || file.size < 0)
29
+ throw new Error('无法确认上传文件大小');
30
+ const normalizedPolicy = normalizeUploadPolicy(policy);
31
+ if (file.size > normalizedPolicy.maxUploadMb * 1024 * 1024)
32
+ throw new Error(`文件不能超过 ${normalizedPolicy.maxUploadMb} MB`);
33
+ const extension = file.name.trim().split('.').pop()?.toLocaleLowerCase() ?? '';
34
+ const allowedMimeTypes = MIME_TYPES_BY_EXTENSION[extension];
35
+ if (!allowedMimeTypes)
36
+ throw new Error('仅支持 PDF、Word、Excel、PNG、JPEG 和 WEBP 文件');
37
+ const mimeType = file.type.trim().toLocaleLowerCase();
38
+ if (mimeType && !allowedMimeTypes.includes(mimeType))
39
+ throw new Error('文件扩展名与 MIME 类型不匹配');
40
+ if (accept && !matchesAccept(extension, mimeType || allowedMimeTypes[0], accept))
41
+ throw new Error('文件类型不符合当前上传要求');
42
+ return { extension, mimeType: mimeType || allowedMimeTypes[0] };
43
+ }
44
+ function matchesAccept(extension, mimeType, accept) {
45
+ const rules = accept.split(',').map((value) => value.trim().toLocaleLowerCase()).filter(Boolean);
46
+ if (!rules.length)
47
+ return true;
48
+ return rules.some((rule) => {
49
+ if (rule.startsWith('.'))
50
+ return rule.slice(1) === extension;
51
+ if (rule.endsWith('/*'))
52
+ return mimeType.startsWith(`${rule.slice(0, -1)}`);
53
+ return rule === mimeType;
54
+ });
55
+ }
56
+ //# sourceMappingURL=upload-policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload-policy.js","sourceRoot":"","sources":["../../../src/lib/remote-ui/upload-policy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ import { type BankAccountType, type EnglishNameSource, type HsCodeSource, type HsCodeStatus, type AnalyticsQuery, type ProfitRuleStatus, type PurchaseOrderLineSourceType, type RefundRateSource, type RefundValidationMethod, type RestoreSettingsInput, type SettingsType, type VatRateSource } from './types.js';
2
+ export declare function parseSettingsType(value: unknown): SettingsType;
3
+ export declare function parseRestoreSettingsInput(input: Record<string, unknown>): RestoreSettingsInput;
4
+ export declare function parseExpectedRevision(value: unknown, allowZero?: boolean): number;
5
+ export declare function parseProfitRuleStatus(value: unknown): ProfitRuleStatus;
6
+ export declare function parseBankAccountType(value: unknown): BankAccountType;
7
+ export declare function parseAnalyticsQuery(input: Record<string, unknown>): AnalyticsQuery;
8
+ export declare function parseExchangeRateInput(input: {
9
+ year?: unknown;
10
+ month?: unknown;
11
+ usdToCnyRate?: unknown;
12
+ sourceType?: unknown;
13
+ }): {
14
+ year: number;
15
+ month: number;
16
+ usdToCnyRate: string;
17
+ sourceType: "MANUAL";
18
+ };
19
+ export declare function validateBankSettingsInput(input: Record<string, unknown>): {
20
+ bankType: "OVERSEAS_CNY" | "OVERSEAS_USD";
21
+ beneficiary: string;
22
+ bankName: string;
23
+ bankAddress: string;
24
+ cnapsCode: string;
25
+ accountNo: string;
26
+ swiftCode: string;
27
+ };
28
+ export declare function validateProfitSettingsInput(input: Record<string, unknown>): {
29
+ status: "UNCONFIGURED" | "ACTIVE";
30
+ minimumOrderProfitRate: string;
31
+ exchangeCostMinimum: string;
32
+ exchangeCostMaximum: string;
33
+ };
34
+ export declare function sanitizeRiskNoticeContent(value: unknown): string;
35
+ export declare function validateTaxRates(input: {
36
+ vatRate?: unknown;
37
+ refundRate?: unknown;
38
+ }, context?: Record<string, unknown>): {
39
+ vatRate: string;
40
+ refundRate: string;
41
+ };
42
+ export interface PurchaseLineDiscriminatorInput {
43
+ sourceType?: unknown;
44
+ englishNameSource?: unknown;
45
+ vatRateSource?: unknown;
46
+ hsCodeStatus?: unknown;
47
+ hsCodeSource?: unknown;
48
+ refundRateSource?: unknown;
49
+ refundValidationMethod?: unknown;
50
+ }
51
+ export interface ValidatedPurchaseLineDiscriminators {
52
+ sourceType?: PurchaseOrderLineSourceType | null;
53
+ englishNameSource?: EnglishNameSource | null;
54
+ vatRateSource?: VatRateSource | null;
55
+ hsCodeStatus?: HsCodeStatus | null;
56
+ hsCodeSource?: HsCodeSource | null;
57
+ refundRateSource?: RefundRateSource | null;
58
+ refundValidationMethod?: RefundValidationMethod | null;
59
+ }
60
+ export declare function validatePurchaseLineDiscriminators(input: PurchaseLineDiscriminatorInput): ValidatedPurchaseLineDiscriminators;
61
+ //# sourceMappingURL=runtime-validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-validation.d.ts","sourceRoot":"","sources":["../../src/lib/runtime-validation.ts"],"names":[],"mappings":"AAEA,OAAO,EAIW,KAAK,eAAe,EAAE,KAAK,iBAAiB,EAAE,KAAK,YAAY,EAAE,KAAK,YAAY,EAClG,KAAK,cAAc,EAAE,KAAK,gBAAgB,EAAiC,KAAK,2BAA2B,EAAE,KAAK,gBAAgB,EAAE,KAAK,sBAAsB,EAAE,KAAK,oBAAoB,EAC1L,KAAK,YAAY,EAAE,KAAK,aAAa,EACtC,MAAM,YAAY,CAAA;AAEnB,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY,CAE9D;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,oBAAoB,CAM9F;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,UAAQ,UAItE;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,gBAAgB,CAEtE;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,eAAe,CAEpE;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,cAAc,CAqBlF;AAqBD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAAE;;;;;EAS9H;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;;;;;;EAQvE;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;;;EASzE;AAID,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAWhE;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAAE,EAAE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;;;EAKzH;AAED,MAAM,WAAW,8BAA8B;IAC7C,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,sBAAsB,CAAC,EAAE,OAAO,CAAA;CACjC;AAED,MAAM,WAAW,mCAAmC;IAClD,UAAU,CAAC,EAAE,2BAA2B,GAAG,IAAI,CAAA;IAC/C,iBAAiB,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAA;IAC5C,aAAa,CAAC,EAAE,aAAa,GAAG,IAAI,CAAA;IACpC,YAAY,CAAC,EAAE,YAAY,GAAG,IAAI,CAAA;IAClC,YAAY,CAAC,EAAE,YAAY,GAAG,IAAI,CAAA;IAClC,gBAAgB,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAA;IAC1C,sBAAsB,CAAC,EAAE,sBAAsB,GAAG,IAAI,CAAA;CACvD;AAED,wBAAgB,kCAAkC,CAAC,KAAK,EAAE,8BAA8B,GAAG,mCAAmC,CAU7H"}