@intentsolutions/blueprint 2.5.0 → 2.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/dist/cli.js +203 -6
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/integrations/notion/client.d.ts +114 -0
- package/dist/integrations/notion/client.d.ts.map +1 -0
- package/dist/integrations/notion/client.js +413 -0
- package/dist/integrations/notion/client.js.map +1 -0
- package/dist/integrations/notion/exporter.d.ts +56 -0
- package/dist/integrations/notion/exporter.d.ts.map +1 -0
- package/dist/integrations/notion/exporter.js +278 -0
- package/dist/integrations/notion/exporter.js.map +1 -0
- package/dist/integrations/notion/index.d.ts +9 -0
- package/dist/integrations/notion/index.d.ts.map +1 -0
- package/dist/integrations/notion/index.js +8 -0
- package/dist/integrations/notion/index.js.map +1 -0
- package/dist/integrations/notion/types.d.ts +276 -0
- package/dist/integrations/notion/types.d.ts.map +1 -0
- package/dist/integrations/notion/types.js +45 -0
- package/dist/integrations/notion/types.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,413 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Notion API Client
|
|
3
|
+
* REST client for Notion API
|
|
4
|
+
*/
|
|
5
|
+
const NOTION_API_URL = 'https://api.notion.com/v1';
|
|
6
|
+
const NOTION_VERSION = '2022-06-28';
|
|
7
|
+
export class NotionClient {
|
|
8
|
+
apiKey;
|
|
9
|
+
parentPageId;
|
|
10
|
+
databaseId;
|
|
11
|
+
constructor(config) {
|
|
12
|
+
this.apiKey = config.apiKey;
|
|
13
|
+
this.parentPageId = config.parentPageId;
|
|
14
|
+
this.databaseId = config.databaseId;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Make an API request
|
|
18
|
+
*/
|
|
19
|
+
async request(endpoint, options = {}) {
|
|
20
|
+
const url = `${NOTION_API_URL}${endpoint}`;
|
|
21
|
+
const response = await fetch(url, {
|
|
22
|
+
...options,
|
|
23
|
+
headers: {
|
|
24
|
+
'Authorization': `Bearer ${this.apiKey}`,
|
|
25
|
+
'Content-Type': 'application/json',
|
|
26
|
+
'Notion-Version': NOTION_VERSION,
|
|
27
|
+
...options.headers,
|
|
28
|
+
},
|
|
29
|
+
});
|
|
30
|
+
if (!response.ok) {
|
|
31
|
+
const errorBody = await response.text();
|
|
32
|
+
let errorMessage = `Notion API error: ${response.status} ${response.statusText}`;
|
|
33
|
+
try {
|
|
34
|
+
const errorJson = JSON.parse(errorBody);
|
|
35
|
+
if (errorJson.message) {
|
|
36
|
+
errorMessage += ` - ${errorJson.message}`;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
if (errorBody)
|
|
41
|
+
errorMessage += ` - ${errorBody}`;
|
|
42
|
+
}
|
|
43
|
+
throw new Error(errorMessage);
|
|
44
|
+
}
|
|
45
|
+
const text = await response.text();
|
|
46
|
+
if (!text)
|
|
47
|
+
return {};
|
|
48
|
+
return JSON.parse(text);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Verify credentials and get current user (bot)
|
|
52
|
+
*/
|
|
53
|
+
async verify() {
|
|
54
|
+
const response = await this.request('/users/me');
|
|
55
|
+
return response.bot;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Get a page by ID
|
|
59
|
+
*/
|
|
60
|
+
async getPage(pageId) {
|
|
61
|
+
return this.request(`/pages/${pageId}`);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Get a database by ID
|
|
65
|
+
*/
|
|
66
|
+
async getDatabase(databaseId) {
|
|
67
|
+
return this.request(`/databases/${databaseId}`);
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Search for pages and databases
|
|
71
|
+
*/
|
|
72
|
+
async search(query, filter) {
|
|
73
|
+
return this.request('/search', {
|
|
74
|
+
method: 'POST',
|
|
75
|
+
body: JSON.stringify({
|
|
76
|
+
query,
|
|
77
|
+
filter: filter ? { property: filter.property, value: filter.value } : undefined,
|
|
78
|
+
}),
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* List all pages the integration has access to
|
|
83
|
+
*/
|
|
84
|
+
async listPages() {
|
|
85
|
+
const response = await this.search('', { property: 'object', value: 'page' });
|
|
86
|
+
return response.results.filter((r) => r.object === 'page');
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* List all databases the integration has access to
|
|
90
|
+
*/
|
|
91
|
+
async listDatabases() {
|
|
92
|
+
const response = await this.search('', { property: 'object', value: 'database' });
|
|
93
|
+
return response.results.filter((r) => r.object === 'database');
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Create a database
|
|
97
|
+
*/
|
|
98
|
+
async createDatabase(input) {
|
|
99
|
+
const body = {
|
|
100
|
+
parent: { type: 'page_id', page_id: input.parentPageId },
|
|
101
|
+
title: [this.createRichText(input.title)],
|
|
102
|
+
properties: input.properties,
|
|
103
|
+
};
|
|
104
|
+
if (input.icon) {
|
|
105
|
+
body.icon = input.icon;
|
|
106
|
+
}
|
|
107
|
+
return this.request('/databases', {
|
|
108
|
+
method: 'POST',
|
|
109
|
+
body: JSON.stringify(body),
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Create a page
|
|
114
|
+
*/
|
|
115
|
+
async createPage(input) {
|
|
116
|
+
const body = {};
|
|
117
|
+
// Set parent
|
|
118
|
+
if (input.databaseId) {
|
|
119
|
+
body.parent = { type: 'database_id', database_id: input.databaseId };
|
|
120
|
+
}
|
|
121
|
+
else if (input.parentPageId) {
|
|
122
|
+
body.parent = { type: 'page_id', page_id: input.parentPageId };
|
|
123
|
+
}
|
|
124
|
+
else if (this.databaseId) {
|
|
125
|
+
body.parent = { type: 'database_id', database_id: this.databaseId };
|
|
126
|
+
}
|
|
127
|
+
else if (this.parentPageId) {
|
|
128
|
+
body.parent = { type: 'page_id', page_id: this.parentPageId };
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
throw new Error('No parent page or database specified');
|
|
132
|
+
}
|
|
133
|
+
// Set properties
|
|
134
|
+
if (input.databaseId || this.databaseId) {
|
|
135
|
+
// Database page - use provided properties or default title
|
|
136
|
+
const props = input.properties || {
|
|
137
|
+
Name: { title: [this.createRichText(input.title)] },
|
|
138
|
+
};
|
|
139
|
+
// Ensure title is set
|
|
140
|
+
const propsRecord = props;
|
|
141
|
+
if (!propsRecord.Name && !propsRecord.title) {
|
|
142
|
+
propsRecord.Name = {
|
|
143
|
+
title: [this.createRichText(input.title)]
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
body.properties = propsRecord;
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
// Page under another page - use title property
|
|
150
|
+
body.properties = {
|
|
151
|
+
title: { title: [this.createRichText(input.title)] },
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
// Add icon
|
|
155
|
+
if (input.icon) {
|
|
156
|
+
body.icon = input.icon;
|
|
157
|
+
}
|
|
158
|
+
// Add cover
|
|
159
|
+
if (input.cover) {
|
|
160
|
+
body.cover = input.cover;
|
|
161
|
+
}
|
|
162
|
+
// Add content blocks (children)
|
|
163
|
+
if (input.content && input.content.length > 0) {
|
|
164
|
+
body.children = input.content;
|
|
165
|
+
}
|
|
166
|
+
return this.request('/pages', {
|
|
167
|
+
method: 'POST',
|
|
168
|
+
body: JSON.stringify(body),
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Append blocks to a page
|
|
173
|
+
*/
|
|
174
|
+
async appendBlocks(pageId, blocks) {
|
|
175
|
+
// Notion limits to 100 blocks per request
|
|
176
|
+
const chunks = this.chunkArray(blocks, 100);
|
|
177
|
+
for (const chunk of chunks) {
|
|
178
|
+
await this.request(`/blocks/${pageId}/children`, {
|
|
179
|
+
method: 'PATCH',
|
|
180
|
+
body: JSON.stringify({ children: chunk }),
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Create rich text object
|
|
186
|
+
*/
|
|
187
|
+
createRichText(content, options) {
|
|
188
|
+
return {
|
|
189
|
+
type: 'text',
|
|
190
|
+
text: {
|
|
191
|
+
content,
|
|
192
|
+
link: options?.link ? { url: options.link } : null,
|
|
193
|
+
},
|
|
194
|
+
annotations: {
|
|
195
|
+
bold: options?.bold || false,
|
|
196
|
+
italic: options?.italic || false,
|
|
197
|
+
code: options?.code || false,
|
|
198
|
+
},
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Create a paragraph block
|
|
203
|
+
*/
|
|
204
|
+
createParagraph(text) {
|
|
205
|
+
return {
|
|
206
|
+
object: 'block',
|
|
207
|
+
type: 'paragraph',
|
|
208
|
+
paragraph: {
|
|
209
|
+
rich_text: [this.createRichText(text)],
|
|
210
|
+
},
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Create a heading block
|
|
215
|
+
*/
|
|
216
|
+
createHeading(text, level) {
|
|
217
|
+
const type = `heading_${level}`;
|
|
218
|
+
return {
|
|
219
|
+
object: 'block',
|
|
220
|
+
type,
|
|
221
|
+
[type]: {
|
|
222
|
+
rich_text: [this.createRichText(text)],
|
|
223
|
+
},
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Create a bulleted list item block
|
|
228
|
+
*/
|
|
229
|
+
createBulletItem(text) {
|
|
230
|
+
return {
|
|
231
|
+
object: 'block',
|
|
232
|
+
type: 'bulleted_list_item',
|
|
233
|
+
bulleted_list_item: {
|
|
234
|
+
rich_text: [this.createRichText(text)],
|
|
235
|
+
},
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Create a numbered list item block
|
|
240
|
+
*/
|
|
241
|
+
createNumberedItem(text) {
|
|
242
|
+
return {
|
|
243
|
+
object: 'block',
|
|
244
|
+
type: 'numbered_list_item',
|
|
245
|
+
numbered_list_item: {
|
|
246
|
+
rich_text: [this.createRichText(text)],
|
|
247
|
+
},
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Create a to-do block
|
|
252
|
+
*/
|
|
253
|
+
createToDo(text, checked = false) {
|
|
254
|
+
return {
|
|
255
|
+
object: 'block',
|
|
256
|
+
type: 'to_do',
|
|
257
|
+
to_do: {
|
|
258
|
+
rich_text: [this.createRichText(text)],
|
|
259
|
+
checked,
|
|
260
|
+
},
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Create a code block
|
|
265
|
+
*/
|
|
266
|
+
createCode(code, language = 'plain text') {
|
|
267
|
+
return {
|
|
268
|
+
object: 'block',
|
|
269
|
+
type: 'code',
|
|
270
|
+
code: {
|
|
271
|
+
rich_text: [this.createRichText(code)],
|
|
272
|
+
language,
|
|
273
|
+
},
|
|
274
|
+
};
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* Create a quote block
|
|
278
|
+
*/
|
|
279
|
+
createQuote(text) {
|
|
280
|
+
return {
|
|
281
|
+
object: 'block',
|
|
282
|
+
type: 'quote',
|
|
283
|
+
quote: {
|
|
284
|
+
rich_text: [this.createRichText(text)],
|
|
285
|
+
},
|
|
286
|
+
};
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* Create a callout block
|
|
290
|
+
*/
|
|
291
|
+
createCallout(text, emoji = '💡') {
|
|
292
|
+
return {
|
|
293
|
+
object: 'block',
|
|
294
|
+
type: 'callout',
|
|
295
|
+
callout: {
|
|
296
|
+
rich_text: [this.createRichText(text)],
|
|
297
|
+
icon: { type: 'emoji', emoji },
|
|
298
|
+
},
|
|
299
|
+
};
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* Create a divider block
|
|
303
|
+
*/
|
|
304
|
+
createDivider() {
|
|
305
|
+
return {
|
|
306
|
+
object: 'block',
|
|
307
|
+
type: 'divider',
|
|
308
|
+
divider: {},
|
|
309
|
+
};
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
312
|
+
* Create a table of contents block
|
|
313
|
+
*/
|
|
314
|
+
createTableOfContents() {
|
|
315
|
+
return {
|
|
316
|
+
object: 'block',
|
|
317
|
+
type: 'table_of_contents',
|
|
318
|
+
table_of_contents: {},
|
|
319
|
+
};
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* Convert markdown to Notion blocks
|
|
323
|
+
*/
|
|
324
|
+
markdownToBlocks(markdown) {
|
|
325
|
+
const blocks = [];
|
|
326
|
+
const lines = markdown.split('\n');
|
|
327
|
+
let inCodeBlock = false;
|
|
328
|
+
let codeContent = [];
|
|
329
|
+
let codeLanguage = 'plain text';
|
|
330
|
+
for (const line of lines) {
|
|
331
|
+
// Handle code blocks
|
|
332
|
+
if (line.startsWith('```')) {
|
|
333
|
+
if (inCodeBlock) {
|
|
334
|
+
// End code block
|
|
335
|
+
blocks.push(this.createCode(codeContent.join('\n'), codeLanguage));
|
|
336
|
+
codeContent = [];
|
|
337
|
+
inCodeBlock = false;
|
|
338
|
+
}
|
|
339
|
+
else {
|
|
340
|
+
// Start code block
|
|
341
|
+
inCodeBlock = true;
|
|
342
|
+
codeLanguage = line.slice(3).trim() || 'plain text';
|
|
343
|
+
}
|
|
344
|
+
continue;
|
|
345
|
+
}
|
|
346
|
+
if (inCodeBlock) {
|
|
347
|
+
codeContent.push(line);
|
|
348
|
+
continue;
|
|
349
|
+
}
|
|
350
|
+
// Skip empty lines
|
|
351
|
+
if (!line.trim()) {
|
|
352
|
+
continue;
|
|
353
|
+
}
|
|
354
|
+
// Headings
|
|
355
|
+
if (line.startsWith('### ')) {
|
|
356
|
+
blocks.push(this.createHeading(line.slice(4), 3));
|
|
357
|
+
}
|
|
358
|
+
else if (line.startsWith('## ')) {
|
|
359
|
+
blocks.push(this.createHeading(line.slice(3), 2));
|
|
360
|
+
}
|
|
361
|
+
else if (line.startsWith('# ')) {
|
|
362
|
+
blocks.push(this.createHeading(line.slice(2), 1));
|
|
363
|
+
}
|
|
364
|
+
// Bullet lists
|
|
365
|
+
else if (line.match(/^[\s]*[-*]\s+/)) {
|
|
366
|
+
const text = line.replace(/^[\s]*[-*]\s+/, '');
|
|
367
|
+
// Check for checkbox
|
|
368
|
+
if (text.startsWith('[ ] ')) {
|
|
369
|
+
blocks.push(this.createToDo(text.slice(4), false));
|
|
370
|
+
}
|
|
371
|
+
else if (text.startsWith('[x] ') || text.startsWith('[X] ')) {
|
|
372
|
+
blocks.push(this.createToDo(text.slice(4), true));
|
|
373
|
+
}
|
|
374
|
+
else {
|
|
375
|
+
blocks.push(this.createBulletItem(text));
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
// Numbered lists
|
|
379
|
+
else if (line.match(/^\d+\.\s+/)) {
|
|
380
|
+
const text = line.replace(/^\d+\.\s+/, '');
|
|
381
|
+
blocks.push(this.createNumberedItem(text));
|
|
382
|
+
}
|
|
383
|
+
// Blockquotes
|
|
384
|
+
else if (line.startsWith('> ')) {
|
|
385
|
+
blocks.push(this.createQuote(line.slice(2)));
|
|
386
|
+
}
|
|
387
|
+
// Horizontal rules
|
|
388
|
+
else if (line.match(/^[-*_]{3,}$/)) {
|
|
389
|
+
blocks.push(this.createDivider());
|
|
390
|
+
}
|
|
391
|
+
// Regular paragraphs
|
|
392
|
+
else {
|
|
393
|
+
blocks.push(this.createParagraph(line));
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
// Handle unclosed code block
|
|
397
|
+
if (inCodeBlock && codeContent.length > 0) {
|
|
398
|
+
blocks.push(this.createCode(codeContent.join('\n'), codeLanguage));
|
|
399
|
+
}
|
|
400
|
+
return blocks;
|
|
401
|
+
}
|
|
402
|
+
/**
|
|
403
|
+
* Split array into chunks
|
|
404
|
+
*/
|
|
405
|
+
chunkArray(array, size) {
|
|
406
|
+
const chunks = [];
|
|
407
|
+
for (let i = 0; i < array.length; i += size) {
|
|
408
|
+
chunks.push(array.slice(i, i + size));
|
|
409
|
+
}
|
|
410
|
+
return chunks;
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/integrations/notion/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Notion Exporter
|
|
3
|
+
* High-level export operations for Blueprint documents to Notion
|
|
4
|
+
*/
|
|
5
|
+
import type { NotionConfig, NotionExportResult, NotionExportOptions } from './types.js';
|
|
6
|
+
export declare class NotionExporter {
|
|
7
|
+
private client;
|
|
8
|
+
private parentPageId?;
|
|
9
|
+
private databaseId?;
|
|
10
|
+
constructor(config: NotionConfig);
|
|
11
|
+
/**
|
|
12
|
+
* Export Blueprint documents to Notion
|
|
13
|
+
*/
|
|
14
|
+
export(documents: Array<{
|
|
15
|
+
name: string;
|
|
16
|
+
content: string;
|
|
17
|
+
category?: string;
|
|
18
|
+
}>, options?: NotionExportOptions): Promise<NotionExportResult>;
|
|
19
|
+
/**
|
|
20
|
+
* Preview what would be created (dry run)
|
|
21
|
+
*/
|
|
22
|
+
preview(documents: Array<{
|
|
23
|
+
name: string;
|
|
24
|
+
content: string;
|
|
25
|
+
category?: string;
|
|
26
|
+
}>, options?: NotionExportOptions): Promise<NotionExportResult>;
|
|
27
|
+
/**
|
|
28
|
+
* Create a database for documents
|
|
29
|
+
*/
|
|
30
|
+
private createDocumentsDatabase;
|
|
31
|
+
/**
|
|
32
|
+
* Create a page for a document
|
|
33
|
+
*/
|
|
34
|
+
private createDocumentPage;
|
|
35
|
+
/**
|
|
36
|
+
* Detect category from document name and content
|
|
37
|
+
*/
|
|
38
|
+
private detectCategory;
|
|
39
|
+
/**
|
|
40
|
+
* Format category for display
|
|
41
|
+
*/
|
|
42
|
+
private formatCategory;
|
|
43
|
+
/**
|
|
44
|
+
* Extract description from content
|
|
45
|
+
*/
|
|
46
|
+
private extractDescription;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Export documents to Notion (convenience function)
|
|
50
|
+
*/
|
|
51
|
+
export declare function exportToNotion(config: NotionConfig, documents: Array<{
|
|
52
|
+
name: string;
|
|
53
|
+
content: string;
|
|
54
|
+
category?: string;
|
|
55
|
+
}>, options?: NotionExportOptions): Promise<NotionExportResult>;
|
|
56
|
+
//# sourceMappingURL=exporter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exporter.d.ts","sourceRoot":"","sources":["../../../src/integrations/notion/exporter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EACV,YAAY,EAIZ,kBAAkB,EAClB,mBAAmB,EAEpB,MAAM,YAAY,CAAC;AAGpB,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,YAAY,CAAC,CAAS;IAC9B,OAAO,CAAC,UAAU,CAAC,CAAS;gBAEhB,MAAM,EAAE,YAAY;IAMhC;;OAEG;IACG,MAAM,CACV,SAAS,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,EACtE,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,kBAAkB,CAAC;IAqD9B;;OAEG;IACG,OAAO,CACX,SAAS,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,EACtE,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,kBAAkB,CAAC;IAoD9B;;OAEG;YACW,uBAAuB;IAuDrC;;OAEG;YACW,kBAAkB;IA6DhC;;OAEG;IACH,OAAO,CAAC,cAAc;IAgBtB;;OAEG;IACH,OAAO,CAAC,cAAc;IAgBtB;;OAEG;IACH,OAAO,CAAC,kBAAkB;CAgB3B;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,EACtE,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,kBAAkB,CAAC,CAG7B"}
|