@spooky-sync/client-solid 0.0.1-canary.13 → 0.0.1-canary.131
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/AGENTS.md +68 -0
- package/README.md +20 -0
- package/dist/index.cjs +275 -65
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +129 -21
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.ts +129 -21
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +272 -66
- package/dist/index.js.map +1 -1
- package/package.json +8 -7
- package/skills/sp00ky-solid/SKILL.md +335 -0
- package/skills/sp00ky-solid/references/file-hooks.md +112 -0
- package/src/cache/index.ts +1 -1
- package/src/cache/surrealdb-wasm-factory.ts +4 -1
- package/src/index.ts +121 -55
- package/src/lib/Sp00kyProvider.ts +76 -0
- package/src/lib/context.ts +3 -3
- package/src/lib/create-preload.ts +111 -0
- package/src/lib/models.ts +1 -1
- package/src/lib/use-crdt-field.ts +68 -0
- package/src/lib/use-download-file.ts +2 -2
- package/src/lib/use-feature-flag.ts +50 -0
- package/src/lib/use-file-upload.ts +2 -1
- package/src/lib/use-query.ts +143 -28
- package/src/lib/use-sync-status.ts +50 -0
- package/src/types/index.ts +3 -4
- package/src/lib/SpookyProvider.ts +0 -55
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AuthService, BucketHandle, RunOptions,
|
|
1
|
+
import { AuthService, BucketHandle, CrdtField, FeatureFlagOptions, PreloadOptions, PreloadOptions as PreloadOptions$1, PreloadRefresh, RunOptions, Sp00kyClient, Sp00kyConfig, Sp00kyQueryResultPromise, SyncHealth, SyncHealth as SyncHealth$1, SyncHealthConfig, SyncHealthStatus, SyncHealthStatus as SyncHealthStatus$1, UpdateOptions } from "@spooky-sync/core";
|
|
2
2
|
import { RecordId, RecordId as RecordId$1, Surreal, Uuid } from "surrealdb";
|
|
3
3
|
import { Accessor, JSX } from "solid-js";
|
|
4
4
|
import { GenericModel, GenericSchema, SchemaStructure } from "@spooky/query-builder";
|
|
@@ -37,14 +37,22 @@ type InferRelationshipsFromConst<S extends SchemaStructure$1, Schema extends Gen
|
|
|
37
37
|
cardinality: Rel['cardinality'];
|
|
38
38
|
} } };
|
|
39
39
|
type Prettify<T> = { [K in keyof T]: T[K] } & {};
|
|
40
|
-
type SyncedDbConfig<S extends SchemaStructure$1> = Prettify<
|
|
40
|
+
type SyncedDbConfig<S extends SchemaStructure$1> = Prettify<Sp00kyConfig<S>>;
|
|
41
41
|
//#endregion
|
|
42
42
|
//#region src/lib/use-query.d.ts
|
|
43
43
|
type QueryArg<S extends SchemaStructure$1, TableName extends TableNames$1<S>, T extends {
|
|
44
44
|
columns: Record<string, ColumnSchema>;
|
|
45
|
-
}, RelatedFields extends Record<string, any>, IsOne extends boolean> = FinalQuery<S, TableName, T, RelatedFields, IsOne,
|
|
45
|
+
}, RelatedFields extends Record<string, any>, IsOne extends boolean> = FinalQuery<S, TableName, T, RelatedFields, IsOne, Sp00kyQueryResultPromise> | (() => FinalQuery<S, TableName, T, RelatedFields, IsOne, Sp00kyQueryResultPromise> | null | undefined);
|
|
46
46
|
type QueryOptions = {
|
|
47
47
|
enabled?: () => boolean;
|
|
48
|
+
/**
|
|
49
|
+
* Tear down the query (remote `_00_query` view + local WASM view) when this
|
|
50
|
+
* hook is disposed and no other subscriber remains, instead of keeping it
|
|
51
|
+
* resident for cheap re-subscription. Use for viewport-windowed lists that
|
|
52
|
+
* mount/unmount a query per scroll window and want off-screen windows
|
|
53
|
+
* cancelled. Trade-off: scrolling back to a torn-down window re-registers it.
|
|
54
|
+
*/
|
|
55
|
+
deregisterOnCleanup?: boolean;
|
|
48
56
|
};
|
|
49
57
|
declare function useQuery<S extends SchemaStructure$1, TableName extends TableNames$1<S>, T extends {
|
|
50
58
|
columns: Record<string, ColumnSchema>;
|
|
@@ -52,6 +60,8 @@ declare function useQuery<S extends SchemaStructure$1, TableName extends TableNa
|
|
|
52
60
|
data: () => TData | undefined;
|
|
53
61
|
error: () => Error | undefined;
|
|
54
62
|
isLoading: () => boolean;
|
|
63
|
+
isFetching: () => boolean;
|
|
64
|
+
isSettled: () => boolean;
|
|
55
65
|
};
|
|
56
66
|
declare function useQuery<S extends SchemaStructure$1, TableName extends TableNames$1<S>, T extends {
|
|
57
67
|
columns: Record<string, ColumnSchema>;
|
|
@@ -59,8 +69,81 @@ declare function useQuery<S extends SchemaStructure$1, TableName extends TableNa
|
|
|
59
69
|
data: () => TData | undefined;
|
|
60
70
|
error: () => Error | undefined;
|
|
61
71
|
isLoading: () => boolean;
|
|
72
|
+
isFetching: () => boolean;
|
|
73
|
+
isSettled: () => boolean;
|
|
62
74
|
};
|
|
63
75
|
//#endregion
|
|
76
|
+
//#region src/lib/create-preload.d.ts
|
|
77
|
+
type PreloadArg<S extends SchemaStructure$1, TableName extends TableNames$1<S>, T extends {
|
|
78
|
+
columns: Record<string, ColumnSchema>;
|
|
79
|
+
}, RelatedFields extends Record<string, any>, IsOne extends boolean> = FinalQuery<S, TableName, T, RelatedFields, IsOne, Sp00kyQueryResultPromise> | (() => FinalQuery<S, TableName, T, RelatedFields, IsOne, Sp00kyQueryResultPromise> | null | undefined);
|
|
80
|
+
type PreloadOptions$2 = PreloadOptions$1 & {
|
|
81
|
+
/** Only preload while this returns true (defaults to always). */
|
|
82
|
+
enabled?: () => boolean;
|
|
83
|
+
};
|
|
84
|
+
declare function createPreload<S extends SchemaStructure$1, TableName extends TableNames$1<S>, T extends {
|
|
85
|
+
columns: Record<string, ColumnSchema>;
|
|
86
|
+
}, RelatedFields extends Record<string, any>, IsOne extends boolean>(finalQuery: PreloadArg<S, TableName, T, RelatedFields, IsOne>, options?: PreloadOptions$2): void;
|
|
87
|
+
declare function createPreload<S extends SchemaStructure$1, TableName extends TableNames$1<S>, T extends {
|
|
88
|
+
columns: Record<string, ColumnSchema>;
|
|
89
|
+
}, RelatedFields extends Record<string, any>, IsOne extends boolean>(db: SyncedDb<S>, finalQuery: PreloadArg<S, TableName, T, RelatedFields, IsOne>, options?: PreloadOptions$2): void;
|
|
90
|
+
//#endregion
|
|
91
|
+
//#region src/lib/use-sync-status.d.ts
|
|
92
|
+
interface UseSyncStatus {
|
|
93
|
+
/** Full health snapshot; updates reactively on every transition. */
|
|
94
|
+
health: Accessor<SyncHealth$1>;
|
|
95
|
+
/** `'healthy'` | `'degraded'`. */
|
|
96
|
+
status: Accessor<SyncHealthStatus$1>;
|
|
97
|
+
isHealthy: Accessor<boolean>;
|
|
98
|
+
/** `true` once sync has failed for a sustained run — drive a banner off this. */
|
|
99
|
+
isDegraded: Accessor<boolean>;
|
|
100
|
+
/** `true` once at least one sync round has succeeded this session. */
|
|
101
|
+
everConnected: Accessor<boolean>;
|
|
102
|
+
/**
|
|
103
|
+
* `true` only for a real lost connection: degraded AFTER a first successful
|
|
104
|
+
* sync. Stays `false` during the initial "connecting" phase (degraded but
|
|
105
|
+
* never reached the server yet), so an indicator can show nothing until the
|
|
106
|
+
* app has actually connected once.
|
|
107
|
+
*/
|
|
108
|
+
isOffline: Accessor<boolean>;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Observe sync health for a "can't reach the server" banner / indicator.
|
|
112
|
+
*
|
|
113
|
+
* Backed by `db.subscribeToSyncHealth`. Individual sync failures (a transient
|
|
114
|
+
* remote 500 on query registration, a dropped socket) are absorbed by the
|
|
115
|
+
* retry and never flip this; `isDegraded()` only goes true once failures
|
|
116
|
+
* persist for the configured number of consecutive rounds (sp00ky core config
|
|
117
|
+
* `syncHealth.degradeAfterConsecutiveFailures`, default 3), and flips back on
|
|
118
|
+
* the next successful round. Must be used within a `<Sp00kyProvider>`.
|
|
119
|
+
*/
|
|
120
|
+
declare function useSyncStatus(): UseSyncStatus;
|
|
121
|
+
//# sourceMappingURL=use-sync-status.d.ts.map
|
|
122
|
+
//#endregion
|
|
123
|
+
//#region src/lib/use-crdt-field.d.ts
|
|
124
|
+
declare function useCrdtField(table: string, recordId: () => string | undefined, field: string, fallbackText?: () => string | undefined): Accessor<CrdtField | null>;
|
|
125
|
+
//# sourceMappingURL=use-crdt-field.d.ts.map
|
|
126
|
+
//#endregion
|
|
127
|
+
//#region src/lib/use-feature-flag.d.ts
|
|
128
|
+
interface UseFeatureFlag {
|
|
129
|
+
variant: Accessor<string | undefined>;
|
|
130
|
+
payload: Accessor<unknown | undefined>;
|
|
131
|
+
enabled: Accessor<boolean>;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Subscribe to a feature flag for the currently authenticated user.
|
|
135
|
+
*
|
|
136
|
+
* Returns three Solid accessors that update reactively whenever the
|
|
137
|
+
* server-materialized assignment in `_00_user_feature` changes. Backed by
|
|
138
|
+
* the same SSP + sync pipeline that powers `useQuery`, so toggling a flag
|
|
139
|
+
* via `spky flag enable <key>` propagates to the UI without a refresh.
|
|
140
|
+
*
|
|
141
|
+
* `enabled()` is `true` when the resolved variant exists and is not 'off'.
|
|
142
|
+
* For multi-variant flags, prefer `variant()` directly.
|
|
143
|
+
*/
|
|
144
|
+
declare function useFeatureFlag(key: string, options?: FeatureFlagOptions): UseFeatureFlag;
|
|
145
|
+
//# sourceMappingURL=use-feature-flag.d.ts.map
|
|
146
|
+
//#endregion
|
|
64
147
|
//#region src/lib/use-file-upload.d.ts
|
|
65
148
|
interface FileUploadResult {
|
|
66
149
|
isUploading: () => boolean;
|
|
@@ -89,16 +172,25 @@ declare function useDownloadFile<S extends SchemaStructure$1>(bucketName: Bucket
|
|
|
89
172
|
declare function useDownloadFile<S extends SchemaStructure$1>(db: SyncedDb<S>, bucketName: BucketNames<S>, path: Accessor<string | null | undefined>, options?: UseDownloadFileOptions): UseDownloadFileResult;
|
|
90
173
|
//# sourceMappingURL=use-download-file.d.ts.map
|
|
91
174
|
//#endregion
|
|
92
|
-
//#region src/lib/
|
|
93
|
-
interface
|
|
175
|
+
//#region src/lib/Sp00kyProvider.d.ts
|
|
176
|
+
interface Sp00kyProviderProps<S extends SchemaStructure> {
|
|
94
177
|
config: SyncedDbConfig<S>;
|
|
95
178
|
fallback?: JSX.Element;
|
|
96
179
|
onError?: (error: Error) => void;
|
|
97
180
|
onReady?: (db: SyncedDb<S>) => void;
|
|
181
|
+
/**
|
|
182
|
+
* Prewarm data into the local cache before revealing the UI. Runs after
|
|
183
|
+
* `init()`; the `fallback` stays visible until it resolves. Use awaitable
|
|
184
|
+
* `db.preload(...)` calls here to gate first-load on essential data (e.g.
|
|
185
|
+
* config). On warm loads preload returns instantly, so there's no perceptible
|
|
186
|
+
* gate after the first run. Best-effort: a rejection is caught and the UI is
|
|
187
|
+
* revealed anyway.
|
|
188
|
+
*/
|
|
189
|
+
preload?: (db: SyncedDb<S>) => Promise<void>;
|
|
98
190
|
children: JSX.Element;
|
|
99
191
|
}
|
|
100
|
-
declare function
|
|
101
|
-
//# sourceMappingURL=
|
|
192
|
+
declare function Sp00kyProvider<S extends SchemaStructure>(props: Sp00kyProviderProps<S>): JSX.Element;
|
|
193
|
+
//# sourceMappingURL=Sp00kyProvider.d.ts.map
|
|
102
194
|
//#endregion
|
|
103
195
|
//#region src/lib/context.d.ts
|
|
104
196
|
declare function useDb<S extends SchemaStructure>(): SyncedDb<S>;
|
|
@@ -106,13 +198,13 @@ declare function useDb<S extends SchemaStructure>(): SyncedDb<S>;
|
|
|
106
198
|
|
|
107
199
|
//#endregion
|
|
108
200
|
//#region src/index.d.ts
|
|
109
|
-
type RelationshipField<Schema extends SchemaStructure$1, TableName extends TableNames
|
|
110
|
-
type RelatedFieldsTableScoped<Schema extends SchemaStructure$1, TableName extends TableNames
|
|
201
|
+
type RelationshipField<Schema extends SchemaStructure$1, TableName extends TableNames<Schema>, Field extends RelationshipFieldsFromSchema<Schema, TableName>> = GetRelationship<Schema, TableName, Field>;
|
|
202
|
+
type RelatedFieldsTableScoped<Schema extends SchemaStructure$1, TableName extends TableNames<Schema>, RelatedFields extends RelationshipFieldsFromSchema<Schema, TableName> = RelationshipFieldsFromSchema<Schema, TableName>> = { [K in RelatedFields]: {
|
|
111
203
|
to: RelationshipField<Schema, TableName, K>['to'];
|
|
112
204
|
relatedFields: RelatedFieldsMap;
|
|
113
205
|
cardinality: RelationshipField<Schema, TableName, K>['cardinality'];
|
|
114
206
|
} };
|
|
115
|
-
type InferModel<Schema extends SchemaStructure$1, TableName extends TableNames
|
|
207
|
+
type InferModel<Schema extends SchemaStructure$1, TableName extends TableNames<Schema>, RelatedFields extends RelatedFieldsTableScoped<Schema, TableName>> = QueryResult<Schema, TableName, RelatedFields, true>;
|
|
116
208
|
type WithRelated<Field extends string, RelatedFields extends RelatedFieldsMap = {}> = { [K in Field]: Omit<RelatedFieldMapEntry, 'relatedFields'> & {
|
|
117
209
|
relatedFields: RelatedFields;
|
|
118
210
|
} };
|
|
@@ -122,17 +214,17 @@ type WithRelatedMany<Field extends string, RelatedFields extends RelatedFieldsMa
|
|
|
122
214
|
cardinality: 'many';
|
|
123
215
|
} };
|
|
124
216
|
/**
|
|
125
|
-
* SyncedDb - A thin wrapper around
|
|
126
|
-
* Delegates all logic to the underlying
|
|
217
|
+
* SyncedDb - A thin wrapper around sp00ky-ts for Solid.js integration
|
|
218
|
+
* Delegates all logic to the underlying sp00ky-ts instance
|
|
127
219
|
*/
|
|
128
220
|
declare class SyncedDb<S extends SchemaStructure$1> {
|
|
129
221
|
private config;
|
|
130
|
-
private
|
|
222
|
+
private sp00ky;
|
|
131
223
|
private _initialized;
|
|
132
224
|
constructor(config: SyncedDbConfig<S>);
|
|
133
|
-
|
|
225
|
+
getSp00ky(): Sp00kyClient<S>;
|
|
134
226
|
/**
|
|
135
|
-
* Initialize the
|
|
227
|
+
* Initialize the sp00ky-ts instance
|
|
136
228
|
*/
|
|
137
229
|
init(): Promise<void>;
|
|
138
230
|
/**
|
|
@@ -142,15 +234,21 @@ declare class SyncedDb<S extends SchemaStructure$1> {
|
|
|
142
234
|
/**
|
|
143
235
|
* Update an existing record in the database
|
|
144
236
|
*/
|
|
145
|
-
update<TName extends TableNames
|
|
237
|
+
update<TName extends TableNames<S>>(tableName: TName, recordId: string, payload: Partial<TableModel<GetTable<S, TName>>>, options?: UpdateOptions): Promise<void>;
|
|
146
238
|
/**
|
|
147
239
|
* Delete an existing record in the database
|
|
148
240
|
*/
|
|
149
|
-
delete<TName extends TableNames
|
|
241
|
+
delete<TName extends TableNames<S>>(tableName: TName, selector: string | RecordId | InnerQuery<GetTable<S, TName>, boolean>): Promise<void>;
|
|
242
|
+
/**
|
|
243
|
+
* Preload/prewarm a built query into the local cache without registering a
|
|
244
|
+
* live view. Fetches once and stores the rows (+ embedded related children)
|
|
245
|
+
* locally so a later `useQuery` for the same data paints instantly. Best-effort.
|
|
246
|
+
*/
|
|
247
|
+
preload(finalQuery: FinalQuery<S, any, any, any, any, Sp00kyQueryResultPromise>, options?: PreloadOptions$1): Promise<void>;
|
|
150
248
|
/**
|
|
151
249
|
* Query data from the database
|
|
152
250
|
*/
|
|
153
|
-
query<TName extends TableNames
|
|
251
|
+
query<TName extends TableNames<S>>(table: TName): QueryBuilder<S, TName, Sp00kyQueryResultPromise, {}, false>;
|
|
154
252
|
/**
|
|
155
253
|
* Run a backend operation
|
|
156
254
|
*/
|
|
@@ -175,20 +273,30 @@ declare class SyncedDb<S extends SchemaStructure$1> {
|
|
|
175
273
|
/**
|
|
176
274
|
* Access the remote database service directly
|
|
177
275
|
*/
|
|
178
|
-
get remote():
|
|
276
|
+
get remote(): Sp00kyClient<S>['remoteClient'];
|
|
179
277
|
/**
|
|
180
278
|
* Access the local database service directly
|
|
181
279
|
*/
|
|
182
|
-
get local():
|
|
280
|
+
get local(): Sp00kyClient<S>['localClient'];
|
|
183
281
|
/**
|
|
184
282
|
* Access the auth service
|
|
185
283
|
*/
|
|
186
284
|
get auth(): AuthService<S>;
|
|
187
285
|
get pendingMutationCount(): number;
|
|
286
|
+
/** Diagnostic — see `Sp00kyClient.liveRetryCount`. */
|
|
287
|
+
get liveRetryCount(): number;
|
|
188
288
|
subscribeToPendingMutations(cb: (count: number) => void): () => void;
|
|
289
|
+
/** Current sync-health snapshot. See {@link useSyncStatus}. */
|
|
290
|
+
get syncHealth(): SyncHealth$1;
|
|
291
|
+
/**
|
|
292
|
+
* Observe sync health. Fires immediately with the current status and again
|
|
293
|
+
* on every healthy↔degraded transition. Prefer the `useSyncStatus` hook in
|
|
294
|
+
* components; this is the imperative escape hatch.
|
|
295
|
+
*/
|
|
296
|
+
subscribeToSyncHealth(cb: (health: SyncHealth$1) => void): () => void;
|
|
189
297
|
bucket<B extends BucketNames<S>>(name: B): BucketHandle;
|
|
190
298
|
getBucketConfig(name: string): BucketDefinitionSchema | undefined;
|
|
191
299
|
}
|
|
192
300
|
//#endregion
|
|
193
|
-
export { CacheStrategy, type FileUploadResult, type GenericModel, type GenericSchema, type GetCardinality, type GetTable, InferModel, type InferRelatedModelFromMetadata, InferRelationshipsFromConst, InferSchemaFromConst, type Model, type ModelPayload, ProvisionOptions, type QueryInfo, type QueryModifier, type QueryModifierBuilder, type QueryResult, RecordId, RelatedFieldsTableScoped, type RelationshipDefinition, RelationshipField, type RelationshipsMetadata,
|
|
301
|
+
export { CacheStrategy, type FileUploadResult, type GenericModel, type GenericSchema, type GetCardinality, type GetTable, InferModel, type InferRelatedModelFromMetadata, InferRelationshipsFromConst, InferSchemaFromConst, type Model, type ModelPayload, type PreloadOptions, type PreloadRefresh, ProvisionOptions, type QueryInfo, type QueryModifier, type QueryModifierBuilder, type QueryResult, RecordId, RelatedFieldsTableScoped, type RelationshipDefinition, RelationshipField, type RelationshipsMetadata, Sp00kyProvider, type Sp00kyProviderProps, type SyncHealth, type SyncHealthConfig, type SyncHealthStatus, SyncedDb, SyncedDbConfig, type TableModel, type TableNames, type UseDownloadFileOptions, type UseDownloadFileResult, type UseFeatureFlag, type UseSyncStatus, Uuid, WithRelated, WithRelatedMany, createPreload, useCrdtField, useDb, useDownloadFile, useFeatureFlag, useFileUpload, useQuery, useSyncStatus };
|
|
194
302
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/lib/models.ts","../../../src/types/index.ts","../../../src/lib/use-query.ts","../../../src/lib/use-file-upload.ts","../../../src/lib/use-download-file.ts","../../../src/lib/
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/lib/models.ts","../../../src/types/index.ts","../../../src/lib/use-query.ts","../../../src/lib/create-preload.ts","../../../src/lib/use-sync-status.ts","../../../src/lib/use-crdt-field.ts","../../../src/lib/use-feature-flag.ts","../../../src/lib/use-file-upload.ts","../../../src/lib/use-download-file.ts","../../../src/lib/Sp00kyProvider.ts","../../../src/lib/context.ts","../../../src/index.ts"],"sourcesContent":[],"mappings":"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G,SV1DH,EU0Dc,KV1Dd,CAAA;AAKb,KUuDA,wBVvDoB,CAAA,eUwDf,iBVxDe,EAAA,kBUyDZ,UVzDY,CUyDD,MVzDC,CAAA,EAAA,sBU0DR,4BV1DQ,CU0DqB,MV1DrB,EU0D6B,SV1D7B,CAAA,GU2D5B,4BV3D4B,CU2DC,MV3DD,EU2DS,SV3DT,CAAA,CAAA,GAAA,QU6DxB,aV7DwB,GAAA;EAAW,EAAA,EU8DnC,iBV9DmC,CU8DjB,MV9DiB,EU8DT,SV9DS,EU8DE,CV9DF,CAAA,CAAA,IAAA,CAAA;EACxB,aAAA,EU8DA,gBV9DA;EAAX,WAAA,EU+DS,iBV/DT,CU+D2B,MV/D3B,EU+DmC,SV/DnC,EU+D8C,CV/D9C,CAAA,CAAA,aAAA,CAAA;;AAA2B,KUmEvB,UVnEuB,CAAA,eUoElB,iBVpEkB,EAAA,kBUqEf,UVrEe,CUqEJ,MVrEI,CAAA,EAAA,sBUsEX,wBVtEW,CUsEc,MVtEd,EUsEsB,SVtEtB,CAAA,CAAA,GUuE/B,WVvE+B,CUuEnB,MVvEmB,EUuEX,SVvEW,EUuEA,aVvEA,EAAA,IAAA,CAAA;AAAX,KUyEZ,WVzEY,CAAA,cAAA,MAAA,EAAA,sBUyE4C,gBVzE5C,GAAA,CAAA,CAAA,CAAA,GAAA,QU0EhB,KV1E0B,GU0ElB,IV1EkB,CU0Eb,oBV1Ea,EAAA,eAAA,CAAA,GAAA;EAOtB,aAAA,EUoEO,aVpEoB;AAAA,CAAA;AAA2C,KUwEtE,eVxEsE,CAAA,cAAA,MAAA,EAAA,sBUwEV,gBVxEU,GAAA,CAAA,CAAA,CAAA,GAAA,QUyE1E,KVxEmB,GAAA;EAAX,EAAA,EUyER,KVzEQ;EACI,aAAA,EUyED,aVzEC;EAAoC,WAAA,EAAA,MAAA;;;;;;AAE3C,cUgFA,QVhFA,CAAA,UUgFmB,iBVhFnB,CAAA,CAAA;UACM,MAAA;EAAG,QAAA,MAAA;EAMjB,QAAA,YAAQ;EAAA,WAAA,CAAA,MAAA,EU8ES,cV9ET,CU8EwB,CV9ExB,CAAA;WAAoB,CAAA,CAAA,EUkFX,YVlFW,CUkFE,CVlFF,CAAA;;;;EAErB,IAAA,CAAA,CAAA,EUwFI,OVxFJ,CAAA,IAAc,CAAA;EAAA;;;QAAuC,CAAA,EAAA,EAAA,MAAA,EAAA,OAAA,EUkG7B,MVlG6B,CAAA,MAAA,EAAA,OAAA,CAAA,CAAA,EUkGH,OVlGG,CAAA,IAAA,CAAA;;;;uBU0GpC,WAAW,eACzB,kCAEF,QAAQ,WAAW,SAAS,GAAG,oBAC9B,gBACT;;ATlJ6D;;QAItD,CAAA,cS2JiB,UT3JjB,CS2J4B,CT3J5B,CAAA,CAAA,CAAA,SAAA,ES4JG,KT5JH,EAAA,QAAA,EAAA,MAAA,GS6JW,QT7JX,GS6JsB,UT7JtB,CS6JiC,QT7JjC,CS6J0C,CT7J1C,ES6J6C,KT7J7C,CAAA,EAAA,OAAA,CAAA,CAAA,ES8JP,OT9JO,CAAA,IAAA,CAAA;;;;;;SAMG,CAAA,UAAA,ESmLC,UTnLD,CSmLY,CTnLZ,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,ESmLmC,wBTnLnC,CAAA,EAAA,OAAA,CAAA,ESoLD,gBTpLC,CAAA,ESqLV,OTrLU,CAAA,IAAA,CAAA;;;;OAAgC,CAAA,cS6LlB,UT7LkB,CS6LP,CT7LO,CAAA,CAAA,CAAA,KAAA,ES8LpC,KT9LoC,CAAA,ES+L1C,YT/L0C,CS+L7B,CT/L6B,ES+L1B,KT/L0B,ES+LnB,wBT/LmB,EAAA,CAAA,CAAA,EAAA,KAAA,CAAA;;;;KAEzB,CAAA,USsMR,YTtMQ,CSsMK,CTtML,CAAA,EAAA,USuMR,aTvMQ,CSuMM,CTvMN,ESuMS,CTvMT,CAAA,CAAA,CAAA,OAAA,ESyMT,CTzMS,EAAA,IAAA,ES0MZ,CT1MY,EAAA,OAAA,ES2MT,YT3MS,CS2MI,CT3MJ,ES2MO,CT3MP,ES2MU,CT3MV,CAAA,EAAA,OAAA,CAAA,ES4MR,UT5MQ,CAAA,ES6MjB,OT7MiB,CAAA,IAAA,CAAA;;;;cAAoC,CAAA,KAAA,EAAA,MAAA,CAAA,ESqNd,OTrNc,CSqNN,QTrNM,CAAA,MAAA,CAAA,CAAA;;;AAAxC;AAiBlB;EAAwB,cAAA,CAAA,CAAA,ESiNS,OTjNT,CAAA,IAAA,CAAA;;;;SAGc,CAAA,CAAA,ESqNZ,OTrNY,CAAA,IAAA,CAAA;;;;WAGb,CAAA,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA,EAAA,ES0NY,OT1NZ,EAAA,GS0NwB,CT1NxB,GS0N4B,OT1N5B,CS0NoC,CT1NpC,CAAA,CAAA,ES0NyC,OT1NzC,CS0NiD,CT1NjD,CAAA;;;;MAEF,MAAA,CAAA,CAAA,ES+NP,YT/NO,CS+NM,CT/NN,CAAA,CAAA,cAAA,CAAA;;;;MAAgC,KAAA,CAAA,CAAA,ESuOxC,YTvOwC,CSuO3B,CTvO2B,CAAA,CAAA,aAAA,CAAA;;;;MAIxC,IAAA,CAAA,CAAA,ES2OD,WT3OC,CS2OW,CT3OX,CAAA;EAAK,IAAA,oBAAA,CAAA,CAAA,EAAA,MAAA;EAOJ;EAAQ,IAAA,cAAA,CAAA,CAAA,EAAA,MAAA;6BACZ,CAAA,EAAA,EAAA,CAAA,KAAA,EAAA,MAAA,EAAA,GAAA,IAAA,CAAA,EAAA,GAAA,GAAA,IAAA;;MACQ,UAAA,CAAA,CAAA,ESwPA,YTxPA;;;;;;uBAIgB,CAAA,EAAA,EAAA,CAAA,MAAA,ES8PC,YT9PD,EAAA,GAAA,IAAA,CAAA,EAAA,GAAA,GAAA,IAAA;QAAe,CAAA,USmQhC,WTnQgC,CSmQpB,CTnQoB,CAAA,CAAA,CAAA,IAAA,ESmQV,CTnQU,CAAA,ESmQN,YTnQM;iBAAzC,CAAA,IAAA,EAAA,MAAA,CAAA,ESwQuB,sBTxQvB,GAAA,SAAA"}
|