@usequeek/app-sdk 0.5.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +172 -16
- package/dist/app-auth.d.ts +23 -2
- package/dist/app-auth.d.ts.map +1 -1
- package/dist/app-auth.js +40 -6
- package/dist/app-auth.js.map +1 -1
- package/dist/auth-fetch.d.ts +90 -0
- package/dist/auth-fetch.d.ts.map +1 -0
- package/dist/auth-fetch.js +261 -0
- package/dist/auth-fetch.js.map +1 -0
- package/dist/client.d.ts +32 -10
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +6 -2
- package/dist/client.js.map +1 -1
- package/dist/frame.d.ts +233 -4
- package/dist/frame.d.ts.map +1 -1
- package/dist/frame.js +694 -19
- package/dist/frame.js.map +1 -1
- package/dist/handoff.d.ts +32 -2
- package/dist/handoff.d.ts.map +1 -1
- package/dist/handoff.js +2 -1
- package/dist/handoff.js.map +1 -1
- package/dist/hono.d.ts +13 -0
- package/dist/hono.d.ts.map +1 -1
- package/dist/hono.js +15 -0
- package/dist/hono.js.map +1 -1
- package/dist/index.d.ts +11 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -6
- package/dist/index.js.map +1 -1
- package/dist/install-handlers.d.ts +33 -8
- package/dist/install-handlers.d.ts.map +1 -1
- package/dist/install-handlers.js +133 -15
- package/dist/install-handlers.js.map +1 -1
- package/dist/merchant-schema.d.ts +1550 -68
- package/dist/merchant-schema.d.ts.map +1 -1
- package/dist/merchant-schema.js +1 -1
- package/dist/proxy.d.ts +122 -0
- package/dist/proxy.d.ts.map +1 -0
- package/dist/proxy.js +204 -0
- package/dist/proxy.js.map +1 -0
- package/dist/react.d.ts +78 -0
- package/dist/react.d.ts.map +1 -0
- package/dist/react.js +262 -0
- package/dist/react.js.map +1 -0
- package/dist/scopes.d.ts +174 -0
- package/dist/scopes.d.ts.map +1 -0
- package/dist/scopes.js +297 -0
- package/dist/scopes.js.map +1 -0
- package/dist/server.d.ts +2 -2
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +1 -1
- package/dist/server.js.map +1 -1
- package/dist/session.d.ts +52 -2
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +99 -12
- package/dist/session.js.map +1 -1
- package/dist/store.d.ts +33 -0
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +114 -4
- package/dist/store.js.map +1 -1
- package/dist/theme.d.ts +96 -0
- package/dist/theme.d.ts.map +1 -0
- package/dist/theme.js +158 -0
- package/dist/theme.js.map +1 -0
- package/dist/tokens.d.ts +30 -15
- package/dist/tokens.d.ts.map +1 -1
- package/dist/tokens.js +57 -19
- package/dist/tokens.js.map +1 -1
- package/dist/webhooks.d.ts.map +1 -1
- package/dist/webhooks.js +1 -1
- package/dist/webhooks.js.map +1 -1
- package/package.json +17 -5
- package/CHANGELOG.md +0 -150
- package/openapi/merchant.json +0 -21452
package/dist/frame.d.ts
CHANGED
|
@@ -1,19 +1,86 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Framed-page
|
|
2
|
+
* Framed-page bridge client, v1 (U2): the browser-safe half of the
|
|
3
3
|
* dashboard bridge. Carries NO secret and performs NO verification — it only
|
|
4
4
|
* shapes and addresses messages. The dashboard (queek-merchant) enforces
|
|
5
5
|
* origin+source binding and mints tokens; the app backend verifies them via
|
|
6
6
|
* `./server` (`verifySessionToken`).
|
|
7
7
|
*
|
|
8
|
+
* Byte-compatible with today's protocol (`ready`/`token`/`resize`/
|
|
9
|
+
* `resize-ack`/`ack`, sources `queek-app`/`queek-merchant`, exact-origin
|
|
10
|
+
* postMessage): v1 only ADDS optional fields and new message types, and both
|
|
11
|
+
* directions ignore unknown types.
|
|
12
|
+
*
|
|
8
13
|
* DOM-free by design (structural minimal types): the app passes its own
|
|
9
14
|
* window/parent in, so this module needs no DOM lib and stays import-safe
|
|
10
15
|
* in edge runtimes.
|
|
11
16
|
*/
|
|
12
17
|
export declare const DASHBOARD_SOURCE = "queek-merchant";
|
|
13
18
|
export declare const APP_SOURCE = "queek-app";
|
|
19
|
+
/** Bridge protocol version this SDK speaks. */
|
|
20
|
+
export declare const BRIDGE_VERSION = "1";
|
|
21
|
+
/** Client-side length caps: every outbound string is truncated to its cap. */
|
|
22
|
+
export declare const MAX_HEADING_LENGTH = 200;
|
|
23
|
+
export declare const MAX_LABEL_LENGTH = 80;
|
|
24
|
+
export declare const MAX_ACTION_ID_LENGTH = 64;
|
|
25
|
+
export declare const MAX_TOAST_LENGTH = 500;
|
|
26
|
+
export declare const MAX_PATH_LENGTH = 2048;
|
|
27
|
+
export declare const MAX_TARGET_LENGTH = 2048;
|
|
28
|
+
export declare const MAX_LOCALE_LENGTH = 32;
|
|
29
|
+
export declare const MAX_SDK_VERSION_LENGTH = 32;
|
|
30
|
+
export declare const MAX_CAPABILITY_LENGTH = 64;
|
|
31
|
+
export declare const MAX_CAPABILITIES = 32;
|
|
32
|
+
export declare const MAX_SECONDARY_ACTIONS = 5;
|
|
33
|
+
export declare const MAX_SELECTION_IDS = 100;
|
|
34
|
+
export declare const MAX_SELECTION_ID_LENGTH = 128;
|
|
35
|
+
export declare const MAX_RESOURCE_TITLE_LENGTH = 300;
|
|
36
|
+
export declare const MAX_IMAGE_URL_LENGTH = 2048;
|
|
37
|
+
export declare const MAX_FILTER_LENGTH = 64;
|
|
38
|
+
export declare const MAX_TOAST_DURATION_MS = 10000;
|
|
39
|
+
export declare const MAX_RESIZE_HEIGHT = 10000;
|
|
40
|
+
/** Dashboard answers carry at most this many picked items; the rest is dropped. */
|
|
41
|
+
export declare const MAX_PICKED_ITEMS = 100;
|
|
42
|
+
/** Picker request ids are opaque correlation tokens, capped like action ids. */
|
|
43
|
+
export declare const MAX_REQUEST_ID_LENGTH = 64;
|
|
44
|
+
export type ThemeMode = "light" | "dark";
|
|
45
|
+
export type SaveBarState = "dirty" | "clean";
|
|
46
|
+
export type SaveBarAction = "save" | "discard";
|
|
47
|
+
export type ToastTone = "info" | "success" | "warning" | "critical";
|
|
48
|
+
export type TitleActionTone = "default" | "critical";
|
|
49
|
+
export interface TitleActionDef {
|
|
50
|
+
id: string;
|
|
51
|
+
label: string;
|
|
52
|
+
tone?: TitleActionTone;
|
|
53
|
+
}
|
|
54
|
+
export interface ResourceItem {
|
|
55
|
+
p_id: string;
|
|
56
|
+
title: string;
|
|
57
|
+
image?: string;
|
|
58
|
+
}
|
|
59
|
+
export interface PickResourceRequest {
|
|
60
|
+
resourceType: "product";
|
|
61
|
+
multiple?: boolean;
|
|
62
|
+
filter?: string;
|
|
63
|
+
selectionIds?: string[];
|
|
64
|
+
requestId?: string;
|
|
65
|
+
}
|
|
66
|
+
export interface BridgeTheme {
|
|
67
|
+
mode: ThemeMode;
|
|
68
|
+
locale?: string;
|
|
69
|
+
/**
|
|
70
|
+
* The dashboard's own capabilities (e.g. `["pick-resource"]`), declared on
|
|
71
|
+
* its handshake theme message. Absent on legacy dashboards — the app must
|
|
72
|
+
* then assume the v0 set (ready/token/resize only). Documented in README
|
|
73
|
+
* "Bridge handshake".
|
|
74
|
+
*/
|
|
75
|
+
capabilities?: string[];
|
|
76
|
+
/** The dashboard's bridge version (`"1"`); absent on legacy dashboards. */
|
|
77
|
+
bridge?: string;
|
|
78
|
+
}
|
|
14
79
|
export type AppOutboundMessage = {
|
|
15
80
|
source: typeof APP_SOURCE;
|
|
16
81
|
type: "ready";
|
|
82
|
+
capabilities?: string[];
|
|
83
|
+
sdkVersion?: string;
|
|
17
84
|
} | {
|
|
18
85
|
source: typeof APP_SOURCE;
|
|
19
86
|
type: "resize";
|
|
@@ -21,6 +88,38 @@ export type AppOutboundMessage = {
|
|
|
21
88
|
} | {
|
|
22
89
|
source: typeof APP_SOURCE;
|
|
23
90
|
type: "ack";
|
|
91
|
+
} | {
|
|
92
|
+
source: typeof APP_SOURCE;
|
|
93
|
+
type: "title";
|
|
94
|
+
heading: string;
|
|
95
|
+
primaryAction?: TitleActionDef;
|
|
96
|
+
secondaryActions?: TitleActionDef[];
|
|
97
|
+
} | {
|
|
98
|
+
source: typeof APP_SOURCE;
|
|
99
|
+
type: "toast";
|
|
100
|
+
message: string;
|
|
101
|
+
tone?: ToastTone;
|
|
102
|
+
durationMs?: number;
|
|
103
|
+
} | {
|
|
104
|
+
source: typeof APP_SOURCE;
|
|
105
|
+
type: "save-bar";
|
|
106
|
+
state: SaveBarState;
|
|
107
|
+
} | {
|
|
108
|
+
source: typeof APP_SOURCE;
|
|
109
|
+
type: "navigated";
|
|
110
|
+
path: string;
|
|
111
|
+
} | {
|
|
112
|
+
source: typeof APP_SOURCE;
|
|
113
|
+
type: "open";
|
|
114
|
+
target: string;
|
|
115
|
+
} | {
|
|
116
|
+
source: typeof APP_SOURCE;
|
|
117
|
+
type: "pick-resource";
|
|
118
|
+
resourceType: "product";
|
|
119
|
+
multiple?: boolean;
|
|
120
|
+
filter?: string;
|
|
121
|
+
selectionIds?: string[];
|
|
122
|
+
requestId?: string;
|
|
24
123
|
};
|
|
25
124
|
export type AppInboundMessage = {
|
|
26
125
|
source: typeof DASHBOARD_SOURCE;
|
|
@@ -29,10 +128,40 @@ export type AppInboundMessage = {
|
|
|
29
128
|
} | {
|
|
30
129
|
source: typeof DASHBOARD_SOURCE;
|
|
31
130
|
type: "resize-ack";
|
|
131
|
+
} | {
|
|
132
|
+
source: typeof DASHBOARD_SOURCE;
|
|
133
|
+
type: "theme";
|
|
134
|
+
mode: ThemeMode;
|
|
135
|
+
locale?: string;
|
|
136
|
+
capabilities?: string[];
|
|
137
|
+
bridge?: string;
|
|
138
|
+
} | {
|
|
139
|
+
source: typeof DASHBOARD_SOURCE;
|
|
140
|
+
type: "title-action";
|
|
141
|
+
id: string;
|
|
142
|
+
} | {
|
|
143
|
+
source: typeof DASHBOARD_SOURCE;
|
|
144
|
+
type: "save-bar-action";
|
|
145
|
+
action: SaveBarAction;
|
|
146
|
+
} | {
|
|
147
|
+
source: typeof DASHBOARD_SOURCE;
|
|
148
|
+
type: "navigate";
|
|
149
|
+
path: string;
|
|
150
|
+
} | {
|
|
151
|
+
source: typeof DASHBOARD_SOURCE;
|
|
152
|
+
type: "resource-picked";
|
|
153
|
+
items: ResourceItem[];
|
|
154
|
+
requestId?: string;
|
|
155
|
+
} | {
|
|
156
|
+
source: typeof DASHBOARD_SOURCE;
|
|
157
|
+
type: "resource-pick-cancelled";
|
|
158
|
+
requestId?: string;
|
|
32
159
|
};
|
|
33
160
|
export interface EmbedEvent {
|
|
34
161
|
origin: string;
|
|
35
162
|
data: unknown;
|
|
163
|
+
/** The sender window (`MessageEvent.source`); checked when `expectSource` is set. */
|
|
164
|
+
source?: unknown;
|
|
36
165
|
}
|
|
37
166
|
export interface EmbedEventTarget {
|
|
38
167
|
addEventListener(type: "message", listener: (event: EmbedEvent) => void): void;
|
|
@@ -45,14 +174,114 @@ export interface FrameBridgeOptions {
|
|
|
45
174
|
/** Exact dashboard origin (e.g. from the embed query or app config). */
|
|
46
175
|
dashboardOrigin: string;
|
|
47
176
|
target?: EmbedEventTarget;
|
|
177
|
+
/**
|
|
178
|
+
* When set, only events whose `source` is this exact value are accepted
|
|
179
|
+
* (normally the embedding window — an origin check alone does not bind
|
|
180
|
+
* WHICH frame sent the message).
|
|
181
|
+
*/
|
|
182
|
+
expectSource?: unknown;
|
|
48
183
|
onToken?: (token: string) => void;
|
|
49
184
|
onResizeAck?: () => void;
|
|
185
|
+
onTheme?: (theme: BridgeTheme) => void;
|
|
186
|
+
onTitleAction?: (id: string) => void;
|
|
187
|
+
onSaveBarAction?: (action: SaveBarAction) => void;
|
|
188
|
+
onNavigate?: (path: string) => void;
|
|
189
|
+
onResourcePicked?: (items: ResourceItem[], requestId?: string) => void;
|
|
190
|
+
onResourcePickCancelled?: (requestId?: string) => void;
|
|
191
|
+
}
|
|
192
|
+
export interface ReadyOptions {
|
|
193
|
+
capabilities?: string[];
|
|
194
|
+
sdkVersion?: string;
|
|
50
195
|
}
|
|
196
|
+
/** Truncate an outbound string client-side. Non-strings become "". */
|
|
197
|
+
export declare function capText(value: unknown, max: number): string;
|
|
198
|
+
/** Image URLs the dashboard may attach to picked items. */
|
|
199
|
+
export declare function isAllowedImageUrl(image: unknown): boolean;
|
|
200
|
+
/**
|
|
201
|
+
* Open targets the app may ask the dashboard to open: a dashboard-relative
|
|
202
|
+
* reference (resolves under the dashboard origin) or an absolute https URL
|
|
203
|
+
* (the dashboard applies its own allowlist on top). Everything else is
|
|
204
|
+
* refused — see `isSafeOpenShape`. The dashboard re-validates every target.
|
|
205
|
+
*/
|
|
206
|
+
export declare function isAllowedOpenTarget(target: unknown, dashboardOrigin: string): boolean;
|
|
207
|
+
/**
|
|
208
|
+
* Parse one dashboard→app message. Returns null for anything else —
|
|
209
|
+
* wrong source, unknown type, malformed shape — so unknown types are
|
|
210
|
+
* silently ignored (forward compatibility, both directions).
|
|
211
|
+
*/
|
|
212
|
+
export declare function parseInboundMessage(data: unknown): AppInboundMessage | null;
|
|
213
|
+
/**
|
|
214
|
+
* Parse one app→dashboard message — this parser is what the dashboard runs,
|
|
215
|
+
* so it must be trustworthy. Each branch validates the raw shape strictly
|
|
216
|
+
* (malformed required fields and mistyped optionals reject the message with
|
|
217
|
+
* null; malformed enum values reject too) and then delegates every cap and
|
|
218
|
+
* allow-list to `clipOutbound`, the same sanitizer the senders use — one
|
|
219
|
+
* copy of the policy, both directions. Unknown types return null — ignored,
|
|
220
|
+
* never acted on. Pass the dashboard origin to also gate `open` targets via
|
|
221
|
+
* `isAllowedOpenTarget`.
|
|
222
|
+
*/
|
|
223
|
+
export declare function parseOutboundMessage(data: unknown, dashboardOrigin?: string): AppOutboundMessage | null;
|
|
224
|
+
/**
|
|
225
|
+
* Post one app→dashboard message to the exact origin — never `"*"`.
|
|
226
|
+
* Every message runs through `clipOutbound`; unpostable messages are
|
|
227
|
+
* silently skipped.
|
|
228
|
+
*/
|
|
229
|
+
export declare function sendBridgeMessage(dashboardOrigin: string, target: EmbedPostTarget | undefined, message: AppOutboundMessage): void;
|
|
230
|
+
/**
|
|
231
|
+
* Build the `ready` announcement (capped). The one shared `ready` builder:
|
|
232
|
+
* `sendReady`, `installAuthFetch`'s refresh, and the React provider all
|
|
233
|
+
* announce through it so the dashboard sees identical capabilities.
|
|
234
|
+
*/
|
|
235
|
+
export declare function buildReadyMessage(options?: ReadyOptions): AppOutboundMessage;
|
|
236
|
+
/** Announce readiness to the exact dashboard origin — never `"*"`. */
|
|
237
|
+
export declare function sendReady(dashboardOrigin: string, target?: EmbedPostTarget, options?: ReadyOptions): void;
|
|
238
|
+
/**
|
|
239
|
+
* Report the document height for auto-height. Builds raw — `clipOutbound`
|
|
240
|
+
* (via `sendBridgeMessage`) clamps and drops non-finite asks.
|
|
241
|
+
*/
|
|
242
|
+
export declare function sendResize(dashboardOrigin: string, target: EmbedPostTarget | undefined, height: number): void;
|
|
243
|
+
/** Delivery confirmation with no state — accepted and ignored by decision. */
|
|
244
|
+
export declare function sendAck(dashboardOrigin: string, target?: EmbedPostTarget): void;
|
|
245
|
+
/**
|
|
246
|
+
* Drive the dashboard title bar (heading + up to 5 secondary actions).
|
|
247
|
+
* Builds raw — malformed defs are dropped, caps applied downstream.
|
|
248
|
+
*/
|
|
249
|
+
export declare function sendTitle(dashboardOrigin: string, target: EmbedPostTarget | undefined, heading: string, actions?: {
|
|
250
|
+
primaryAction?: TitleActionDef;
|
|
251
|
+
secondaryActions?: TitleActionDef[];
|
|
252
|
+
}): void;
|
|
253
|
+
/** Ask the dashboard to show a toast. Builds raw — tone/duration sanitized downstream. */
|
|
254
|
+
export declare function sendToast(dashboardOrigin: string, target: EmbedPostTarget | undefined, message: string, options?: {
|
|
255
|
+
tone?: ToastTone;
|
|
256
|
+
durationMs?: number;
|
|
257
|
+
}): void;
|
|
258
|
+
/** Show (dirty) or hide (clean) the dashboard save bar. Bad states are dropped downstream. */
|
|
259
|
+
export declare function sendSaveBar(dashboardOrigin: string, target: EmbedPostTarget | undefined, state: SaveBarState): void;
|
|
260
|
+
/** Report an in-app move so the dashboard can mirror it in its URL (U2b). */
|
|
261
|
+
export declare function sendNavigated(dashboardOrigin: string, target: EmbedPostTarget | undefined, path: string): void;
|
|
262
|
+
/**
|
|
263
|
+
* Ask the dashboard to open a dashboard path or https URL (sandbox-safe).
|
|
264
|
+
* Anything `isAllowedOpenTarget` refuses is never posted — the dashboard
|
|
265
|
+
* re-validates every target before acting on it.
|
|
266
|
+
*/
|
|
267
|
+
export declare function sendOpen(dashboardOrigin: string, target: EmbedPostTarget | undefined, openTarget: string): void;
|
|
268
|
+
/**
|
|
269
|
+
* Ask the dashboard to render its product picker (one at a time).
|
|
270
|
+
* Builds raw — `clipOutbound` validates, caps, and drops non-product asks.
|
|
271
|
+
*/
|
|
272
|
+
export declare function sendPickResource(dashboardOrigin: string, target: EmbedPostTarget | undefined, request: PickResourceRequest): void;
|
|
51
273
|
/**
|
|
52
274
|
* Listen for dashboard messages, accepting only the exact dashboard
|
|
53
|
-
* origin.
|
|
275
|
+
* origin. Unknown types are ignored. Returns an unsubscribe function.
|
|
276
|
+
* Never touches any secret.
|
|
54
277
|
*/
|
|
55
278
|
export declare function listenToDashboard(options: FrameBridgeOptions): () => void;
|
|
56
|
-
/**
|
|
57
|
-
|
|
279
|
+
/**
|
|
280
|
+
* The single choke point for everything the app posts: caps every string,
|
|
281
|
+
* allow-lists every enum, clamps every number, re-gates `open` targets
|
|
282
|
+
* against scheme attacks. Returns null when the message is unpostable
|
|
283
|
+
* (malformed required field, bad save-bar state, non-finite height,
|
|
284
|
+
* blocked open target, non-product pick) — `sendBridgeMessage` skips null.
|
|
285
|
+
*/
|
|
286
|
+
export declare function clipOutbound(message: AppOutboundMessage): AppOutboundMessage | null;
|
|
58
287
|
//# sourceMappingURL=frame.d.ts.map
|
package/dist/frame.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"frame.d.ts","sourceRoot":"","sources":["../src/frame.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"frame.d.ts","sourceRoot":"","sources":["../src/frame.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,eAAO,MAAM,gBAAgB,mBAAmB,CAAC;AACjD,eAAO,MAAM,UAAU,cAAc,CAAC;AAEtC,+CAA+C;AAC/C,eAAO,MAAM,cAAc,MAAM,CAAC;AAElC,8EAA8E;AAC9E,eAAO,MAAM,kBAAkB,MAAM,CAAC;AACtC,eAAO,MAAM,gBAAgB,KAAK,CAAC;AACnC,eAAO,MAAM,oBAAoB,KAAK,CAAC;AACvC,eAAO,MAAM,gBAAgB,MAAM,CAAC;AACpC,eAAO,MAAM,eAAe,OAAO,CAAC;AACpC,eAAO,MAAM,iBAAiB,OAAO,CAAC;AACtC,eAAO,MAAM,iBAAiB,KAAK,CAAC;AACpC,eAAO,MAAM,sBAAsB,KAAK,CAAC;AACzC,eAAO,MAAM,qBAAqB,KAAK,CAAC;AACxC,eAAO,MAAM,gBAAgB,KAAK,CAAC;AACnC,eAAO,MAAM,qBAAqB,IAAI,CAAC;AACvC,eAAO,MAAM,iBAAiB,MAAM,CAAC;AACrC,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAC3C,eAAO,MAAM,yBAAyB,MAAM,CAAC;AAC7C,eAAO,MAAM,oBAAoB,OAAO,CAAC;AACzC,eAAO,MAAM,iBAAiB,KAAK,CAAC;AACpC,eAAO,MAAM,qBAAqB,QAAS,CAAC;AAC5C,eAAO,MAAM,iBAAiB,QAAS,CAAC;AACxC,mFAAmF;AACnF,eAAO,MAAM,gBAAgB,MAAM,CAAC;AACpC,gFAAgF;AAChF,eAAO,MAAM,qBAAqB,KAAK,CAAC;AAExC,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;AACzC,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,OAAO,CAAC;AAC7C,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,SAAS,CAAC;AAC/C,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,CAAC;AACpE,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,UAAU,CAAC;AAErD,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,eAAe,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,SAAS,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,2EAA2E;IAC3E,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,kBAAkB,GAC1B;IAAE,MAAM,EAAE,OAAO,UAAU,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAC1F;IAAE,MAAM,EAAE,OAAO,UAAU,CAAC;IAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC7D;IAAE,MAAM,EAAE,OAAO,UAAU,CAAC;IAAC,IAAI,EAAE,KAAK,CAAA;CAAE,GAC1C;IACE,MAAM,EAAE,OAAO,UAAU,CAAC;IAC1B,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,cAAc,CAAC;IAC/B,gBAAgB,CAAC,EAAE,cAAc,EAAE,CAAC;CACrC,GACD;IAAE,MAAM,EAAE,OAAO,UAAU,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,SAAS,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GACpG;IAAE,MAAM,EAAE,OAAO,UAAU,CAAC;IAAC,IAAI,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,YAAY,CAAA;CAAE,GACpE;IAAE,MAAM,EAAE,OAAO,UAAU,CAAC;IAAC,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9D;IAAE,MAAM,EAAE,OAAO,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC3D;IACE,MAAM,EAAE,OAAO,UAAU,CAAC;IAC1B,IAAI,EAAE,eAAe,CAAC;IACtB,YAAY,EAAE,SAAS,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEN,MAAM,MAAM,iBAAiB,GACzB;IAAE,MAAM,EAAE,OAAO,gBAAgB,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACjE;IAAE,MAAM,EAAE,OAAO,gBAAgB,CAAC;IAAC,IAAI,EAAE,YAAY,CAAA;CAAE,GACvD;IACE,MAAM,EAAE,OAAO,gBAAgB,CAAC;IAChC,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GACD;IAAE,MAAM,EAAE,OAAO,gBAAgB,CAAC;IAAC,IAAI,EAAE,cAAc,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GACrE;IAAE,MAAM,EAAE,OAAO,gBAAgB,CAAC;IAAC,IAAI,EAAE,iBAAiB,CAAC;IAAC,MAAM,EAAE,aAAa,CAAA;CAAE,GACnF;IAAE,MAAM,EAAE,OAAO,gBAAgB,CAAC;IAAC,IAAI,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACnE;IACE,MAAM,EAAE,OAAO,gBAAgB,CAAC;IAChC,IAAI,EAAE,iBAAiB,CAAC;IACxB,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GACD;IAAE,MAAM,EAAE,OAAO,gBAAgB,CAAC;IAAC,IAAI,EAAE,yBAAyB,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7F,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;IACd,qFAAqF;IACrF,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,gBAAgB,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,GAAG,IAAI,CAAC;IAC/E,mBAAmB,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,GAAG,IAAI,CAAC;CACnF;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3D;AAED,MAAM,WAAW,kBAAkB;IACjC,wEAAwE;IACxE,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;IACvC,aAAa,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAC;IAClD,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,SAAS,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACvE,uBAAuB,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CACxD;AAED,MAAM,WAAW,YAAY;IAC3B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAMD,sEAAsE;AACtE,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAG3D;AAwFD,2DAA2D;AAC3D,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAmBzD;AA0BD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,GAAG,OAAO,CAUrF;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,OAAO,GAAG,iBAAiB,GAAG,IAAI,CA2F3E;AAaD;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI,CA6GvG;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,eAAe,GAAG,SAAS,EACnC,OAAO,EAAE,kBAAkB,GAC1B,IAAI,CAKN;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,kBAAkB,CAS5E;AAED,sEAAsE;AACtE,wBAAgB,SAAS,CAAC,eAAe,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,eAAe,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,IAAI,CAEzG;AAED;;;GAGG;AACH,wBAAgB,UAAU,CACxB,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,eAAe,GAAG,SAAS,EACnC,MAAM,EAAE,MAAM,GACb,IAAI,CAEN;AAED,8EAA8E;AAC9E,wBAAgB,OAAO,CAAC,eAAe,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,eAAe,GAAG,IAAI,CAE/E;AAED;;;GAGG;AACH,wBAAgB,SAAS,CACvB,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,eAAe,GAAG,SAAS,EACnC,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;IAAE,aAAa,CAAC,EAAE,cAAc,CAAC;IAAC,gBAAgB,CAAC,EAAE,cAAc,EAAE,CAAA;CAAE,GAChF,IAAI,CAUN;AAED,0FAA0F;AAC1F,wBAAgB,SAAS,CACvB,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,eAAe,GAAG,SAAS,EACnC,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,SAAS,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAClD,IAAI,CASN;AAED,8FAA8F;AAC9F,wBAAgB,WAAW,CACzB,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,eAAe,GAAG,SAAS,EACnC,KAAK,EAAE,YAAY,GAClB,IAAI,CAEN;AAED,6EAA6E;AAC7E,wBAAgB,aAAa,CAC3B,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,eAAe,GAAG,SAAS,EACnC,IAAI,EAAE,MAAM,GACX,IAAI,CAEN;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CACtB,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,eAAe,GAAG,SAAS,EACnC,UAAU,EAAE,MAAM,GACjB,IAAI,CAKN;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,eAAe,GAAG,SAAS,EACnC,OAAO,EAAE,mBAAmB,GAC3B,IAAI,CAaN;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,MAAM,IAAI,CAiEzE;AAgCD;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,kBAAkB,GAAG,kBAAkB,GAAG,IAAI,CAmHnF"}
|