@warp-drive-mirror/ember 5.6.0-alpha.0 → 5.6.0-alpha.11

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 CHANGED
@@ -74,7 +74,7 @@ you should load data based on user interactions and route navigations, not from
74
74
  but what if you didn't need to use prop-drilling or contexts to access the result of a
75
75
  route based query?
76
76
 
77
- EmberData's RequestManager already allows for fulfillment from cache and for request
77
+ WarpDrive's RequestManager already allows for fulfillment from cache and for request
78
78
  de-duping, so what if we could just pick up where we left off and use the result of a
79
79
  request right away if it already was fetched elsewhere?
80
80
 
package/addon-main.cjs CHANGED
@@ -1,5 +1,5 @@
1
1
  'use strict';
2
2
 
3
- const { addonShim } = require('@warp-drive-mirror/build-config/addon-shim.cjs');
3
+ const { addonShim } = require('@warp-drive-mirror/core/addon-shim.cjs');
4
4
 
5
5
  module.exports = addonShim(__dirname);
@@ -0,0 +1,77 @@
1
+ import type Owner from '@ember/owner';
2
+ import Component from '@glimmer/component';
3
+ import type { Awaitable } from '@warp-drive-mirror/core/request';
4
+ export declare const and: (x: unknown, y: unknown) => boolean;
5
+ interface ThrowSignature<E = Error | string | object> {
6
+ Args: {
7
+ error: E;
8
+ };
9
+ }
10
+ /**
11
+ * The `<Throw />` component is used to throw an error in a template.
12
+ *
13
+ * That's all it does. So don't use it unless the application should
14
+ * throw an error if it reaches this point in the template.
15
+ *
16
+ * ```hbs
17
+ * <Throw @error={{anError}} />
18
+ * ```
19
+ *
20
+ * @class <Throw />
21
+ * @public
22
+ */
23
+ export declare class Throw<T> extends Component<ThrowSignature<T>> {
24
+ constructor(owner: Owner, args: ThrowSignature<T>['Args']);
25
+ }
26
+ interface AwaitSignature<T, E = Error | string | object> {
27
+ Args: {
28
+ promise: Promise<T> | Awaitable<T, E>;
29
+ };
30
+ Blocks: {
31
+ pending: [];
32
+ error: [error: E];
33
+ success: [value: T];
34
+ };
35
+ }
36
+ /**
37
+ * The <Await /> component allow you to utilize reactive control flow
38
+ * for asynchronous states in your application.
39
+ *
40
+ * Await is ideal for handling "boundaries", outside which some state is
41
+ * still allowed to be unresolved and within which it MUST be resolved.
42
+ *
43
+ * ```gjs
44
+ * import { Await } from '@warp-drive-mirror/ember';
45
+ *
46
+ * <template>
47
+ * <Await @promise={{@request}}>
48
+ * <:pending>
49
+ * <Spinner />
50
+ * </:pending>
51
+ *
52
+ * <:error as |error|>
53
+ * <ErrorForm @error={{error}} />
54
+ * </:error>
55
+ *
56
+ * <:success as |result|>
57
+ * <h1>{{result.title}}</h1>
58
+ * </:success>
59
+ * </Await>
60
+ * </template>
61
+ * ```
62
+ *
63
+ * The <Await /> component requires that error states are properly handled.
64
+ *
65
+ * If no error block is provided and the promise rejects, the error will
66
+ * be thrown.
67
+ *
68
+ * @class <Await />
69
+ * @public
70
+ */
71
+ export declare class Await<T, E> extends Component<AwaitSignature<T, E>> {
72
+ get state(): Readonly<import("@warp-drive-mirror/core/store/-private").PromiseState<T, E>>;
73
+ get error(): E;
74
+ get result(): T;
75
+ }
76
+ export {};
77
+ //# sourceMappingURL=await.gts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"await.gts.d.ts","sourceRoot":"","sources":["../../src/-private/await.gts"],"names":[],"mappings":"AAAA,OA4GO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAE3C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAG1D,eAAO,MAAM,GAAG,GAAI,GAAG,OAAO,EAAE,GAAG,OAAO,YAAoB,CAAC;AAC/D,UAAU,cAAc,CAAC,CAAC,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM;IAClD,IAAI,EAAE;QACJ,KAAK,EAAE,CAAC,CAAC;KACV,CAAC;CACH;AAED;;;;;;;;;;;;GAYG;AACH,qBAAa,KAAK,CAAC,CAAC,CAAE,SAAQ,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;gBAC5C,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;CAU1D;AAED,UAAU,cAAc,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM;IACrD,IAAI,EAAE;QACJ,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;KACvC,CAAC;IACF,MAAM,EAAE;QACN,OAAO,EAAE,EAAE,CAAC;QACZ,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAClB,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;KACrB,CAAC;CACH;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,qBAAa,KAAK,CAAC,CAAC,EAAE,CAAC,CAAE,SAAQ,SAAS,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9D,IAAI,KAAK,2EAER;IAED,IAAI,KAAK,IACoB,CAAC,CAC7B;IAED,IAAI,MAAM,IACoB,CAAC,CAC9B;CAyBF"}
@@ -0,0 +1,486 @@
1
+ import type Owner from '@ember/owner';
2
+ import Component from '@glimmer/component';
3
+ import type { Store, StoreRequestInput } from '@warp-drive-mirror/core';
4
+ import type { Future } from '@warp-drive-mirror/core/request';
5
+ import type { RequestLoadingState, RequestState } from '@warp-drive-mirror/core/store/-private';
6
+ import type { StructuredErrorDocument } from '@warp-drive-mirror/core/types/request';
7
+ type AutorefreshBehaviorType = 'online' | 'interval' | 'invalid';
8
+ type AutorefreshBehaviorCombos = boolean | AutorefreshBehaviorType | `${AutorefreshBehaviorType},${AutorefreshBehaviorType}` | `${AutorefreshBehaviorType},${AutorefreshBehaviorType},${AutorefreshBehaviorType}`;
9
+ type ContentFeatures<RT> = {
10
+ isOnline: boolean;
11
+ isHidden: boolean;
12
+ isRefreshing: boolean;
13
+ refresh: () => Promise<void>;
14
+ reload: () => Promise<void>;
15
+ abort?: () => void;
16
+ latestRequest?: Future<RT>;
17
+ };
18
+ interface RequestSignature<RT, T, E> {
19
+ Args: {
20
+ /**
21
+ * The request to monitor. This should be a `Future` instance returned
22
+ * by either the `store.request` or `store.requestManager.request` methods.
23
+ *
24
+ */
25
+ request?: Future<RT>;
26
+ /**
27
+ * A query to use for the request. This should be an object that can be
28
+ * passed to `store.request`. Use this in place of `@request` if you would
29
+ * like the component to also initiate the request.
30
+ *
31
+ */
32
+ query?: StoreRequestInput<RT, T>;
33
+ /**
34
+ * The store instance to use for making requests. If contexts are available,
35
+ * the component will default to using the `store` on the context.
36
+ *
37
+ * This is required if the store is not available via context or should be
38
+ * different from the store provided via context.
39
+ *
40
+ */
41
+ store?: Store;
42
+ /**
43
+ * The autorefresh behavior for the request. This can be a boolean, or any
44
+ * combination of the following values: `'online'`, `'interval'`, `'invalid'`.
45
+ *
46
+ * - `'online'`: Refresh the request when the browser comes back online
47
+ * - `'interval'`: Refresh the request at a specified interval
48
+ * - `'invalid'`: Refresh the request when the store emits an invalidation
49
+ *
50
+ * If `true`, this is equivalent to `'online,invalid'`.
51
+ *
52
+ * Defaults to `false`.
53
+ *
54
+ */
55
+ autorefresh?: AutorefreshBehaviorCombos;
56
+ /**
57
+ * The number of milliseconds to wait before refreshing the request when the
58
+ * browser comes back online or the network becomes available.
59
+ *
60
+ * This also controls the interval at which the request will be refreshed if
61
+ * the `interval` autorefresh type is enabled.
62
+ *
63
+ * Defaults to `30_000` (30 seconds).
64
+ *
65
+ */
66
+ autorefreshThreshold?: number;
67
+ /**
68
+ * The behavior of the request initiated by autorefresh. This can be one of
69
+ * the following values:
70
+ *
71
+ * - `'refresh'`: Refresh the request in the background
72
+ * - `'reload'`: Force a reload of the request
73
+ * - `'policy'` (**default**): Let the store's configured CachePolicy decide whether to
74
+ * reload, refresh, or do nothing.
75
+ *
76
+ * Defaults to `'policy'`.
77
+ *
78
+ */
79
+ autorefreshBehavior?: 'refresh' | 'reload' | 'policy';
80
+ };
81
+ Blocks: {
82
+ /**
83
+ * The block to render when the component is idle and waiting to be given a request.
84
+ *
85
+ */
86
+ idle: [];
87
+ /**
88
+ * The block to render when the request is loading.
89
+ *
90
+ */
91
+ loading: [state: RequestLoadingState];
92
+ /**
93
+ * The block to render when the request was cancelled.
94
+ *
95
+ */
96
+ cancelled: [
97
+ error: StructuredErrorDocument<E>,
98
+ features: {
99
+ isOnline: boolean;
100
+ isHidden: boolean;
101
+ retry: () => Promise<void>;
102
+ }
103
+ ];
104
+ /**
105
+ * The block to render when the request failed. If this block is not provided,
106
+ * the error will be rethrown.
107
+ *
108
+ * Thus it is required to provide an error block and proper error handling if
109
+ * you do not want the error to crash the application.
110
+ *
111
+ */
112
+ error: [
113
+ error: StructuredErrorDocument<E>,
114
+ features: {
115
+ isOnline: boolean;
116
+ isHidden: boolean;
117
+ retry: () => Promise<void>;
118
+ }
119
+ ];
120
+ /**
121
+ * The block to render when the request succeeded.
122
+ *
123
+ */
124
+ content: [value: RT, features: ContentFeatures<RT>];
125
+ always: [state: RequestState<RT, T, StructuredErrorDocument<E>>];
126
+ };
127
+ }
128
+ /**
129
+ * The `<Request />` component is a powerful tool for managing data fetching and
130
+ * state in your Ember application. It provides a declarative approach to reactive
131
+ * control-flow for managing requests and state in your application.
132
+ *
133
+ * The `<Request />` component is ideal for handling "boundaries", outside which some
134
+ * state is still allowed to be unresolved and within which it MUST be resolved.
135
+ *
136
+ * ## Request States
137
+ *
138
+ * `<Request />` has five states, only one of which will be active and rendered at a time.
139
+ *
140
+ * - `idle`: The component is waiting to be given a request to monitor
141
+ * - `loading`: The request is in progress
142
+ * - `error`: The request failed
143
+ * - `content`: The request succeeded
144
+ * - `cancelled`: The request was cancelled
145
+ *
146
+ * Additionally, the `content` state has a `refresh` method that can be used to
147
+ * refresh the request in the background, which is available as a sub-state of
148
+ * the `content` state.
149
+ *
150
+ * As with the `<Await />` component, if no error block is provided and the request
151
+ * rejects, the error will be thrown. Cancellation errors are swallowed instead of
152
+ * rethrown if no error block or cancellation block is present.
153
+ *
154
+ * ```gts
155
+ * import { Request } from '@warp-drive-mirror/ember';
156
+ *
157
+ * <template>
158
+ * <Request @request={{@request}}>
159
+ * <:loading as |state|>
160
+ * <Spinner @percentDone={{state.completedRatio}} />
161
+ * <button {{on "click" state.abort}}>Cancel</button>
162
+ * </:loading>
163
+ *
164
+ * <:error as |error state|>
165
+ * <ErrorForm @error={{error}} />
166
+ * <button {{on "click" state.retry}}>Retry</button>
167
+ * </:error>
168
+ *
169
+ * <:content as |data state|>
170
+ * <h1>{{data.title}}</h1>
171
+ * {{#if state.isBackgroundReloading}}
172
+ * <SmallSpinner />
173
+ * <button {{on "click" state.abort}}>Cancel</button>
174
+ * {{else}}
175
+ * <button {{on "click" state.refresh}}>Refresh</button>
176
+ * {{/if}}
177
+ * </:content>
178
+ *
179
+ * <:cancelled as |error state|>
180
+ * <h2>The Request was cancelled</h2>
181
+ * <button {{on "click" state.retry}}>Retry</button>
182
+ * </:cancelled>
183
+ *
184
+ * <:idle>
185
+ * <button {{on "click" @kickOffRequest}}>Load Preview?</button>
186
+ * </:idle>
187
+ *
188
+ * </Request>
189
+ * </template>
190
+ * ```
191
+ *
192
+ * ## Streaming Data
193
+ *
194
+ * The loading state exposes the download `ReadableStream` instance for consumption
195
+ *
196
+ * ```gjs
197
+ * import { Request } from '@warp-drive-mirror/ember';
198
+ *
199
+ * <template>
200
+ * <Request @request={{@request}}>
201
+ * <:loading as |state|>
202
+ * <Video @stream={{state.stream}} />
203
+ * </:loading>
204
+ *
205
+ * <:error as |error|>
206
+ * <ErrorForm @error={{error}} />
207
+ * </:error>
208
+ * </Request>
209
+ * </template>
210
+ * ```
211
+ *
212
+ * ## Retry
213
+ *
214
+ * Cancelled and error'd requests may be retried by calling the `retry` method.
215
+ *
216
+ * Retry will restart the state progression, using the loading, error, cancelled,
217
+ * and content blocks as appropriate.
218
+ *
219
+ * ## Reloading
220
+ *
221
+ * The `reload` method will force the request to be fully re-executed, bypassing
222
+ * cache and restarting the state progression through the loading, error, and
223
+ * content blocks as appropriate.
224
+ *
225
+ * Background reload (refresh) is a special substate of the content state that
226
+ * allows you to refresh the request in the background. This is useful for when
227
+ * you want to update the data in the background without blocking the UI.
228
+ *
229
+ * Reload and refresh are available as methods on the `content` state.
230
+ *
231
+ * ```gjs
232
+ * import { Request } from '@warp-drive-mirror/ember';
233
+ *
234
+ * <template>
235
+ * <Request @request={{@request}}>
236
+ * <:content as |data state|>
237
+ * <h1>{{data.title}}</h1>
238
+ * {{#if state.isBackgroundReloading}}
239
+ * <SmallSpinner />
240
+ * <button {{on "click" state.abort}}>Cancel</button>
241
+ * {{/if}}
242
+ *
243
+ * <button {{on "click" state.refresh}}>Refresh</button>
244
+ * <button {{on "click" state.reload}}>Reload</button>
245
+ * </:content>
246
+ * </Request>
247
+ * </template>
248
+ * ```
249
+ *
250
+ * ## Advanced Reloading
251
+ *
252
+ * We can nest our usage of `<Request />` to handle more advanced
253
+ * reloading scenarios.
254
+ *
255
+ * ```gjs
256
+ * import { Request } from '@warp-drive-mirror/ember';
257
+ *
258
+ * <template>
259
+ * <Request @request={{@request}}>
260
+ * <:cancelled>
261
+ * <h2>The Request Cancelled</h2>
262
+ * </:cancelled>
263
+ *
264
+ * <:error as |error|>
265
+ * <ErrorForm @error={{error}} />
266
+ * </:error>
267
+ *
268
+ * <:content as |result state|>
269
+ * <Request @request={{state.latestRequest}}>
270
+ * <!-- Handle Background Request -->
271
+ * </Request>
272
+ *
273
+ * <h1>{{result.title}}</h1>
274
+ *
275
+ * <button {{on "click" state.refresh}}>Refresh</button>
276
+ * </:content>
277
+ * </Request>
278
+ * </template>
279
+ * ```
280
+ *
281
+ * ## Autorefresh
282
+ *
283
+ * `<Request />` supports automatic refresh and reload under certain conditions.
284
+ *
285
+ * - `online`: This occurs when a browser window or tab comes back to the foreground
286
+ * after being backgrounded or when the network reports as being online after
287
+ * having been offline.
288
+ * - `interval`: This occurs when a specified amount of time has passed.
289
+ * - `invalid`: This occurs when the store emits a notification that the request
290
+ * has become invalid.
291
+ *
292
+ * You can specify when autorefresh should occur by setting the `autorefresh` arg
293
+ * to `true` or a comma-separated list of the above values.
294
+ *
295
+ * A value of `true` is equivalent to `'online,invalid'`.
296
+ *
297
+ * By default, an autorefresh will only occur if the browser was backgrounded or
298
+ * offline for more than 30s before coming back available. This amount of time can
299
+ * be tweaked by setting the number of milliseconds via `@autorefreshThreshold`.
300
+ *
301
+ * This arg also controls the interval at which the request will be refreshed
302
+ * if the `interval` autorefresh type is enabled.
303
+ *
304
+ * Finally, the behavior of the request initiated by autorefresh can be adjusted
305
+ * by setting the `autorefreshBehavior` arg to `'refresh'`, `'reload'`, or `'policy'`.
306
+ *
307
+ * - `'refresh'`: Refresh the request in the background
308
+ * - `'reload'`: Force a reload of the request
309
+ * - `'policy'` (**default**): Let the store's configured CachePolicy decide whether to
310
+ * reload, refresh, or do nothing.
311
+ *
312
+ * More advanced refresh and reload behaviors can be created by passing the reload and
313
+ * refresh actions into another component. For instance, refresh could be set up on a
314
+ * timer or on a websocket subscription.
315
+ *
316
+ *
317
+ * ```gjs
318
+ * import { Request } from '@warp-drive-mirror/ember';
319
+ *
320
+ * <template>
321
+ * <Request @request={{@request}}>
322
+ * <:content as |result state|>
323
+ * <h1>{{result.title}}</h1>
324
+ *
325
+ * <Interval @period={{30_000}} @fn={{state.refresh}} />
326
+ * <Subscribe @channel={{@someValue}} @fn={{state.refresh}} />
327
+ * </:content>
328
+ * </Request>
329
+ * </template>
330
+ * ```
331
+ *
332
+ * If a matching request is refreshed or reloaded by any other component,
333
+ * the `Request` component will react accordingly.
334
+ *
335
+ * ## Deduping
336
+ *
337
+ * The store dedupes requests by identity. If a request is made for the same identity
338
+ * from multiple `<Request />` components, even if the request is not referentially the
339
+ * same, only one actual request will be made.
340
+ *
341
+ *
342
+ * @class <Request />
343
+ * @public
344
+ */
345
+ export declare class Request<RT, T, E> extends Component<RequestSignature<RT, T, E>> {
346
+ /**
347
+ * The store instance to use for making requests. If contexts are available, this
348
+ * will be the `store` on the context, else it will be the store service.
349
+ *
350
+ * @internal
351
+ */
352
+ _store: Store;
353
+ /**
354
+ * Whether the browser reports that the network is online.
355
+ *
356
+ * @internal
357
+ */
358
+ isOnline: boolean;
359
+ /**
360
+ * Whether the browser reports that the tab is hidden.
361
+ *
362
+ * @internal
363
+ */
364
+ isHidden: boolean;
365
+ /**
366
+ * Whether the component is currently refreshing the request.
367
+ *
368
+ * @internal
369
+ */
370
+ isRefreshing: boolean;
371
+ /**
372
+ * The most recent blocking request that was made, typically
373
+ * the result of a reload.
374
+ *
375
+ * This will never be the original request passed as an arg to
376
+ * the component.
377
+ *
378
+ * @internal
379
+ */
380
+ _localRequest: Future<RT> | undefined;
381
+ /**
382
+ * The most recent request that was made, typically due to either a
383
+ * reload or a refresh.
384
+ *
385
+ * This will never be the original request passed as an arg to
386
+ * the component.
387
+ *
388
+ * @internal
389
+ */
390
+ _latestRequest: Future<RT> | undefined;
391
+ /**
392
+ * The time at which the network was reported as offline.
393
+ *
394
+ * @internal
395
+ */
396
+ unavailableStart: number | null;
397
+ intervalStart: number | null;
398
+ nextInterval: number | null;
399
+ invalidated: boolean;
400
+ isUpdating: boolean;
401
+ /**
402
+ * The event listener for network status changes,
403
+ * cached to use the reference for removal.
404
+ *
405
+ * @internal
406
+ */
407
+ onlineChanged: (event: Event) => void;
408
+ /**
409
+ * The event listener for visibility status changes,
410
+ * cached to use the reference for removal.
411
+ *
412
+ * @internal
413
+ */
414
+ backgroundChanged: (event: Event) => void;
415
+ /**
416
+ * The last request passed as an arg to the component,
417
+ * cached for comparison.
418
+ *
419
+ * @internal
420
+ */
421
+ _originalRequest: Future<RT> | undefined;
422
+ /**
423
+ * The last query passed as an arg to the component,
424
+ * cached for comparison.
425
+ *
426
+ * @internal
427
+ */
428
+ _originalQuery: StoreRequestInput<RT, T> | undefined;
429
+ _subscription: object | null;
430
+ _subscribedTo: object | null;
431
+ constructor(owner: Owner, args: RequestSignature<RT, T, E>['Args']);
432
+ beginPolling(): Promise<void>;
433
+ get isIdle(): boolean;
434
+ get autorefreshTypes(): Set<AutorefreshBehaviorType>;
435
+ scheduleInterval(): Promise<void>;
436
+ clearInterval(): void;
437
+ updateSubscriptions(): void;
438
+ removeSubscriptions(): void;
439
+ /**
440
+ * Install the event listeners for network and visibility changes.
441
+ * This is only done in browser environments with a global `window`.
442
+ *
443
+ * @internal
444
+ */
445
+ installListeners(): void;
446
+ /**
447
+ * If the network is online and the tab is visible, either reload or refresh the request
448
+ * based on the component's configuration and the requested update mode.
449
+ *
450
+ * Valid modes are:
451
+ *
452
+ * - `'reload'`: Force a reload of the request.
453
+ * - `'refresh'`: Refresh the request in the background.
454
+ * - `'policy'`: Make the request, letting the store's configured CachePolicy decide whether to reload, refresh, or do nothing.
455
+ * - `undefined`: Make the request using the component's autorefreshBehavior setting if the autorefreshThreshold has passed.
456
+ *
457
+ * @internal
458
+ */
459
+ maybeUpdate(mode?: 'reload' | 'refresh' | 'policy' | 'invalidated', silent?: boolean): void;
460
+ /**
461
+ * Retry the request, reloading it from the server.
462
+ *
463
+ * @internal
464
+ */
465
+ retry: () => Promise<void>;
466
+ /**
467
+ * Refresh the request, updating it in the background.
468
+ *
469
+ * @internal
470
+ */
471
+ refresh: () => Promise<void>;
472
+ get errorFeatures(): {
473
+ isHidden: boolean;
474
+ isOnline: boolean;
475
+ retry: () => Promise<void>;
476
+ };
477
+ get contentFeatures(): ContentFeatures<RT>;
478
+ willDestroy(): void;
479
+ get _request(): Future<RT>;
480
+ get request(): Future<RT>;
481
+ get store(): Store;
482
+ get reqState(): Readonly<RequestState<RT, T, StructuredErrorDocument<E>>>;
483
+ get result(): RT;
484
+ }
485
+ export {};
486
+ //# sourceMappingURL=request.gts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request.gts.d.ts","sourceRoot":"","sources":["../../src/-private/request.gts"],"names":[],"mappings":"AAAA,OA86BO,KAAK,KAAK,MAAM,cAAc,CAAC;AAEtC,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAK3C,OAAO,KAAK,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAEjE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,KAAK,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAGzF,OAAO,KAAK,EAAe,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AA6B3F,KAAK,uBAAuB,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC;AACjE,KAAK,yBAAyB,GAC1B,OAAO,GACP,uBAAuB,GACvB,GAAG,uBAAuB,IAAI,uBAAuB,EAAE,GACvD,GAAG,uBAAuB,IAAI,uBAAuB,IAAI,uBAAuB,EAAE,CAAC;AAEvF,KAAK,eAAe,CAAC,EAAE,IAAI;IACzB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,EAAE,OAAO,CAAC;IACtB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;CAC5B,CAAC;AAEF,UAAU,gBAAgB,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;IACjC,IAAI,EAAE;QACJ;;;;WAIG;QACH,OAAO,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QAErB;;;;;WAKG;QACH,KAAK,CAAC,EAAE,iBAAiB,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAEjC;;;;;;;WAOG;QACH,KAAK,CAAC,EAAE,KAAK,CAAC;QAEd;;;;;;;;;;;;WAYG;QACH,WAAW,CAAC,EAAE,yBAAyB,CAAC;QAExC;;;;;;;;;WASG;QACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;QAE9B;;;;;;;;;;;WAWG;QACH,mBAAmB,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;KACvD,CAAC;IACF,MAAM,EAAE;QACN;;;WAGG;QACH,IAAI,EAAE,EAAE,CAAC;QAET;;;WAGG;QACH,OAAO,EAAE,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC;QAEtC;;;WAGG;QACH,SAAS,EAAE;YACT,KAAK,EAAE,uBAAuB,CAAC,CAAC,CAAC;YACjC,QAAQ,EAAE;gBAAE,QAAQ,EAAE,OAAO,CAAC;gBAAC,QAAQ,EAAE,OAAO,CAAC;gBAAC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;aAAE;SAC/E,CAAC;QAEF;;;;;;;WAOG;QACH,KAAK,EAAE;YACL,KAAK,EAAE,uBAAuB,CAAC,CAAC,CAAC;YACjC,QAAQ,EAAE;gBAAE,QAAQ,EAAE,OAAO,CAAC;gBAAC,QAAQ,EAAE,OAAO,CAAC;gBAAC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;aAAE;SAC/E,CAAC;QAEF;;;WAGG;QACH,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC;QACpD,MAAM,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC,EAAE,EAAE,CAAC,EAAE,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KAClE,CAAC;CACH;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwNG;AACH,qBAAa,OAAO,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAE,SAAQ,SAAS,CAAC,gBAAgB,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1E;;;;;OAKG;IACuB,MAAM,EAAE,KAAK,CAAC;IAExC;;;;OAIG;IACM,QAAQ,UAAQ;IAEzB;;;;OAIG;IACM,QAAQ,UAAQ;IAEzB;;;;OAIG;IACM,YAAY,UAAS;IAE9B;;;;;;;;OAQG;IACM,aAAa,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC;IAE/C;;;;;;;;OAQG;IACM,cAAc,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC;IAEhD;;;;OAIG;IACK,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IAE5B;;;;;OAKG;IACK,aAAa,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAE9C;;;;;OAKG;IACK,iBAAiB,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAElD;;;;;OAKG;IACK,gBAAgB,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC;IAEjD;;;;;OAKG;IACK,cAAc,EAAE,iBAAiB,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC;IAErD,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;gBAEzB,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,gBAAgB,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;IAY5D,YAAY;IAalB,IACI,MAAM,YAIT;IAED,IACI,gBAAgB,IAAI,GAAG,CAAC,uBAAuB,CAAC,CAanD;IAUK,gBAAgB;IAqCtB,aAAa;IAOb,mBAAmB;IAqFnB,mBAAmB;IAQnB;;;;;OAKG;IACH,gBAAgB;IAgChB;;;;;;;;;;;;OAYG;IACH,WAAW,CAAC,IAAI,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,aAAa,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI;IA+E3F;;;;OAIG;IACH,KAAK,sBAGH;IAEF;;;;OAIG;IACH,OAAO,sBAGL;IAEF,IACI,aAAa;;;;MAMhB;IAED,IACI,eAAe,wBAiBlB;IAED,WAAW;IAiBX,IACI,QAAQ,IAAI,MAAM,CAAC,EAAE,CAAC,CAmBzB;IAED,IACI,OAAO,IAAI,MAAM,CAAC,EAAE,CAAC,CAIxB;IAED,IAAI,KAAK,IAAI,KAAK,CASjB;IAED,IAAI,QAAQ,8DAEX;IAED,IAAI,MAAM,IACuB,EAAE,CAClC;CA+CF"}