@haneinfo/frontend-instances 0.0.0-stage → 0.1.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,237 @@
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
+ createdAt: string;
52
+ values: Record<string, unknown>;
53
+ }
54
+ export interface ListResult {
55
+ items: ListItem[];
56
+ total: number;
57
+ columns: string[];
58
+ offset: number;
59
+ limit: number;
60
+ }
61
+ export interface SavedView {
62
+ id: string;
63
+ name: string;
64
+ machineCode: string;
65
+ query: InstanceQuery;
66
+ visibility: 'PRIVATE' | 'ALL' | 'ROLES';
67
+ roles: string[];
68
+ canShare: boolean;
69
+ }
70
+ export interface FormField {
71
+ id?: string;
72
+ key: string;
73
+ label: string;
74
+ type?: string;
75
+ children?: FormField[];
76
+ }
77
+ export interface InstanceDetail {
78
+ instance: {
79
+ id: string;
80
+ state: string;
81
+ submitterId: string | null;
82
+ startedAt: string;
83
+ data: Record<string, unknown>;
84
+ bundle: {
85
+ root: {
86
+ definition: {
87
+ spec: {
88
+ subject?: {
89
+ kind: string;
90
+ code: string;
91
+ };
92
+ transitions?: {
93
+ numbering?: {
94
+ fieldKey: string;
95
+ };
96
+ }[];
97
+ };
98
+ };
99
+ };
100
+ definitions: Record<string, {
101
+ definition: {
102
+ spec: {
103
+ fields?: FormField[];
104
+ };
105
+ };
106
+ }>;
107
+ };
108
+ };
109
+ }
110
+ export interface TimelineEvent {
111
+ id: string;
112
+ kind: 'START' | 'TRANSITION' | 'CHOICE' | 'NUMBER' | 'NOTIFICATION_FAILURE' | 'COMMENT';
113
+ at: string;
114
+ actorId: string | null;
115
+ details: Record<string, unknown>;
116
+ }
117
+ export interface Timeline {
118
+ items: TimelineEvent[];
119
+ offset: number;
120
+ limit: number;
121
+ hasMore: boolean;
122
+ following: boolean;
123
+ }
124
+ export interface Person {
125
+ id: string;
126
+ name: string | null;
127
+ }
128
+ export interface ImportField {
129
+ key: string;
130
+ label: string;
131
+ type: string;
132
+ required: boolean;
133
+ }
134
+ export interface Diagnostic {
135
+ code: string;
136
+ message: string;
137
+ path?: string;
138
+ }
139
+ export interface ReportRow {
140
+ rowNumber: number;
141
+ errors: Diagnostic[];
142
+ data?: Record<string, unknown>;
143
+ }
144
+ export interface JobResult {
145
+ kind: 'preflight' | 'import' | 'export';
146
+ total?: number;
147
+ valid?: number;
148
+ failed?: number | ReportRow[];
149
+ rows?: ReportRow[];
150
+ errors?: Diagnostic[];
151
+ imported?: {
152
+ rowNumber: number;
153
+ instanceId: string;
154
+ }[];
155
+ rowCount?: number;
156
+ downloadPath?: string;
157
+ filename?: string;
158
+ expiresAt?: string;
159
+ }
160
+ export interface Job {
161
+ id: string;
162
+ status: 'PENDING' | 'RUNNING' | 'SUCCEEDED' | 'FAILED' | 'CANCELLED';
163
+ progress: number;
164
+ result: JobResult | null;
165
+ lastError: string | null;
166
+ }
167
+ export interface ImportInput {
168
+ machineCode: string;
169
+ format: 'csv' | 'xlsx';
170
+ contentBase64: string;
171
+ mapping: Record<string, string>;
172
+ duplicateKey?: string[];
173
+ }
174
+ export type InstanceRequest = {
175
+ kind: 'query';
176
+ machineCode: string;
177
+ query: InstanceQuery;
178
+ } | {
179
+ kind: 'saveView';
180
+ machineCode: string;
181
+ name: string;
182
+ query: InstanceQuery;
183
+ } | {
184
+ kind: 'shareView';
185
+ id: string;
186
+ visibility: SavedView['visibility'];
187
+ roles: string[];
188
+ } | {
189
+ kind: 'export';
190
+ machineCode: string;
191
+ query: InstanceQuery;
192
+ format: 'csv' | 'xlsx';
193
+ } | {
194
+ kind: 'timeline';
195
+ id: string;
196
+ offset: number;
197
+ } | {
198
+ kind: 'mentionable';
199
+ id: string;
200
+ q: string;
201
+ } | {
202
+ kind: 'comment';
203
+ id: string;
204
+ body: string;
205
+ } | {
206
+ kind: 'follow';
207
+ id: string;
208
+ enabled: boolean;
209
+ } | {
210
+ kind: 'importFields';
211
+ machineCode: string;
212
+ } | {
213
+ kind: 'preflight';
214
+ input: ImportInput;
215
+ } | {
216
+ kind: 'confirm';
217
+ id: string;
218
+ confirmed: true;
219
+ } | {
220
+ kind: 'job';
221
+ id: string;
222
+ };
223
+ export interface ActionError {
224
+ key: 'unauthorized' | 'forbidden' | 'notFound' | 'invalidInput' | 'requestFailed';
225
+ message?: string;
226
+ }
227
+ export interface ActionResult {
228
+ data?: unknown;
229
+ error?: ActionError;
230
+ }
231
+ export type InstanceAction = (request: InstanceRequest) => Promise<ActionResult>;
232
+ export type UploadAction = (form: FormData) => Promise<ActionResult>;
233
+ 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"];
234
+ export type LabelKey = (typeof labelKeys)[number];
235
+ export type Labels = Record<LabelKey, string>;
236
+ export type Translation = (key: LabelKey) => string;
237
+ //# 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;AAyJ7F,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,wCA2ChF;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"}