@ic-reactor/react 3.6.0 → 3.8.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 +117 -13
- package/dist/auth/authentication-manager.d.ts +98 -0
- package/dist/auth/authentication-manager.d.ts.map +1 -0
- package/dist/auth/authentication-manager.js +532 -0
- package/dist/auth/authentication-manager.js.map +1 -0
- package/dist/auth/constants.d.ts +18 -0
- package/dist/auth/constants.d.ts.map +1 -0
- package/dist/auth/constants.js +18 -0
- package/dist/auth/constants.js.map +1 -0
- package/dist/auth/createIdentityAttributeHooks.d.ts +14 -0
- package/dist/auth/createIdentityAttributeHooks.d.ts.map +1 -0
- package/dist/auth/createIdentityAttributeHooks.js +54 -0
- package/dist/auth/createIdentityAttributeHooks.js.map +1 -0
- package/dist/auth/identity-attributes-manager.d.ts +26 -0
- package/dist/auth/identity-attributes-manager.d.ts.map +1 -0
- package/dist/auth/identity-attributes-manager.js +108 -0
- package/dist/auth/identity-attributes-manager.js.map +1 -0
- package/dist/auth/identity-attributes.d.ts +19 -0
- package/dist/auth/identity-attributes.d.ts.map +1 -0
- package/dist/auth/identity-attributes.js +170 -0
- package/dist/auth/identity-attributes.js.map +1 -0
- package/dist/auth/index.d.ts +8 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +8 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/types.d.ts +182 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +2 -0
- package/dist/auth/types.js.map +1 -0
- package/dist/createActorHooks.d.ts +16 -16
- package/dist/createActorHooks.d.ts.map +1 -1
- package/dist/createActorHooks.js +6 -6
- package/dist/createActorHooks.js.map +1 -1
- package/dist/createInfiniteQuery.d.ts +33 -33
- package/dist/createInfiniteQuery.d.ts.map +1 -1
- package/dist/createInfiniteQuery.js +6 -6
- package/dist/createInfiniteQuery.js.map +1 -1
- package/dist/createMutation.d.ts +13 -2
- package/dist/createMutation.d.ts.map +1 -1
- package/dist/createMutation.js +11 -0
- package/dist/createMutation.js.map +1 -1
- package/dist/createQuery.d.ts +13 -3
- package/dist/createQuery.d.ts.map +1 -1
- package/dist/createQuery.js +16 -6
- package/dist/createQuery.js.map +1 -1
- package/dist/createSuspenseInfiniteQuery.d.ts +32 -32
- package/dist/createSuspenseInfiniteQuery.d.ts.map +1 -1
- package/dist/createSuspenseInfiniteQuery.js +6 -6
- package/dist/createSuspenseInfiniteQuery.js.map +1 -1
- package/dist/createSuspenseQuery.d.ts +3 -3
- package/dist/createSuspenseQuery.d.ts.map +1 -1
- package/dist/createSuspenseQuery.js +1 -1
- package/dist/createSuspenseQuery.js.map +1 -1
- package/dist/defineReactor.d.ts +124 -0
- package/dist/defineReactor.d.ts.map +1 -0
- package/dist/defineReactor.js +145 -0
- package/dist/defineReactor.js.map +1 -0
- package/dist/{createAuthHooks.d.ts → hooks/createAuthHooks.d.ts} +6 -13
- package/dist/hooks/createAuthHooks.d.ts.map +1 -0
- package/dist/{createAuthHooks.js → hooks/createAuthHooks.js} +18 -58
- package/dist/hooks/createAuthHooks.js.map +1 -0
- package/dist/hooks/index.d.ts +2 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +2 -0
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/useActorInfiniteQuery.d.ts +9 -9
- package/dist/hooks/useActorInfiniteQuery.d.ts.map +1 -1
- package/dist/hooks/useActorInfiniteQuery.js +3 -1
- package/dist/hooks/useActorInfiniteQuery.js.map +1 -1
- package/dist/hooks/useActorMethod.d.ts +17 -17
- package/dist/hooks/useActorMethod.d.ts.map +1 -1
- package/dist/hooks/useActorMethod.js.map +1 -1
- package/dist/hooks/useActorMutation.d.ts +18 -7
- package/dist/hooks/useActorMutation.d.ts.map +1 -1
- package/dist/hooks/useActorMutation.js +11 -0
- package/dist/hooks/useActorMutation.js.map +1 -1
- package/dist/hooks/useActorQuery.d.ts +8 -8
- package/dist/hooks/useActorQuery.d.ts.map +1 -1
- package/dist/hooks/useActorQuery.js.map +1 -1
- package/dist/hooks/useActorSuspenseInfiniteQuery.d.ts +9 -9
- package/dist/hooks/useActorSuspenseInfiniteQuery.d.ts.map +1 -1
- package/dist/hooks/useActorSuspenseInfiniteQuery.js +3 -1
- package/dist/hooks/useActorSuspenseInfiniteQuery.js.map +1 -1
- package/dist/hooks/useActorSuspenseQuery.d.ts +8 -8
- package/dist/hooks/useActorSuspenseQuery.d.ts.map +1 -1
- package/dist/hooks/useActorSuspenseQuery.js.map +1 -1
- package/dist/index.d.ts +11 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -10
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +24 -24
- package/dist/types.d.ts.map +1 -1
- package/dist/utils.d.ts +3 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +10 -2
- package/dist/utils.js.map +1 -1
- package/llms.txt +48 -0
- package/package.json +34 -23
- package/src/auth/authentication-manager.ts +591 -0
- package/src/auth/constants.ts +25 -0
- package/src/auth/createIdentityAttributeHooks.ts +83 -0
- package/src/auth/identity-attributes-manager.ts +136 -0
- package/src/auth/identity-attributes.ts +270 -0
- package/src/auth/index.ts +7 -0
- package/src/auth/types.ts +204 -0
- package/src/createActorHooks.ts +90 -58
- package/src/createInfiniteQuery.ts +154 -98
- package/src/createMutation.ts +35 -19
- package/src/createQuery.ts +94 -50
- package/src/createSuspenseInfiniteQuery.ts +166 -115
- package/src/createSuspenseQuery.ts +69 -43
- package/src/defineReactor.ts +272 -0
- package/src/{createAuthHooks.ts → hooks/createAuthHooks.ts} +23 -99
- package/src/hooks/index.ts +4 -0
- package/src/hooks/useActorInfiniteQuery.ts +44 -30
- package/src/hooks/useActorMethod.ts +62 -53
- package/src/hooks/useActorMutation.ts +47 -30
- package/src/hooks/useActorQuery.ts +36 -32
- package/src/hooks/useActorSuspenseInfiniteQuery.ts +56 -30
- package/src/hooks/useActorSuspenseQuery.ts +42 -32
- package/src/index.ts +12 -10
- package/src/types.ts +76 -71
- package/src/utils.ts +15 -2
- package/dist/createAuthHooks.d.ts.map +0 -1
- package/dist/createAuthHooks.js.map +0 -1
- package/src/hooks/useActorInfiniteQuery.test.tsx +0 -457
- package/src/hooks/useActorMethod.test.tsx +0 -798
- package/src/hooks/useActorMutation.test.tsx +0 -220
- package/src/hooks/useActorQuery.test.tsx +0 -287
- package/src/hooks/useActorSuspenseInfiniteQuery.test.tsx +0 -472
- package/src/hooks/useActorSuspenseQuery.test.tsx +0 -254
package/README.md
CHANGED
|
@@ -13,6 +13,11 @@ pnpm add @ic-reactor/react @icp-sdk/core @tanstack/react-query
|
|
|
13
13
|
pnpm add @icp-sdk/auth
|
|
14
14
|
```
|
|
15
15
|
|
|
16
|
+
`@icp-sdk/auth` is an optional peer. `AuthenticationManager` reaches it through a
|
|
17
|
+
literal `import("@icp-sdk/auth/client")`, so Vite, Rollup and webpack resolve it
|
|
18
|
+
at build time and code-split it into its own chunk — and tree-shake it away
|
|
19
|
+
entirely in apps that never reference the class.
|
|
20
|
+
|
|
16
21
|
## Quick Start
|
|
17
22
|
|
|
18
23
|
```tsx
|
|
@@ -25,7 +30,6 @@ export const queryClient = new QueryClient()
|
|
|
25
30
|
|
|
26
31
|
export const clientManager = new ClientManager({
|
|
27
32
|
queryClient,
|
|
28
|
-
withCanisterEnv: true,
|
|
29
33
|
})
|
|
30
34
|
|
|
31
35
|
export const backend = new Reactor<_SERVICE>({
|
|
@@ -81,8 +85,10 @@ export function App() {
|
|
|
81
85
|
|
|
82
86
|
- `createActorHooks(reactor)` for per-canister hooks like `useActorQuery` and
|
|
83
87
|
`useActorMutation`
|
|
84
|
-
- `createAuthHooks(
|
|
85
|
-
`useUserPrincipal
|
|
88
|
+
- `createAuthHooks(authentication)` for `useAuth`, `useAgentState`, and
|
|
89
|
+
`useUserPrincipal`
|
|
90
|
+
- `createIdentityAttributeHooks(identityAttributes)` for signed identity
|
|
91
|
+
attribute requests
|
|
86
92
|
- direct reactor hooks like `useReactorQuery` when you want to pass the reactor
|
|
87
93
|
instance at call time
|
|
88
94
|
- factory helpers like `createQuery`, `createSuspenseQuery`,
|
|
@@ -134,18 +140,118 @@ const mutation = updateProfile.useMutation({
|
|
|
134
140
|
})
|
|
135
141
|
```
|
|
136
142
|
|
|
137
|
-
## Identity
|
|
143
|
+
## Internet Identity
|
|
144
|
+
|
|
145
|
+
`defineReactor` wires up Internet Identity for you — `useAuth`,
|
|
146
|
+
`useUserPrincipal`, `useAgentState` and `useIdentityAttributes` come back
|
|
147
|
+
alongside the actor hooks:
|
|
148
|
+
|
|
149
|
+
```tsx
|
|
150
|
+
// src/reactor.ts
|
|
151
|
+
export const { useActorQuery, useAuth, useIdentityAttributes, authentication } =
|
|
152
|
+
defineReactor<_SERVICE>({
|
|
153
|
+
name: "backend",
|
|
154
|
+
idlFactory,
|
|
155
|
+
auth: {
|
|
156
|
+
// Required when the app is served from more than one origin, so every
|
|
157
|
+
// origin resolves to the same principal.
|
|
158
|
+
derivationOrigin: "https://app.example.com",
|
|
159
|
+
// The default signs the user out and reloads after 10 minutes idle.
|
|
160
|
+
idleOptions: { disableIdle: true },
|
|
161
|
+
},
|
|
162
|
+
})
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
Auth options are forwarded to the underlying `@icp-sdk/auth` client:
|
|
166
|
+
`identityProvider`, `derivationOrigin`, `windowOpenerFeatures`,
|
|
167
|
+
`openIdProvider`, `storage`, `keyType`, `idleOptions`, `identity`, and
|
|
168
|
+
`transport`. Only the `"google" | "apple" | "microsoft"` aliases are accepted
|
|
169
|
+
for `openIdProvider`; any other value is dropped, since raw issuer URLs are
|
|
170
|
+
only meaningful on `requestOpenIdAttributes`, where they scope the keys.
|
|
171
|
+
|
|
172
|
+
Pass `authentication` from one reactor into another to share a single session
|
|
173
|
+
across canisters. That reactor adopts the manager's `ClientManager` so sign-in
|
|
174
|
+
updates the agent it calls through, so pass either `authentication` or `auth` —
|
|
175
|
+
not both.
|
|
138
176
|
|
|
139
|
-
|
|
140
|
-
identity attributes from `@icp-sdk/auth` v7. Existing `useAuth()`, `login()`,
|
|
141
|
-
`logout()`, and `useUserPrincipal()` consumers keep the same IC Reactor API, but
|
|
142
|
-
the configured auth client must support the v7 constructor/sign-in/sign-out API.
|
|
177
|
+
Set up manually when you need more control:
|
|
143
178
|
|
|
144
179
|
```tsx
|
|
145
|
-
|
|
180
|
+
// src/auth.ts
|
|
181
|
+
import {
|
|
182
|
+
AuthenticationManager,
|
|
183
|
+
IdentityAttributesManager,
|
|
184
|
+
createAuthHooks,
|
|
185
|
+
createIdentityAttributeHooks,
|
|
186
|
+
} from "@ic-reactor/react"
|
|
146
187
|
import { clientManager } from "./reactor"
|
|
147
188
|
|
|
148
|
-
const
|
|
189
|
+
const authentication = new AuthenticationManager({ clientManager })
|
|
190
|
+
export const { useAuth, useAgentState, useUserPrincipal } =
|
|
191
|
+
createAuthHooks(authentication)
|
|
192
|
+
|
|
193
|
+
const identityAttributes = new IdentityAttributesManager(authentication)
|
|
194
|
+
export const { useIdentityAttributes } =
|
|
195
|
+
createIdentityAttributeHooks(identityAttributes)
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
`useAuth()` calls `authentication.prepareClient()` on mount. Outside React, do
|
|
199
|
+
it yourself during startup — it preloads the auth module so `login()` can open
|
|
200
|
+
the identity provider window synchronously inside a click handler, which is
|
|
201
|
+
what browser popup blockers require:
|
|
202
|
+
|
|
203
|
+
```ts
|
|
204
|
+
// once, at startup — awaits the dynamic import and builds the AuthClient
|
|
205
|
+
await authentication.prepareClient()
|
|
206
|
+
|
|
207
|
+
// later, inside the click handler — no await before signIn(), so the popup
|
|
208
|
+
// still counts as user-initiated
|
|
209
|
+
button.onclick = () => authentication.login()
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
`authentication.getPreparedClient()` returns the already-built client
|
|
213
|
+
synchronously, or `undefined` when the module has not loaded yet.
|
|
214
|
+
|
|
215
|
+
If your bundler cannot resolve the optional peer at all, construct the client
|
|
216
|
+
yourself and inject it — IC Reactor then never imports `@icp-sdk/auth`:
|
|
217
|
+
|
|
218
|
+
```ts
|
|
219
|
+
import { AuthClient } from "@icp-sdk/auth/client"
|
|
220
|
+
|
|
221
|
+
const authentication = new AuthenticationManager({
|
|
222
|
+
clientManager,
|
|
223
|
+
authClient: new AuthClient(),
|
|
224
|
+
})
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
## Identity Attributes / OpenID email and profile values
|
|
228
|
+
|
|
229
|
+
Identity attributes use a dedicated `IdentityAttributesManager`, with React
|
|
230
|
+
bindings created by `createIdentityAttributeHooks`. Works with `@icp-sdk/auth`
|
|
231
|
+
v7 and v8; the two versions disagree on the nonce contract and IC Reactor
|
|
232
|
+
normalizes whichever form you pass.
|
|
233
|
+
|
|
234
|
+
**Pass the nonce as a callback.** Awaiting your backend before calling
|
|
235
|
+
`requestOpenIdAttributes` ends the user gesture, and the browser then blocks
|
|
236
|
+
the Internet Identity window:
|
|
237
|
+
|
|
238
|
+
```tsx
|
|
239
|
+
// ✅ window opens immediately, nonce resolves while the user is in II
|
|
240
|
+
await requestOpenIdAttributes({
|
|
241
|
+
nonce: () => backend.registerBegin(),
|
|
242
|
+
openIdProvider: "google",
|
|
243
|
+
keys: ["email", "name"],
|
|
244
|
+
})
|
|
245
|
+
|
|
246
|
+
// ❌ gesture is gone by the time the window would open
|
|
247
|
+
const nonce = await backend.registerBegin()
|
|
248
|
+
await requestOpenIdAttributes({ nonce, openIdProvider: "google", keys })
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
```tsx
|
|
252
|
+
// src/RegisterWithOpenIdProvider.tsx
|
|
253
|
+
import { useIdentityAttributes } from "./auth"
|
|
254
|
+
import { backend } from "./reactor"
|
|
149
255
|
|
|
150
256
|
function RegisterWithOpenIdProvider() {
|
|
151
257
|
const {
|
|
@@ -156,10 +262,8 @@ function RegisterWithOpenIdProvider() {
|
|
|
156
262
|
} = useIdentityAttributes()
|
|
157
263
|
|
|
158
264
|
async function handleProviderLogin() {
|
|
159
|
-
const nonce = await backend.registerBegin()
|
|
160
|
-
|
|
161
265
|
const result = await requestOpenIdAttributes({
|
|
162
|
-
nonce,
|
|
266
|
+
nonce: () => backend.registerBegin(),
|
|
163
267
|
openIdProvider: "microsoft",
|
|
164
268
|
keys: ["email", "name"],
|
|
165
269
|
windowOpenerFeatures: popupCenter(),
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import type { Identity } from "@icp-sdk/core/agent";
|
|
2
|
+
import type { AuthClientLike, AuthClientSignInOptions, AuthState, AuthenticationClientOptions, AuthenticationSignInOptions } from "./types.js";
|
|
3
|
+
import { ClientManager } from "@ic-reactor/core";
|
|
4
|
+
export interface AuthenticationManagerParameters extends AuthenticationClientOptions {
|
|
5
|
+
clientManager: ClientManager;
|
|
6
|
+
/**
|
|
7
|
+
* Bring your own client instance. When provided, IC Reactor never constructs
|
|
8
|
+
* one and never applies the options below to it.
|
|
9
|
+
*/
|
|
10
|
+
authClient?: AuthClientLike;
|
|
11
|
+
/** Canister ID of a locally deployed Internet Identity. */
|
|
12
|
+
internetIdentityId?: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Manages Internet Identity sign-in, session restoration, and authentication
|
|
16
|
+
* state for a {@link ClientManager}.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```ts
|
|
20
|
+
* const authentication = new AuthenticationManager({ clientManager })
|
|
21
|
+
* const identity = await authentication.authenticate()
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export declare class AuthenticationManager {
|
|
25
|
+
private authClient?;
|
|
26
|
+
private authPromise?;
|
|
27
|
+
private authClientWasProvided;
|
|
28
|
+
private authStateRevision;
|
|
29
|
+
private authStateSubscribers;
|
|
30
|
+
private authClientConstructor?;
|
|
31
|
+
private authClientConstructorPromise?;
|
|
32
|
+
private authModuleMissing;
|
|
33
|
+
private authClientOptions?;
|
|
34
|
+
private authStateValue;
|
|
35
|
+
private readonly identityProvider?;
|
|
36
|
+
private readonly internetIdentityId?;
|
|
37
|
+
private readonly defaultClientOptions;
|
|
38
|
+
readonly clientManager: ClientManager;
|
|
39
|
+
/** The current authentication state. */
|
|
40
|
+
get authState(): AuthState;
|
|
41
|
+
constructor({ clientManager, authClient, identityProvider, internetIdentityId, ...clientOptions }: AuthenticationManagerParameters);
|
|
42
|
+
/** @internal Used by IdentityAttributesManager. */
|
|
43
|
+
get client(): AuthClientLike | undefined;
|
|
44
|
+
subscribeAuthState(callback: (state: AuthState) => void): () => void;
|
|
45
|
+
/**
|
|
46
|
+
* Preloads the auth module and creates an AuthClient ahead of time.
|
|
47
|
+
*
|
|
48
|
+
* Call (and await) this before wiring up a login button: it makes
|
|
49
|
+
* {@link login} and {@link IdentityAttributesManager.request} able to open
|
|
50
|
+
* the identity provider synchronously inside the click handler, which is
|
|
51
|
+
* what browser popup blockers and the ICRC-29 transport require.
|
|
52
|
+
*/
|
|
53
|
+
prepareClient(options?: AuthenticationClientOptions): Promise<AuthClientLike | undefined>;
|
|
54
|
+
/**
|
|
55
|
+
* Returns an AuthClient without awaiting, or `undefined` when the auth
|
|
56
|
+
* module has not been loaded yet.
|
|
57
|
+
*
|
|
58
|
+
* Callers that must stay inside a user gesture use this instead of
|
|
59
|
+
* {@link ensureClient}; awaiting anything before opening the identity
|
|
60
|
+
* provider window loses the gesture.
|
|
61
|
+
*/
|
|
62
|
+
getPreparedClient(options?: AuthenticationClientOptions): AuthClientLike | undefined;
|
|
63
|
+
authenticate: () => Promise<Identity | undefined>;
|
|
64
|
+
login: (loginOptions?: AuthenticationSignInOptions) => Promise<void>;
|
|
65
|
+
logout: (options?: {
|
|
66
|
+
returnTo?: string;
|
|
67
|
+
}) => Promise<void>;
|
|
68
|
+
private initializeClient;
|
|
69
|
+
/** @internal Used by IdentityAttributesManager. */
|
|
70
|
+
signInOrRecoverIdentity(options?: AuthClientSignInOptions): Promise<Identity>;
|
|
71
|
+
private ensurePreparedClient;
|
|
72
|
+
/**
|
|
73
|
+
* Only rebuild the client when the effective options actually changed.
|
|
74
|
+
*
|
|
75
|
+
* Recreating on every call would discard the client warmed up by
|
|
76
|
+
* `prepareClient()` and register a duplicate sign-out callback on the
|
|
77
|
+
* shared IdleManager singleton each time.
|
|
78
|
+
*/
|
|
79
|
+
private shouldRecreateClient;
|
|
80
|
+
/**
|
|
81
|
+
* Merges constructor-level defaults with per-call overrides and fills in the
|
|
82
|
+
* network-appropriate identity provider.
|
|
83
|
+
*/
|
|
84
|
+
private resolveClientOptions;
|
|
85
|
+
private syncStateFromClient;
|
|
86
|
+
/** @internal Used by IdentityAttributesManager. */
|
|
87
|
+
ensureClient(options?: AuthenticationClientOptions): Promise<AuthClientLike | undefined>;
|
|
88
|
+
/** @internal Used by IdentityAttributesManager. */
|
|
89
|
+
commitIdentity(identity: Identity, isAuthenticated: boolean): Promise<void>;
|
|
90
|
+
/** @internal Used by IdentityAttributesManager. */
|
|
91
|
+
setAuthenticating(): void;
|
|
92
|
+
/** @internal Used by IdentityAttributesManager. */
|
|
93
|
+
setAuthenticationError(error: Error): void;
|
|
94
|
+
private getDefaultIdentityProvider;
|
|
95
|
+
private updateState;
|
|
96
|
+
private loadAuthClientConstructor;
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=authentication-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authentication-manager.d.ts","sourceRoot":"","sources":["../../src/auth/authentication-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,KAAK,EACV,cAAc,EACd,uBAAuB,EACvB,SAAS,EACT,2BAA2B,EAC3B,2BAA2B,EAC5B,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,aAAa,EAAS,MAAM,kBAAkB,CAAA;AASvD,MAAM,WAAW,+BAAgC,SAAQ,2BAA2B;IAClF,aAAa,EAAE,aAAa,CAAA;IAC5B;;;OAGG;IACH,UAAU,CAAC,EAAE,cAAc,CAAA;IAC3B,2DAA2D;IAC3D,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAC5B;AAMD;;;;;;;;;GASG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,UAAU,CAAC,CAAgB;IACnC,OAAO,CAAC,WAAW,CAAC,CAA+B;IACnD,OAAO,CAAC,qBAAqB,CAAQ;IACrC,OAAO,CAAC,iBAAiB,CAAI;IAC7B,OAAO,CAAC,oBAAoB,CAAwC;IACpE,OAAO,CAAC,qBAAqB,CAAC,CAAuB;IACrD,OAAO,CAAC,4BAA4B,CAAC,CAEpC;IACD,OAAO,CAAC,iBAAiB,CAAQ;IACjC,OAAO,CAAC,iBAAiB,CAAC,CAA6B;IACvD,OAAO,CAAC,cAAc,CAKrB;IACD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAc;IAChD,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAQ;IAC5C,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAA6B;IAClE,SAAgB,aAAa,EAAE,aAAa,CAAA;IAE5C,wCAAwC;IACxC,IAAW,SAAS,IAAI,SAAS,CAEhC;gBAEW,EACV,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,kBAAkB,EAClB,GAAG,aAAa,EACjB,EAAE,+BAA+B;IA4BlC,mDAAmD;IACnD,IAAW,MAAM,+BAEhB;IAEM,kBAAkB,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI;IAS9D;;;;;;;OAOG;IACU,aAAa,CAAC,OAAO,CAAC,EAAE,2BAA2B;IAUhE;;;;;;;OAOG;IACI,iBAAiB,CACtB,OAAO,CAAC,EAAE,2BAA2B,GACpC,cAAc,GAAG,SAAS;IAItB,YAAY,QAAa,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC,CA0D5D;IAEM,KAAK,GAAU,eAAe,2BAA2B,mBAwD/D;IAEM,MAAM,GAAU,UAAU;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,mBAerD;YAEa,gBAAgB;IAc9B,mDAAmD;IACtC,uBAAuB,CAClC,OAAO,CAAC,EAAE,uBAAuB,GAChC,OAAO,CAAC,QAAQ,CAAC;IAyBpB,OAAO,CAAC,oBAAoB;IAiB5B;;;;;;OAMG;IACH,OAAO,CAAC,oBAAoB;IAO5B;;;OAGG;IACH,OAAO,CAAC,oBAAoB;YAed,mBAAmB;IAmBjC,mDAAmD;IACtC,YAAY,CAAC,OAAO,CAAC,EAAE,2BAA2B;IAQ/D,mDAAmD;IACtC,cAAc,CAAC,QAAQ,EAAE,QAAQ,EAAE,eAAe,EAAE,OAAO;IAQxE,mDAAmD;IAC5C,iBAAiB;IAIxB,mDAAmD;IAC5C,sBAAsB,CAAC,KAAK,EAAE,KAAK;IAI1C,OAAO,CAAC,0BAA0B;IAYlC,OAAO,CAAC,WAAW;YASL,yBAAyB;CAuCxC"}
|