@haneinfo/frontend-instances 0.0.0-stage → 0.2.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.
@@ -0,0 +1,239 @@
1
+ import type { ComponentType, ReactNode } from 'react';
2
+ /** HTTP-only contracts. No runtime dependency on the backend packages. */
3
+ export type ApiFetch = <T>(path: string, init?: RequestInit) => Promise<T>;
4
+ export type LinkComponent = ComponentType<{
5
+ href: string;
6
+ children: ReactNode;
7
+ className?: string;
8
+ }>;
9
+ export interface QueryField {
10
+ id: string;
11
+ label: string;
12
+ type: 'text' | 'textarea' | 'number' | 'date' | 'datetime';
13
+ filterable: boolean;
14
+ sortable: boolean;
15
+ dataKey?: string;
16
+ }
17
+ export declare const operators: readonly ["EQ", "NEQ", "GT", "GTE", "LT", "LTE", "IN", "NOT_EMPTY"];
18
+ export type Operator = (typeof operators)[number];
19
+ export type Literal = {
20
+ kind: 'LITERAL';
21
+ value: string | number | boolean | null;
22
+ };
23
+ export type Condition = {
24
+ kind: 'GROUP';
25
+ operator: 'AND' | 'OR';
26
+ expressions: Condition[];
27
+ } | {
28
+ kind: 'PREDICATE';
29
+ operator: Operator;
30
+ left: {
31
+ kind: 'FIELD';
32
+ fieldId: string;
33
+ };
34
+ right?: Literal | Literal[];
35
+ };
36
+ export interface InstanceQuery {
37
+ filter?: Condition;
38
+ sort?: {
39
+ fieldId: string;
40
+ direction: 'asc' | 'desc';
41
+ }[];
42
+ columns?: string[];
43
+ offset?: number;
44
+ limit?: number;
45
+ }
46
+ export interface ListItem {
47
+ id: string;
48
+ state: string;
49
+ number: string | null;
50
+ submitterId: string | null;
51
+ submitterName: string | null;
52
+ createdAt: string;
53
+ values: Record<string, unknown>;
54
+ }
55
+ export interface ListResult {
56
+ items: ListItem[];
57
+ total: number;
58
+ columns: string[];
59
+ offset: number;
60
+ limit: number;
61
+ }
62
+ export interface SavedView {
63
+ id: string;
64
+ name: string;
65
+ machineCode: string;
66
+ query: InstanceQuery;
67
+ visibility: 'PRIVATE' | 'ALL' | 'ROLES';
68
+ roles: string[];
69
+ canShare: boolean;
70
+ }
71
+ export interface FormField {
72
+ id?: string;
73
+ key: string;
74
+ label: string;
75
+ type?: string;
76
+ children?: FormField[];
77
+ }
78
+ export interface InstanceDetail {
79
+ instance: {
80
+ id: string;
81
+ state: string;
82
+ submitterId: string | null;
83
+ submitterName: string | null;
84
+ startedAt: string;
85
+ data: Record<string, unknown>;
86
+ bundle: {
87
+ root: {
88
+ definition: {
89
+ spec: {
90
+ subject?: {
91
+ kind: string;
92
+ code: string;
93
+ };
94
+ transitions?: {
95
+ numbering?: {
96
+ fieldKey: string;
97
+ };
98
+ }[];
99
+ };
100
+ };
101
+ };
102
+ definitions: Record<string, {
103
+ definition: {
104
+ spec: {
105
+ fields?: FormField[];
106
+ };
107
+ };
108
+ }>;
109
+ };
110
+ };
111
+ }
112
+ export interface TimelineEvent {
113
+ id: string;
114
+ kind: 'START' | 'TRANSITION' | 'CHOICE' | 'NUMBER' | 'NOTIFICATION_FAILURE' | 'COMMENT';
115
+ at: string;
116
+ actorId: string | null;
117
+ details: Record<string, unknown>;
118
+ }
119
+ export interface Timeline {
120
+ items: TimelineEvent[];
121
+ offset: number;
122
+ limit: number;
123
+ hasMore: boolean;
124
+ following: boolean;
125
+ }
126
+ export interface Person {
127
+ id: string;
128
+ name: string | null;
129
+ }
130
+ export interface ImportField {
131
+ key: string;
132
+ label: string;
133
+ type: string;
134
+ required: boolean;
135
+ }
136
+ export interface Diagnostic {
137
+ code: string;
138
+ message: string;
139
+ path?: string;
140
+ }
141
+ export interface ReportRow {
142
+ rowNumber: number;
143
+ errors: Diagnostic[];
144
+ data?: Record<string, unknown>;
145
+ }
146
+ export interface JobResult {
147
+ kind: 'preflight' | 'import' | 'export';
148
+ total?: number;
149
+ valid?: number;
150
+ failed?: number | ReportRow[];
151
+ rows?: ReportRow[];
152
+ errors?: Diagnostic[];
153
+ imported?: {
154
+ rowNumber: number;
155
+ instanceId: string;
156
+ }[];
157
+ rowCount?: number;
158
+ downloadPath?: string;
159
+ filename?: string;
160
+ expiresAt?: string;
161
+ }
162
+ export interface Job {
163
+ id: string;
164
+ status: 'PENDING' | 'RUNNING' | 'SUCCEEDED' | 'FAILED' | 'CANCELLED';
165
+ progress: number;
166
+ result: JobResult | null;
167
+ lastError: string | null;
168
+ }
169
+ export interface ImportInput {
170
+ machineCode: string;
171
+ format: 'csv' | 'xlsx';
172
+ contentBase64: string;
173
+ mapping: Record<string, string>;
174
+ duplicateKey?: string[];
175
+ }
176
+ export type InstanceRequest = {
177
+ kind: 'query';
178
+ machineCode: string;
179
+ query: InstanceQuery;
180
+ } | {
181
+ kind: 'saveView';
182
+ machineCode: string;
183
+ name: string;
184
+ query: InstanceQuery;
185
+ } | {
186
+ kind: 'shareView';
187
+ id: string;
188
+ visibility: SavedView['visibility'];
189
+ roles: string[];
190
+ } | {
191
+ kind: 'export';
192
+ machineCode: string;
193
+ query: InstanceQuery;
194
+ format: 'csv' | 'xlsx';
195
+ } | {
196
+ kind: 'timeline';
197
+ id: string;
198
+ offset: number;
199
+ } | {
200
+ kind: 'mentionable';
201
+ id: string;
202
+ q: string;
203
+ } | {
204
+ kind: 'comment';
205
+ id: string;
206
+ body: string;
207
+ } | {
208
+ kind: 'follow';
209
+ id: string;
210
+ enabled: boolean;
211
+ } | {
212
+ kind: 'importFields';
213
+ machineCode: string;
214
+ } | {
215
+ kind: 'preflight';
216
+ input: ImportInput;
217
+ } | {
218
+ kind: 'confirm';
219
+ id: string;
220
+ confirmed: true;
221
+ } | {
222
+ kind: 'job';
223
+ id: string;
224
+ };
225
+ export interface ActionError {
226
+ key: 'unauthorized' | 'forbidden' | 'notFound' | 'invalidInput' | 'requestFailed';
227
+ message?: string;
228
+ }
229
+ export interface ActionResult {
230
+ data?: unknown;
231
+ error?: ActionError;
232
+ }
233
+ export type InstanceAction = (request: InstanceRequest) => Promise<ActionResult>;
234
+ export type UploadAction = (form: FormData) => Promise<ActionResult>;
235
+ export declare const labelKeys: readonly ["listTitle", "detailTitle", "importTitle", "back", "open", "state", "number", "submitter", "createdAt", "filters", "field", "operator", "value", "AND", "OR", "EQ", "NEQ", "GT", "GTE", "LT", "LTE", "IN", "NOT_EMPTY", "addRule", "addGroup", "addRange", "remove", "apply", "sort", "asc", "desc", "columns", "limit", "previous", "next", "total", "empty", "savedViews", "saveView", "viewName", "PRIVATE", "ALL", "ROLES", "share", "roles", "export", "format", "csv", "xlsx", "download", "downloadErrors", "timeline", "loadMore", "comment", "sendComment", "mentionSearch", "search", "mention", "noPeople", "unnamed", "aiGenerated", "follow", "unfollow", "following", "notFollowing", "machine", "file", "readHeaders", "mapping", "skip", "duplicateKey", "duplicateHint", "preflight", "confirmImport", "confirmHint", "valid", "failed", "success", "row", "code", "reason", "job", "PENDING", "RUNNING", "SUCCEEDED", "FAILED", "CANCELLED", "loading", "retry", "unauthorized", "forbidden", "notFound", "invalidInput", "requestFailed", "rangeFrom", "rangeTo", "required", "importHint", "pollStopped", "START", "TRANSITION", "CHOICE", "NUMBER", "NOTIFICATION_FAILURE", "COMMENT"];
236
+ export type LabelKey = (typeof labelKeys)[number];
237
+ export type Labels = Record<LabelKey, string>;
238
+ export type Translation = (key: LabelKey) => string;
239
+ //# sourceMappingURL=contracts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../src/contracts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,102 @@
1
+ export const operators = ['EQ', 'NEQ', 'GT', 'GTE', 'LT', 'LTE', 'IN', 'NOT_EMPTY'];
2
+ export const labelKeys = [
3
+ 'listTitle',
4
+ 'detailTitle',
5
+ 'importTitle',
6
+ 'back',
7
+ 'open',
8
+ 'state',
9
+ 'number',
10
+ 'submitter',
11
+ 'createdAt',
12
+ 'filters',
13
+ 'field',
14
+ 'operator',
15
+ 'value',
16
+ 'AND',
17
+ 'OR',
18
+ ...operators,
19
+ 'addRule',
20
+ 'addGroup',
21
+ 'addRange',
22
+ 'remove',
23
+ 'apply',
24
+ 'sort',
25
+ 'asc',
26
+ 'desc',
27
+ 'columns',
28
+ 'limit',
29
+ 'previous',
30
+ 'next',
31
+ 'total',
32
+ 'empty',
33
+ 'savedViews',
34
+ 'saveView',
35
+ 'viewName',
36
+ 'PRIVATE',
37
+ 'ALL',
38
+ 'ROLES',
39
+ 'share',
40
+ 'roles',
41
+ 'export',
42
+ 'format',
43
+ 'csv',
44
+ 'xlsx',
45
+ 'download',
46
+ 'downloadErrors',
47
+ 'timeline',
48
+ 'loadMore',
49
+ 'comment',
50
+ 'sendComment',
51
+ 'mentionSearch',
52
+ 'search',
53
+ 'mention',
54
+ 'noPeople',
55
+ 'unnamed',
56
+ 'aiGenerated',
57
+ 'follow',
58
+ 'unfollow',
59
+ 'following',
60
+ 'notFollowing',
61
+ 'machine',
62
+ 'file',
63
+ 'readHeaders',
64
+ 'mapping',
65
+ 'skip',
66
+ 'duplicateKey',
67
+ 'duplicateHint',
68
+ 'preflight',
69
+ 'confirmImport',
70
+ 'confirmHint',
71
+ 'valid',
72
+ 'failed',
73
+ 'success',
74
+ 'row',
75
+ 'code',
76
+ 'reason',
77
+ 'job',
78
+ 'PENDING',
79
+ 'RUNNING',
80
+ 'SUCCEEDED',
81
+ 'FAILED',
82
+ 'CANCELLED',
83
+ 'loading',
84
+ 'retry',
85
+ 'unauthorized',
86
+ 'forbidden',
87
+ 'notFound',
88
+ 'invalidInput',
89
+ 'requestFailed',
90
+ 'rangeFrom',
91
+ 'rangeTo',
92
+ 'required',
93
+ 'importHint',
94
+ 'pollStopped',
95
+ 'START',
96
+ 'TRANSITION',
97
+ 'CHOICE',
98
+ 'NUMBER',
99
+ 'NOTIFICATION_FAILURE',
100
+ 'COMMENT',
101
+ ];
102
+ //# sourceMappingURL=contracts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contracts.js","sourceRoot":"","sources":["../src/contracts.ts"],"names":[],"mappings":"AAiBA,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,CAAU,CAAC;AA2J7F,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,WAAW;IACX,aAAa;IACb,aAAa;IACb,MAAM;IACN,MAAM;IACN,OAAO;IACP,QAAQ;IACR,WAAW;IACX,WAAW;IACX,SAAS;IACT,OAAO;IACP,UAAU;IACV,OAAO;IACP,KAAK;IACL,IAAI;IACJ,GAAG,SAAS;IACZ,SAAS;IACT,UAAU;IACV,UAAU;IACV,QAAQ;IACR,OAAO;IACP,MAAM;IACN,KAAK;IACL,MAAM;IACN,SAAS;IACT,OAAO;IACP,UAAU;IACV,MAAM;IACN,OAAO;IACP,OAAO;IACP,YAAY;IACZ,UAAU;IACV,UAAU;IACV,SAAS;IACT,KAAK;IACL,OAAO;IACP,OAAO;IACP,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,KAAK;IACL,MAAM;IACN,UAAU;IACV,gBAAgB;IAChB,UAAU;IACV,UAAU;IACV,SAAS;IACT,aAAa;IACb,eAAe;IACf,QAAQ;IACR,SAAS;IACT,UAAU;IACV,SAAS;IACT,aAAa;IACb,QAAQ;IACR,UAAU;IACV,WAAW;IACX,cAAc;IACd,SAAS;IACT,MAAM;IACN,aAAa;IACb,SAAS;IACT,MAAM;IACN,cAAc;IACd,eAAe;IACf,WAAW;IACX,eAAe;IACf,aAAa;IACb,OAAO;IACP,QAAQ;IACR,SAAS;IACT,KAAK;IACL,MAAM;IACN,QAAQ;IACR,KAAK;IACL,SAAS;IACT,SAAS;IACT,WAAW;IACX,QAAQ;IACR,WAAW;IACX,SAAS;IACT,OAAO;IACP,cAAc;IACd,WAAW;IACX,UAAU;IACV,cAAc;IACd,eAAe;IACf,WAAW;IACX,SAAS;IACT,UAAU;IACV,YAAY;IACZ,aAAa;IACb,OAAO;IACP,YAAY;IACZ,QAAQ;IACR,QAAQ;IACR,sBAAsB;IACtB,SAAS;CACD,CAAC"}
@@ -0,0 +1,20 @@
1
+ import type { Condition, InstanceQuery, QueryField } from './contracts.js';
2
+ export declare function textValue(value: unknown): string;
3
+ export declare function fieldValue(value: string, field?: QueryField): string | number;
4
+ export declare function dateRange(field: QueryField, from: string, to: string): Condition;
5
+ export declare function importMapping(headers: string[], targets: string[], keys: string[], fields: {
6
+ key: string;
7
+ }[]): {
8
+ duplicateKey?: string[] | undefined;
9
+ mapping: {
10
+ [k: string]: string;
11
+ };
12
+ };
13
+ export declare function normalizeQuery(query: InstanceQuery): InstanceQuery;
14
+ export declare function listHref(base: string, query: InstanceQuery): string;
15
+ export declare function canPoll(job: JobLike): boolean;
16
+ type JobLike = {
17
+ status: string;
18
+ };
19
+ export {};
20
+ //# sourceMappingURL=query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE3E,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAGhD;AACD,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,MAAM,CAa7E;AACD,wBAAgB,SAAS,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,SAAS,CAoBhF;AACD,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,EAAE,MAAM,EAAE,EACjB,IAAI,EAAE,MAAM,EAAE,EACd,MAAM,EAAE;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,EAAE;;;;;EAmB1B;AACD,wBAAgB,cAAc,CAAC,KAAK,EAAE,aAAa,GAAG,aAAa,CAYlE;AACD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,MAAM,CAEnE;AACD,wBAAgB,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAE7C;AACD,KAAK,OAAO,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC"}
package/dist/query.js ADDED
@@ -0,0 +1,73 @@
1
+ export function textValue(value) {
2
+ if (value === null || value === undefined)
3
+ return '—';
4
+ return typeof value === 'object' ? JSON.stringify(value) : String(value);
5
+ }
6
+ export function fieldValue(value, field) {
7
+ if (field?.type === 'number') {
8
+ if (!value.trim() || !Number.isFinite(Number(value)))
9
+ throw new Error('invalidInput');
10
+ return Number(value);
11
+ }
12
+ if (field?.type === 'datetime') {
13
+ const utc = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}(?::\d{2}(?:\.\d{1,3})?)?$/.test(value)
14
+ ? `${value}Z`
15
+ : value;
16
+ if (!utc || !Number.isFinite(new Date(utc).getTime()))
17
+ throw new Error('invalidInput');
18
+ return new Date(utc).toISOString();
19
+ }
20
+ return value;
21
+ }
22
+ export function dateRange(field, from, to) {
23
+ if (!from || !to || from > to)
24
+ throw new Error('invalidInput');
25
+ return {
26
+ kind: 'GROUP',
27
+ operator: 'AND',
28
+ expressions: [
29
+ {
30
+ kind: 'PREDICATE',
31
+ operator: 'GTE',
32
+ left: { kind: 'FIELD', fieldId: field.id },
33
+ right: { kind: 'LITERAL', value: fieldValue(from, field) },
34
+ },
35
+ {
36
+ kind: 'PREDICATE',
37
+ operator: 'LTE',
38
+ left: { kind: 'FIELD', fieldId: field.id },
39
+ right: { kind: 'LITERAL', value: fieldValue(to, field) },
40
+ },
41
+ ],
42
+ };
43
+ }
44
+ export function importMapping(headers, targets, keys, fields) {
45
+ const mapping = Object.fromEntries(headers.flatMap((h, i) => (targets[i] ? [[h, targets[i]]] : [])));
46
+ const mapped = Object.values(mapping);
47
+ if (!mapped.length ||
48
+ new Set(mapped).size !== mapped.length ||
49
+ mapped.some((key) => !fields.some((f) => f.key === key)))
50
+ throw new Error('invalidInput');
51
+ if (keys.length > 5 ||
52
+ new Set(keys).size !== keys.length ||
53
+ keys.some((key) => !mapped.includes(key)))
54
+ throw new Error('invalidInput');
55
+ return { mapping, ...(keys.length ? { duplicateKey: keys } : {}) };
56
+ }
57
+ export function normalizeQuery(query) {
58
+ const offset = Number(query.offset ?? 0), limit = Number(query.limit ?? 50);
59
+ if (!Number.isInteger(offset) ||
60
+ offset < 0 ||
61
+ !Number.isInteger(limit) ||
62
+ limit < 1 ||
63
+ limit > 500)
64
+ throw new Error('invalidInput');
65
+ return { ...query, offset, limit };
66
+ }
67
+ export function listHref(base, query) {
68
+ return `${base}?${new URLSearchParams({ query: JSON.stringify(normalizeQuery(query)) })}`;
69
+ }
70
+ export function canPoll(job) {
71
+ return job.status === 'PENDING' || job.status === 'RUNNING';
72
+ }
73
+ //# sourceMappingURL=query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.js","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import 'server-only';
2
+ import { type ActionError, type ApiFetch, type InstanceAction, type InstanceRequest, type LinkComponent, type Translation, type UploadAction } from './contracts.js';
3
+ export type * from './contracts.js';
4
+ export { dateRange, importMapping, normalizeQuery } from './query.js';
5
+ export declare function instanceError(error: unknown): ActionError;
6
+ /** Called only inside an authenticated App Server Action. API authorization is authoritative. */
7
+ export declare function performInstanceRequest(apiFetch: ApiFetch, request: InstanceRequest): Promise<unknown>;
8
+ /** Read headers locally; the backend still parses and validates the complete file at preflight. */
9
+ export declare function readImportUpload(form: FormData): Promise<{
10
+ headers: string[];
11
+ format: "csv" | "xlsx";
12
+ contentBase64: string;
13
+ }>;
14
+ interface PageBase {
15
+ apiFetch: ApiFetch;
16
+ LinkComponent: LinkComponent;
17
+ t: Translation;
18
+ getCurrentUser: () => Promise<{
19
+ sub?: string;
20
+ } | null>;
21
+ action: InstanceAction;
22
+ basePath: string;
23
+ }
24
+ export interface InstanceListPageOptions extends PageBase {
25
+ machineCode: string;
26
+ searchParams: Promise<{
27
+ query?: string;
28
+ }>;
29
+ }
30
+ export declare function renderInstanceListPage(options: InstanceListPageOptions): Promise<import("react").JSX.Element>;
31
+ export declare function renderInstanceDetailPage(options: PageBase & {
32
+ id: string;
33
+ }): Promise<import("react").JSX.Element>;
34
+ export declare function renderImportPage(options: PageBase & {
35
+ machines: {
36
+ code: string;
37
+ label: string;
38
+ }[];
39
+ uploadAction: UploadAction;
40
+ }): Promise<import("react").JSX.Element>;
41
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.tsx"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAC;AAKrB,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,QAAQ,EAGb,KAAK,cAAc,EAEnB,KAAK,eAAe,EAGpB,KAAK,aAAa,EAMlB,KAAK,WAAW,EAChB,KAAK,YAAY,EAClB,MAAM,gBAAgB,CAAC;AAGxB,mBAAmB,gBAAgB,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEtE,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAOzD;AAUD,iGAAiG;AACjG,wBAAsB,sBAAsB,CAC1C,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,OAAO,CAAC,CAmElB;AAkBD,mGAAmG;AACnG,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,QAAQ;aAwB7B,MAAM,EAAE;YACP,KAAK,GAAG,MAAM;;GAGtC;AAED,UAAU,QAAQ;IAChB,QAAQ,EAAE,QAAQ,CAAC;IACnB,aAAa,EAAE,aAAa,CAAC;IAC7B,CAAC,EAAE,WAAW,CAAC;IACf,cAAc,EAAE,MAAM,OAAO,CAAC;QAAE,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;IACvD,MAAM,EAAE,cAAc,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;CAClB;AACD,MAAM,WAAW,uBAAwB,SAAQ,QAAQ;IACvD,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,OAAO,CAAC;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC3C;AAkCD,wBAAsB,sBAAsB,CAAC,OAAO,EAAE,uBAAuB,wCAmC5E;AACD,wBAAsB,wBAAwB,CAAC,OAAO,EAAE,QAAQ,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,wCA4ChF;AACD,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,QAAQ,GAAG;IAAE,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAAC,YAAY,EAAE,YAAY,CAAA;CAAE,wCA0BhG"}