@epam/ai-dial-quotations 1.1.0-dev.413 → 1.1.0-dev.420

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/index.d.ts CHANGED
@@ -12,7 +12,7 @@ export { useCitationMarkdownComponents } from './hooks/useCitationMarkdownCompon
12
12
  export type { UseCitationMarkdownComponentsCallbacks } from './hooks/useCitationMarkdownComponents/useCitationMarkdownComponents';
13
13
  export { groupAnnotations, groupAnnotationsByCitId, groupAnnotationsBySource, } from './utils/group-annotations-by-source';
14
14
  export type { AnnotationGroup } from './utils/group-annotations-by-source';
15
- export { annotationsToPdfHighlights, annotationHighlightId, normalizeRawAnnotations, resolveMessageAnnotations, } from './utils/annotation';
15
+ export { annotationsToPdfHighlights, annotationHighlightId, getAnnotationPdfPage, normalizeRawAnnotations, resolveMessageAnnotations, } from './utils/annotation';
16
16
  export { injectCitationSentinels, replaceSentinelsInChildren, stripCitTagsWhileStreaming, } from './utils/citation-injection';
17
17
  export { isReferenceOnlyAttachment, parsePdfPageReference, getReferenceAttachmentGroups, } from './utils/reference-attachment';
18
18
  export type { PdfPageReference } from './utils/reference-attachment';
package/index.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAC;AACtE,YAAY,EACV,kBAAkB,EAClB,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,wCAAwC,CAAC;AAEhD,OAAO,EAAE,cAAc,EAAE,MAAM,4CAA4C,CAAC;AAC5E,YAAY,EACV,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,4CAA4C,CAAC;AAEpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gDAAgD,CAAC;AAClF,YAAY,EAAE,qBAAqB,EAAE,MAAM,gDAAgD,CAAC;AAG5F,OAAO,EACL,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,+BAA+B,CAAC;AACvC,YAAY,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAGtE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,6BAA6B,EAAE,MAAM,qEAAqE,CAAC;AACpH,YAAY,EAAE,sCAAsC,EAAE,MAAM,qEAAqE,CAAC;AAGlI,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,wBAAwB,GACzB,MAAM,qCAAqC,CAAC;AAC7C,YAAY,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAE3E,OAAO,EACL,0BAA0B,EAC1B,qBAAqB,EACrB,uBAAuB,EACvB,yBAAyB,GAC1B,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,uBAAuB,EACvB,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EACL,yBAAyB,EACzB,qBAAqB,EACrB,4BAA4B,GAC7B,MAAM,8BAA8B,CAAC;AACtC,YAAY,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAC;AACtE,YAAY,EACV,kBAAkB,EAClB,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,wCAAwC,CAAC;AAEhD,OAAO,EAAE,cAAc,EAAE,MAAM,4CAA4C,CAAC;AAC5E,YAAY,EACV,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,4CAA4C,CAAC;AAEpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gDAAgD,CAAC;AAClF,YAAY,EAAE,qBAAqB,EAAE,MAAM,gDAAgD,CAAC;AAG5F,OAAO,EACL,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,+BAA+B,CAAC;AACvC,YAAY,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAGtE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,6BAA6B,EAAE,MAAM,qEAAqE,CAAC;AACpH,YAAY,EAAE,sCAAsC,EAAE,MAAM,qEAAqE,CAAC;AAGlI,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,wBAAwB,GACzB,MAAM,qCAAqC,CAAC;AAC7C,YAAY,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAE3E,OAAO,EACL,0BAA0B,EAC1B,qBAAqB,EACrB,oBAAoB,EACpB,uBAAuB,EACvB,yBAAyB,GAC1B,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,uBAAuB,EACvB,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EACL,yBAAyB,EACzB,qBAAqB,EACrB,4BAA4B,GAC7B,MAAM,8BAA8B,CAAC;AACtC,YAAY,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC"}
package/index.js CHANGED
@@ -169,13 +169,18 @@ var j = {
169
169
  if (t != null) return t;
170
170
  let n = e.split(/[?#]/)[0], i = n.lastIndexOf(".");
171
171
  if (i !== -1) return M[n.slice(i + 1).toLowerCase()];
172
- }, P = (e) => e.flatMap((e, t) => {
172
+ }, P = (e) => typeof e == "object" && !!e && !Array.isArray(e) && "type" in e && typeof e.type == "string", ee = (e) => Array.isArray(e) ? e.filter(P) : P(e) ? e : void 0, F = (e) => e.flatMap((e, t) => {
173
173
  let n = e.body?.selector;
174
174
  if (n == null) return [];
175
175
  let r = (Array.isArray(n) ? n : [n]).flatMap((e) => {
176
- if (e.type !== "pdf_bbox") return [];
176
+ if (!P(e) || e.type !== "pdf_bbox") return [];
177
177
  let { page: t, x1: n, y1: r, x2: i, y2: a } = e;
178
- return [{
178
+ return !Number.isInteger(t) || t < 1 || ![
179
+ n,
180
+ r,
181
+ i,
182
+ a
183
+ ].every(Number.isFinite) ? [] : [{
179
184
  page: t,
180
185
  x1: n,
181
186
  y1: r,
@@ -188,7 +193,10 @@ var j = {
188
193
  bboxes: r,
189
194
  style: j
190
195
  }];
191
- }), F = (e, t) => String(e.index ?? t), I = (e) => typeof e == "number" ? e : null, L = (e) => {
196
+ }), te = (e, t) => String(e.index ?? t), ne = (e) => {
197
+ let t = e.body?.selector;
198
+ if (t != null) return (Array.isArray(t) ? t : [t]).find((e) => P(e) && e.type === "pdf_bbox" && typeof e.page == "number" && Number.isInteger(e.page) && e.page >= 1)?.page;
199
+ }, I = (e) => typeof e == "number" ? e : null, re = (e) => {
192
200
  if (typeof e != "object" || !e) return null;
193
201
  let t = e;
194
202
  if (t.type !== "pdf_region") return null;
@@ -203,7 +211,7 @@ var j = {
203
211
  x2: i + o,
204
212
  y2: a + s
205
213
  };
206
- }, ee = (t, n) => {
214
+ }, ie = (t, n) => {
207
215
  let r = t.target;
208
216
  if (typeof r != "object" || !r) return null;
209
217
  let i = r, a = i.source;
@@ -212,7 +220,7 @@ var j = {
212
220
  if (o === null) return null;
213
221
  let s = n.find((e) => e.index === o);
214
222
  if (s?.url == null) return null;
215
- let c = L(i.selector);
223
+ let c = re(i.selector);
216
224
  if (c === null) return null;
217
225
  let l = t.body, u = typeof l == "object" && l ? l : {}, d = typeof u.title == "string" ? u.title : void 0, f = typeof u.quote == "string" ? u.quote : void 0;
218
226
  return {
@@ -231,7 +239,7 @@ var j = {
231
239
  selector: c
232
240
  }
233
241
  };
234
- }, te = (t) => {
242
+ }, ae = (t) => {
235
243
  let n = t.target;
236
244
  if (typeof n != "object" || !n) return null;
237
245
  let r = n.selector;
@@ -250,12 +258,14 @@ var j = {
250
258
  if (l.type !== "attachment") return null;
251
259
  let u = l.url;
252
260
  if (typeof u != "string") return null;
253
- let d = typeof s.title == "string" ? s.title : void 0, f = typeof s.quote == "string" ? s.quote : void 0;
261
+ let d = typeof s.title == "string" ? s.title : void 0, f = typeof s.quote == "string" ? s.quote : void 0, p = ee(s.selector);
254
262
  return {
263
+ index: I(t.index) ?? void 0,
255
264
  target: { selector: a },
256
265
  body: {
257
266
  title: d,
258
267
  quote: f,
268
+ ...p === void 0 ? {} : { selector: p },
259
269
  source: {
260
270
  type: "attachment",
261
271
  attachment: {
@@ -266,7 +276,7 @@ var j = {
266
276
  }
267
277
  }
268
278
  };
269
- }, R = (e) => {
279
+ }, L = (e) => {
270
280
  if (e.target?.selector?.type !== "html_tag") return e;
271
281
  let t = e.body?.source?.attachment;
272
282
  if (t?.url == null) return e;
@@ -285,24 +295,24 @@ var j = {
285
295
  }
286
296
  }
287
297
  };
288
- }, z = (e, t) => e.flatMap((e) => {
298
+ }, R = (e, t) => e.flatMap((e) => {
289
299
  if (typeof e != "object" || !e) return [];
290
- let n = e, r = te(n);
300
+ let n = e, r = ae(n);
291
301
  if (r) return [r];
292
- let i = ee(n, t);
302
+ let i = ie(n, t);
293
303
  return i ? [i] : [];
294
- }), B = (e) => {
304
+ }), z = (e) => {
295
305
  let t = e.custom_content?.annotations;
296
- if (t?.length) return t.filter((e) => e != null && e.body?.source?.attachment?.url != null).map(R);
306
+ if (t?.length) return t.filter((e) => e != null && e.body?.source?.attachment?.url != null).map(L);
297
307
  let n = e.custom_fields;
298
308
  if (typeof n != "object" || !n) return [];
299
309
  let r = n.annotations;
300
- return !Array.isArray(r) || r.length === 0 ? [] : z(r, e.custom_content?.attachments ?? []).map(R);
301
- }, ne = (e, t) => v(() => t ? [] : B(e), [t, e]), re = {
310
+ return !Array.isArray(r) || r.length === 0 ? [] : R(r, e.custom_content?.attachments ?? []).map(L);
311
+ }, oe = (e, t) => v(() => t ? [] : z(e), [t, e]), se = {
302
312
  openGroupKey: null,
303
313
  activeIndexByGroup: {}
304
- }, ie = () => {
305
- let [e, t] = y(re), n = g((e) => {
314
+ }, ce = () => {
315
+ let [e, t] = y(se), n = g((e) => {
306
316
  t((t) => ({
307
317
  ...t,
308
318
  openGroupKey: e
@@ -333,7 +343,7 @@ var j = {
333
343
  i,
334
344
  e
335
345
  ]);
336
- }, ae = /⟦C(\d+)⟧/g, V = (e, t) => {
346
+ }, le = /⟦C(\d+)⟧/g, B = (e, t) => {
337
347
  let n = t.map((e, t) => ({
338
348
  g: e,
339
349
  idx: t
@@ -346,9 +356,9 @@ var j = {
346
356
  }).sort((e, t) => t.pos - e.pos), r = e;
347
357
  for (let { idx: e, pos: t } of n) r = `${r.slice(0, t)}⟦C${e}⟧${r.slice(t)}`;
348
358
  return r;
349
- }, oe = /<cit\s+data-id=(?:"[^"]+"|'[^']+')\s*>\s*<\/cit>/g, se = /^<cit\s+data-id=(?:"[^"]+"|'[^']+')\s*>\s*<\/cit>$/, H = /<cit\s+data-id=(?:"[^"]+"|'[^']+')\s*>\s*<\/cit>|<\/?cit\b[^>]*>|<\/?cit\b[^>]*$/gi, U = (e) => e.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;"), W = (e) => e.replace(H, (e) => se.test(e) ? e : U(e)), G = (e) => W(e).replace(oe, ""), K = (e, t) => {
359
+ }, V = /<cit\s+data-id=(?:"[^"]+"|'[^']+')\s*>\s*<\/cit>/g, H = /^<cit\s+data-id=(?:"[^"]+"|'[^']+')\s*>\s*<\/cit>$/, U = /<cit\s+data-id=(?:"[^"]+"|'[^']+')\s*>\s*<\/cit>|<\/?cit\b[^>]*>|<\/?cit\b[^>]*$/gi, ue = (e) => e.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;"), W = (e) => e.replace(U, (e) => H.test(e) ? e : ue(e)), G = (e) => W(e).replace(V, ""), K = (e, t) => {
350
360
  if (typeof e == "string") {
351
- let n = e.split(ae);
361
+ let n = e.split(le);
352
362
  if (n.length === 1) return e;
353
363
  let r = [];
354
364
  return n.forEach((e, n) => {
@@ -359,15 +369,15 @@ var j = {
359
369
  let n = K(e, t);
360
370
  return Array.isArray(n) ? n : [n];
361
371
  }) : e;
362
- }, ce = (e) => {
372
+ }, de = (e) => {
363
373
  let t = e.primaryAnnotation.target?.selector;
364
374
  return t?.type === "html_tag" ? t.id : void 0;
365
- }, le = (e, t) => /* @__PURE__ */ S(b, { children: [
375
+ }, fe = (e, t) => /* @__PURE__ */ S(b, { children: [
366
376
  e == null ? "<cit>" : `<cit data-id="${e}">`,
367
377
  t,
368
378
  "</cit>"
369
- ] }), ue = (e, t, n, r = !1, a = !1) => {
370
- let { onPreview: o, onOpenInBrowser: s, buildLabels: c } = n, l = v(() => r ? G(e) : W(t.length > 0 ? V(e, t) : e), [
379
+ ] }), pe = (e, t, n, r = !1, a = !1) => {
380
+ let { onPreview: o, onOpenInBrowser: s, buildLabels: c } = n, l = v(() => r ? G(e) : W(t.length > 0 ? B(e, t) : e), [
371
381
  e,
372
382
  t,
373
383
  r
@@ -377,7 +387,7 @@ var j = {
377
387
  markdownComponents: v(() => {
378
388
  let e = /* @__PURE__ */ new Map();
379
389
  for (let n of t) {
380
- let t = ce(n);
390
+ let t = de(n);
381
391
  t != null && e.set(t, n);
382
392
  }
383
393
  let n = (e) => {
@@ -394,7 +404,7 @@ var j = {
394
404
  return r ? n(r) : null;
395
405
  }, l = { cit: (t) => {
396
406
  let r = t["data-id"] == null ? void 0 : e.get(t["data-id"]);
397
- return r ? n(r) : le(t["data-id"], t.children);
407
+ return r ? n(r) : fe(t["data-id"], t.children);
398
408
  } };
399
409
  return t.length === 0 ? u ? l : {} : {
400
410
  ...l,
@@ -424,20 +434,20 @@ var j = {
424
434
  } catch {
425
435
  return e;
426
436
  }
427
- }, de = (e) => {
437
+ }, me = (e) => {
428
438
  try {
429
439
  let t = new URL(e);
430
440
  return t.pathname.split("/").map((e) => q(e)).filter(Boolean).at(-1) ?? t.hostname;
431
441
  } catch {
432
442
  return e.split("/").map((e) => q(e)).filter(Boolean).at(-1) ?? e;
433
443
  }
434
- }, J = (e, t) => e.body?.source?.attachment?.title ?? de(t), Y = (e) => {
444
+ }, J = (e, t) => e.body?.source?.attachment?.title ?? me(t), Y = (e) => {
435
445
  let t = e.target?.selector;
436
446
  return t?.type === "html_tag" ? t : void 0;
437
- }, fe = (e) => Y(e) != null, X = (e) => {
447
+ }, he = (e) => Y(e) != null, X = (e) => {
438
448
  let t = /* @__PURE__ */ new Map();
439
449
  for (let n of e) {
440
- if (fe(n)) continue;
450
+ if (he(n)) continue;
441
451
  let e = n.body?.source?.attachment?.url;
442
452
  if (e == null) continue;
443
453
  let r = t.get(e);
@@ -467,13 +477,13 @@ var j = {
467
477
  });
468
478
  }
469
479
  return Array.from(t.values());
470
- }, pe = (e) => [...Z(e), ...X(e)], Q = (e) => e.url == null && e.reference_url != null, me = /^(.*\.pdf)(?:#page=(\d+))?$/i, $ = (e) => {
471
- let t = me.exec(e);
480
+ }, ge = (e) => [...Z(e), ...X(e)], Q = (e) => e.url == null && e.reference_url != null, _e = /^(.*\.pdf)(?:#page=(\d+))?$/i, $ = (e) => {
481
+ let t = _e.exec(e);
472
482
  return t ? {
473
483
  baseUrl: t[1],
474
484
  page: t[2] == null ? null : Number(t[2])
475
485
  } : null;
476
- }, he = (t) => X((t ?? []).filter(Q).map((t) => {
486
+ }, ve = (t) => X((t ?? []).filter(Q).map((t) => {
477
487
  let n = t.reference_url, r = $(n) != null;
478
488
  return { body: {
479
489
  quote: t.data,
@@ -488,4 +498,4 @@ var j = {
488
498
  } };
489
499
  }));
490
500
  //#endregion
491
- export { w as CitationCard, D as CitationCardProvider, A as CitationDropdown, T as CitationMarker, F as annotationHighlightId, P as annotationsToPdfHighlights, he as getReferenceAttachmentGroups, pe as groupAnnotations, Z as groupAnnotationsByCitId, X as groupAnnotationsBySource, V as injectCitationSentinels, Q as isReferenceOnlyAttachment, z as normalizeRawAnnotations, $ as parsePdfPageReference, K as replaceSentinelsInChildren, B as resolveMessageAnnotations, G as stripCitTagsWhileStreaming, ne as useAnnotations, ie as useCitationCard, O as useCitationCardContext, ue as useCitationMarkdownComponents };
501
+ export { w as CitationCard, D as CitationCardProvider, A as CitationDropdown, T as CitationMarker, te as annotationHighlightId, F as annotationsToPdfHighlights, ne as getAnnotationPdfPage, ve as getReferenceAttachmentGroups, ge as groupAnnotations, Z as groupAnnotationsByCitId, X as groupAnnotationsBySource, B as injectCitationSentinels, Q as isReferenceOnlyAttachment, R as normalizeRawAnnotations, $ as parsePdfPageReference, K as replaceSentinelsInChildren, z as resolveMessageAnnotations, G as stripCitTagsWhileStreaming, oe as useAnnotations, ce as useCitationCard, O as useCitationCardContext, pe as useCitationMarkdownComponents };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@epam/ai-dial-quotations",
3
3
  "description": "Citation and annotation components, hooks, and utilities for AI DIAL conversations",
4
- "version": "1.1.0-dev.413",
4
+ "version": "1.1.0-dev.420",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
7
7
  "main": "./index.js",
@@ -19,7 +19,7 @@
19
19
  "react": "^19.0.0",
20
20
  "react-markdown": "^10.1.0",
21
21
  "@tabler/icons-react": "^3.0.0",
22
- "@epam/ai-dial-chat-shared": "1.1.0-dev.413",
22
+ "@epam/ai-dial-chat-shared": "1.1.0-dev.420",
23
23
  "@epam/ai-dial-ui-kit": "*",
24
24
  "@epam/pdf-highlighter-kit": ">=0.0.14"
25
25
  },
@@ -9,6 +9,11 @@ import { InputHighlightData } from '@epam/pdf-highlighter-kit';
9
9
  export declare const annotationsToPdfHighlights: (annotations: Annotation[]) => InputHighlightData[];
10
10
  /** Returns a stable string ID for a given annotation, matching the IDs produced by `annotationsToPdfHighlights`. */
11
11
  export declare const annotationHighlightId: (annotation: Annotation, fallbackIndex: number) => string;
12
+ /**
13
+ * Returns the first positive integer PDF page in the annotation's body selectors,
14
+ * or `undefined` when none exists. Independent of bounding-box coordinates.
15
+ */
16
+ export declare const getAnnotationPdfPage: (annotation: Annotation) => number | undefined;
12
17
  /**
13
18
  * Normalizes raw annotations from the API wire format (stored in
14
19
  * `message.custom_fields.annotations`) to the internal `Annotation` model.
@@ -21,7 +26,7 @@ export declare const annotationHighlightId: (annotation: Annotation, fallbackInd
21
26
  * - `target.selector` of type `html_tag` (`{ tag, id }`) with a flat
22
27
  * `body.source = { type: 'attachment', url }` — normalized to
23
28
  * `body.source.attachment.url`/`.title` directly, with no attachment-list
24
- * lookup and no `index`.
29
+ * lookup, preserving optional indexes and document selectors.
25
30
  *
26
31
  * Annotations matching neither shape are omitted from the result.
27
32
  */
@@ -1 +1 @@
1
- {"version":3,"file":"annotation.d.ts","sourceRoot":"","sources":["../../src/utils/annotation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EAEV,OAAO,EACP,iBAAiB,EAElB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,KAAK,EAEV,kBAAkB,EACnB,MAAM,2BAA2B,CAAC;AA2BnC;;;;;GAKG;AACH,eAAO,MAAM,0BAA0B,GACrC,aAAa,UAAU,EAAE,KACxB,kBAAkB,EAoBjB,CAAC;AAEL,oHAAoH;AACpH,eAAO,MAAM,qBAAqB,GAChC,YAAY,UAAU,EACtB,eAAe,MAAM,KACpB,MAAmD,CAAC;AAyKvD;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,uBAAuB,GAClC,gBAAgB,OAAO,EAAE,EACzB,aAAa,iBAAiB,EAAE,KAC/B,UAAU,EAeT,CAAC;AAEL;;;;;;GAMG;AACH,eAAO,MAAM,yBAAyB,GAAI,SAAS,OAAO,KAAG,UAAU,EAoBtE,CAAC"}
1
+ {"version":3,"file":"annotation.d.ts","sourceRoot":"","sources":["../../src/utils/annotation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EAGV,OAAO,EACP,iBAAiB,EAElB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,KAAK,EAEV,kBAAkB,EACnB,MAAM,2BAA2B,CAAC;AAyCnC;;;;;GAKG;AACH,eAAO,MAAM,0BAA0B,GACrC,aAAa,UAAU,EAAE,KACxB,kBAAkB,EA0BjB,CAAC;AAEL,oHAAoH;AACpH,eAAO,MAAM,qBAAqB,GAChC,YAAY,UAAU,EACtB,eAAe,MAAM,KACpB,MAAmD,CAAC;AAEvD;;;GAGG;AACH,eAAO,MAAM,oBAAoB,GAC/B,YAAY,UAAU,KACrB,MAAM,GAAG,SAcX,CAAC;AA4KF;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,uBAAuB,GAClC,gBAAgB,OAAO,EAAE,EACzB,aAAa,iBAAiB,EAAE,KAC/B,UAAU,EAeT,CAAC;AAEL;;;;;;GAMG;AACH,eAAO,MAAM,yBAAyB,GAAI,SAAS,OAAO,KAAG,UAAU,EAoBtE,CAAC"}