@nar-bus/ui-shared 1.21.2 → 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.
Files changed (86) hide show
  1. package/dist/adapters/api-adapter.d.ts +5 -5
  2. package/dist/adapters/api-adapter.d.ts.map +1 -1
  3. package/dist/adapters/index.d.ts +1 -1
  4. package/dist/adapters/index.d.ts.map +1 -1
  5. package/dist/adapters/real-adapter.d.ts +5 -5
  6. package/dist/adapters/real-adapter.d.ts.map +1 -1
  7. package/dist/adapters/traceId.d.ts +24 -0
  8. package/dist/adapters/traceId.d.ts.map +1 -0
  9. package/dist/adapters/types.d.ts +41 -0
  10. package/dist/adapters/types.d.ts.map +1 -1
  11. package/dist/api/apiClient.d.ts +22 -5
  12. package/dist/api/apiClient.d.ts.map +1 -1
  13. package/dist/api/searchRequest.d.ts +1 -1
  14. package/dist/components/CronBuilder.d.ts +28 -1
  15. package/dist/components/CronBuilder.d.ts.map +1 -1
  16. package/dist/components/MeterStatusBadge.d.ts.map +1 -1
  17. package/dist/components/OrderCreateSheet.d.ts +100 -1
  18. package/dist/components/OrderCreateSheet.d.ts.map +1 -1
  19. package/dist/components/OrderDetailSheet.d.ts +15 -1
  20. package/dist/components/OrderDetailSheet.d.ts.map +1 -1
  21. package/dist/components/detail-layout/ReadingHeatmap.d.ts +20 -2
  22. package/dist/components/detail-layout/ReadingHeatmap.d.ts.map +1 -1
  23. package/dist/components/detail-layout/TriColumnSymmetric.d.ts +16 -1
  24. package/dist/components/detail-layout/TriColumnSymmetric.d.ts.map +1 -1
  25. package/dist/components/detail-layout/adapters.d.ts.map +1 -1
  26. package/dist/components/detail-layout/types.d.ts +46 -18
  27. package/dist/components/detail-layout/types.d.ts.map +1 -1
  28. package/dist/components/form-sheet/FormSheet.d.ts +1 -1
  29. package/dist/components/form-sheet/ReadonlySheet.d.ts +1 -1
  30. package/dist/components/hourly-month-grid/HourStrip.d.ts.map +1 -1
  31. package/dist/components/hourly-month-grid/HourlyGridLegend.d.ts +4 -2
  32. package/dist/components/hourly-month-grid/HourlyGridLegend.d.ts.map +1 -1
  33. package/dist/components/hourly-month-grid/HourlyMonthGrid.d.ts +45 -0
  34. package/dist/components/hourly-month-grid/HourlyMonthGrid.d.ts.map +1 -1
  35. package/dist/components/hourly-month-grid/index.d.ts +1 -1
  36. package/dist/components/hourly-month-grid/index.d.ts.map +1 -1
  37. package/dist/components/index.d.ts +4 -4
  38. package/dist/components/index.d.ts.map +1 -1
  39. package/dist/components/order-forms/RelayForms.d.ts +31 -3
  40. package/dist/components/order-forms/RelayForms.d.ts.map +1 -1
  41. package/dist/hooks/index.d.ts +1 -1
  42. package/dist/hooks/index.d.ts.map +1 -1
  43. package/dist/hooks/useEnumValues.d.ts +66 -1
  44. package/dist/hooks/useEnumValues.d.ts.map +1 -1
  45. package/dist/index.css +1 -1
  46. package/dist/index.d.ts +11 -7
  47. package/dist/index.d.ts.map +1 -1
  48. package/dist/index.js +12669 -12172
  49. package/dist/mocks/periodic-jobs.json.d.ts +5 -5
  50. package/dist/types/audit.types.d.ts +27 -0
  51. package/dist/types/audit.types.d.ts.map +1 -0
  52. package/dist/types/auth.types.d.ts +98 -9
  53. package/dist/types/auth.types.d.ts.map +1 -1
  54. package/dist/types/brand-model.types.d.ts +25 -1
  55. package/dist/types/brand-model.types.d.ts.map +1 -1
  56. package/dist/types/calendar.types.d.ts +3 -0
  57. package/dist/types/calendar.types.d.ts.map +1 -1
  58. package/dist/types/directive.types.d.ts +3 -0
  59. package/dist/types/directive.types.d.ts.map +1 -1
  60. package/dist/types/firmware.types.d.ts +5 -1
  61. package/dist/types/firmware.types.d.ts.map +1 -1
  62. package/dist/types/index.d.ts +5 -3
  63. package/dist/types/index.d.ts.map +1 -1
  64. package/dist/types/location.types.d.ts +21 -1
  65. package/dist/types/location.types.d.ts.map +1 -1
  66. package/dist/types/management.types.d.ts +165 -9
  67. package/dist/types/management.types.d.ts.map +1 -1
  68. package/dist/types/meter.types.d.ts +122 -1
  69. package/dist/types/meter.types.d.ts.map +1 -1
  70. package/dist/types/modem.types.d.ts +67 -3
  71. package/dist/types/modem.types.d.ts.map +1 -1
  72. package/dist/types/order.types.d.ts +15 -0
  73. package/dist/types/order.types.d.ts.map +1 -1
  74. package/dist/types/parser-template.types.d.ts +9 -2
  75. package/dist/types/parser-template.types.d.ts.map +1 -1
  76. package/dist/types/protocol.types.d.ts +3 -0
  77. package/dist/types/protocol.types.d.ts.map +1 -1
  78. package/dist/types/reading-setting.types.d.ts +3 -0
  79. package/dist/types/reading-setting.types.d.ts.map +1 -1
  80. package/dist/types/server-config.types.d.ts +7 -0
  81. package/dist/types/server-config.types.d.ts.map +1 -1
  82. package/dist/types/simcard.types.d.ts +3 -0
  83. package/dist/types/simcard.types.d.ts.map +1 -1
  84. package/dist/utils/orderReason.d.ts +50 -0
  85. package/dist/utils/orderReason.d.ts.map +1 -0
  86. 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>): Promise<ApiResponse<T>>;
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;AAE1D,MAAM,WAAW,UAAU;IACzB,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9E,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5D,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAChD,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;CAC3E"}
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"}
@@ -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>): Promise<ApiResponse<T>>;
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;AAI1D,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,MAAM,GAAG,IAAI,GAAG,IAAI,CAEpE;AAyGD,qBAAa,WAAY,YAAW,UAAU;IAC5C,OAAO,CAAC,IAAI,CAAgB;gBAEhB,OAAO,GAAE,MAAW;IAI1B,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAS7E,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAY5D,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAS3D,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAS/C,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC;CAQhF"}
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"}
@@ -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"}
@@ -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<T>(url: string, params?: Record<string, string>): Promise<ApiResponse<T>>;
5
- export declare function apiPost<T>(url: string, body: unknown): Promise<ApiResponse<T>>;
6
- export declare function apiPut<T>(url: string, body: unknown): Promise<ApiResponse<T>>;
7
- export declare function apiDelete<T>(url: string): Promise<ApiResponse<T>>;
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;AAKpE,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAEpE;AAiBD,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,wBAAsB,MAAM,CAAC,CAAC,EAC5B,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC9B,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAGzB;AAED,wBAAsB,OAAO,CAAC,CAAC,EAC7B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,OAAO,GACZ,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAGzB;AAED,wBAAsB,MAAM,CAAC,CAAC,EAC5B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,OAAO,GACZ,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAGzB;AAED,wBAAsB,SAAS,CAAC,CAAC,EAC/B,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAGzB;AAED,wBAAsB,SAAS,CAAC,CAAC,EAC/B,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAG3B"}
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 '../../../lena-ui-kit/src';
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
- export declare function CronBuilder({ value, onChange, className }: CronBuilderProps): import("react").JSX.Element;
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,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,gBAAgB,+BA8F3E"}
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;AAqCF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,+BAU5D"}
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,9 +1,46 @@
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;
24
+ /**
25
+ * RAW form params — every value is a string, structured ones still
26
+ * JSON-encoded. Kept as-is for backward compatibility.
27
+ *
28
+ * PREFER `processRequest` for anything sent to the backend: a param whose value
29
+ * is a JSON-encoded array/object (`ioInterfaces`, `astroRelay`, `directives`, …)
30
+ * must reach the API as a REAL array/object, and this field does not do that.
31
+ */
6
32
  params: Record<string, string>;
33
+ /**
34
+ * Params with JSON-encoded values decoded — the same shape single mode POSTs as
35
+ * `processRequest`.
36
+ *
37
+ * NB-RELAY-PARAM-01: single mode has decoded these since FIX-166, but bulk mode
38
+ * forwarded `params` untouched, so a bulk relay change shipped
39
+ * `ioInterfaces: "[{\"id\":1,...}]"` as a STRING and the backend could not build
40
+ * `List<IoInterfaceInfo>` from it — the same empty-command failure the key fix
41
+ * addresses in single mode. Consumers should send this object.
42
+ */
43
+ processRequest: Record<string, unknown>;
7
44
  priority: OrderPriority;
8
45
  targetModemIds: number[];
9
46
  }
@@ -24,6 +61,27 @@ export interface OrderCreateSheetProps {
24
61
  value: string;
25
62
  label: string;
26
63
  }>;
64
+ /**
65
+ * Options for the relay pickers (`GATEWAY_RELAY_QUERY` / `GATEWAY_RELAY_CHANGE`).
66
+ *
67
+ * - **single mode — omit it.** The forms resolve the list themselves from
68
+ * `/api/modems/{modemId}/relays`.
69
+ * - **bulk mode — REQUIRED.** There are N target modems and no single
70
+ * `modemId`, so the pickers cannot self-resolve: without this prop the relay
71
+ * dropdown is empty and the operator cannot add a single row.
72
+ *
73
+ * `value` MUST be the relay's `relayNo` (physical channel), NOT
74
+ * `RelayAssignment.id` (database row id) — `relayNo` is what becomes
75
+ * `IoInterfaceInfo.id` in the MASS command, so `{ id: 42, relayNo: 1 }` must
76
+ * yield `value: "1"`. Getting this wrong commands the wrong relay.
77
+ *
78
+ * Passing an array (even an empty one) is treated as a deliberate override and
79
+ * suppresses the fetch.
80
+ */
81
+ relayOptions?: Array<{
82
+ value: string;
83
+ label: string;
84
+ }>;
27
85
  /**
28
86
  * Single-mode only — fired once after a submit in which at least one order
29
87
  * was created (never on total failure). `order` is the first successful
@@ -67,12 +125,53 @@ export interface OrderCreateSheetProps {
67
125
  *
68
126
  * For the legacy single-meter case (N = 1) no toast is emitted — the consumer's
69
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.
70
131
  */
71
132
  singleSubmitCopy?: {
72
133
  success?: string;
73
134
  partial?: string;
74
135
  failure?: string;
75
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;
76
175
  /**
77
176
  * Ask for confirmation before discarding a partially filled form when the sheet
78
177
  * is dismissed via backdrop click or Escape. Default `true`.
@@ -94,5 +193,5 @@ export interface OrderCreateSheetProps {
94
193
  cancel?: string;
95
194
  };
96
195
  }
97
- export declare function OrderCreateSheet({ open, onClose, mode, modemId, modemSlug, meterId, meterSlug, modemOptions, meterOptions, 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;
98
197
  //# sourceMappingURL=OrderCreateSheet.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"OrderCreateSheet.d.ts","sourceRoot":"","sources":["../../src/components/OrderCreateSheet.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,KAAK,EAAE,SAAS,EAAiB,aAAa,EAC/C,MAAM,UAAU,CAAC;AAiBlB,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEhD,MAAM,MAAM,uBAAuB,GAAG,OAAO,GAAG,OAAO,CAAC;AAExD,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,SAAS,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,QAAQ,EAAE,aAAa,CAAC;IACxB,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,gFAAgF;IAChF,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvD,YAAY,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvD;;;;;;;;;;;;;;;;;OAiBG;IACH,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IAChF,qEAAqE;IACrE,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,kFAAkF;IAClF,gBAAgB,CAAC,EAAE,uBAAuB,CAAC;IAC3C,uEAAuE;IACvE,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,sBAAsB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClE,8EAA8E;IAC9E,QAAQ,CAAC,EAAE;QACT,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IACF;;;;;;;;;OASG;IACH,gBAAgB,CAAC,EAAE;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF;;;;;;;OAOG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;;OAIG;IACH,kBAAkB,CAAC,EAAE;QACnB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAuCD,wBAAgB,gBAAgB,CAAC,EAC/B,IAAI,EACJ,OAAO,EACP,IAAe,EACf,OAAO,EACP,SAAS,EACT,OAAO,EACP,SAAS,EACT,YAAiB,EACjB,YAAiB,EACjB,cAAc,EACd,kBAAuB,EACvB,gBAA0B,EAC1B,YAAY,EACZ,QAAQ,EACR,gBAAgB,EAChB,gBAAuB,EACvB,kBAAkB,GACnB,EAAE,qBAAqB,+BA6TvB"}
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":"AAoBA,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;;;;;OAKG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAsOD,wBAAgB,gBAAgB,CAAC,EAC/B,IAAI,EACJ,OAAO,EACP,KAAK,EACL,OAAO,EACP,QAAQ,EACR,OAAO,EACP,WAAW,EACX,oBAA0C,GAC3C,EAAE,qBAAqB,+BAgLvB"}
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,EAAa,MAAM,SAAS,CAAC;AAErD,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;CACtB;AAuCD,wBAAgB,cAAc,CAAC,EAC7B,QAAQ,EACR,IAAoB,EACpB,cAAc,EACd,UAAiB,GAClB,EAAE,mBAAmB,+BAsNrB"}
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,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAavC,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;CACzB;AAED,wBAAgB,kBAAkB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,uBAAuB,+BA4KzF;AAED;;;;;;;;GAQG;AACH,mEAAmE;AACnE,KAAK,QAAQ,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;AAgEpE,wBAAgB,UAAU,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,+BAqB5E"}
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;AA+HD;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,WAAW,EAClB,MAAM,CAAC,EAAE,kBAAkB,GAC1B,YAAY,CAsCd;AAMD;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,WAAW,EAClB,MAAM,CAAC,EAAE,kBAAkB,GAC1B,YAAY,CAmCd"}
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"}