@nar-bus/ui-shared 1.22.0 → 2.0.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/dist/adapters/api-adapter.d.ts +5 -5
- package/dist/adapters/api-adapter.d.ts.map +1 -1
- package/dist/adapters/index.d.ts +1 -1
- package/dist/adapters/index.d.ts.map +1 -1
- package/dist/adapters/real-adapter.d.ts +5 -5
- package/dist/adapters/real-adapter.d.ts.map +1 -1
- package/dist/adapters/traceId.d.ts +24 -0
- package/dist/adapters/traceId.d.ts.map +1 -0
- package/dist/adapters/types.d.ts +41 -0
- package/dist/adapters/types.d.ts.map +1 -1
- package/dist/api/apiClient.d.ts +22 -5
- package/dist/api/apiClient.d.ts.map +1 -1
- package/dist/api/searchRequest.d.ts +1 -1
- package/dist/components/CronBuilder.d.ts +28 -1
- package/dist/components/CronBuilder.d.ts.map +1 -1
- package/dist/components/MeterStatusBadge.d.ts.map +1 -1
- package/dist/components/OrderCreateSheet.d.ts +60 -1
- package/dist/components/OrderCreateSheet.d.ts.map +1 -1
- package/dist/components/OrderDetailSheet.d.ts +15 -1
- package/dist/components/OrderDetailSheet.d.ts.map +1 -1
- package/dist/components/detail-layout/ReadingHeatmap.d.ts +20 -2
- package/dist/components/detail-layout/ReadingHeatmap.d.ts.map +1 -1
- package/dist/components/detail-layout/TriColumnSymmetric.d.ts +16 -1
- package/dist/components/detail-layout/TriColumnSymmetric.d.ts.map +1 -1
- package/dist/components/detail-layout/adapters.d.ts.map +1 -1
- package/dist/components/detail-layout/types.d.ts +46 -18
- package/dist/components/detail-layout/types.d.ts.map +1 -1
- package/dist/components/form-sheet/FormSheet.d.ts +1 -1
- package/dist/components/form-sheet/ReadonlySheet.d.ts +1 -1
- package/dist/components/hourly-month-grid/HourStrip.d.ts.map +1 -1
- package/dist/components/hourly-month-grid/HourlyGridLegend.d.ts +4 -2
- package/dist/components/hourly-month-grid/HourlyGridLegend.d.ts.map +1 -1
- package/dist/components/hourly-month-grid/HourlyMonthGrid.d.ts +45 -0
- package/dist/components/hourly-month-grid/HourlyMonthGrid.d.ts.map +1 -1
- package/dist/components/hourly-month-grid/index.d.ts +1 -1
- package/dist/components/hourly-month-grid/index.d.ts.map +1 -1
- package/dist/components/index.d.ts +4 -4
- package/dist/components/index.d.ts.map +1 -1
- package/dist/hooks/index.d.ts +1 -1
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/useEnumValues.d.ts +66 -1
- package/dist/hooks/useEnumValues.d.ts.map +1 -1
- package/dist/index.css +1 -1
- package/dist/index.d.ts +11 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13043 -12625
- package/dist/mocks/periodic-jobs.json.d.ts +5 -5
- package/dist/types/audit.types.d.ts +27 -0
- package/dist/types/audit.types.d.ts.map +1 -0
- package/dist/types/auth.types.d.ts +98 -9
- package/dist/types/auth.types.d.ts.map +1 -1
- package/dist/types/brand-model.types.d.ts +25 -1
- package/dist/types/brand-model.types.d.ts.map +1 -1
- package/dist/types/calendar.types.d.ts +3 -0
- package/dist/types/calendar.types.d.ts.map +1 -1
- package/dist/types/directive.types.d.ts +3 -0
- package/dist/types/directive.types.d.ts.map +1 -1
- package/dist/types/firmware.types.d.ts +5 -1
- package/dist/types/firmware.types.d.ts.map +1 -1
- package/dist/types/index.d.ts +5 -3
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/location.types.d.ts +21 -1
- package/dist/types/location.types.d.ts.map +1 -1
- package/dist/types/management.types.d.ts +165 -9
- package/dist/types/management.types.d.ts.map +1 -1
- package/dist/types/meter.types.d.ts +122 -1
- package/dist/types/meter.types.d.ts.map +1 -1
- package/dist/types/modem.types.d.ts +67 -3
- package/dist/types/modem.types.d.ts.map +1 -1
- package/dist/types/order.types.d.ts +15 -0
- package/dist/types/order.types.d.ts.map +1 -1
- package/dist/types/parser-template.types.d.ts +9 -2
- package/dist/types/parser-template.types.d.ts.map +1 -1
- package/dist/types/protocol.types.d.ts +3 -0
- package/dist/types/protocol.types.d.ts.map +1 -1
- package/dist/types/reading-setting.types.d.ts +3 -0
- package/dist/types/reading-setting.types.d.ts.map +1 -1
- package/dist/types/server-config.types.d.ts +7 -0
- package/dist/types/server-config.types.d.ts.map +1 -1
- package/dist/types/simcard.types.d.ts +3 -0
- package/dist/types/simcard.types.d.ts.map +1 -1
- package/dist/utils/orderReason.d.ts +50 -0
- package/dist/utils/orderReason.d.ts.map +1 -0
- package/package.json +3 -3
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { ApiResponse, SearchRequest } from './types';
|
|
1
|
+
import { ApiRequestOptions, ApiResponse, SearchRequest } from './types';
|
|
2
2
|
export interface ApiAdapter {
|
|
3
|
-
get<T>(url: string, params?: Record<string, string
|
|
4
|
-
post<T>(url: string, body: unknown): Promise<ApiResponse<T>>;
|
|
5
|
-
put<T>(url: string, body: unknown): Promise<ApiResponse<T>>;
|
|
6
|
-
delete<T>(url: string): Promise<ApiResponse<T>>;
|
|
3
|
+
get<T>(url: string, params?: Record<string, string>, options?: ApiRequestOptions): Promise<ApiResponse<T>>;
|
|
4
|
+
post<T>(url: string, body: unknown, options?: ApiRequestOptions): Promise<ApiResponse<T>>;
|
|
5
|
+
put<T>(url: string, body: unknown, options?: ApiRequestOptions): Promise<ApiResponse<T>>;
|
|
6
|
+
delete<T>(url: string, options?: ApiRequestOptions): Promise<ApiResponse<T>>;
|
|
7
7
|
search<T>(url: string, request: SearchRequest): Promise<ApiResponse<T[]>>;
|
|
8
8
|
}
|
|
9
9
|
//# sourceMappingURL=api-adapter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/api-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"api-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/api-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7E,MAAM,WAAW,UAAU;IACzB,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3G,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1F,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IACzF,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7E,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;CAC3E"}
|
package/dist/adapters/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ApiAdapter } from './api-adapter';
|
|
2
2
|
export type { ApiAdapter } from './api-adapter';
|
|
3
|
-
export type { ApiResponse, ApiError, FieldError, PageMeta, PageRequest, SearchRequest, FilterItem, } from './types';
|
|
3
|
+
export type { ApiRequestOptions, ApiResponse, ApiError, FieldError, PageMeta, PageRequest, SearchRequest, FilterItem, } from './types';
|
|
4
4
|
export { MockAdapter } from './mock-adapter';
|
|
5
5
|
export { RealAdapter, setTokenProvider } from './real-adapter';
|
|
6
6
|
export interface ApiConfig {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAIhD,YAAY,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,YAAY,EACV,WAAW,EACX,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,WAAW,EACX,aAAa,EACb,UAAU,GACX,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAE/D,MAAM,WAAW,SAAS;IACxB,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAMD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAIpD;AASD;;;;;GAKG;AACH,eAAO,MAAM,GAAG,EAAE,UAMhB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAIhD,YAAY,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,YAAY,EACV,iBAAiB,EACjB,WAAW,EACX,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,WAAW,EACX,aAAa,EACb,UAAU,GACX,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAE/D,MAAM,WAAW,SAAS;IACxB,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAMD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAIpD;AASD;;;;;GAKG;AACH,eAAO,MAAM,GAAG,EAAE,UAMhB,CAAC"}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { ApiAdapter } from './api-adapter';
|
|
2
|
-
import { ApiResponse, SearchRequest } from './types';
|
|
2
|
+
import { ApiRequestOptions, ApiResponse, SearchRequest } from './types';
|
|
3
3
|
export declare function setTokenProvider(provider: () => string | null): void;
|
|
4
4
|
export declare class RealAdapter implements ApiAdapter {
|
|
5
5
|
private http;
|
|
6
6
|
constructor(baseUrl?: string);
|
|
7
|
-
get<T>(url: string, params?: Record<string, string
|
|
8
|
-
post<T>(url: string, body: unknown): Promise<ApiResponse<T>>;
|
|
9
|
-
put<T>(url: string, body: unknown): Promise<ApiResponse<T>>;
|
|
10
|
-
delete<T>(url: string): Promise<ApiResponse<T>>;
|
|
7
|
+
get<T>(url: string, params?: Record<string, string>, options?: ApiRequestOptions): Promise<ApiResponse<T>>;
|
|
8
|
+
post<T>(url: string, body: unknown, options?: ApiRequestOptions): Promise<ApiResponse<T>>;
|
|
9
|
+
put<T>(url: string, body: unknown, options?: ApiRequestOptions): Promise<ApiResponse<T>>;
|
|
10
|
+
delete<T>(url: string, options?: ApiRequestOptions): Promise<ApiResponse<T>>;
|
|
11
11
|
search<T>(url: string, request: SearchRequest): Promise<ApiResponse<T[]>>;
|
|
12
12
|
}
|
|
13
13
|
//# sourceMappingURL=real-adapter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"real-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/real-adapter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"real-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/real-adapter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAK7E,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,MAAM,GAAG,IAAI,GAAG,IAAI,CAEpE;AAqLD,qBAAa,WAAY,YAAW,UAAU;IAC5C,OAAO,CAAC,IAAI,CAAgB;gBAEhB,OAAO,GAAE,MAAW;IAI1B,GAAG,CAAC,CAAC,EACT,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IASpB,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAazF,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IASxF,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAS5E,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC;CAQhF"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NB-TRACE-W3C-01 — the `X-Trace-Id` value, in the shape the backend accepts.
|
|
3
|
+
*
|
|
4
|
+
* The backend's `TraceIdFilter` (lena-observability-sdk, plan T12) honours an
|
|
5
|
+
* inbound `X-Trace-Id` only when `W3CTrace.normaliseTraceId` can read it as a
|
|
6
|
+
* W3C trace-id: 32 lowercase hex, not all zeroes (a dashed UUID is accepted
|
|
7
|
+
* after its dashes are stripped). Anything else is dropped and a fresh id is
|
|
8
|
+
* minted server-side — which is what happened to the old
|
|
9
|
+
* `Date.now().toString(36) + "-" + random-base36` value: the id shown in the
|
|
10
|
+
* browser's network tab never matched the `traceId` in the logs, so a trace
|
|
11
|
+
* could not start in the browser (plan T13).
|
|
12
|
+
*
|
|
13
|
+
* The id is sent as-is, never derived: the backend deliberately does not hash
|
|
14
|
+
* an unreadable id into shape, because a derived value would again differ from
|
|
15
|
+
* the one the browser shows.
|
|
16
|
+
*
|
|
17
|
+
* No `traceparent` header is sent from the browser. The backend reads only
|
|
18
|
+
* `X-Trace-Id` at the edge and builds `traceparent` itself for the services
|
|
19
|
+
* behind it; a new request header would also need every gateway's CORS
|
|
20
|
+
* allow-list to grow, while `X-Trace-Id` is already allowed.
|
|
21
|
+
*/
|
|
22
|
+
/** A W3C trace-id: 32 lowercase hex characters, never all zeroes. */
|
|
23
|
+
export declare function generateTraceId(): string;
|
|
24
|
+
//# sourceMappingURL=traceId.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"traceId.d.ts","sourceRoot":"","sources":["../../src/adapters/traceId.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAsBH,qEAAqE;AACrE,wBAAgB,eAAe,IAAI,MAAM,CAQxC"}
|
package/dist/adapters/types.d.ts
CHANGED
|
@@ -9,6 +9,47 @@ export interface ApiError {
|
|
|
9
9
|
params?: Record<string, string>;
|
|
10
10
|
details?: FieldError[];
|
|
11
11
|
}
|
|
12
|
+
/**
|
|
13
|
+
* NB-APICLIENT-TIMEOUT-01 — per-request transport options for `apiGet` /
|
|
14
|
+
* `apiPost` / `apiPut` / `apiDelete` (and the matching `api.*` adapter calls).
|
|
15
|
+
*
|
|
16
|
+
* Every field is optional and omitting the object keeps the request exactly as
|
|
17
|
+
* before: the client-wide 30 s timeout, no cancellation, JSON envelope parsing.
|
|
18
|
+
* Authorization, `X-Trace-Id` and the `AUTH_010`/`AUTH_011` refresh hook apply
|
|
19
|
+
* to every request regardless of these options. The mock adapter ignores them.
|
|
20
|
+
*/
|
|
21
|
+
export interface ApiRequestOptions {
|
|
22
|
+
/**
|
|
23
|
+
* Client timeout for this request in milliseconds, replacing the 30 s
|
|
24
|
+
* default (e.g. a long synchronous import the gateway allows 300 s for).
|
|
25
|
+
* `0` disables the client timeout; fractions are rounded up (so `0.4` is
|
|
26
|
+
* 1 ms, never "no timeout"). Negative or non-finite values are ignored
|
|
27
|
+
* (the default applies); values above 2147483647 are clamped to it, because
|
|
28
|
+
* timers overflow beyond that and would fire immediately.
|
|
29
|
+
* A request that times out still resolves with `NETWORK_ERROR`, as today.
|
|
30
|
+
*/
|
|
31
|
+
timeoutMs?: number;
|
|
32
|
+
/**
|
|
33
|
+
* Cancels the request when aborted (also when already aborted). A cancelled
|
|
34
|
+
* request resolves — it never rejects — with
|
|
35
|
+
* `{ status: "error", error: { code: "REQUEST_CANCELED" } }`, so a caller can
|
|
36
|
+
* tell its own abort apart from a network failure.
|
|
37
|
+
*/
|
|
38
|
+
signal?: AbortSignal;
|
|
39
|
+
/**
|
|
40
|
+
* How a successful body is returned:
|
|
41
|
+
* - `"json"` (default) — the server's envelope, unchanged behaviour;
|
|
42
|
+
* - `"blob"` — the raw bytes as `{ status: "success", data: Blob }` (CSV with
|
|
43
|
+
* its byte-order mark intact, XLSX, PDF…);
|
|
44
|
+
* - `"text"` — the raw body as `{ status: "success", data: string }`.
|
|
45
|
+
* The browser's UTF-8 decoder drops a leading byte-order mark; use `"blob"`
|
|
46
|
+
* when the exact bytes matter.
|
|
47
|
+
*
|
|
48
|
+
* Error responses are decoded to the server's JSON error envelope in every
|
|
49
|
+
* mode, so error codes (and the 401 refresh hook) work for downloads too.
|
|
50
|
+
*/
|
|
51
|
+
responseType?: "json" | "blob" | "text";
|
|
52
|
+
}
|
|
12
53
|
export interface FieldError {
|
|
13
54
|
field: string;
|
|
14
55
|
code: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/adapters/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC;IAC5B,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,KAAK,CAAC,EAAE,QAAQ,CAAC;CAClB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CAC1B"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/adapters/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC;IAC5B,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,KAAK,CAAC,EAAE,QAAQ,CAAC;CAClB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC;CACxB;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB;;;;;;;;;;;OAWG;IACH,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;CACzC;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CAC1B"}
|
package/dist/api/apiClient.d.ts
CHANGED
|
@@ -1,9 +1,26 @@
|
|
|
1
|
-
import { ApiResponse, SearchRequest } from '../adapters/types';
|
|
1
|
+
import { ApiRequestOptions, ApiResponse, SearchRequest } from '../adapters/types';
|
|
2
|
+
/** `options` that ask for the raw bytes — `data` is a `Blob`. */
|
|
3
|
+
type BlobRequestOptions = ApiRequestOptions & {
|
|
4
|
+
responseType: "blob";
|
|
5
|
+
};
|
|
6
|
+
/** `options` that ask for the raw body — `data` is a `string`. */
|
|
7
|
+
type TextRequestOptions = ApiRequestOptions & {
|
|
8
|
+
responseType: "text";
|
|
9
|
+
};
|
|
2
10
|
export declare function setOnUnauthorized(handler: () => Promise<void>): void;
|
|
3
11
|
export declare function getErrorI18nKey(code: string): string;
|
|
4
|
-
export declare function apiGet
|
|
5
|
-
export declare function
|
|
6
|
-
export declare function
|
|
7
|
-
export declare function
|
|
12
|
+
export declare function apiGet(url: string, params: Record<string, string> | undefined, options: BlobRequestOptions): Promise<ApiResponse<Blob>>;
|
|
13
|
+
export declare function apiGet(url: string, params: Record<string, string> | undefined, options: TextRequestOptions): Promise<ApiResponse<string>>;
|
|
14
|
+
export declare function apiGet<T>(url: string, params?: Record<string, string>, options?: ApiRequestOptions): Promise<ApiResponse<T>>;
|
|
15
|
+
export declare function apiPost(url: string, body: unknown, options: BlobRequestOptions): Promise<ApiResponse<Blob>>;
|
|
16
|
+
export declare function apiPost(url: string, body: unknown, options: TextRequestOptions): Promise<ApiResponse<string>>;
|
|
17
|
+
export declare function apiPost<T>(url: string, body: unknown, options?: ApiRequestOptions): Promise<ApiResponse<T>>;
|
|
18
|
+
export declare function apiPut(url: string, body: unknown, options: BlobRequestOptions): Promise<ApiResponse<Blob>>;
|
|
19
|
+
export declare function apiPut(url: string, body: unknown, options: TextRequestOptions): Promise<ApiResponse<string>>;
|
|
20
|
+
export declare function apiPut<T>(url: string, body: unknown, options?: ApiRequestOptions): Promise<ApiResponse<T>>;
|
|
21
|
+
export declare function apiDelete(url: string, options: BlobRequestOptions): Promise<ApiResponse<Blob>>;
|
|
22
|
+
export declare function apiDelete(url: string, options: TextRequestOptions): Promise<ApiResponse<string>>;
|
|
23
|
+
export declare function apiDelete<T>(url: string, options?: ApiRequestOptions): Promise<ApiResponse<T>>;
|
|
8
24
|
export declare function apiSearch<T>(url: string, request: SearchRequest): Promise<ApiResponse<T[]>>;
|
|
25
|
+
export {};
|
|
9
26
|
//# sourceMappingURL=apiClient.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apiClient.d.ts","sourceRoot":"","sources":["../../src/api/apiClient.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"apiClient.d.ts","sourceRoot":"","sources":["../../src/api/apiClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { SearchRequest } from '../adapters/types';
|
|
2
|
-
import { DataTableState } from '
|
|
2
|
+
import { DataTableState } from '@nar-bus/ui-kit';
|
|
3
3
|
export declare function buildSearchRequest(tableState: DataTableState): SearchRequest;
|
|
4
4
|
//# sourceMappingURL=searchRequest.d.ts.map
|
|
@@ -1,7 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* How the day-of-month and day-of-week fields combine when BOTH are restricted
|
|
3
|
+
* (NB-CRONBUILDER-DAY-01). The builder always edits a 5-field Unix cron, but
|
|
4
|
+
* the same component serves engines that answer this question differently:
|
|
5
|
+
*
|
|
6
|
+
* - `"or"` — Unix/vixie cron, which is what cron-utils' UNIX definition
|
|
7
|
+
* evaluates (HES calendars): `0 0 15 * 1` runs on the 15th OR on any Monday.
|
|
8
|
+
* That is a legitimate schedule, so both fields stay selectable; the summary
|
|
9
|
+
* spells the OR out and a note explains it, so it cannot be read as an
|
|
10
|
+
* intersection.
|
|
11
|
+
* - `"exclusive"` — for engines that cannot express the combination at all
|
|
12
|
+
* (Quartz needs one of the two to be `?` — management periodic jobs). Picking
|
|
13
|
+
* a specific value in one field resets the other to "every day"; an
|
|
14
|
+
* expression that still restricts both (typed into the expression box, or
|
|
15
|
+
* arriving as `value`) is flagged invalid instead of being silently rewritten.
|
|
16
|
+
*/
|
|
17
|
+
export type CronDayFieldSemantics = "or" | "exclusive";
|
|
1
18
|
export interface CronBuilderProps {
|
|
2
19
|
value: string;
|
|
3
20
|
onChange: (cron: string) => void;
|
|
21
|
+
/** @default "or" — see {@link CronDayFieldSemantics}. */
|
|
22
|
+
dayFieldSemantics?: CronDayFieldSemantics;
|
|
4
23
|
className?: string;
|
|
5
24
|
}
|
|
6
|
-
|
|
25
|
+
/**
|
|
26
|
+
* True when a 5-field cron restricts BOTH day-of-month and day-of-week — the
|
|
27
|
+
* case Unix cron evaluates as an OR and Quartz cannot express. It is the exact
|
|
28
|
+
* predicate behind the builder's OR note and its exclusive-mode error, exported
|
|
29
|
+
* so a consumer's own run preview or submit guard agrees with what the builder
|
|
30
|
+
* shows. Anything that is not five fields returns `false`.
|
|
31
|
+
*/
|
|
32
|
+
export declare function hasCronDayOrSemantics(cron: string): boolean;
|
|
33
|
+
export declare function CronBuilder({ value, onChange, dayFieldSemantics, className, }: CronBuilderProps): import("react").JSX.Element;
|
|
7
34
|
//# sourceMappingURL=CronBuilder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CronBuilder.d.ts","sourceRoot":"","sources":["../../src/components/CronBuilder.tsx"],"names":[],"mappings":"AAIA,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA4JD,wBAAgB,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"CronBuilder.d.ts","sourceRoot":"","sources":["../../src/components/CronBuilder.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;GAeG;AACH,MAAM,MAAM,qBAAqB,GAAG,IAAI,GAAG,WAAW,CAAC;AAEvD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,yDAAyD;IACzD,iBAAiB,CAAC,EAAE,qBAAqB,CAAC;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAmCD;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAI3D;AA4JD,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,QAAQ,EACR,iBAAwB,EACxB,SAAS,GACV,EAAE,gBAAgB,+BA4KlB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MeterStatusBadge.d.ts","sourceRoot":"","sources":["../../src/components/MeterStatusBadge.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C,MAAM,MAAM,qBAAqB,GAAG;IAClC,MAAM,EAAE,WAAW,CAAC;IACpB,+DAA+D;IAC/D,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,CACA;IACE,sEAAsE;IACtE,gBAAgB,EAAE,WAAW,GAAG,cAAc,GAAG,SAAS,CAAC;IAC3D,mGAAmG;IACnG,eAAe,EAAE,MAAM,CAAC;CACzB,GACD;IAAE,gBAAgB,CAAC,EAAE,SAAS,CAAC;IAAC,eAAe,CAAC,EAAE,SAAS,CAAA;CAAE,CAChE,CAAC;
|
|
1
|
+
{"version":3,"file":"MeterStatusBadge.d.ts","sourceRoot":"","sources":["../../src/components/MeterStatusBadge.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C,MAAM,MAAM,qBAAqB,GAAG;IAClC,MAAM,EAAE,WAAW,CAAC;IACpB,+DAA+D;IAC/D,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,CACA;IACE,sEAAsE;IACtE,gBAAgB,EAAE,WAAW,GAAG,cAAc,GAAG,SAAS,CAAC;IAC3D,mGAAmG;IACnG,eAAe,EAAE,MAAM,CAAC;CACzB,GACD;IAAE,gBAAgB,CAAC,EAAE,SAAS,CAAC;IAAC,eAAe,CAAC,EAAE,SAAS,CAAA;CAAE,CAChE,CAAC;AA8CF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,+BAU5D"}
|
|
@@ -1,6 +1,24 @@
|
|
|
1
1
|
import { Order, OrderType, OrderPriority } from '../types';
|
|
2
2
|
export type OrderCreateMode = "single" | "bulk";
|
|
3
3
|
export type OrderCreateTargetEntity = "MODEM" | "METER";
|
|
4
|
+
/**
|
|
5
|
+
* Why one target's `POST /api/orders` failed — the backend error envelope's
|
|
6
|
+
* `error.code` / `error.params`, handed on untouched. (NB-ORDER-CREATE-ERROR-01)
|
|
7
|
+
*
|
|
8
|
+
* `code` is absent only when there was no envelope to read: the request threw
|
|
9
|
+
* before the adapter could map it, or the backend answered "success" without an
|
|
10
|
+
* order. HTTP failures always carry one — the adapter maps them to
|
|
11
|
+
* `status: "error"` itself (`NETWORK_ERROR` when the server never answered).
|
|
12
|
+
*/
|
|
13
|
+
export interface OrderCreateError {
|
|
14
|
+
code?: string;
|
|
15
|
+
params?: Record<string, unknown>;
|
|
16
|
+
}
|
|
17
|
+
/** The target a create request was sent for; `meterId` only on meter orders. */
|
|
18
|
+
export interface OrderCreateTarget {
|
|
19
|
+
modemId: number;
|
|
20
|
+
meterId?: number;
|
|
21
|
+
}
|
|
4
22
|
export interface BulkOrderSubmitPayload {
|
|
5
23
|
orderType: OrderType;
|
|
6
24
|
/**
|
|
@@ -107,12 +125,53 @@ export interface OrderCreateSheetProps {
|
|
|
107
125
|
*
|
|
108
126
|
* For the legacy single-meter case (N = 1) no toast is emitted — the consumer's
|
|
109
127
|
* `onOrderCreated` callback is authoritative as before.
|
|
128
|
+
*
|
|
129
|
+
* `partial` and `failure` are followed by the reason(s) the backend gave
|
|
130
|
+
* (" — <reason>"; see {@link errorMessage}) — NB-ORDER-CREATE-ERROR-01.
|
|
110
131
|
*/
|
|
111
132
|
singleSubmitCopy?: {
|
|
112
133
|
success?: string;
|
|
113
134
|
partial?: string;
|
|
114
135
|
failure?: string;
|
|
115
136
|
};
|
|
137
|
+
/**
|
|
138
|
+
* Single-mode only — fired once per target whose create request failed, after
|
|
139
|
+
* every target has been attempted and before `onOrderCreated` (partial
|
|
140
|
+
* success) or the failure toast.
|
|
141
|
+
*
|
|
142
|
+
* NB-ORDER-CREATE-ERROR-01: the error envelope used to be dropped on the floor,
|
|
143
|
+
* so the operator only ever read "Order creation failed" — never that the meter
|
|
144
|
+
* had no matching reading setting (`READING_SETTING_NOT_MATCHED`), or that the
|
|
145
|
+
* user lacked the permission. This is the per-target list: one call per failed
|
|
146
|
+
* meter, with the meter it was for.
|
|
147
|
+
*
|
|
148
|
+
* Informational. The sheet still shows its own failure / partial toast, now
|
|
149
|
+
* carrying the reason, so do NOT toast from here — that is the double toast
|
|
150
|
+
* NB-ORDER-TOAST-01 removed. Use it to mark the failed rows, log, or keep the
|
|
151
|
+
* list for a follow-up view.
|
|
152
|
+
*/
|
|
153
|
+
onOrderCreateError?: (error: OrderCreateError, target: OrderCreateTarget) => void;
|
|
154
|
+
/**
|
|
155
|
+
* Single-mode only — words a failed target's reason for the sheet's toast.
|
|
156
|
+
*
|
|
157
|
+
* - a string → shown as-is;
|
|
158
|
+
* - `""` → no reason for that target (the toast keeps its bare copy);
|
|
159
|
+
* - `null` / `undefined` → the default below.
|
|
160
|
+
*
|
|
161
|
+
* Default: `errorCodes.<code>` (then `errors.<code>`, the
|
|
162
|
+
* {@link getErrorI18nKey} convention), looked up in
|
|
163
|
+
* {@link translationNamespace} first and the default namespace second, with
|
|
164
|
+
* `params` interpolated; a code nobody translates is shown raw — an operator
|
|
165
|
+
* reading "READING_SETTING_NOT_MATCHED" can still act on it, one reading
|
|
166
|
+
* nothing cannot. No code, no reason.
|
|
167
|
+
*/
|
|
168
|
+
errorMessage?: (error: OrderCreateError, target: OrderCreateTarget) => string | null | undefined;
|
|
169
|
+
/**
|
|
170
|
+
* i18n namespace holding the app's error vocabulary (`errorCodes.*`), as in
|
|
171
|
+
* `OrderDetailSheet`. Only the default {@link errorMessage} reads it.
|
|
172
|
+
* @default "hes"
|
|
173
|
+
*/
|
|
174
|
+
translationNamespace?: string;
|
|
116
175
|
/**
|
|
117
176
|
* Ask for confirmation before discarding a partially filled form when the sheet
|
|
118
177
|
* is dismissed via backdrop click or Escape. Default `true`.
|
|
@@ -134,5 +193,5 @@ export interface OrderCreateSheetProps {
|
|
|
134
193
|
cancel?: string;
|
|
135
194
|
};
|
|
136
195
|
}
|
|
137
|
-
export declare function OrderCreateSheet({ open, onClose, mode, modemId, modemSlug, meterId, meterSlug, modemOptions, meterOptions, relayOptions, onOrderCreated, bulkTargetModemIds, bulkTargetEntity, onBulkSubmit, bulkCopy, singleSubmitCopy, confirmOnDiscard, discardConfirmCopy, }: OrderCreateSheetProps): import("react").JSX.Element;
|
|
196
|
+
export declare function OrderCreateSheet({ open, onClose, mode, modemId, modemSlug, meterId, meterSlug, modemOptions, meterOptions, relayOptions, onOrderCreated, bulkTargetModemIds, bulkTargetEntity, onBulkSubmit, bulkCopy, singleSubmitCopy, onOrderCreateError, errorMessage, translationNamespace, confirmOnDiscard, discardConfirmCopy, }: OrderCreateSheetProps): import("react").JSX.Element;
|
|
138
197
|
//# sourceMappingURL=OrderCreateSheet.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OrderCreateSheet.d.ts","sourceRoot":"","sources":["../../src/components/OrderCreateSheet.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"OrderCreateSheet.d.ts","sourceRoot":"","sources":["../../src/components/OrderCreateSheet.tsx"],"names":[],"mappings":"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"}
|
|
@@ -15,6 +15,20 @@ export interface OrderDetailSheetProps {
|
|
|
15
15
|
* finally to the raw code. (NB-ORDER-RETRY-01)
|
|
16
16
|
*/
|
|
17
17
|
statusLabel?: (status: OrderStatus) => string;
|
|
18
|
+
/**
|
|
19
|
+
* Words one status-log reason code (`READING_SETTING_NOT_MATCHED`,
|
|
20
|
+
* `RESPONSE_PATH_STALLED`, …) for the terminal row of the status flow — the
|
|
21
|
+
* codes in `reason` and in a CODED `message` alike (NB-ORDER-STATUSLOG-MSG-01).
|
|
22
|
+
* Multi-part reasons (`A;B`) are split first, so this sees one code at a time.
|
|
23
|
+
* A free-text `message` (see `isOrderReasonCodeFormat`) never reaches this — it
|
|
24
|
+
* is shown verbatim after the worded codes.
|
|
25
|
+
*
|
|
26
|
+
* - a string → shown as-is (`""` hides that code);
|
|
27
|
+
* - `null` / `undefined` → the default: `order.diagnostic.<code>`, then
|
|
28
|
+
* `errorCodes.<code>`, each in {@link translationNamespace} before ui-kit's
|
|
29
|
+
* bundle, then the raw code. (NB-ORDER-REASON-01)
|
|
30
|
+
*/
|
|
31
|
+
reasonLabel?: (code: string) => string | null | undefined;
|
|
18
32
|
/**
|
|
19
33
|
* i18n namespace holding the app's own order vocabulary. Keys found there win
|
|
20
34
|
* over the package's, so an app can also override any `order.*` label; keys it
|
|
@@ -23,5 +37,5 @@ export interface OrderDetailSheetProps {
|
|
|
23
37
|
*/
|
|
24
38
|
translationNamespace?: string;
|
|
25
39
|
}
|
|
26
|
-
export declare function OrderDetailSheet({ open, onClose, order, orderId, onCancel, onRetry, statusLabel, translationNamespace, }: OrderDetailSheetProps): import("react").JSX.Element;
|
|
40
|
+
export declare function OrderDetailSheet({ open, onClose, order, orderId, onCancel, onRetry, statusLabel, reasonLabel, translationNamespace, }: OrderDetailSheetProps): import("react").JSX.Element;
|
|
27
41
|
//# sourceMappingURL=OrderDetailSheet.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OrderDetailSheet.d.ts","sourceRoot":"","sources":["../../src/components/OrderDetailSheet.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"OrderDetailSheet.d.ts","sourceRoot":"","sources":["../../src/components/OrderDetailSheet.tsx"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAUnD,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC;;;;;;;OAOG;IACH,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,MAAM,CAAC;IAC9C;;;;;;;;;;;;OAYG;IACH,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC1D;;;;;OAKG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAyQD,wBAAgB,gBAAgB,CAAC,EAC/B,IAAI,EACJ,OAAO,EACP,KAAK,EACL,OAAO,EACP,QAAQ,EACR,OAAO,EACP,WAAW,EACX,WAAW,EACX,oBAA0C,GAC3C,EAAE,qBAAqB,+BAoMvB"}
|
|
@@ -1,4 +1,20 @@
|
|
|
1
|
-
import { ReadingDay } from './types';
|
|
1
|
+
import { ReadingDay, DayStatus } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* LUG-HEATMAP-LABELS — per-instance calendar texts, already translated by the
|
|
4
|
+
* consumer. The `detail_hero.calendar.*` keys are global, so an app showing the
|
|
5
|
+
* same calendar with two meanings (MDM: installation = OSF fill, meter = reads)
|
|
6
|
+
* could not relabel one screen without relabelling the other. Every field is
|
|
7
|
+
* optional; a missing one falls back to its i18n key, so an instance without
|
|
8
|
+
* `labels` renders exactly as before.
|
|
9
|
+
*/
|
|
10
|
+
export interface ReadingHeatmapLabels {
|
|
11
|
+
/** Caption above the month name (default `detail_hero.calendar.title`). */
|
|
12
|
+
title?: string;
|
|
13
|
+
/** Cell text — tooltip and cell `aria-label` (default `detail_hero.calendar.status.*`). */
|
|
14
|
+
status?: Partial<Record<DayStatus, string>>;
|
|
15
|
+
/** Legend under the grid (default `detail_hero.calendar.legend.*`). */
|
|
16
|
+
legend?: Partial<Record<DayStatus, string>>;
|
|
17
|
+
}
|
|
2
18
|
interface ReadingHeatmapProps {
|
|
3
19
|
readings: ReadingDay[];
|
|
4
20
|
/** Visual size — "comfortable" (~32px cells), "compact" (~22px). */
|
|
@@ -7,7 +23,9 @@ interface ReadingHeatmapProps {
|
|
|
7
23
|
showDayNumbers?: boolean;
|
|
8
24
|
/** Show the month nav header. Set false when the parent supplies its own header. */
|
|
9
25
|
showHeader?: boolean;
|
|
26
|
+
/** LUG-HEATMAP-LABELS — overrides for this instance only (see `ReadingHeatmapLabels`). */
|
|
27
|
+
labels?: ReadingHeatmapLabels;
|
|
10
28
|
}
|
|
11
|
-
export declare function ReadingHeatmap({ readings, size, showDayNumbers, showHeader, }: ReadingHeatmapProps): import("react").JSX.Element;
|
|
29
|
+
export declare function ReadingHeatmap({ readings, size, showDayNumbers, showHeader, labels, }: ReadingHeatmapProps): import("react").JSX.Element;
|
|
12
30
|
export {};
|
|
13
31
|
//# sourceMappingURL=ReadingHeatmap.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReadingHeatmap.d.ts","sourceRoot":"","sources":["../../../src/components/detail-layout/ReadingHeatmap.tsx"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"ReadingHeatmap.d.ts","sourceRoot":"","sources":["../../../src/components/detail-layout/ReadingHeatmap.tsx"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAErD;;;;;;;GAOG;AACH,MAAM,WAAW,oBAAoB;IACnC,2EAA2E;IAC3E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2FAA2F;IAC3F,MAAM,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;IAC5C,uEAAuE;IACvE,MAAM,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;CAC7C;AAED,UAAU,mBAAmB;IAC3B,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB,oEAAoE;IACpE,IAAI,CAAC,EAAE,SAAS,GAAG,aAAa,GAAG,MAAM,CAAC;IAC1C,qEAAqE;IACrE,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,oFAAoF;IACpF,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,0FAA0F;IAC1F,MAAM,CAAC,EAAE,oBAAoB,CAAC;CAC/B;AAuCD,wBAAgB,cAAc,CAAC,EAC7B,QAAQ,EACR,IAAoB,EACpB,cAAc,EACd,UAAiB,EACjB,MAAM,GACP,EAAE,mBAAmB,+BAsNrB"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ReactNode } from 'react';
|
|
2
|
+
import { ReadingHeatmapLabels } from './ReadingHeatmap';
|
|
2
3
|
import { DetailEntity, DetailPalette } from './types';
|
|
3
4
|
interface TriColumnSymmetricProps {
|
|
4
5
|
data: DetailEntity;
|
|
@@ -8,8 +9,22 @@ interface TriColumnSymmetricProps {
|
|
|
8
9
|
* Rendered top-right of the tag chip row inside the hero glass surface.
|
|
9
10
|
*/
|
|
10
11
|
actionsSlot?: ReactNode;
|
|
12
|
+
/**
|
|
13
|
+
* NB-DETAIL-ORDERS-01 — replaces the "Active Orders" tile's tooltip content.
|
|
14
|
+
* Omitted → the package builds it from `orderSuitability` +
|
|
15
|
+
* `activeOrdersByPriority` (modem only; no tooltip when both are absent).
|
|
16
|
+
* `null` → no tooltip at all (the status dot stays). Non-interactive content
|
|
17
|
+
* only: it is also mirrored, visually hidden, as the tile's description.
|
|
18
|
+
*/
|
|
19
|
+
activeOrdersTooltip?: ReactNode;
|
|
20
|
+
/**
|
|
21
|
+
* LUG-HEATMAP-LABELS — calendar texts for THIS hero only (title, cell status,
|
|
22
|
+
* legend), forwarded to `ReadingHeatmap`. Omitted fields keep the global
|
|
23
|
+
* `detail_hero.calendar.*` keys.
|
|
24
|
+
*/
|
|
25
|
+
calendarLabels?: ReadingHeatmapLabels;
|
|
11
26
|
}
|
|
12
|
-
export declare function TriColumnSymmetric({ data, palette, actionsSlot }: TriColumnSymmetricProps): import("react").JSX.Element;
|
|
27
|
+
export declare function TriColumnSymmetric({ data, palette, actionsSlot, activeOrdersTooltip, calendarLabels, }: TriColumnSymmetricProps): import("react").JSX.Element;
|
|
13
28
|
/**
|
|
14
29
|
* FIX-407 — Hero pills collapsed from three (lifecycle + network + power)
|
|
15
30
|
* to two business-critical dimensions: fleet lifecycle (inventory state)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TriColumnSymmetric.d.ts","sourceRoot":"","sources":["../../../src/components/detail-layout/TriColumnSymmetric.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,OAAO,
|
|
1
|
+
{"version":3,"file":"TriColumnSymmetric.d.ts","sourceRoot":"","sources":["../../../src/components/detail-layout/TriColumnSymmetric.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,OAAO,EAAS,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAY9C,OAAO,EAAkB,KAAK,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAG7E,OAAO,EAAkB,KAAK,YAAY,EAAE,KAAK,aAAa,EAAE,MAAM,SAAS,CAAC;AAEhF,UAAU,uBAAuB;IAC/B,IAAI,EAAE,YAAY,CAAC;IACnB,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB;;;OAGG;IACH,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB;;;;;;OAMG;IACH,mBAAmB,CAAC,EAAE,SAAS,CAAC;IAChC;;;;OAIG;IACH,cAAc,CAAC,EAAE,oBAAoB,CAAC;CACvC;AAED,wBAAgB,kBAAkB,CAAC,EACjC,IAAI,EACJ,OAAO,EACP,WAAW,EACX,mBAAmB,EACnB,cAAc,GACf,EAAE,uBAAuB,+BA6LzB;AAED;;;;;;;;GAQG;AACH,mEAAmE;AACnE,KAAK,QAAQ,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;AAmFpE,wBAAgB,UAAU,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,+BAqB5E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapters.d.ts","sourceRoot":"","sources":["../../../src/components/detail-layout/adapters.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EACV,WAAW,EACX,WAAW,EACX,UAAU,EACV,kBAAkB,EAClB,aAAa,EACd,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EACV,UAAU,EACV,YAAY,EAGZ,UAAU,EAEX,MAAM,SAAS,CAAC;AAMjB;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,UAAU,EAAE,CAwBtE;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,MAAM,CAM9D;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,MAAM,CAMnE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CASvF;AAMD,MAAM,WAAW,kBAAkB;IACjC,+CAA+C;IAC/C,UAAU,CAAC,EAAE,UAAU,EAAE,CAAC;IAC1B;;;;OAIG;IACH,YAAY,CAAC,EAAE,UAAU,EAAE,CAAC;IAC5B,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,kBAAkB,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,kBAAkB;IACjC,mDAAmD;IACnD,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC;IACvB;;;;;OAKG;IACH,WAAW,CAAC,EAAE;QACZ,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,UAAU,EAAE,CAAC;KAC5B,CAAC;IACF,6FAA6F;IAC7F,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,aAAa,EAAE,CAAC;IAC3B;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;
|
|
1
|
+
{"version":3,"file":"adapters.d.ts","sourceRoot":"","sources":["../../../src/components/detail-layout/adapters.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EACV,WAAW,EACX,WAAW,EACX,UAAU,EACV,kBAAkB,EAClB,aAAa,EACd,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EACV,UAAU,EACV,YAAY,EAGZ,UAAU,EAEX,MAAM,SAAS,CAAC;AAMjB;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,UAAU,EAAE,CAwBtE;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,MAAM,CAM9D;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,MAAM,CAMnE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CASvF;AAMD,MAAM,WAAW,kBAAkB;IACjC,+CAA+C;IAC/C,UAAU,CAAC,EAAE,UAAU,EAAE,CAAC;IAC1B;;;;OAIG;IACH,YAAY,CAAC,EAAE,UAAU,EAAE,CAAC;IAC5B,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,kBAAkB,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,kBAAkB;IACjC,mDAAmD;IACnD,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC;IACvB;;;;;OAKG;IACH,WAAW,CAAC,EAAE;QACZ,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,UAAU,EAAE,CAAC;KAC5B,CAAC;IACF,6FAA6F;IAC7F,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,aAAa,EAAE,CAAC;IAC3B;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAoJD;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,WAAW,EAClB,MAAM,CAAC,EAAE,kBAAkB,GAC1B,YAAY,CAgDd;AAMD;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,WAAW,EAClB,MAAM,CAAC,EAAE,kBAAkB,GAC1B,YAAY,CAmCd"}
|
|
@@ -1,19 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
* STORY-222 / D-230 / AD-DETAIL-5
|
|
3
|
-
*
|
|
4
|
-
* Type contract underpinning the shared detail-layout component family.
|
|
5
|
-
*
|
|
6
|
-
* `DetailEntity` is a **discriminated union** on `kind` ("modem" | "meter").
|
|
7
|
-
* The compiler narrows to the per-kind variant inside `if (entity.kind === ...)`
|
|
8
|
-
* branches, so consumers can access modem-only fields (`firmware`, `protocol`,
|
|
9
|
-
* `signalStrength`, `meterCount`) or meter-only fields (`meterType`, `modemSlug`)
|
|
10
|
-
* without optional chaining and without accidentally reaching across kinds.
|
|
11
|
-
*
|
|
12
|
-
* Mock builders + entity literals + the deterministic PRNG live under
|
|
13
|
-
* `ui/lena-ui-kit/src/_preview/DetailLayout/mockData.ts` (preview-only Storybook
|
|
14
|
-
* fixtures). The production adapter contract lives in `./adapters.ts` and is
|
|
15
|
-
* wired against real `ModemDetail` / `MeterDetail` hook output by STORY-223.
|
|
16
|
-
*/
|
|
1
|
+
import { ActiveOrdersByPriority, ModemOrderSuitability } from '../../types';
|
|
17
2
|
export type DayStatus = "ok" | "warn" | "crit" | "noData";
|
|
18
3
|
export interface ReadingDay {
|
|
19
4
|
/** ISO yyyy-mm-dd. */
|
|
@@ -32,6 +17,17 @@ export interface AlarmEntry {
|
|
|
32
17
|
/** ISO datetime. */
|
|
33
18
|
at: string;
|
|
34
19
|
}
|
|
20
|
+
/**
|
|
21
|
+
* NB-DETAIL-LIFECYCLE-01 — header lifecycle value. The four canonical values
|
|
22
|
+
* keep their coarse fold (and tone); any other backend code (`SCRAPPED`, a
|
|
23
|
+
* status added later, …) travels VERBATIM instead of being folded into
|
|
24
|
+
* `INACTIVE` ("Pasif"). The badge reads `detail_status.lifecycle.<code>` and
|
|
25
|
+
* falls back to the raw code with a neutral tone. `(string & {})` keeps the
|
|
26
|
+
* four literals visible to autocomplete.
|
|
27
|
+
*/
|
|
28
|
+
export type DetailLifecycle = "ACTIVE" | "INACTIVE" | "MAINTENANCE" | "FAULTY" | (string & {});
|
|
29
|
+
/** NB-DETAIL-LIFECYCLE-01 — consumer-chosen tone for the lifecycle badge. */
|
|
30
|
+
export type DetailLifecycleTone = "ok" | "warn" | "crit" | "muted";
|
|
35
31
|
interface DetailEntityBase {
|
|
36
32
|
slug: string;
|
|
37
33
|
serial: string;
|
|
@@ -42,8 +38,16 @@ interface DetailEntityBase {
|
|
|
42
38
|
district: string;
|
|
43
39
|
};
|
|
44
40
|
tags: string[];
|
|
41
|
+
/**
|
|
42
|
+
* NB-DETAIL-LIFECYCLE-01 — overrides the lifecycle badge text (already
|
|
43
|
+
* translated). Omitted → `detail_status.lifecycle.<status.lifecycle>`, then
|
|
44
|
+
* the raw code.
|
|
45
|
+
*/
|
|
46
|
+
lifecycleLabel?: string;
|
|
47
|
+
/** NB-DETAIL-LIFECYCLE-01 — overrides the lifecycle badge tone. */
|
|
48
|
+
lifecycleTone?: DetailLifecycleTone;
|
|
45
49
|
status: {
|
|
46
|
-
lifecycle:
|
|
50
|
+
lifecycle: DetailLifecycle;
|
|
47
51
|
network: "CONNECTED" | "DISCONNECTED" | "UNKNOWN";
|
|
48
52
|
power?: "ON" | "OFF" | "UNKNOWN";
|
|
49
53
|
/**
|
|
@@ -71,12 +75,36 @@ export interface ModemDetailEntity extends DetailEntityBase {
|
|
|
71
75
|
kind: "modem";
|
|
72
76
|
firmware?: string;
|
|
73
77
|
protocol?: string;
|
|
74
|
-
/**
|
|
78
|
+
/**
|
|
79
|
+
* Transport-layer port (TCP/MQTT). Optional — only rendered when present,
|
|
80
|
+
* labelled "Port". Superseded in the identity card by `reportedPort` when
|
|
81
|
+
* that field is set (the two-row layout below).
|
|
82
|
+
*/
|
|
75
83
|
port?: number;
|
|
84
|
+
/**
|
|
85
|
+
* NB-DETAIL-TCPPORT-01 (LHA-604 K10) — the protocol's default port, shown
|
|
86
|
+
* as its own row right under "Protocol". `undefined` → no row; `null` → "—".
|
|
87
|
+
*/
|
|
88
|
+
protocolDefaultPort?: number | null;
|
|
89
|
+
/**
|
|
90
|
+
* NB-DETAIL-TCPPORT-01 — the port the device reported, labelled as such so it
|
|
91
|
+
* cannot be confused with the default. When set (`null` → "—") it replaces the
|
|
92
|
+
* plain "Port" row; `undefined` keeps the legacy `port` row.
|
|
93
|
+
*/
|
|
94
|
+
reportedPort?: number | null;
|
|
76
95
|
/** RSSI 0..100. */
|
|
77
96
|
signalStrength?: number;
|
|
78
97
|
/** Number of meters bound to this modem. */
|
|
79
98
|
meterCount?: number;
|
|
99
|
+
/**
|
|
100
|
+
* NB-DETAIL-ORDERS-01 — order-processing suitability. When present the
|
|
101
|
+
* "Active Orders" quick-stat gains a status dot (SUITABLE green · NO_ORDERS
|
|
102
|
+
* grey · NOT_SUITABLE red · UNKNOWN amber) and a hover/focus tooltip.
|
|
103
|
+
* Absent / null → the tile renders exactly as before.
|
|
104
|
+
*/
|
|
105
|
+
orderSuitability?: ModemOrderSuitability | null;
|
|
106
|
+
/** NB-DETAIL-ORDERS-01 — per-priority split, listed in the same tooltip. */
|
|
107
|
+
activeOrdersByPriority?: ActiveOrdersByPriority | null;
|
|
80
108
|
}
|
|
81
109
|
export interface MeterDetailEntity extends DetailEntityBase {
|
|
82
110
|
kind: "meter";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/detail-layout/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/detail-layout/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { MouseEvent as ReactMouseEvent, ReactNode } from 'react';
|
|
2
|
-
import { SheetCloseReason } from '
|
|
2
|
+
import { SheetCloseReason } from '@nar-bus/ui-kit';
|
|
3
3
|
import { FormSheetGradient } from './gradientHeader';
|
|
4
4
|
export type { FormSheetGradient };
|
|
5
5
|
/**
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { MouseEvent as ReactMouseEvent, ReactNode } from 'react';
|
|
2
|
-
import { SheetCloseReason } from '
|
|
2
|
+
import { SheetCloseReason } from '@nar-bus/ui-kit';
|
|
3
3
|
import { FormSheetGradient } from './gradientHeader';
|
|
4
4
|
/**
|
|
5
5
|
* ReadonlySheet — a footer-less view drawer (same header chrome as `FormSheet`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HourStrip.d.ts","sourceRoot":"","sources":["../../../src/components/hourly-month-grid/HourStrip.tsx"],"names":[],"mappings":"AAUA,OAAO,
|
|
1
|
+
{"version":3,"file":"HourStrip.d.ts","sourceRoot":"","sources":["../../../src/components/hourly-month-grid/HourStrip.tsx"],"names":[],"mappings":"AAUA,OAAO,EAKL,KAAK,cAAc,EACnB,KAAK,qBAAqB,EAC3B,MAAM,mBAAmB,CAAC;AAE3B,MAAM,WAAW,cAAc;IAC7B,iDAAiD;IACjD,KAAK,EAAE,CAAC,cAAc,GAAG,SAAS,CAAC,EAAE,CAAC;IACtC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;IACrD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAID,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,SAAS,GACV,EAAE,cAAc,+BAqChB"}
|