@cobre-npm/library-portal-core 0.37.0 → 0.38.0
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 +19 -6
- package/dist/movements/index.d.ts +1 -1
- package/dist/movements/index.d.ts.map +1 -1
- package/dist/movements/status/catalog.d.ts +24 -1
- package/dist/movements/status/catalog.d.ts.map +1 -1
- package/dist/movements/status/catalog.js +11 -11
- package/dist/movements/status/catalog.js.map +1 -1
- package/dist/movements/status/locales/en.json +15 -0
- package/dist/movements/status/locales/es-mex.json +15 -0
- package/dist/movements/status/utils/movement-status.utils.d.ts +15 -1
- package/dist/movements/status/utils/movement-status.utils.d.ts.map +1 -1
- package/dist/movements/status/utils/movement-status.utils.js +27 -2
- package/dist/movements/status/utils/movement-status.utils.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -136,15 +136,15 @@ one-off predicates even where `queryX()` exists.
|
|
|
136
136
|
| Class | When | Signature | Examples |
|
|
137
137
|
|---|---|---|---|
|
|
138
138
|
| **With i18n** | the label depends on the language | `getX(lang)` | accountTypes, counterpartyTypes, movementTypes, transactionTypes, countries, countriesISO, documentTypes |
|
|
139
|
-
| **Without i18n** | the label is fixed (or there is none) | `getX()` | currencies (inline label), accountProviders
|
|
139
|
+
| **Without i18n** | the label is fixed (or there is none) | `getX()` | currencies (inline label), accountProviders |
|
|
140
140
|
|
|
141
|
-
`currencies`/`providers
|
|
141
|
+
`currencies`/`providers` **don't take `lang`** because there's no translation — the signature is honest.
|
|
142
142
|
|
|
143
143
|
### Type convention
|
|
144
144
|
|
|
145
145
|
- **`XOption`** = the catalog record **+ `label`** (what `getX(lang)` returns in i18n domains). This is the type
|
|
146
146
|
consumers use to type results.
|
|
147
|
-
- **`XRecord`** = the raw record. In non-i18n domains (currencies/providers
|
|
147
|
+
- **`XRecord`** = the raw record. In non-i18n domains (currencies/providers) it is the result type
|
|
148
148
|
(the label is already inline); in i18n domains it is **internal** (only input to `XOption`) and is not exported.
|
|
149
149
|
- **`X`** (e.g. `AccountType`, `Currency`) = the union of codes. Always public (for typing variables/params).
|
|
150
150
|
|
|
@@ -222,14 +222,16 @@ hasCountryISOFlag("col") // true — whether a flag asset is avai
|
|
|
222
222
|
import {
|
|
223
223
|
getMovementTypes, queryMovementTypes, type MovementType, type MovementTypeGroupLabel,
|
|
224
224
|
type MovementTypeOption, type MovementTypeQuery,
|
|
225
|
-
getMovementStatuses, type MovementStatus, type
|
|
225
|
+
getMovementStatuses, queryMovementStatuses, type MovementStatus, type MovementStatusType,
|
|
226
|
+
type MovementStatusOption, type MovementStatusQuery,
|
|
226
227
|
} from "@cobre-npm/library-portal-core/movements"
|
|
227
228
|
|
|
228
229
|
getMovementTypes("en").ach.label // "ACH"
|
|
229
230
|
getMovementTypes("en").on_ramp.groupLabel // "Stablecoin"
|
|
230
231
|
getMovementTypes("en").on_ramp.label // "On Ramp" (individual label, unchanged)
|
|
231
232
|
queryMovementTypes({ lang: "en", groupLabel: "Stablecoin" }) // global, off_ramp, on_ramp, stable_payout
|
|
232
|
-
getMovementStatuses().completed
|
|
233
|
+
getMovementStatuses("en").completed // { code: "completed", label: "Completed", type: "success", icon: "icon-check" }
|
|
234
|
+
queryMovementStatuses({ lang: "en", type: "error" }) // error, failed, rejected — localized
|
|
233
235
|
```
|
|
234
236
|
|
|
235
237
|
- **types** (i18n): movement types (ACH, SPEI, R2P, …). `on_ramp`/`off_ramp`/`stable_payout`/`global`
|
|
@@ -247,7 +249,18 @@ getMovementStatuses().completed // { code: "completed" }
|
|
|
247
249
|
```ts
|
|
248
250
|
queryMovementTypes({ lang, ...(group.value ? { groupLabel: group.value } : {}) })
|
|
249
251
|
```
|
|
250
|
-
- **status** (
|
|
252
|
+
- **status** (i18n): movement statuses (`initiated`, `processing`, `completed`, …). Each record also
|
|
253
|
+
carries `type: MovementStatusType` (`success | warning | error | info | neutral | pending`) — a
|
|
254
|
+
Design-System-agnostic classification, not a UI component's prop value. Note it's `pending`, not
|
|
255
|
+
`status-pending`: the latter is a `ds-v3` `CobreBadge` variant name, and using it would tie this
|
|
256
|
+
library to that Design System. Mapping `type` to an actual badge variant/CSS class is each consumer's
|
|
257
|
+
job. `icon` is present on 9 of the 11 statuses (`under_review` and `pending_funds` have none) — unlike
|
|
258
|
+
`type`, `icon` **is** coupled to the portal's current icon set (its values are that set's class names);
|
|
259
|
+
a consumer without it should map its own icon from `code`/`type` instead.
|
|
260
|
+
- **status query** (i18n `queryX()`): `queryMovementStatuses({ lang, ...filters })` — `code` and `type`
|
|
261
|
+
are the filterable fields; there's no `label` filter, same as every other `queryX()` here. `type` is
|
|
262
|
+
the real use case: `queryMovementStatuses({ lang, type: "error" })` returns `error`, `failed`,
|
|
263
|
+
`rejected`, replacing a hand-maintained list of codes with a query.
|
|
251
264
|
|
|
252
265
|
### `subclients`
|
|
253
266
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export type { MovementType, MovementTypeGroup, MovementTypeGroupLabel } from "./types/catalog";
|
|
2
2
|
export * from "./types/utils/movement-type.utils";
|
|
3
|
-
export type { MovementStatus,
|
|
3
|
+
export type { MovementStatus, MovementStatusType } from "./status/catalog";
|
|
4
4
|
export * from "./status/utils/movement-status.utils";
|
|
5
5
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/movements/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAA;AAC9F,cAAc,mCAAmC,CAAA;AAEjD,YAAY,EAAE,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/movements/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAA;AAC9F,cAAc,mCAAmC,CAAA;AAEjD,YAAY,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAC1E,cAAc,sCAAsC,CAAA"}
|
|
@@ -1,38 +1,61 @@
|
|
|
1
|
+
export type MovementStatusType = "success" | "warning" | "error" | "info" | "neutral" | "pending";
|
|
1
2
|
export declare const MOVEMENT_STATUSES: {
|
|
2
3
|
readonly initiated: {
|
|
3
4
|
readonly code: "initiated";
|
|
5
|
+
readonly type: "info";
|
|
6
|
+
readonly icon: "icon-hourglass-03";
|
|
4
7
|
};
|
|
5
8
|
readonly processing: {
|
|
6
9
|
readonly code: "processing";
|
|
10
|
+
readonly type: "info";
|
|
11
|
+
readonly icon: "icon-refresh-ccw-02";
|
|
7
12
|
};
|
|
8
13
|
readonly completed: {
|
|
9
14
|
readonly code: "completed";
|
|
15
|
+
readonly type: "success";
|
|
16
|
+
readonly icon: "icon-check";
|
|
10
17
|
};
|
|
11
18
|
readonly canceled: {
|
|
12
19
|
readonly code: "canceled";
|
|
20
|
+
readonly type: "neutral";
|
|
21
|
+
readonly icon: "icon-x-circle";
|
|
13
22
|
};
|
|
14
23
|
readonly under_review: {
|
|
15
24
|
readonly code: "under_review";
|
|
25
|
+
readonly type: "warning";
|
|
16
26
|
};
|
|
17
27
|
readonly returned: {
|
|
18
28
|
readonly code: "returned";
|
|
29
|
+
readonly type: "neutral";
|
|
30
|
+
readonly icon: "icon-flip-backward";
|
|
19
31
|
};
|
|
20
32
|
readonly rejected: {
|
|
21
33
|
readonly code: "rejected";
|
|
34
|
+
readonly type: "error";
|
|
35
|
+
readonly icon: "icon-file-question-01";
|
|
22
36
|
};
|
|
23
37
|
readonly failed: {
|
|
24
38
|
readonly code: "failed";
|
|
39
|
+
readonly type: "error";
|
|
40
|
+
readonly icon: "icon-file-x-01";
|
|
25
41
|
};
|
|
26
42
|
readonly pending_approval: {
|
|
27
43
|
readonly code: "pending_approval";
|
|
44
|
+
readonly type: "pending";
|
|
45
|
+
readonly icon: "icon-file-question-01";
|
|
28
46
|
};
|
|
29
47
|
readonly pending_funds: {
|
|
30
48
|
readonly code: "pending_funds";
|
|
49
|
+
readonly type: "warning";
|
|
31
50
|
};
|
|
32
51
|
readonly error: {
|
|
33
52
|
readonly code: "error";
|
|
53
|
+
readonly type: "error";
|
|
54
|
+
readonly icon: "icon-file-x-03";
|
|
34
55
|
};
|
|
35
56
|
};
|
|
36
57
|
export type MovementStatus = keyof typeof MOVEMENT_STATUSES;
|
|
37
|
-
export type MovementStatusRecord = (typeof MOVEMENT_STATUSES)[MovementStatus]
|
|
58
|
+
export type MovementStatusRecord = (typeof MOVEMENT_STATUSES)[MovementStatus] & {
|
|
59
|
+
readonly icon?: string;
|
|
60
|
+
};
|
|
38
61
|
//# sourceMappingURL=catalog.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../../src/movements/status/catalog.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../../src/movements/status/catalog.ts"],"names":[],"mappings":"AASA,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,CAAA;AAEjG,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAYgE,CAAA;AAE9F,MAAM,MAAM,cAAc,GAAG,MAAM,OAAO,iBAAiB,CAAA;AAM3D,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,cAAc,CAAC,GAC3E;IAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA"}
|
|
@@ -2,16 +2,16 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.MOVEMENT_STATUSES = void 0;
|
|
4
4
|
exports.MOVEMENT_STATUSES = {
|
|
5
|
-
initiated: { code: "initiated" },
|
|
6
|
-
processing: { code: "processing" },
|
|
7
|
-
completed: { code: "completed" },
|
|
8
|
-
canceled: { code: "canceled" },
|
|
9
|
-
under_review: { code: "under_review" },
|
|
10
|
-
returned: { code: "returned" },
|
|
11
|
-
rejected: { code: "rejected" },
|
|
12
|
-
failed: { code: "failed" },
|
|
13
|
-
pending_approval: { code: "pending_approval" },
|
|
14
|
-
pending_funds: { code: "pending_funds" },
|
|
15
|
-
error: { code: "error" },
|
|
5
|
+
initiated: { code: "initiated", type: "info", icon: "icon-hourglass-03" },
|
|
6
|
+
processing: { code: "processing", type: "info", icon: "icon-refresh-ccw-02" },
|
|
7
|
+
completed: { code: "completed", type: "success", icon: "icon-check" },
|
|
8
|
+
canceled: { code: "canceled", type: "neutral", icon: "icon-x-circle" },
|
|
9
|
+
under_review: { code: "under_review", type: "warning" },
|
|
10
|
+
returned: { code: "returned", type: "neutral", icon: "icon-flip-backward" },
|
|
11
|
+
rejected: { code: "rejected", type: "error", icon: "icon-file-question-01" },
|
|
12
|
+
failed: { code: "failed", type: "error", icon: "icon-file-x-01" },
|
|
13
|
+
pending_approval: { code: "pending_approval", type: "pending", icon: "icon-file-question-01" },
|
|
14
|
+
pending_funds: { code: "pending_funds", type: "warning" },
|
|
15
|
+
error: { code: "error", type: "error", icon: "icon-file-x-03" },
|
|
16
16
|
};
|
|
17
17
|
//# sourceMappingURL=catalog.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../../src/movements/status/catalog.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../../src/movements/status/catalog.ts"],"names":[],"mappings":";;;AAWa,QAAA,iBAAiB,GAAG;IAC/B,SAAS,EAAU,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,EAAE;IACjF,UAAU,EAAS,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,qBAAqB,EAAE;IACpF,SAAS,EAAU,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE;IAC7E,QAAQ,EAAW,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,eAAe,EAAE;IAC/E,YAAY,EAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,EAAE;IAC5D,QAAQ,EAAW,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,oBAAoB,EAAE;IACpF,QAAQ,EAAW,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,uBAAuB,EAAE;IACrF,MAAM,EAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE;IAC5E,gBAAgB,EAAG,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,uBAAuB,EAAE;IAC/F,aAAa,EAAM,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,SAAS,EAAE;IAC7D,KAAK,EAAc,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE;CACiB,CAAA"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"movementStatuses": {
|
|
3
|
+
"initiated": "Initiated",
|
|
4
|
+
"processing": "Processing",
|
|
5
|
+
"completed": "Completed",
|
|
6
|
+
"canceled": "Canceled",
|
|
7
|
+
"under_review": "Under Review",
|
|
8
|
+
"returned": "Returned",
|
|
9
|
+
"rejected": "Rejected",
|
|
10
|
+
"failed": "Failed",
|
|
11
|
+
"pending_approval": "Pending Approval",
|
|
12
|
+
"pending_funds": "Waiting funds",
|
|
13
|
+
"error": "Error"
|
|
14
|
+
}
|
|
15
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"movementStatuses": {
|
|
3
|
+
"initiated": "Iniciado",
|
|
4
|
+
"processing": "Procesando",
|
|
5
|
+
"completed": "Completado",
|
|
6
|
+
"canceled": "Cancelado",
|
|
7
|
+
"under_review": "Bajo revisión",
|
|
8
|
+
"returned": "Devuelto",
|
|
9
|
+
"rejected": "Rechazado",
|
|
10
|
+
"failed": "Fallido",
|
|
11
|
+
"pending_approval": "Por aprobar",
|
|
12
|
+
"pending_funds": "Esperando fondos",
|
|
13
|
+
"error": "Error"
|
|
14
|
+
}
|
|
15
|
+
}
|
|
@@ -1,3 +1,17 @@
|
|
|
1
1
|
import type { MovementStatus, MovementStatusRecord } from "../catalog";
|
|
2
|
-
|
|
2
|
+
import type { Locale } from "../../../lang";
|
|
3
|
+
import type { CatalogQuery } from "../../../utils/catalog-query.utils";
|
|
4
|
+
export type MovementStatusOption = MovementStatusRecord & {
|
|
5
|
+
label: string;
|
|
6
|
+
};
|
|
7
|
+
export declare const getMovementStatuses: (lang: Locale) => Record<MovementStatus, MovementStatusOption>;
|
|
8
|
+
/** i18n domain: `lang` is required, inside the query object — see matchesQuery for the matching rules. */
|
|
9
|
+
export type MovementStatusQuery = CatalogQuery<MovementStatusRecord> & {
|
|
10
|
+
lang: Locale;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* The catalog as a list narrowed by the query, each record enriched with its label for `query.lang`.
|
|
14
|
+
* `code` is the only filterable field — `label` is display text, added after filtering, never a query key.
|
|
15
|
+
*/
|
|
16
|
+
export declare const queryMovementStatuses: (query: MovementStatusQuery) => MovementStatusOption[];
|
|
3
17
|
//# sourceMappingURL=movement-status.utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"movement-status.utils.d.ts","sourceRoot":"","sources":["../../../../src/movements/status/utils/movement-status.utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"movement-status.utils.d.ts","sourceRoot":"","sources":["../../../../src/movements/status/utils/movement-status.utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAGtE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAE3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAA;AAItE,MAAM,MAAM,oBAAoB,GAAG,oBAAoB,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAE3E,eAAO,MAAM,mBAAmB,GAAI,MAAM,MAAM,KAAG,MAAM,CAAC,cAAc,EAAE,oBAAoB,CAS7F,CAAA;AAED,0GAA0G;AAC1G,MAAM,MAAM,mBAAmB,GAAG,YAAY,CAAC,oBAAoB,CAAC,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAA;AAEvF;;;GAGG;AACH,eAAO,MAAM,qBAAqB,GAAI,OAAO,mBAAmB,KAAG,oBAAoB,EAMtF,CAAA"}
|
|
@@ -1,7 +1,32 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getMovementStatuses = void 0;
|
|
6
|
+
exports.queryMovementStatuses = exports.getMovementStatuses = void 0;
|
|
4
7
|
const catalog_1 = require("../catalog");
|
|
5
|
-
const
|
|
8
|
+
const en_json_1 = __importDefault(require("../locales/en.json"));
|
|
9
|
+
const es_mex_json_1 = __importDefault(require("../locales/es-mex.json"));
|
|
10
|
+
const catalog_query_utils_1 = require("../../../utils/catalog-query.utils");
|
|
11
|
+
const locales = { en: en_json_1.default, "es-mex": es_mex_json_1.default };
|
|
12
|
+
const getMovementStatuses = (lang) => {
|
|
13
|
+
const locale = locales[lang];
|
|
14
|
+
const result = {};
|
|
15
|
+
for (const record of Object.values(catalog_1.MOVEMENT_STATUSES)) {
|
|
16
|
+
result[record.code] = { ...record, label: locale.movementStatuses[record.code] };
|
|
17
|
+
}
|
|
18
|
+
return result;
|
|
19
|
+
};
|
|
6
20
|
exports.getMovementStatuses = getMovementStatuses;
|
|
21
|
+
/**
|
|
22
|
+
* The catalog as a list narrowed by the query, each record enriched with its label for `query.lang`.
|
|
23
|
+
* `code` is the only filterable field — `label` is display text, added after filtering, never a query key.
|
|
24
|
+
*/
|
|
25
|
+
const queryMovementStatuses = (query) => {
|
|
26
|
+
const { lang, ...filters } = query;
|
|
27
|
+
return Object.values(catalog_1.MOVEMENT_STATUSES)
|
|
28
|
+
.filter(record => (0, catalog_query_utils_1.matchesQuery)(record, filters))
|
|
29
|
+
.map(record => ({ ...record, label: locales[lang].movementStatuses[record.code] }));
|
|
30
|
+
};
|
|
31
|
+
exports.queryMovementStatuses = queryMovementStatuses;
|
|
7
32
|
//# sourceMappingURL=movement-status.utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"movement-status.utils.js","sourceRoot":"","sources":["../../../../src/movements/status/utils/movement-status.utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"movement-status.utils.js","sourceRoot":"","sources":["../../../../src/movements/status/utils/movement-status.utils.ts"],"names":[],"mappings":";;;;;;AAAA,wCAA8C;AAE9C,iEAAyC;AACzC,yEAAgD;AAEhD,4EAAiE;AAGjE,MAAM,OAAO,GAAuC,EAAE,EAAE,EAAE,iBAAQ,EAAE,QAAQ,EAAE,qBAAW,EAAE,CAAA;AAIpF,MAAM,mBAAmB,GAAG,CAAC,IAAY,EAAgD,EAAE;IAChG,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5B,MAAM,MAAM,GAAG,EAAkD,CAAA;IAEjE,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,2BAAiB,CAAC,EAAE,CAAC;QACtD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAA;IAClF,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC,CAAA;AATY,QAAA,mBAAmB,uBAS/B;AAKD;;;GAGG;AACI,MAAM,qBAAqB,GAAG,CAAC,KAA0B,EAA0B,EAAE;IAC1F,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,EAAE,GAAG,KAAK,CAAA;IAElC,OAAO,MAAM,CAAC,MAAM,CAAC,2BAAiB,CAAC;SACpC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,IAAA,kCAAY,EAAC,MAAM,EAAE,OAAO,CAAC,CAAC;SAC/C,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;AACvF,CAAC,CAAA;AANY,QAAA,qBAAqB,yBAMjC"}
|