@epam/ai-dial-quotations 1.1.0-dev.468 → 1.1.0-dev.471

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 { gatherSameSourceAnnotations, groupAnnotations, groupAnnotationsByCitId, groupAnnotationsBySource, } from './utils/group-annotations-by-source';
14
14
  export type { AnnotationGroup } from './utils/group-annotations-by-source';
15
- export { annotationHighlightId, annotationsToPdfHighlights, annotationToOfficeHighlightLocations, getAnnotationPdfPage, isDocxRangeSelector, isExcelRcRangeSelector, isPptxRangeSelector, normalizeRawAnnotations, resolveMessageAnnotations, } from './utils/annotation';
15
+ export { annotationHighlightId, annotationsToPdfHighlights, annotationToOfficeHighlightLocations, getAnnotationPdfPage, isDocxRangeSelector, isExcelRcRangeSelector, isPptxRangeSelector, resolveMessageAnnotations, } from './utils/annotation';
16
16
  export type { DocxOfficeHighlightLocation, ExcelOfficeHighlightLocation, OfficeHighlightLocation, PptxOfficeHighlightLocation, } from './models/office-highlight';
17
17
  export { injectCitationSentinels, replaceSentinelsInChildren, stripCitTagsWhileStreaming, } from './utils/citation-injection';
18
18
  export { isReferenceOnlyAttachment, parsePdfPageReference, getReferenceAttachmentGroups, } 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,2BAA2B,EAC3B,gBAAgB,EAChB,uBAAuB,EACvB,wBAAwB,GACzB,MAAM,qCAAqC,CAAC;AAC7C,YAAY,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAE3E,OAAO,EACL,qBAAqB,EACrB,0BAA0B,EAC1B,oCAAoC,EACpC,oBAAoB,EACpB,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,EACnB,uBAAuB,EACvB,yBAAyB,GAC1B,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,2BAA2B,EAC3B,4BAA4B,EAC5B,uBAAuB,EACvB,2BAA2B,GAC5B,MAAM,2BAA2B,CAAC;AAEnC,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,2BAA2B,EAC3B,gBAAgB,EAChB,uBAAuB,EACvB,wBAAwB,GACzB,MAAM,qCAAqC,CAAC;AAC7C,YAAY,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAE3E,OAAO,EACL,qBAAqB,EACrB,0BAA0B,EAC1B,oCAAoC,EACpC,oBAAoB,EACpB,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,EACnB,yBAAyB,GAC1B,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,2BAA2B,EAC3B,4BAA4B,EAC5B,uBAAuB,EACvB,2BAA2B,GAC5B,MAAM,2BAA2B,CAAC;AAEnC,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
@@ -1,78 +1,78 @@
1
- import { MIMEType as e, MarkdownRenderer as t, buildCssVars as n, inferMimeTypeFromPath as r, mergeClasses as i } from "@epam/ai-dial-chat-shared";
2
- import { DIAL_KIT_ICON_STROKE as a, ElementSize as o, EllipsisTooltip as s, GhostIconButton as c, NeutralButton as l, PrimaryButton as u, Tooltip as d } from "@epam/ai-dial-ui-kit";
3
- import { IconChevronLeft as f, IconChevronRight as p } from "@tabler/icons-react";
4
- import { createContext as m, memo as h, useCallback as g, useContext as _, useMemo as v, useState as y } from "react";
5
- import { Fragment as b, jsx as x, jsxs as S } from "react/jsx-runtime";
6
- var C = {
1
+ import { MIMEType as e, MarkdownRenderer as t, buildCssVars as n, isAnnotationSelector as r, mergeClasses as i, normalizePersistedHtmlTagAttachmentType as a, normalizeRawAnnotations as o } from "@epam/ai-dial-chat-shared";
2
+ import { DIAL_KIT_ICON_STROKE as s, ElementSize as c, EllipsisTooltip as l, GhostIconButton as u, NeutralButton as d, PrimaryButton as f, Tooltip as p } from "@epam/ai-dial-ui-kit";
3
+ import { IconChevronLeft as m, IconChevronRight as h } from "@tabler/icons-react";
4
+ import { createContext as g, memo as _, useCallback as v, useContext as y, useMemo as b, useState as x } from "react";
5
+ import { Fragment as S, jsx as C, jsxs as w } from "react/jsx-runtime";
6
+ var T = {
7
7
  card: "_card_1kph1_1",
8
8
  quote: "_quote_1kph1_5",
9
9
  title: "_title_1kph1_9",
10
10
  switcher: "_switcher_1kph1_13",
11
11
  sourceName: "_sourceName_1kph1_17"
12
- }, w = ({ group: r, activeIndex: l, onIndexChange: d, onPreview: m, onOpenInBrowser: h, headerIcon: g, labels: _, typography: v, colors: y }) => {
13
- let b = r.annotations.length, w = r.annotations[l] ?? r.primaryAnnotation, T = b > 1, E = r.primaryAnnotation.body?.source?.attachment?.type, D = m == null || E === e.HTML || E === e.XHTML, O = v?.sourceNameClassName ?? "dial-tiny-text", k = v?.titleClassName ?? "dial-body-semi-text", A = v?.quoteClassName ?? "dial-small-text", j = v?.quoteStrongClassName ?? "dial-small-semi-text", M = v?.switcherClassName ?? "dial-tiny-text", N = n({
12
+ }, E = ({ group: r, activeIndex: a, onIndexChange: o, onPreview: d, onOpenInBrowser: p, headerIcon: g, labels: _, typography: v, colors: y }) => {
13
+ let b = r.annotations.length, x = r.annotations[a] ?? r.primaryAnnotation, S = b > 1, E = r.primaryAnnotation.body?.source?.attachment?.type, D = d == null || E === e.HTML || E === e.XHTML, O = v?.sourceNameClassName ?? "dial-tiny-text", k = v?.titleClassName ?? "dial-body-semi-text", A = v?.quoteClassName ?? "dial-small-text", j = v?.quoteStrongClassName ?? "dial-small-semi-text", M = v?.switcherClassName ?? "dial-tiny-text", N = n({
14
14
  "--cc-card-bg": y?.cardBackground,
15
15
  "--cc-quote-text": y?.quoteText,
16
16
  "--cc-title-text": y?.titleText,
17
17
  "--cc-switcher-text": y?.switcherText,
18
18
  "--cc-source-name-text": y?.sourceNameText
19
19
  });
20
- return /* @__PURE__ */ S("div", {
20
+ return /* @__PURE__ */ w("div", {
21
21
  role: "dialog",
22
22
  "aria-modal": "true",
23
23
  "aria-label": _.ariaLabel,
24
24
  style: N,
25
- className: i("flex w-[400px] flex-col gap-3 rounded-lg p-4 shadow-lg", C.card),
25
+ className: i("flex w-[400px] flex-col gap-3 rounded-lg p-4 shadow-lg", T.card),
26
26
  children: [
27
- /* @__PURE__ */ S("div", {
27
+ /* @__PURE__ */ w("div", {
28
28
  className: "flex items-center justify-between gap-2",
29
- children: [/* @__PURE__ */ S("div", {
29
+ children: [/* @__PURE__ */ w("div", {
30
30
  className: "flex min-w-0 items-center gap-1",
31
- children: [g, /* @__PURE__ */ x(s, {
31
+ children: [g, /* @__PURE__ */ C(l, {
32
32
  text: r.sourceName,
33
- className: i(O, "min-w-0", C.sourceName)
33
+ className: i(O, "min-w-0", T.sourceName)
34
34
  })]
35
- }), T && /* @__PURE__ */ S("div", {
35
+ }), S && /* @__PURE__ */ w("div", {
36
36
  className: "flex shrink-0 items-center gap-1",
37
37
  children: [
38
- /* @__PURE__ */ x(c, {
39
- icon: /* @__PURE__ */ x(f, {
38
+ /* @__PURE__ */ C(u, {
39
+ icon: /* @__PURE__ */ C(m, {
40
40
  size: 14,
41
41
  className: "rtl:scale-x-[-1]",
42
- stroke: a
42
+ stroke: s
43
43
  }),
44
- size: o.Small,
44
+ size: c.Small,
45
45
  "aria-label": _.previousCitation,
46
- onClick: () => d((l - 1 + b) % b)
46
+ onClick: () => o((a - 1 + b) % b)
47
47
  }),
48
- /* @__PURE__ */ x("span", {
49
- className: i(M, C.switcher),
50
- children: _.formatSwitcherText(l + 1, b)
48
+ /* @__PURE__ */ C("span", {
49
+ className: i(M, T.switcher),
50
+ children: _.formatSwitcherText(a + 1, b)
51
51
  }),
52
- /* @__PURE__ */ x(c, {
53
- icon: /* @__PURE__ */ x(p, {
52
+ /* @__PURE__ */ C(u, {
53
+ icon: /* @__PURE__ */ C(h, {
54
54
  size: 14,
55
55
  className: "rtl:scale-x-[-1]",
56
- stroke: a
56
+ stroke: s
57
57
  }),
58
- size: o.Small,
58
+ size: c.Small,
59
59
  "aria-label": _.nextCitation,
60
- onClick: () => d((l + 1) % b)
60
+ onClick: () => o((a + 1) % b)
61
61
  })
62
62
  ]
63
63
  })]
64
64
  }),
65
- (w.body?.title || w.body?.quote || T) && /* @__PURE__ */ S("div", {
65
+ (x.body?.title || x.body?.quote || S) && /* @__PURE__ */ w("div", {
66
66
  className: "flex flex-col gap-3",
67
- children: [w.body?.title && /* @__PURE__ */ x("p", {
68
- className: i(k, C.title, "break-words"),
69
- children: w.body.title
70
- }), (w.body?.quote || T) && /* @__PURE__ */ x("div", {
71
- className: i(A, C.quote, "line-clamp-6 break-words", T && "min-h-[3lh]"),
72
- children: w.body?.quote && /* @__PURE__ */ x(t, {
73
- content: w.body.quote,
67
+ children: [x.body?.title && /* @__PURE__ */ C("p", {
68
+ className: i(k, T.title, "break-words"),
69
+ children: x.body.title
70
+ }), (x.body?.quote || S) && /* @__PURE__ */ C("div", {
71
+ className: i(A, T.quote, "line-clamp-6 break-words", S && "min-h-[3lh]"),
72
+ children: x.body?.quote && /* @__PURE__ */ C(t, {
73
+ content: x.body.quote,
74
74
  classNames: {
75
- p: i(A, C.quote),
75
+ p: i(A, T.quote),
76
76
  ul: i(A, "ps-3"),
77
77
  ol: i(A, "ps-3"),
78
78
  strong: j
@@ -80,60 +80,60 @@ var C = {
80
80
  })
81
81
  })]
82
82
  }),
83
- /* @__PURE__ */ S("div", {
83
+ /* @__PURE__ */ w("div", {
84
84
  className: "flex justify-start gap-2",
85
- children: [m && /* @__PURE__ */ x(u, {
85
+ children: [d && /* @__PURE__ */ C(f, {
86
86
  label: _.preview,
87
- size: o.Small,
88
- onClick: () => m(w)
89
- }), /* @__PURE__ */ x(u, {
87
+ size: c.Small,
88
+ onClick: () => d(x)
89
+ }), /* @__PURE__ */ C(f, {
90
90
  label: D ? _.openInBrowser : _.download,
91
- size: o.Small,
92
- onClick: () => h(w)
91
+ size: c.Small,
92
+ onClick: () => p(x)
93
93
  })]
94
94
  })
95
95
  ]
96
96
  });
97
97
  };
98
- h(w);
98
+ _(E);
99
99
  //#endregion
100
100
  //#region src/components/CitationMarker/CitationMarker.tsx
101
- var T = ({ annotationCount: e, onOpen: t, icon: n, labels: r, labelClassName: i = "dial-caption-text" }) => {
102
- let a = /* @__PURE__ */ S("span", {
101
+ var D = ({ annotationCount: e, onOpen: t, icon: n, labels: r, labelClassName: i = "dial-caption-text" }) => {
102
+ let a = /* @__PURE__ */ w("span", {
103
103
  className: "flex items-center gap-1",
104
- children: [n, /* @__PURE__ */ x("span", {
104
+ children: [n, /* @__PURE__ */ C("span", {
105
105
  className: i,
106
106
  children: e > 1 ? r.labelWithOverflow : r.label
107
107
  })]
108
108
  });
109
- return /* @__PURE__ */ x(l, {
110
- size: o.Small,
109
+ return /* @__PURE__ */ C(d, {
110
+ size: c.Small,
111
111
  label: a,
112
112
  "aria-label": r.ariaLabel,
113
113
  onClick: t
114
114
  });
115
115
  };
116
- h(T);
116
+ _(D);
117
117
  //#endregion
118
118
  //#region src/context/CitationCardContext.tsx
119
- var E = m(null), D = E.Provider, O = () => {
120
- let e = _(E);
119
+ var O = g(null), k = O.Provider, A = () => {
120
+ let e = y(O);
121
121
  if (e == null) throw Error("useCitationCardContext must be used within a CitationCardProvider");
122
122
  return e;
123
- }, k = { content: "_content_xzs0h_1" }, A = ({ group: e, onPreview: t, onOpenInBrowser: n, icon: r, headerIcon: a, cardLabels: o, markerLabels: s, cardTypography: c, markerLabelClassName: l }) => {
124
- let u = O(), f = u.isOpen(e.groupKey), p = u.getActiveIndex(e.groupKey), m = g((e) => {
123
+ }, j = { content: "_content_xzs0h_1" }, M = ({ group: e, onPreview: t, onOpenInBrowser: n, icon: r, headerIcon: a, cardLabels: o, markerLabels: s, cardTypography: c, markerLabelClassName: l }) => {
124
+ let u = A(), d = u.isOpen(e.groupKey), f = u.getActiveIndex(e.groupKey), m = v((e) => {
125
125
  e || u.closePopup();
126
- }, [u]), h = v(() => t ? (e) => {
126
+ }, [u]), h = b(() => t ? (e) => {
127
127
  t(e), u.closePopup();
128
128
  } : void 0, [t, u]);
129
- return /* @__PURE__ */ x(d, {
130
- open: f,
129
+ return /* @__PURE__ */ C(p, {
130
+ open: d,
131
131
  onOpenChange: m,
132
132
  triggerClassName: "ms-1 inline-flex align-middle",
133
- contentClassName: i("!p-0 !bg-transparent !border-0 !shadow-none !max-w-none !rounded-none", k.content),
134
- tooltip: /* @__PURE__ */ x(w, {
133
+ contentClassName: i("!p-0 !bg-transparent !border-0 !shadow-none !max-w-none !rounded-none", j.content),
134
+ tooltip: /* @__PURE__ */ C(E, {
135
135
  group: e,
136
- activeIndex: p,
136
+ activeIndex: f,
137
137
  onIndexChange: (t) => u.setActiveIndex(e.groupKey, t),
138
138
  onPreview: h,
139
139
  onOpenInBrowser: n,
@@ -141,7 +141,7 @@ var E = m(null), D = E.Provider, O = () => {
141
141
  labels: o,
142
142
  typography: c
143
143
  }),
144
- children: /* @__PURE__ */ x(T, {
144
+ children: /* @__PURE__ */ C(D, {
145
145
  sourceName: e.sourceName,
146
146
  annotationCount: e.annotations.length,
147
147
  onOpen: () => u.openPopup(e.groupKey),
@@ -151,176 +151,62 @@ var E = m(null), D = E.Provider, O = () => {
151
151
  })
152
152
  });
153
153
  };
154
- h(A);
154
+ _(M);
155
155
  //#endregion
156
156
  //#region src/utils/annotation.ts
157
- var j = {
157
+ var N = {
158
158
  backgroundColor: "transparent",
159
159
  borderColor: "var(--stroke-accent, #1D4ED8)",
160
160
  borderWidth: "2px",
161
161
  opacity: .5,
162
162
  hoverOpacity: .5
163
- }, M = {
164
- docx: "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
165
- xlsx: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
166
- pptx: "application/vnd.openxmlformats-officedocument.presentationml.presentation"
167
- }, N = (e) => {
168
- let t = r(e);
169
- if (t != null) return t;
170
- let n = e.split(/[?#]/)[0], i = n.lastIndexOf(".");
171
- if (i !== -1) return M[n.slice(i + 1).toLowerCase()];
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, te = (e) => e.flatMap((e, t) => {
163
+ }, ee = (e) => e.flatMap((e, t) => {
173
164
  let n = e.body?.selector;
174
165
  if (n == null) return [];
175
- let r = (Array.isArray(n) ? n : [n]).flatMap((e) => {
176
- if (!P(e) || e.type !== "pdf_bbox") return [];
177
- let { page: t, x1: n, y1: r, x2: i, y2: a } = e;
166
+ let i = (Array.isArray(n) ? n : [n]).flatMap((e) => {
167
+ if (!r(e) || e.type !== "pdf_bbox") return [];
168
+ let { page: t, x1: n, y1: i, x2: a, y2: o } = e;
178
169
  return !Number.isInteger(t) || t < 1 || ![
179
170
  n,
180
- r,
181
171
  i,
182
- a
172
+ a,
173
+ o
183
174
  ].every(Number.isFinite) ? [] : [{
184
175
  page: t,
185
176
  x1: n,
186
- y1: r,
187
- x2: i,
188
- y2: a
177
+ y1: i,
178
+ x2: a,
179
+ y2: o
189
180
  }];
190
181
  });
191
- return r.length === 0 ? [] : [{
182
+ return i.length === 0 ? [] : [{
192
183
  id: String(e.index ?? t),
193
- bboxes: r,
194
- style: j
184
+ bboxes: i,
185
+ style: N
195
186
  }];
196
- }), ne = (e, t) => String(e.index ?? t), re = (e) => {
187
+ }), te = (e, t) => String(e.index ?? t), P = (e) => {
197
188
  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
- }, F = (e) => typeof e == "number" ? e : null, ie = (e) => {
200
- if (typeof e != "object" || !e) return null;
201
- let t = e;
202
- if (t.type !== "pdf_region") return null;
203
- let n = t.bbox;
204
- if (typeof n != "object" || !n) return null;
205
- let r = n, i = F(r.left), a = F(r.top), o = F(r.width), s = F(r.height);
206
- return i === null || a === null || o === null || s === null ? null : {
207
- type: "pdf_bbox",
208
- page: F(t.page) ?? 1,
209
- x1: i,
210
- y1: a,
211
- x2: i + o,
212
- y2: a + s
213
- };
214
- }, ae = (t, n) => {
215
- let r = t.target;
216
- if (typeof r != "object" || !r) return null;
217
- let i = r, a = i.source;
218
- if (typeof a != "object" || !a) return null;
219
- let o = F(a.attachment_index);
220
- if (o === null) return null;
221
- let s = n.find((e) => e.index === o);
222
- if (s?.url == null) return null;
223
- let c = ie(i.selector);
224
- if (c === null) return null;
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;
226
- return {
227
- index: F(t.index) ?? void 0,
228
- body: {
229
- title: d,
230
- quote: f,
231
- source: {
232
- type: "attachment",
233
- attachment: {
234
- type: s.type ?? e.PDF,
235
- url: s.url,
236
- title: s.title
237
- }
238
- },
239
- selector: c
240
- }
241
- };
242
- }, oe = (t) => {
243
- let n = t.target;
244
- if (typeof n != "object" || !n) return null;
245
- let r = n.selector;
246
- if (typeof r != "object" || !r) return null;
247
- let i = r;
248
- if (i.type !== "html_tag" || typeof i.tag != "string" || typeof i.id != "string") return null;
249
- let a = {
250
- type: "html_tag",
251
- tag: i.tag,
252
- id: i.id
253
- }, o = t.body;
254
- if (typeof o != "object" || !o) return null;
255
- let s = o, c = s.source;
256
- if (typeof c != "object" || !c) return null;
257
- let l = c;
258
- if (l.type !== "attachment") return null;
259
- let u = l.url;
260
- if (typeof u != "string") return null;
261
- let d = typeof s.title == "string" ? s.title : void 0, f = typeof s.quote == "string" ? s.quote : void 0, p = ee(s.selector);
262
- return {
263
- index: F(t.index) ?? void 0,
264
- target: { selector: a },
265
- body: {
266
- title: d,
267
- quote: f,
268
- ...p === void 0 ? {} : { selector: p },
269
- source: {
270
- type: "attachment",
271
- attachment: {
272
- type: N(u) ?? e.PDF,
273
- url: u,
274
- title: d
275
- }
276
- }
277
- }
278
- };
279
- }, I = (e) => {
280
- if (e.target?.selector?.type !== "html_tag") return e;
281
- let t = e.body?.source?.attachment;
282
- if (t?.url == null) return e;
283
- let n = N(t.url);
284
- return n == null || n === t.type ? e : {
285
- ...e,
286
- body: {
287
- ...e.body,
288
- source: {
289
- ...e.body?.source,
290
- type: "attachment",
291
- attachment: {
292
- ...t,
293
- type: n
294
- }
295
- }
296
- }
297
- };
298
- }, L = (e, t) => e.flatMap((e) => {
299
- if (typeof e != "object" || !e) return [];
300
- let n = e, r = oe(n);
301
- if (r) return [r];
302
- let i = ae(n, t);
303
- return i ? [i] : [];
304
- }), R = (e) => {
189
+ if (t != null) return (Array.isArray(t) ? t : [t]).find((e) => r(e) && e.type === "pdf_bbox" && typeof e.page == "number" && Number.isInteger(e.page) && e.page >= 1)?.page;
190
+ }, F = (e) => {
305
191
  let t = e.custom_content?.annotations;
306
- if (t?.length) return t.filter((e) => e != null && e.body?.source?.attachment?.url != null).map(I);
192
+ if (t?.length) return t.filter((e) => e != null && e.body?.source?.attachment?.url != null).map(a);
307
193
  let n = e.custom_fields;
308
194
  if (typeof n != "object" || !n) return [];
309
195
  let r = n.annotations;
310
- return !Array.isArray(r) || r.length === 0 ? [] : L(r, e.custom_content?.attachments ?? []).map(I);
311
- }, z = (e) => {
196
+ return !Array.isArray(r) || r.length === 0 ? [] : o(r, e.custom_content?.attachments ?? []).map(a);
197
+ }, I = (e) => {
312
198
  if (e.type !== "docx_text_range") return !1;
313
199
  let t = e;
314
200
  return typeof t.story == "string" && Array.isArray(t.path) && t.path.every((e) => typeof e == "number") && typeof t.start == "number" && typeof t.end == "number" && typeof t.text == "string";
315
- }, B = (e) => {
201
+ }, L = (e) => {
316
202
  if (e.type !== "pptx_text_range") return !1;
317
203
  let t = e;
318
204
  return typeof t.slide == "number" && typeof t.shape_id == "string" && typeof t.start == "number" && typeof t.end == "number" && typeof t.text == "string";
319
- }, V = (e) => typeof e == "object" && !!e && typeof e.row == "number" && typeof e.col == "number", H = (e) => {
205
+ }, R = (e) => typeof e == "object" && !!e && typeof e.row == "number" && typeof e.col == "number", z = (e) => {
320
206
  if (e.type !== "excel_rc_range") return !1;
321
207
  let t = e;
322
- return typeof t.sheet == "string" && V(t.start) && (t.end === void 0 || t.end === null || V(t.end));
323
- }, se = (e) => {
208
+ return typeof t.sheet == "string" && R(t.start) && (t.end === void 0 || t.end === null || R(t.end));
209
+ }, ne = (e) => {
324
210
  let { story: t, path: n, start: r, end: i, text: a } = e;
325
211
  if (!(!n.every((e) => Number.isInteger(e)) || !Number.isInteger(r) || !Number.isInteger(i) || r < 0 || i < r)) return {
326
212
  type: "docx_text_range",
@@ -330,7 +216,7 @@ var j = {
330
216
  endExclusive: i,
331
217
  text: a
332
218
  };
333
- }, ce = (e) => {
219
+ }, re = (e) => {
334
220
  let { slide: t, shape_id: n, start: r, end: i, text: a } = e;
335
221
  if (!(!Number.isInteger(t) || t < 1 || !Number.isInteger(r) || !Number.isInteger(i) || r < 0 || i < r)) return {
336
222
  type: "pptx_text_range",
@@ -340,7 +226,7 @@ var j = {
340
226
  endExclusive: i,
341
227
  text: a
342
228
  };
343
- }, le = (e) => {
229
+ }, ie = (e) => {
344
230
  let { sheet: t, start: n, end: r } = e;
345
231
  if (!(t.length === 0 || !Number.isInteger(n.row) || !Number.isInteger(n.col) || n.row < 1 || n.col < 1)) {
346
232
  if (r == null) return {
@@ -355,39 +241,39 @@ var j = {
355
241
  end: r
356
242
  };
357
243
  }
358
- }, ue = (e) => {
244
+ }, ae = (e) => {
359
245
  let t = e.body?.selector;
360
246
  return t == null ? [] : (Array.isArray(t) ? t : [t]).flatMap((e) => {
361
- if (!P(e)) return [];
362
- if (z(e)) {
363
- let t = se(e);
247
+ if (!r(e)) return [];
248
+ if (I(e)) {
249
+ let t = ne(e);
364
250
  return t ? [t] : [];
365
251
  }
366
- if (B(e)) {
367
- let t = ce(e);
252
+ if (L(e)) {
253
+ let t = re(e);
368
254
  return t ? [t] : [];
369
255
  }
370
- if (H(e)) {
371
- let t = le(e);
256
+ if (z(e)) {
257
+ let t = ie(e);
372
258
  return t ? [t] : [];
373
259
  }
374
260
  return [];
375
261
  });
376
- }, de = (e, t) => v(() => t ? [] : R(e), [t, e]), fe = {
262
+ }, oe = (e, t) => b(() => t ? [] : F(e), [t, e]), se = {
377
263
  openGroupKey: null,
378
264
  activeIndexByGroup: {}
379
- }, pe = () => {
380
- let [e, t] = y(fe), n = g((e) => {
265
+ }, ce = () => {
266
+ let [e, t] = x(se), n = v((e) => {
381
267
  t((t) => ({
382
268
  ...t,
383
269
  openGroupKey: e
384
270
  }));
385
- }, []), r = g(() => {
271
+ }, []), r = v(() => {
386
272
  t((e) => ({
387
273
  ...e,
388
274
  openGroupKey: null
389
275
  }));
390
- }, []), i = g((e, n) => {
276
+ }, []), i = v((e, n) => {
391
277
  t((t) => ({
392
278
  ...t,
393
279
  activeIndexByGroup: {
@@ -396,7 +282,7 @@ var j = {
396
282
  }
397
283
  }));
398
284
  }, []);
399
- return v(() => ({
285
+ return b(() => ({
400
286
  openPopup: n,
401
287
  closePopup: r,
402
288
  setActiveIndex: i,
@@ -408,7 +294,7 @@ var j = {
408
294
  i,
409
295
  e
410
296
  ]);
411
- }, me = /⟦C(\d+)⟧/g, U = (e, t) => {
297
+ }, le = /⟦C(\d+)⟧/g, B = (e, t) => {
412
298
  let n = t.map((e, t) => ({
413
299
  g: e,
414
300
  idx: t
@@ -421,9 +307,9 @@ var j = {
421
307
  }).sort((e, t) => t.pos - e.pos), r = e;
422
308
  for (let { idx: e, pos: t } of n) r = `${r.slice(0, t)}⟦C${e}⟧${r.slice(t)}`;
423
309
  return r;
424
- }, he = /<cit\s+data-id=(?:"[^"]+"|'[^']+')\s*>\s*<\/cit>/g, ge = /^<cit\s+data-id=(?:"[^"]+"|'[^']+')\s*>\s*<\/cit>$/, _e = /<cit\s+data-id=(?:"[^"]+"|'[^']+')\s*>\s*<\/cit>|<\/?cit\b[^>]*>|<\/?cit\b[^>]*$/gi, ve = (e) => e.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;"), W = (e) => e.replace(_e, (e) => ge.test(e) ? e : ve(e)), G = (e) => W(e).replace(he, ""), K = (e, t) => {
310
+ }, 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) => {
425
311
  if (typeof e == "string") {
426
- let n = e.split(me);
312
+ let n = e.split(le);
427
313
  if (n.length === 1) return e;
428
314
  let r = [];
429
315
  return n.forEach((e, n) => {
@@ -434,30 +320,30 @@ var j = {
434
320
  let n = K(e, t);
435
321
  return Array.isArray(n) ? n : [n];
436
322
  }) : e;
437
- }, ye = (e) => {
323
+ }, de = (e) => {
438
324
  let t = e.primaryAnnotation.target?.selector;
439
325
  return t?.type === "html_tag" ? t.id : void 0;
440
- }, be = (e, t) => /* @__PURE__ */ S(b, { children: [
326
+ }, fe = (e, t) => /* @__PURE__ */ w(S, { children: [
441
327
  e == null ? "<cit>" : `<cit data-id="${e}">`,
442
328
  t,
443
329
  "</cit>"
444
- ] }), xe = (e, t, n, r = !1, a = !1) => {
445
- let { onPreview: o, onOpenInBrowser: s, buildLabels: c } = n, l = v(() => r ? G(e) : W(t.length > 0 ? U(e, t) : e), [
330
+ ] }), pe = (e, t, n, r = !1, a = !1) => {
331
+ let { onPreview: o, onOpenInBrowser: s, buildLabels: c } = n, l = b(() => r ? G(e) : W(t.length > 0 ? B(e, t) : e), [
446
332
  e,
447
333
  t,
448
334
  r
449
335
  ]), u = l.includes("<cit");
450
336
  return {
451
337
  processedContent: l,
452
- markdownComponents: v(() => {
338
+ markdownComponents: b(() => {
453
339
  let e = /* @__PURE__ */ new Map();
454
340
  for (let n of t) {
455
- let t = ye(n);
341
+ let t = de(n);
456
342
  t != null && e.set(t, n);
457
343
  }
458
344
  let n = (e) => {
459
345
  let { cardLabels: t, markerLabels: n } = c(e);
460
- return /* @__PURE__ */ x(A, {
346
+ return /* @__PURE__ */ C(M, {
461
347
  group: e,
462
348
  onPreview: (t) => o(t, e),
463
349
  onOpenInBrowser: s,
@@ -469,16 +355,16 @@ var j = {
469
355
  return r ? n(r) : null;
470
356
  }, l = { cit: (t) => {
471
357
  let r = t["data-id"] == null ? void 0 : e.get(t["data-id"]);
472
- return r ? n(r) : be(t["data-id"], t.children);
358
+ return r ? n(r) : fe(t["data-id"], t.children);
473
359
  } };
474
360
  return t.length === 0 ? u ? l : {} : {
475
361
  ...l,
476
- p: ({ children: e, ...t }) => /* @__PURE__ */ x("p", {
362
+ p: ({ children: e, ...t }) => /* @__PURE__ */ C("p", {
477
363
  ...t,
478
364
  className: i(a ? "dial-small-paragraph-text" : "dial-body-paragraph-text", "mb-3 [overflow-wrap:anywhere] [text-wrap:pretty] last:mb-0"),
479
365
  children: K(e, r)
480
366
  }),
481
- li: ({ children: e, ...t }) => /* @__PURE__ */ x("li", {
367
+ li: ({ children: e, ...t }) => /* @__PURE__ */ C("li", {
482
368
  ...t,
483
369
  className: "mb-1.5 last:mb-0",
484
370
  children: K(e, r)
@@ -499,20 +385,20 @@ var j = {
499
385
  } catch {
500
386
  return e;
501
387
  }
502
- }, Se = (e) => {
388
+ }, me = (e) => {
503
389
  try {
504
390
  let t = new URL(e);
505
391
  return t.pathname.split("/").map((e) => q(e)).filter(Boolean).at(-1) ?? t.hostname;
506
392
  } catch {
507
393
  return e.split("/").map((e) => q(e)).filter(Boolean).at(-1) ?? e;
508
394
  }
509
- }, J = (e, t) => e.body?.source?.attachment?.title ?? Se(t), Y = (e) => {
395
+ }, J = (e, t) => e.body?.source?.attachment?.title ?? me(t), Y = (e) => {
510
396
  let t = e.target?.selector;
511
397
  return t?.type === "html_tag" ? t : void 0;
512
- }, Ce = (e) => Y(e) != null, X = (e) => {
398
+ }, he = (e) => Y(e) != null, X = (e) => {
513
399
  let t = /* @__PURE__ */ new Map();
514
400
  for (let n of e) {
515
- if (Ce(n)) continue;
401
+ if (he(n)) continue;
516
402
  let e = n.body?.source?.attachment?.url;
517
403
  if (e == null) continue;
518
404
  let r = t.get(e);
@@ -542,16 +428,16 @@ var j = {
542
428
  });
543
429
  }
544
430
  return Array.from(t.values());
545
- }, we = (e) => [...Z(e), ...X(e)], Te = (e, t) => {
431
+ }, ge = (e) => [...Z(e), ...X(e)], _e = (e, t) => {
546
432
  let n = e.body?.source?.attachment?.url;
547
433
  return n == null || !t.includes(e) ? [e] : t.filter((e) => e.body?.source?.attachment?.url === n);
548
- }, Q = (e) => e.url == null && e.reference_url != null, Ee = /^(.*\.pdf)(?:#page=(\d+))?$/i, $ = (e) => {
549
- let t = Ee.exec(e);
434
+ }, Q = (e) => e.url == null && e.reference_url != null, ve = /^(.*\.pdf)(?:#page=(\d+))?$/i, $ = (e) => {
435
+ let t = ve.exec(e);
550
436
  return t ? {
551
437
  baseUrl: t[1],
552
438
  page: t[2] == null ? null : Number(t[2])
553
439
  } : null;
554
- }, De = (t) => X((t ?? []).filter(Q).map((t) => {
440
+ }, ye = (t) => X((t ?? []).filter(Q).map((t) => {
555
441
  let n = t.reference_url, r = $(n) != null;
556
442
  return { body: {
557
443
  quote: t.data,
@@ -566,4 +452,4 @@ var j = {
566
452
  } };
567
453
  }));
568
454
  //#endregion
569
- export { w as CitationCard, D as CitationCardProvider, A as CitationDropdown, T as CitationMarker, ne as annotationHighlightId, ue as annotationToOfficeHighlightLocations, te as annotationsToPdfHighlights, Te as gatherSameSourceAnnotations, re as getAnnotationPdfPage, De as getReferenceAttachmentGroups, we as groupAnnotations, Z as groupAnnotationsByCitId, X as groupAnnotationsBySource, U as injectCitationSentinels, z as isDocxRangeSelector, H as isExcelRcRangeSelector, B as isPptxRangeSelector, Q as isReferenceOnlyAttachment, L as normalizeRawAnnotations, $ as parsePdfPageReference, K as replaceSentinelsInChildren, R as resolveMessageAnnotations, G as stripCitTagsWhileStreaming, de as useAnnotations, pe as useCitationCard, O as useCitationCardContext, xe as useCitationMarkdownComponents };
455
+ export { E as CitationCard, k as CitationCardProvider, M as CitationDropdown, D as CitationMarker, te as annotationHighlightId, ae as annotationToOfficeHighlightLocations, ee as annotationsToPdfHighlights, _e as gatherSameSourceAnnotations, P as getAnnotationPdfPage, ye as getReferenceAttachmentGroups, ge as groupAnnotations, Z as groupAnnotationsByCitId, X as groupAnnotationsBySource, B as injectCitationSentinels, I as isDocxRangeSelector, z as isExcelRcRangeSelector, L as isPptxRangeSelector, Q as isReferenceOnlyAttachment, $ as parsePdfPageReference, K as replaceSentinelsInChildren, F as resolveMessageAnnotations, G as stripCitTagsWhileStreaming, oe as useAnnotations, ce as useCitationCard, A 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.468",
4
+ "version": "1.1.0-dev.471",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
7
7
  "main": "./index.js",
@@ -9,19 +9,22 @@
9
9
  "types": "./index.d.ts",
10
10
  "exports": {
11
11
  "./package.json": "./package.json",
12
+ "./styles.css": "./index.css",
12
13
  ".": {
13
14
  "types": "./index.d.ts",
14
15
  "import": "./index.js",
15
16
  "default": "./index.js"
16
17
  }
17
18
  },
19
+ "dependencies": {
20
+ "@tabler/icons-react": "^3.44.0",
21
+ "react-markdown": "^10.1.0",
22
+ "@epam/pdf-highlighter-kit": "^0.0.18"
23
+ },
18
24
  "peerDependencies": {
19
25
  "react": "^19.0.0",
20
- "react-markdown": "^10.1.0",
21
- "@tabler/icons-react": "^3.0.0",
22
- "@epam/ai-dial-chat-shared": "1.1.0-dev.468",
23
- "@epam/ai-dial-ui-kit": "*",
24
- "@epam/pdf-highlighter-kit": ">=0.0.14"
26
+ "@epam/ai-dial-chat-shared": "1.1.0-dev.471",
27
+ "@epam/ai-dial-ui-kit": "^0.14.0-dev.15"
25
28
  },
26
29
  "repository": {
27
30
  "type": "git",
@@ -1,4 +1,4 @@
1
- import { Annotation, AnnotationSelector, DocxRangeSelector, ExcelRcRangeSelector, Message, MessageAttachment, PptxRangeSelector } from '@epam/ai-dial-chat-shared';
1
+ import { Annotation, AnnotationSelector, DocxRangeSelector, ExcelRcRangeSelector, Message, PptxRangeSelector } from '@epam/ai-dial-chat-shared';
2
2
  import { InputHighlightData } from '@epam/pdf-highlighter-kit';
3
3
  import { OfficeHighlightLocation } from '../models/office-highlight';
4
4
  /**
@@ -15,23 +15,6 @@ export declare const annotationHighlightId: (annotation: Annotation, fallbackInd
15
15
  * or `undefined` when none exists. Independent of bounding-box coordinates.
16
16
  */
17
17
  export declare const getAnnotationPdfPage: (annotation: Annotation) => number | undefined;
18
- /**
19
- * Normalizes raw annotations from the API wire format (stored in
20
- * `message.custom_fields.annotations`) to the internal `Annotation` model.
21
- *
22
- * Recognizes two wire shapes:
23
- * - `target.source.attachment_index` (integer) + a `pdf_region` selector
24
- * with `{ left, top, width, height }` coordinates, resolved against
25
- * `attachments` and converted to `body.source.attachment.url` + a
26
- * `pdf_bbox` selector with `{ x1, y1, x2, y2 }` coordinates.
27
- * - `target.selector` of type `html_tag` (`{ tag, id }`) with a flat
28
- * `body.source = { type: 'attachment', url }` — normalized to
29
- * `body.source.attachment.url`/`.title` directly, with no attachment-list
30
- * lookup, preserving optional indexes and document selectors.
31
- *
32
- * Annotations matching neither shape are omitted from the result.
33
- */
34
- export declare const normalizeRawAnnotations: (rawAnnotations: unknown[], attachments: MessageAttachment[]) => Annotation[];
35
18
  /**
36
19
  * Resolves the annotation list for a message regardless of how it was loaded.
37
20
  *
@@ -1 +1 @@
1
- {"version":3,"file":"annotation.d.ts","sourceRoot":"","sources":["../../src/utils/annotation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EAEpB,OAAO,EACP,iBAAiB,EAEjB,iBAAiB,EAClB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,KAAK,EAEV,kBAAkB,EACnB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAyC1E;;;;;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;AAEF;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,GAC9B,UAAU,kBAAkB,KAC3B,QAAQ,IAAI,iBAWd,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,mBAAmB,GAC9B,UAAU,kBAAkB,KAC3B,QAAQ,IAAI,iBAUd,CAAC;AAUF;;;GAGG;AACH,eAAO,MAAM,sBAAsB,GACjC,UAAU,kBAAkB,KAC3B,QAAQ,IAAI,oBAQd,CAAC;AA8FF;;;;GAIG;AACH,eAAO,MAAM,oCAAoC,GAC/C,YAAY,UAAU,KACrB,uBAAuB,EAsBzB,CAAC"}
1
+ {"version":3,"file":"annotation.d.ts","sourceRoot":"","sources":["../../src/utils/annotation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EACpB,OAAO,EAEP,iBAAiB,EAClB,MAAM,2BAA2B,CAAC;AAMnC,OAAO,KAAK,EAEV,kBAAkB,EACnB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAU1E;;;;;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;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,yBAAyB,GAAI,SAAS,OAAO,KAAG,UAAU,EAoBtE,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,GAC9B,UAAU,kBAAkB,KAC3B,QAAQ,IAAI,iBAWd,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,mBAAmB,GAC9B,UAAU,kBAAkB,KAC3B,QAAQ,IAAI,iBAUd,CAAC;AAUF;;;GAGG;AACH,eAAO,MAAM,sBAAsB,GACjC,UAAU,kBAAkB,KAC3B,QAAQ,IAAI,oBAQd,CAAC;AA8FF;;;;GAIG;AACH,eAAO,MAAM,oCAAoC,GAC/C,YAAY,UAAU,KACrB,uBAAuB,EAsBzB,CAAC"}