clefbase 2.0.1 → 2.0.3
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/dist/app.d.ts +6 -26
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +10 -28
- package/dist/app.js.map +1 -1
- package/dist/auth/index.d.ts +48 -164
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +178 -227
- package/dist/auth/index.js.map +1 -1
- package/dist/cli-src/cli/commands/init.js +28 -1
- package/dist/cli.js +29 -2
- package/dist/index.d.ts +14 -60
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -65
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -34575,7 +34575,18 @@ function buildLibTs(cfg) {
|
|
|
34575
34575
|
` *`,
|
|
34576
34576
|
` * Usage:`,
|
|
34577
34577
|
...database ? [` * import { db } from "@lib/clefBase";`] : [],
|
|
34578
|
-
...auth ? [
|
|
34578
|
+
...auth ? [
|
|
34579
|
+
` * import { auth } from "@lib/clefBase";`,
|
|
34580
|
+
` *`,
|
|
34581
|
+
` * // Email / password`,
|
|
34582
|
+
` * const { user } = await auth.signIn("alice@example.com", "pass");`,
|
|
34583
|
+
` *`,
|
|
34584
|
+
` * // Google sign-in \u2014 add this to your root component / entry point:`,
|
|
34585
|
+
` * await auth.handleGatewayCallback(); // handles ?cfx_token= on return`,
|
|
34586
|
+
` *`,
|
|
34587
|
+
` * // On sign-in button click:`,
|
|
34588
|
+
` * await auth.signInWithGateway("google");`
|
|
34589
|
+
] : [],
|
|
34579
34590
|
...storage ? [` * import { storage } from "@lib/clefBase";`] : [],
|
|
34580
34591
|
...fns ? [
|
|
34581
34592
|
` * import { fns, httpsCallable } from "@lib/clefBase";`,
|
|
@@ -34612,6 +34623,20 @@ function buildLibTs(cfg) {
|
|
|
34612
34623
|
lines.push(`/** Clefbase Auth \u2014 sign up, sign in, manage sessions. */`);
|
|
34613
34624
|
lines.push(`export const auth: Auth = getAuth(app);`);
|
|
34614
34625
|
lines.push("");
|
|
34626
|
+
lines.push(`/**`);
|
|
34627
|
+
lines.push(` * Call this once on every page load (before rendering your UI).`);
|
|
34628
|
+
lines.push(` * Detects the ?cfx_token= param the gateway appends after OAuth,`);
|
|
34629
|
+
lines.push(` * saves the session, and cleans the URL.`);
|
|
34630
|
+
lines.push(` *`);
|
|
34631
|
+
lines.push(` * @example`);
|
|
34632
|
+
lines.push(` * // React / Next.js \u2014 in your root layout or _app.tsx:`);
|
|
34633
|
+
lines.push(` * useEffect(() => { auth.handleGatewayCallback(); }, []);`);
|
|
34634
|
+
lines.push(` *`);
|
|
34635
|
+
lines.push(` * // Vanilla JS \u2014 at the top of your entry point:`);
|
|
34636
|
+
lines.push(` * await auth.handleGatewayCallback();`);
|
|
34637
|
+
lines.push(` */`);
|
|
34638
|
+
lines.push(`export { auth };`);
|
|
34639
|
+
lines.push("");
|
|
34615
34640
|
}
|
|
34616
34641
|
if (storage) {
|
|
34617
34642
|
lines.push(`/** Clefbase Storage \u2014 upload and manage files. */`);
|
|
@@ -34744,6 +34769,8 @@ function printUsageHint(cfg) {
|
|
|
34744
34769
|
if (cfg.services.auth) {
|
|
34745
34770
|
console.log();
|
|
34746
34771
|
console.log(source_default.cyan(` const { user } = await auth.signIn("email", "pass");`));
|
|
34772
|
+
console.log(source_default.cyan(` await auth.signInWithGateway("google"); // redirects to auth.cleforyx.com`));
|
|
34773
|
+
console.log(source_default.cyan(` await auth.handleGatewayCallback(); // call on every page load`));
|
|
34747
34774
|
}
|
|
34748
34775
|
if (cfg.services.storage) {
|
|
34749
34776
|
console.log();
|
|
@@ -35522,7 +35549,7 @@ async function promptRequired(message) {
|
|
|
35522
35549
|
}
|
|
35523
35550
|
|
|
35524
35551
|
// package.json
|
|
35525
|
-
var version = "2.0.
|
|
35552
|
+
var version = "2.0.3";
|
|
35526
35553
|
|
|
35527
35554
|
// src/cli/index.ts
|
|
35528
35555
|
var program2 = new Command();
|
package/dist/index.d.ts
CHANGED
|
@@ -10,12 +10,21 @@
|
|
|
10
10
|
* setAuthToken, FunctionsError, AIError, FieldValue,
|
|
11
11
|
* } from "clefbase";
|
|
12
12
|
*
|
|
13
|
-
* const app = initClefbase({ serverUrl, projectId, apiKey
|
|
13
|
+
* const app = initClefbase({ serverUrl, projectId, apiKey });
|
|
14
14
|
*
|
|
15
|
-
* // ── Auth
|
|
15
|
+
* // ── Auth — email / password ───────────────────────────────────────────────
|
|
16
16
|
* const auth = getAuth(app);
|
|
17
17
|
* const { token } = await auth.signIn("alice@example.com", "password123");
|
|
18
18
|
*
|
|
19
|
+
* // ── Auth — Google via gateway (redirect flow) ─────────────────────────────
|
|
20
|
+
* // 1. On sign-in button click:
|
|
21
|
+
* await auth.signInWithGateway("google");
|
|
22
|
+
* // ^ redirects to auth.cleforyx.com, then back to your app with ?cfx_token=
|
|
23
|
+
*
|
|
24
|
+
* // 2. On every page load (before rendering):
|
|
25
|
+
* const result = await auth.handleGatewayCallback();
|
|
26
|
+
* if (result) console.log("Signed in:", result.user.email);
|
|
27
|
+
*
|
|
19
28
|
* // ── Database ──────────────────────────────────────────────────────────────
|
|
20
29
|
* const db = getDatabase(app);
|
|
21
30
|
* await db.collection("posts").doc("p1").update({
|
|
@@ -32,69 +41,14 @@
|
|
|
32
41
|
* const greet = httpsCallable<{ name: string }, { message: string }>(fns, "greetUser");
|
|
33
42
|
* const { data } = await greet({ name: "Alice" });
|
|
34
43
|
*
|
|
35
|
-
* // ── AI
|
|
44
|
+
* // ── AI ────────────────────────────────────────────────────────────────────
|
|
36
45
|
* const ai = getAI(app);
|
|
37
|
-
*
|
|
38
|
-
* const { content } = await ai.text({
|
|
39
|
-
* model: "claude-sonnet-4-5",
|
|
40
|
-
* prompt: "Explain async/await in JavaScript",
|
|
41
|
-
* });
|
|
42
|
-
*
|
|
43
|
-
* // Multi-turn chat
|
|
44
|
-
* const reply = await ai.text({
|
|
45
|
-
* model: "gemini-2.5-flash",
|
|
46
|
-
* prompt: "Give me a harder example",
|
|
47
|
-
* systemPrompt: "You are a JavaScript tutor.",
|
|
48
|
-
* history: [{ role: "user", content: "Explain closures" }, { role: "assistant", content: "..." }],
|
|
49
|
-
* });
|
|
50
|
-
*
|
|
51
|
-
* // ── AI — image generation (auto-saved to Storage) ─────────────────────────
|
|
52
|
-
* const { files } = await ai.image({
|
|
53
|
-
* model: "imagen-4.0-generate-001",
|
|
54
|
-
* prompt: "A serene mountain lake at dawn, photorealistic",
|
|
55
|
-
* aspectRatio: "16:9",
|
|
56
|
-
* numberOfImages: 2,
|
|
57
|
-
* outputFolder: "landscapes",
|
|
58
|
-
* });
|
|
59
|
-
* // files[].fullPath → path in project Storage
|
|
60
|
-
* // files[].storageFileId → use with storage.ref() to get the download URL
|
|
61
|
-
*
|
|
62
|
-
* // ── AI — video generation (auto-saved to Storage) ─────────────────────────
|
|
63
|
-
* const { status, files: clips } = await ai.video({
|
|
64
|
-
* model: "veo-3.1-generate-preview",
|
|
65
|
-
* prompt: "A slow-motion waterfall in a rainforest",
|
|
66
|
-
* durationSeconds: 8,
|
|
67
|
-
* aspectRatio: "16:9",
|
|
68
|
-
* });
|
|
69
|
-
*
|
|
70
|
-
* // ── AI — embeddings ───────────────────────────────────────────────────────
|
|
71
|
-
* const { embeddings } = await ai.embedding({
|
|
72
|
-
* model: "gemini-embedding-001",
|
|
73
|
-
* input: ["Hello world", "Semantic search"],
|
|
74
|
-
* });
|
|
75
|
-
*
|
|
76
|
-
* // ── AI — browse models ────────────────────────────────────────────────────
|
|
77
|
-
* const imageModels = await ai.listModels({ category: "image" });
|
|
78
|
-
* const allModels = await ai.listModels();
|
|
79
|
-
*
|
|
80
|
-
* // ── AI — usage stats ──────────────────────────────────────────────────────
|
|
81
|
-
* const stats = await ai.getStats();
|
|
82
|
-
* const history = await ai.getUsage({ limit: 20 });
|
|
83
|
-
*
|
|
84
|
-
* // ── AI — convenience top-level functions ──────────────────────────────────
|
|
85
|
-
* const { content: code } = await generateText(ai, {
|
|
86
|
-
* model: "claude-sonnet-4-5",
|
|
87
|
-
* prompt: "Write a merge sort in TypeScript",
|
|
88
|
-
* });
|
|
89
|
-
* const { files: imgs } = await generateImage(ai, {
|
|
90
|
-
* model: "imagen-4.0-fast-generate-001",
|
|
91
|
-
* prompt: "A cute cartoon robot",
|
|
92
|
-
* });
|
|
46
|
+
* const { content } = await ai.text({ model: "claude-sonnet-4-5", prompt: "Hi" });
|
|
93
47
|
*/
|
|
94
48
|
export { ClefbaseApp, initClefbase, getApp, getDatabase, getAuth, getStorage, getHosting, getFunctions, getAI, } from "./app";
|
|
95
49
|
export { Database, CollectionReference, CollectionGroup, DocumentReference, Query, WriteBatch, Transaction, runTransaction, } from "./db";
|
|
96
50
|
export { Auth } from "./auth";
|
|
97
|
-
export type {
|
|
51
|
+
export type { GatewaySignInOptions } from "./auth";
|
|
98
52
|
export { ClefbaseStorage, StorageReference, BucketReference } from "./storage";
|
|
99
53
|
export type { StorageFile } from "./storage";
|
|
100
54
|
export type { StorageImageStatus } from "./react/StorageImage";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AAGH,OAAO,EACL,WAAW,EACX,YAAY,EACZ,MAAM,EACN,WAAW,EACX,OAAO,EACP,UAAU,EACV,UAAU,EACV,YAAY,EACZ,KAAK,GACN,MAAM,OAAO,CAAC;AAGf,OAAO,EACL,QAAQ,EACR,mBAAmB,EACnB,eAAe,EACf,iBAAiB,EACjB,KAAK,EACL,UAAU,EACV,WAAW,EACX,cAAc,GACf,MAAM,MAAM,CAAC;AAGd,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,YAAY,EAAE,oBAAoB,EAAE,MAAM,QAAQ,CAAC;AAGnD,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC/E,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAG7C,YAAY,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAG/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAGtE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC3D,YAAY,EACV,WAAW,EACX,aAAa,EACb,WAAW,EACX,YAAY,EACZ,aAAa,EACb,aAAa,EACb,YAAY,GACb,MAAM,WAAW,CAAC;AAGnB,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,aAAa,EACb,YAAY,EACZ,cAAc,EACd,cAAc,EACd,aAAa,EACb,qBAAqB,EACrB,YAAY,EACZ,cAAc,GACf,MAAM,aAAa,CAAC;AAErB,YAAY,EACV,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,WAAW,EACX,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,UAAU,EACV,OAAO,EACP,YAAY,EACZ,aAAa,EACb,aAAa,EACb,iBAAiB,GAClB,MAAM,MAAM,CAAC;AAEd,YAAY,EACV,OAAO,EACP,UAAU,EACV,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,EACnB,wBAAwB,EACxB,uBAAuB,EACvB,aAAa,EACb,YAAY,GACb,MAAM,MAAM,CAAC;AAGd,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAC/D,YAAY,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAGpD,YAAY,EACV,cAAc,EACd,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,cAAc,EACd,WAAW,EACX,UAAU,EACV,QAAQ,EACR,WAAW,EACX,UAAU,GACX,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -11,12 +11,21 @@
|
|
|
11
11
|
* setAuthToken, FunctionsError, AIError, FieldValue,
|
|
12
12
|
* } from "clefbase";
|
|
13
13
|
*
|
|
14
|
-
* const app = initClefbase({ serverUrl, projectId, apiKey
|
|
14
|
+
* const app = initClefbase({ serverUrl, projectId, apiKey });
|
|
15
15
|
*
|
|
16
|
-
* // ── Auth
|
|
16
|
+
* // ── Auth — email / password ───────────────────────────────────────────────
|
|
17
17
|
* const auth = getAuth(app);
|
|
18
18
|
* const { token } = await auth.signIn("alice@example.com", "password123");
|
|
19
19
|
*
|
|
20
|
+
* // ── Auth — Google via gateway (redirect flow) ─────────────────────────────
|
|
21
|
+
* // 1. On sign-in button click:
|
|
22
|
+
* await auth.signInWithGateway("google");
|
|
23
|
+
* // ^ redirects to auth.cleforyx.com, then back to your app with ?cfx_token=
|
|
24
|
+
*
|
|
25
|
+
* // 2. On every page load (before rendering):
|
|
26
|
+
* const result = await auth.handleGatewayCallback();
|
|
27
|
+
* if (result) console.log("Signed in:", result.user.email);
|
|
28
|
+
*
|
|
20
29
|
* // ── Database ──────────────────────────────────────────────────────────────
|
|
21
30
|
* const db = getDatabase(app);
|
|
22
31
|
* await db.collection("posts").doc("p1").update({
|
|
@@ -33,64 +42,9 @@
|
|
|
33
42
|
* const greet = httpsCallable<{ name: string }, { message: string }>(fns, "greetUser");
|
|
34
43
|
* const { data } = await greet({ name: "Alice" });
|
|
35
44
|
*
|
|
36
|
-
* // ── AI
|
|
45
|
+
* // ── AI ────────────────────────────────────────────────────────────────────
|
|
37
46
|
* const ai = getAI(app);
|
|
38
|
-
*
|
|
39
|
-
* const { content } = await ai.text({
|
|
40
|
-
* model: "claude-sonnet-4-5",
|
|
41
|
-
* prompt: "Explain async/await in JavaScript",
|
|
42
|
-
* });
|
|
43
|
-
*
|
|
44
|
-
* // Multi-turn chat
|
|
45
|
-
* const reply = await ai.text({
|
|
46
|
-
* model: "gemini-2.5-flash",
|
|
47
|
-
* prompt: "Give me a harder example",
|
|
48
|
-
* systemPrompt: "You are a JavaScript tutor.",
|
|
49
|
-
* history: [{ role: "user", content: "Explain closures" }, { role: "assistant", content: "..." }],
|
|
50
|
-
* });
|
|
51
|
-
*
|
|
52
|
-
* // ── AI — image generation (auto-saved to Storage) ─────────────────────────
|
|
53
|
-
* const { files } = await ai.image({
|
|
54
|
-
* model: "imagen-4.0-generate-001",
|
|
55
|
-
* prompt: "A serene mountain lake at dawn, photorealistic",
|
|
56
|
-
* aspectRatio: "16:9",
|
|
57
|
-
* numberOfImages: 2,
|
|
58
|
-
* outputFolder: "landscapes",
|
|
59
|
-
* });
|
|
60
|
-
* // files[].fullPath → path in project Storage
|
|
61
|
-
* // files[].storageFileId → use with storage.ref() to get the download URL
|
|
62
|
-
*
|
|
63
|
-
* // ── AI — video generation (auto-saved to Storage) ─────────────────────────
|
|
64
|
-
* const { status, files: clips } = await ai.video({
|
|
65
|
-
* model: "veo-3.1-generate-preview",
|
|
66
|
-
* prompt: "A slow-motion waterfall in a rainforest",
|
|
67
|
-
* durationSeconds: 8,
|
|
68
|
-
* aspectRatio: "16:9",
|
|
69
|
-
* });
|
|
70
|
-
*
|
|
71
|
-
* // ── AI — embeddings ───────────────────────────────────────────────────────
|
|
72
|
-
* const { embeddings } = await ai.embedding({
|
|
73
|
-
* model: "gemini-embedding-001",
|
|
74
|
-
* input: ["Hello world", "Semantic search"],
|
|
75
|
-
* });
|
|
76
|
-
*
|
|
77
|
-
* // ── AI — browse models ────────────────────────────────────────────────────
|
|
78
|
-
* const imageModels = await ai.listModels({ category: "image" });
|
|
79
|
-
* const allModels = await ai.listModels();
|
|
80
|
-
*
|
|
81
|
-
* // ── AI — usage stats ──────────────────────────────────────────────────────
|
|
82
|
-
* const stats = await ai.getStats();
|
|
83
|
-
* const history = await ai.getUsage({ limit: 20 });
|
|
84
|
-
*
|
|
85
|
-
* // ── AI — convenience top-level functions ──────────────────────────────────
|
|
86
|
-
* const { content: code } = await generateText(ai, {
|
|
87
|
-
* model: "claude-sonnet-4-5",
|
|
88
|
-
* prompt: "Write a merge sort in TypeScript",
|
|
89
|
-
* });
|
|
90
|
-
* const { files: imgs } = await generateImage(ai, {
|
|
91
|
-
* model: "imagen-4.0-fast-generate-001",
|
|
92
|
-
* prompt: "A cute cartoon robot",
|
|
93
|
-
* });
|
|
47
|
+
* const { content } = await ai.text({ model: "claude-sonnet-4-5", prompt: "Hi" });
|
|
94
48
|
*/
|
|
95
49
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
96
50
|
exports.ClefbaseError = exports.FieldValueSentinel = exports.FieldValue = exports.generateEmbedding = exports.generateVideo = exports.generateImage = exports.generateText = exports.AIError = exports.ClefbaseAI = exports.deployFromFile = exports.setAuthToken = exports.getFunctionExecutions = exports.listFunctions = exports.deleteFunction = exports.deployFunction = exports.callFunction = exports.httpsCallable = exports.FunctionsError = exports.ClefbaseFunctions = exports.SiteReference = exports.ClefbaseHosting = exports.EmailVerificationCard = exports.BucketReference = exports.StorageReference = exports.ClefbaseStorage = exports.Auth = exports.runTransaction = exports.Transaction = exports.WriteBatch = exports.Query = exports.DocumentReference = exports.CollectionGroup = exports.CollectionReference = exports.Database = exports.getAI = exports.getFunctions = exports.getHosting = exports.getStorage = exports.getAuth = exports.getDatabase = exports.getApp = exports.initClefbase = exports.ClefbaseApp = void 0;
|
|
@@ -132,11 +86,8 @@ Object.defineProperty(exports, "ClefbaseHosting", { enumerable: true, get: funct
|
|
|
132
86
|
Object.defineProperty(exports, "SiteReference", { enumerable: true, get: function () { return hosting_1.SiteReference; } });
|
|
133
87
|
// ─── Functions ────────────────────────────────────────────────────────────────
|
|
134
88
|
var functions_1 = require("./functions");
|
|
135
|
-
// Class
|
|
136
89
|
Object.defineProperty(exports, "ClefbaseFunctions", { enumerable: true, get: function () { return functions_1.ClefbaseFunctions; } });
|
|
137
|
-
// Error
|
|
138
90
|
Object.defineProperty(exports, "FunctionsError", { enumerable: true, get: function () { return functions_1.FunctionsError; } });
|
|
139
|
-
// Top-level factory / convenience
|
|
140
91
|
Object.defineProperty(exports, "httpsCallable", { enumerable: true, get: function () { return functions_1.httpsCallable; } });
|
|
141
92
|
Object.defineProperty(exports, "callFunction", { enumerable: true, get: function () { return functions_1.callFunction; } });
|
|
142
93
|
Object.defineProperty(exports, "deployFunction", { enumerable: true, get: function () { return functions_1.deployFunction; } });
|
|
@@ -147,11 +98,8 @@ Object.defineProperty(exports, "setAuthToken", { enumerable: true, get: function
|
|
|
147
98
|
Object.defineProperty(exports, "deployFromFile", { enumerable: true, get: function () { return functions_1.deployFromFile; } });
|
|
148
99
|
// ─── AI ───────────────────────────────────────────────────────────────────────
|
|
149
100
|
var ai_1 = require("./ai");
|
|
150
|
-
// Class
|
|
151
101
|
Object.defineProperty(exports, "ClefbaseAI", { enumerable: true, get: function () { return ai_1.ClefbaseAI; } });
|
|
152
|
-
// Error
|
|
153
102
|
Object.defineProperty(exports, "AIError", { enumerable: true, get: function () { return ai_1.AIError; } });
|
|
154
|
-
// Top-level convenience functions
|
|
155
103
|
Object.defineProperty(exports, "generateText", { enumerable: true, get: function () { return ai_1.generateText; } });
|
|
156
104
|
Object.defineProperty(exports, "generateImage", { enumerable: true, get: function () { return ai_1.generateImage; } });
|
|
157
105
|
Object.defineProperty(exports, "generateVideo", { enumerable: true, get: function () { return ai_1.generateVideo; } });
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;;;AAEH,iFAAiF;AACjF,6BAUe;AATb,kGAAA,WAAW,OAAA;AACX,mGAAA,YAAY,OAAA;AACZ,6FAAA,MAAM,OAAA;AACN,kGAAA,WAAW,OAAA;AACX,8FAAA,OAAO,OAAA;AACP,iGAAA,UAAU,OAAA;AACV,iGAAA,UAAU,OAAA;AACV,mGAAA,YAAY,OAAA;AACZ,4FAAA,KAAK,OAAA;AAGP,iFAAiF;AACjF,2BASc;AARZ,8FAAA,QAAQ,OAAA;AACR,yGAAA,mBAAmB,OAAA;AACnB,qGAAA,eAAe,OAAA;AACf,uGAAA,iBAAiB,OAAA;AACjB,2FAAA,KAAK,OAAA;AACL,gGAAA,UAAU,OAAA;AACV,iGAAA,WAAW,OAAA;AACX,oGAAA,cAAc,OAAA;AAGhB,iFAAiF;AACjF,+BAA8B;AAArB,4FAAA,IAAI,OAAA;AAGb,iFAAiF;AACjF,qCAA+E;AAAtE,0GAAA,eAAe,OAAA;AAAE,2GAAA,gBAAgB,OAAA;AAAE,0GAAA,eAAe,OAAA;AAM3D,iFAAiF;AACjF,uEAAsE;AAA7D,8HAAA,qBAAqB,OAAA;AAE9B,iFAAiF;AACjF,qCAA2D;AAAlD,0GAAA,eAAe,OAAA;AAAE,wGAAA,aAAa,OAAA;AAWvC,iFAAiF;AACjF,yCAWqB;AAVnB,8GAAA,iBAAiB,OAAA;AACjB,2GAAA,cAAc,OAAA;AACd,0GAAA,aAAa,OAAA;AACb,yGAAA,YAAY,OAAA;AACZ,2GAAA,cAAc,OAAA;AACd,2GAAA,cAAc,OAAA;AACd,0GAAA,aAAa,OAAA;AACb,kHAAA,qBAAqB,OAAA;AACrB,yGAAA,YAAY,OAAA;AACZ,2GAAA,cAAc,OAAA;AAehB,iFAAiF;AACjF,2BAOc;AANZ,gGAAA,UAAU,OAAA;AACV,6FAAA,OAAO,OAAA;AACP,kGAAA,YAAY,OAAA;AACZ,mGAAA,aAAa,OAAA;AACb,mGAAA,aAAa,OAAA;AACb,uGAAA,iBAAiB,OAAA;AAoBnB,iFAAiF;AACjF,6CAA+D;AAAtD,yGAAA,UAAU,OAAA;AAAE,iHAAA,kBAAkB,OAAA;AAiBvC,iCAAwC;AAA/B,sGAAA,aAAa,OAAA"}
|