@epam/ai-dial-quotations 1.1.0-dev.89 → 1.1.0-dev.91
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.
|
@@ -18,6 +18,21 @@ export interface CitationCardLabels {
|
|
|
18
18
|
/** Label for the "Download" button. */
|
|
19
19
|
download: string;
|
|
20
20
|
}
|
|
21
|
+
/** Color overrides for `CitationCard`, applied as CSS custom properties with app theme fallbacks. */
|
|
22
|
+
export interface CitationCardColors {
|
|
23
|
+
/** Card border color. Fallback: `--stroke-primary`. */
|
|
24
|
+
cardBorder?: string;
|
|
25
|
+
/** Card background color. Fallback: `--bg-layer-raised`. */
|
|
26
|
+
cardBackground?: string;
|
|
27
|
+
/** Quoted excerpt text color. Fallback: `--text-secondary`. */
|
|
28
|
+
quoteText?: string;
|
|
29
|
+
/** Annotation title text color. Fallback: `--text-primary`. */
|
|
30
|
+
titleText?: string;
|
|
31
|
+
/** Pagination switcher text color. Fallback: `--text-secondary`. */
|
|
32
|
+
switcherText?: string;
|
|
33
|
+
/** Source name text color. Fallback: `--text-primary`. */
|
|
34
|
+
sourceNameText?: string;
|
|
35
|
+
}
|
|
21
36
|
/** Typography (font utility class) overrides for `CitationCard`. */
|
|
22
37
|
export interface CitationCardTypography {
|
|
23
38
|
/** CSS class applied to the source name ellipsis. Defaults to `'dial-tiny-text'`. */
|
|
@@ -51,6 +66,8 @@ export interface CitationCardProps {
|
|
|
51
66
|
labels: CitationCardLabels;
|
|
52
67
|
/** Optional typography class overrides. */
|
|
53
68
|
typography?: CitationCardTypography;
|
|
69
|
+
/** Optional color overrides. */
|
|
70
|
+
colors?: CitationCardColors;
|
|
54
71
|
}
|
|
55
72
|
/** Popup card displaying a citation's title, quoted excerpt, and navigation controls. */
|
|
56
73
|
export declare const CitationCard: FC<CitationCardProps>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CitationCard.d.ts","sourceRoot":"","sources":["../../../src/components/CitationCard/CitationCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"CitationCard.d.ts","sourceRoot":"","sources":["../../../src/components/CitationCard/CitationCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAc5D,OAAO,EAAE,EAAE,EAAQ,SAAS,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAG/E,+CAA+C;AAC/C,MAAM,WAAW,kBAAkB;IACjC,4DAA4D;IAC5D,SAAS,EAAE,MAAM,CAAC;IAClB,2DAA2D;IAC3D,gBAAgB,EAAE,MAAM,CAAC;IACzB,uDAAuD;IACvD,YAAY,EAAE,MAAM,CAAC;IACrB,2GAA2G;IAC3G,kBAAkB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAC/D,sCAAsC;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,8CAA8C;IAC9C,aAAa,EAAE,MAAM,CAAC;IACtB,uCAAuC;IACvC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,qGAAqG;AACrG,MAAM,WAAW,kBAAkB;IACjC,uDAAuD;IACvD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4DAA4D;IAC5D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,+DAA+D;IAC/D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+DAA+D;IAC/D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oEAAoE;IACpE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0DAA0D;IAC1D,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,oEAAoE;AACpE,MAAM,WAAW,sBAAsB;IACrC,qFAAqF;IACrF,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,sFAAsF;IACtF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gFAAgF;IAChF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,yFAAyF;IACzF,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,8CAA8C;AAC9C,MAAM,WAAW,iBAAiB;IAChC,wEAAwE;IACxE,KAAK,EAAE,eAAe,CAAC;IACvB,kFAAkF;IAClF,WAAW,EAAE,MAAM,CAAC;IACpB,iFAAiF;IACjF,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC;;;;OAIG;IACH,SAAS,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC;IAC7C,2EAA2E;IAC3E,eAAe,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC;IAClD,wEAAwE;IACxE,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,4BAA4B;IAC5B,MAAM,EAAE,kBAAkB,CAAC;IAC3B,2CAA2C;IAC3C,UAAU,CAAC,EAAE,sBAAsB,CAAC;IACpC,gCAAgC;IAChC,MAAM,CAAC,EAAE,kBAAkB,CAAC;CAC7B;AAED,yFAAyF;AACzF,eAAO,MAAM,YAAY,EAAE,EAAE,CAAC,iBAAiB,CAmI9C,CAAC;;AAEF,wBAAkC"}
|
package/index.css
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
._card_18wh9_1{border-color:var(--cc-card-border,var(--stroke-primary,#6b7280));background:var(--cc-card-bg,var(--bg-layer-raised,#fcfcfc))}._quote_18wh9_6{color:var(--cc-quote-text,var(--text-secondary,#6b7280))}._title_18wh9_10{color:var(--cc-title-text,var(--text-primary,#161b2d))}._switcher_18wh9_14{color:var(--cc-switcher-text,var(--text-secondary,#6b7280))}._sourceName_18wh9_18{color:var(--cc-source-name-text,var(--text-primary,#161b2d))}
|
|
2
|
+
/*$vite$:1*/
|
package/index.js
CHANGED
|
@@ -1,129 +1,142 @@
|
|
|
1
|
-
import { MIMEType as e, MarkdownRenderer as t,
|
|
2
|
-
import { DialEllipsisTooltip as
|
|
3
|
-
import { IconChevronLeft as
|
|
4
|
-
import { createContext as
|
|
5
|
-
import { jsx as
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
1
|
+
import { MIMEType as e, MarkdownRenderer as t, buildCssVars as n, mergeClasses as r } from "@epam/ai-dial-chat-shared";
|
|
2
|
+
import { DialEllipsisTooltip as i, DialTooltip as a, ElementSize as o, GhostIconButton as s, NeutralButton as c, PrimaryButton as l } from "@epam/ai-dial-ui-kit";
|
|
3
|
+
import { IconChevronLeft as u, IconChevronRight as d } from "@tabler/icons-react";
|
|
4
|
+
import { createContext as f, memo as p, useCallback as m, useContext as h, useMemo as g, useState as _ } from "react";
|
|
5
|
+
import { jsx as v, jsxs as y } from "react/jsx-runtime";
|
|
6
|
+
var b = {
|
|
7
|
+
card: "_card_18wh9_1",
|
|
8
|
+
quote: "_quote_18wh9_6",
|
|
9
|
+
title: "_title_18wh9_10",
|
|
10
|
+
switcher: "_switcher_18wh9_14",
|
|
11
|
+
sourceName: "_sourceName_18wh9_18"
|
|
12
|
+
}, x = ({ group: a, activeIndex: c, onIndexChange: f, onPreview: p, onOpenInBrowser: m, headerIcon: h, labels: g, typography: _, colors: x }) => {
|
|
13
|
+
let S = a.annotations.length, C = a.annotations[c] ?? a.primaryAnnotation, w = S > 1, T = a.annotations.some((e) => e.body?.title), E = a.primaryAnnotation.body?.source?.attachment?.type, D = p == null || E === e.HTML || E === e.XHTML, O = _?.sourceNameClassName ?? "dial-tiny-text", k = _?.titleClassName ?? "dial-body-semi-text", A = _?.quoteClassName ?? "dial-small-text", j = _?.switcherClassName ?? "dial-tiny-text", M = n({
|
|
14
|
+
"--cc-card-border": x?.cardBorder,
|
|
15
|
+
"--cc-card-bg": x?.cardBackground,
|
|
16
|
+
"--cc-quote-text": x?.quoteText,
|
|
17
|
+
"--cc-title-text": x?.titleText,
|
|
18
|
+
"--cc-switcher-text": x?.switcherText,
|
|
19
|
+
"--cc-source-name-text": x?.sourceNameText
|
|
20
|
+
});
|
|
21
|
+
return /* @__PURE__ */ y("div", {
|
|
10
22
|
role: "dialog",
|
|
11
23
|
"aria-modal": "true",
|
|
12
|
-
"aria-label":
|
|
13
|
-
|
|
24
|
+
"aria-label": g.ariaLabel,
|
|
25
|
+
style: M,
|
|
26
|
+
className: r("flex w-[400px] flex-col gap-3 rounded-lg border p-4 shadow-lg", b.card),
|
|
14
27
|
children: [
|
|
15
|
-
/* @__PURE__ */
|
|
28
|
+
/* @__PURE__ */ y("div", {
|
|
16
29
|
className: "flex items-center justify-between gap-2",
|
|
17
|
-
children: [/* @__PURE__ */
|
|
30
|
+
children: [/* @__PURE__ */ y("div", {
|
|
18
31
|
className: "flex min-w-0 items-center gap-1",
|
|
19
|
-
children: [
|
|
20
|
-
text:
|
|
21
|
-
className:
|
|
32
|
+
children: [h, /* @__PURE__ */ v(i, {
|
|
33
|
+
text: a.sourceName,
|
|
34
|
+
className: r(O, "min-w-0", b.sourceName)
|
|
22
35
|
})]
|
|
23
|
-
}),
|
|
36
|
+
}), w && /* @__PURE__ */ y("div", {
|
|
24
37
|
className: "flex shrink-0 items-center gap-1",
|
|
25
38
|
children: [
|
|
26
|
-
/* @__PURE__ */
|
|
27
|
-
icon: /* @__PURE__ */
|
|
39
|
+
/* @__PURE__ */ v(s, {
|
|
40
|
+
icon: /* @__PURE__ */ v(u, {
|
|
28
41
|
size: 14,
|
|
29
42
|
className: "rtl:scale-x-[-1]"
|
|
30
43
|
}),
|
|
31
|
-
size:
|
|
32
|
-
"aria-label":
|
|
33
|
-
onClick: () =>
|
|
44
|
+
size: o.Small,
|
|
45
|
+
"aria-label": g.previousCitation,
|
|
46
|
+
onClick: () => f((c - 1 + S) % S)
|
|
34
47
|
}),
|
|
35
|
-
/* @__PURE__ */
|
|
36
|
-
className:
|
|
37
|
-
children:
|
|
48
|
+
/* @__PURE__ */ v("span", {
|
|
49
|
+
className: r(j, b.switcher),
|
|
50
|
+
children: g.formatSwitcherText(c + 1, S)
|
|
38
51
|
}),
|
|
39
|
-
/* @__PURE__ */
|
|
40
|
-
icon: /* @__PURE__ */
|
|
52
|
+
/* @__PURE__ */ v(s, {
|
|
53
|
+
icon: /* @__PURE__ */ v(d, {
|
|
41
54
|
size: 14,
|
|
42
55
|
className: "rtl:scale-x-[-1]"
|
|
43
56
|
}),
|
|
44
|
-
size:
|
|
45
|
-
"aria-label":
|
|
46
|
-
onClick: () =>
|
|
57
|
+
size: o.Small,
|
|
58
|
+
"aria-label": g.nextCitation,
|
|
59
|
+
onClick: () => f((c + 1) % S)
|
|
47
60
|
})
|
|
48
61
|
]
|
|
49
62
|
})]
|
|
50
63
|
}),
|
|
51
|
-
(
|
|
64
|
+
(C.body?.title || C.body?.quote || w) && /* @__PURE__ */ y("div", {
|
|
52
65
|
className: "flex flex-col gap-3",
|
|
53
|
-
children: [(
|
|
54
|
-
className:
|
|
55
|
-
children:
|
|
56
|
-
}), (
|
|
57
|
-
className:
|
|
58
|
-
children:
|
|
59
|
-
content:
|
|
60
|
-
classNames: { p:
|
|
66
|
+
children: [(C.body?.title || w && T) && /* @__PURE__ */ v("p", {
|
|
67
|
+
className: r(k, b.title, w && T && "min-h-[1lh]"),
|
|
68
|
+
children: C.body?.title
|
|
69
|
+
}), (C.body?.quote || w) && /* @__PURE__ */ v("div", {
|
|
70
|
+
className: r(w && "min-h-[3lh]"),
|
|
71
|
+
children: C.body?.quote && /* @__PURE__ */ v(t, {
|
|
72
|
+
content: C.body.quote,
|
|
73
|
+
classNames: { p: r(A, "line-clamp-6", b.quote) }
|
|
61
74
|
})
|
|
62
75
|
})]
|
|
63
76
|
}),
|
|
64
|
-
/* @__PURE__ */
|
|
77
|
+
/* @__PURE__ */ y("div", {
|
|
65
78
|
className: "flex justify-start gap-2",
|
|
66
|
-
children: [
|
|
67
|
-
label:
|
|
68
|
-
size:
|
|
69
|
-
onClick: () =>
|
|
70
|
-
}), /* @__PURE__ */
|
|
71
|
-
label:
|
|
72
|
-
size:
|
|
73
|
-
onClick: () =>
|
|
79
|
+
children: [p && /* @__PURE__ */ v(l, {
|
|
80
|
+
label: g.preview,
|
|
81
|
+
size: o.Small,
|
|
82
|
+
onClick: () => p(C)
|
|
83
|
+
}), /* @__PURE__ */ v(l, {
|
|
84
|
+
label: D ? g.openInBrowser : g.download,
|
|
85
|
+
size: o.Small,
|
|
86
|
+
onClick: () => m(C)
|
|
74
87
|
})]
|
|
75
88
|
})
|
|
76
89
|
]
|
|
77
90
|
});
|
|
78
91
|
};
|
|
79
|
-
|
|
92
|
+
p(x);
|
|
80
93
|
//#endregion
|
|
81
94
|
//#region src/components/CitationMarker/CitationMarker.tsx
|
|
82
|
-
var
|
|
83
|
-
let i = /* @__PURE__ */
|
|
95
|
+
var S = ({ annotationCount: e, onOpen: t, icon: n, labels: r }) => {
|
|
96
|
+
let i = /* @__PURE__ */ y("span", {
|
|
84
97
|
className: "flex items-center gap-1",
|
|
85
|
-
children: [n, /* @__PURE__ */
|
|
98
|
+
children: [n, /* @__PURE__ */ v("span", {
|
|
86
99
|
className: "dial-caption-text",
|
|
87
100
|
children: e > 1 ? r.labelWithOverflow : r.label
|
|
88
101
|
})]
|
|
89
102
|
});
|
|
90
|
-
return /* @__PURE__ */
|
|
91
|
-
size:
|
|
103
|
+
return /* @__PURE__ */ v(c, {
|
|
104
|
+
size: o.Small,
|
|
92
105
|
label: i,
|
|
93
106
|
"aria-label": r.ariaLabel,
|
|
94
107
|
onClick: t
|
|
95
108
|
});
|
|
96
109
|
};
|
|
97
|
-
|
|
110
|
+
p(S);
|
|
98
111
|
//#endregion
|
|
99
112
|
//#region src/context/CitationCardContext.tsx
|
|
100
|
-
var
|
|
101
|
-
let e =
|
|
113
|
+
var C = f(null), w = C.Provider, T = () => {
|
|
114
|
+
let e = h(C);
|
|
102
115
|
if (e == null) throw Error("useCitationCardContext must be used within a CitationCardProvider");
|
|
103
116
|
return e;
|
|
104
|
-
},
|
|
105
|
-
let l =
|
|
106
|
-
return /* @__PURE__ */
|
|
117
|
+
}, E = ({ group: e, onPreview: t, onOpenInBrowser: n, icon: r, headerIcon: i, cardLabels: o, markerLabels: s, cardTypography: c }) => {
|
|
118
|
+
let l = T(), u = l.isOpen(e.sourceUrl), d = l.getActiveIndex(e.sourceUrl);
|
|
119
|
+
return /* @__PURE__ */ v(a, {
|
|
107
120
|
open: u,
|
|
108
|
-
onOpenChange:
|
|
121
|
+
onOpenChange: m((e) => {
|
|
109
122
|
e || l.closePopup();
|
|
110
123
|
}, [l]),
|
|
111
124
|
placement: "bottom-end",
|
|
112
125
|
triggerClassName: "ms-1 inline-flex align-middle",
|
|
113
126
|
contentClassName: "!p-0 !bg-transparent !border-0 !shadow-none !max-w-none !rounded-none",
|
|
114
|
-
tooltip: /* @__PURE__ */
|
|
127
|
+
tooltip: /* @__PURE__ */ v(x, {
|
|
115
128
|
group: e,
|
|
116
129
|
activeIndex: d,
|
|
117
130
|
onIndexChange: (t) => l.setActiveIndex(e.sourceUrl, t),
|
|
118
|
-
onPreview:
|
|
131
|
+
onPreview: g(() => t ? (e) => {
|
|
119
132
|
t(e), l.closePopup();
|
|
120
133
|
} : void 0, [t, l]),
|
|
121
134
|
onOpenInBrowser: n,
|
|
122
|
-
headerIcon:
|
|
135
|
+
headerIcon: i,
|
|
123
136
|
labels: o,
|
|
124
137
|
typography: c
|
|
125
138
|
}),
|
|
126
|
-
children: /* @__PURE__ */
|
|
139
|
+
children: /* @__PURE__ */ v(S, {
|
|
127
140
|
sourceName: e.sourceName,
|
|
128
141
|
annotationCount: e.annotations.length,
|
|
129
142
|
onOpen: () => l.openPopup(e.sourceUrl),
|
|
@@ -132,16 +145,16 @@ var x = d(null), S = x.Provider, C = () => {
|
|
|
132
145
|
})
|
|
133
146
|
});
|
|
134
147
|
};
|
|
135
|
-
|
|
148
|
+
p(E);
|
|
136
149
|
//#endregion
|
|
137
150
|
//#region src/utils/annotation.ts
|
|
138
|
-
var
|
|
151
|
+
var D = {
|
|
139
152
|
backgroundColor: "transparent",
|
|
140
153
|
borderColor: "#124ACE",
|
|
141
154
|
borderWidth: "2px",
|
|
142
155
|
opacity: .5,
|
|
143
156
|
hoverOpacity: .5
|
|
144
|
-
},
|
|
157
|
+
}, O = (e) => e.flatMap((e, t) => {
|
|
145
158
|
let n = e.body?.selector;
|
|
146
159
|
if (n == null) return [];
|
|
147
160
|
let r = (Array.isArray(n) ? n : [n]).flatMap((e) => {
|
|
@@ -158,38 +171,38 @@ var T = {
|
|
|
158
171
|
return r.length === 0 ? [] : [{
|
|
159
172
|
id: String(e.index ?? t),
|
|
160
173
|
bboxes: r,
|
|
161
|
-
style:
|
|
174
|
+
style: D
|
|
162
175
|
}];
|
|
163
|
-
}),
|
|
176
|
+
}), k = (e, t) => String(e.index ?? t), A = (e) => typeof e == "number" ? e : null, j = (e) => {
|
|
164
177
|
if (typeof e != "object" || !e) return null;
|
|
165
178
|
let t = e;
|
|
166
179
|
if (t.type !== "pdf_region") return null;
|
|
167
180
|
let n = t.bbox;
|
|
168
181
|
if (typeof n != "object" || !n) return null;
|
|
169
|
-
let r = n, i =
|
|
182
|
+
let r = n, i = A(r.left), a = A(r.top), o = A(r.width), s = A(r.height);
|
|
170
183
|
return i === null || a === null || o === null || s === null ? null : {
|
|
171
184
|
type: "pdf_bbox",
|
|
172
|
-
page:
|
|
185
|
+
page: A(t.page) ?? 1,
|
|
173
186
|
x1: i,
|
|
174
187
|
y1: a,
|
|
175
188
|
x2: i + o,
|
|
176
189
|
y2: a + s
|
|
177
190
|
};
|
|
178
|
-
},
|
|
191
|
+
}, M = (t, n) => t.flatMap((t) => {
|
|
179
192
|
if (typeof t != "object" || !t) return [];
|
|
180
193
|
let r = t, i = r.target;
|
|
181
194
|
if (typeof i != "object" || !i) return [];
|
|
182
195
|
let a = i, o = a.source;
|
|
183
196
|
if (typeof o != "object" || !o) return [];
|
|
184
|
-
let s =
|
|
197
|
+
let s = A(o.attachment_index);
|
|
185
198
|
if (s === null) return [];
|
|
186
199
|
let c = n.find((e) => e.index === s);
|
|
187
200
|
if (c?.url == null) return [];
|
|
188
|
-
let l =
|
|
201
|
+
let l = j(a.selector);
|
|
189
202
|
if (l === null) return [];
|
|
190
203
|
let u = r.body, d = typeof u == "object" && u ? u : {}, f = typeof d.title == "string" ? d.title : void 0, p = typeof d.quote == "string" ? d.quote : void 0;
|
|
191
204
|
return [{
|
|
192
|
-
index:
|
|
205
|
+
index: A(r.index) ?? void 0,
|
|
193
206
|
body: {
|
|
194
207
|
title: f,
|
|
195
208
|
quote: p,
|
|
@@ -204,28 +217,28 @@ var T = {
|
|
|
204
217
|
selector: l
|
|
205
218
|
}
|
|
206
219
|
}];
|
|
207
|
-
}),
|
|
220
|
+
}), N = (e) => {
|
|
208
221
|
let t = e.custom_content?.annotations;
|
|
209
222
|
if (t?.length) return t.filter((e) => e != null && e.body?.source?.attachment?.url != null);
|
|
210
223
|
let n = e.custom_fields;
|
|
211
224
|
if (typeof n != "object" || !n) return [];
|
|
212
225
|
let r = n.annotations;
|
|
213
|
-
return !Array.isArray(r) || r.length === 0 ? [] :
|
|
214
|
-
},
|
|
226
|
+
return !Array.isArray(r) || r.length === 0 ? [] : M(r, e.custom_content?.attachments ?? []);
|
|
227
|
+
}, P = (e, t) => g(() => t ? [] : N(e), [t, e]), F = {
|
|
215
228
|
openGroupSourceUrl: null,
|
|
216
229
|
activeIndexByGroup: {}
|
|
217
|
-
},
|
|
218
|
-
let [e, t] =
|
|
230
|
+
}, I = () => {
|
|
231
|
+
let [e, t] = _(F), n = m((e) => {
|
|
219
232
|
t((t) => ({
|
|
220
233
|
...t,
|
|
221
234
|
openGroupSourceUrl: e
|
|
222
235
|
}));
|
|
223
|
-
}, []), r =
|
|
236
|
+
}, []), r = m(() => {
|
|
224
237
|
t((e) => ({
|
|
225
238
|
...e,
|
|
226
239
|
openGroupSourceUrl: null
|
|
227
240
|
}));
|
|
228
|
-
}, []), i =
|
|
241
|
+
}, []), i = m((e, n) => {
|
|
229
242
|
t((t) => ({
|
|
230
243
|
...t,
|
|
231
244
|
activeIndexByGroup: {
|
|
@@ -234,7 +247,7 @@ var T = {
|
|
|
234
247
|
}
|
|
235
248
|
}));
|
|
236
249
|
}, []);
|
|
237
|
-
return
|
|
250
|
+
return g(() => ({
|
|
238
251
|
openPopup: n,
|
|
239
252
|
closePopup: r,
|
|
240
253
|
setActiveIndex: i,
|
|
@@ -246,20 +259,20 @@ var T = {
|
|
|
246
259
|
i,
|
|
247
260
|
e
|
|
248
261
|
]);
|
|
249
|
-
},
|
|
262
|
+
}, L = (e) => {
|
|
250
263
|
try {
|
|
251
264
|
return decodeURIComponent(e);
|
|
252
265
|
} catch {
|
|
253
266
|
return e;
|
|
254
267
|
}
|
|
255
|
-
},
|
|
268
|
+
}, R = (e) => {
|
|
256
269
|
try {
|
|
257
270
|
let t = new URL(e);
|
|
258
|
-
return t.pathname.split("/").map((e) =>
|
|
271
|
+
return t.pathname.split("/").map((e) => L(e)).filter(Boolean).at(-1) ?? t.hostname;
|
|
259
272
|
} catch {
|
|
260
|
-
return e.split("/").map((e) =>
|
|
273
|
+
return e.split("/").map((e) => L(e)).filter(Boolean).at(-1) ?? e;
|
|
261
274
|
}
|
|
262
|
-
},
|
|
275
|
+
}, z = (e) => {
|
|
263
276
|
let t = /* @__PURE__ */ new Map();
|
|
264
277
|
for (let n of e) {
|
|
265
278
|
let e = n.body?.source?.attachment?.url;
|
|
@@ -267,13 +280,13 @@ var T = {
|
|
|
267
280
|
let r = t.get(e);
|
|
268
281
|
r ? r.annotations.push(n) : t.set(e, {
|
|
269
282
|
sourceUrl: e,
|
|
270
|
-
sourceName: n.body?.source?.attachment?.title ??
|
|
283
|
+
sourceName: n.body?.source?.attachment?.title ?? R(e),
|
|
271
284
|
annotations: [n],
|
|
272
285
|
primaryAnnotation: n
|
|
273
286
|
});
|
|
274
287
|
}
|
|
275
288
|
return Array.from(t.values());
|
|
276
|
-
},
|
|
289
|
+
}, B = /⟦C(\d+)⟧/g, V = (e, t) => {
|
|
277
290
|
let n = t.map((t, n) => {
|
|
278
291
|
let r = t.primaryAnnotation.target?.selector, i = typeof r == "object" && r && "type" in r && r.type === "text_character_range" ? r.end : e.length;
|
|
279
292
|
return {
|
|
@@ -283,9 +296,9 @@ var T = {
|
|
|
283
296
|
}).sort((e, t) => t.pos - e.pos), r = e;
|
|
284
297
|
for (let { idx: e, pos: t } of n) r = `${r.slice(0, t)}⟦C${e}⟧${r.slice(t)}`;
|
|
285
298
|
return r;
|
|
286
|
-
},
|
|
299
|
+
}, H = (e, t) => {
|
|
287
300
|
if (typeof e == "string") {
|
|
288
|
-
let n = e.split(
|
|
301
|
+
let n = e.split(B);
|
|
289
302
|
if (n.length === 1) return e;
|
|
290
303
|
let r = [];
|
|
291
304
|
return n.forEach((e, n) => {
|
|
@@ -293,17 +306,17 @@ var T = {
|
|
|
293
306
|
}), r;
|
|
294
307
|
}
|
|
295
308
|
return Array.isArray(e) ? e.flatMap((e) => {
|
|
296
|
-
let n =
|
|
309
|
+
let n = H(e, t);
|
|
297
310
|
return Array.isArray(n) ? n : [n];
|
|
298
311
|
}) : e;
|
|
299
|
-
},
|
|
300
|
-
let t =
|
|
312
|
+
}, U = (e) => e.url == null && e.reference_url != null, W = /^(.*\.pdf)(?:#page=(\d+))?$/i, G = (e) => {
|
|
313
|
+
let t = W.exec(e);
|
|
301
314
|
return t ? {
|
|
302
315
|
baseUrl: t[1],
|
|
303
316
|
page: t[2] == null ? null : Number(t[2])
|
|
304
317
|
} : null;
|
|
305
|
-
},
|
|
306
|
-
let n = t.reference_url, r =
|
|
318
|
+
}, K = (t) => z((t ?? []).filter(U).map((t) => {
|
|
319
|
+
let n = t.reference_url, r = G(n) != null;
|
|
307
320
|
return { body: {
|
|
308
321
|
quote: t.data,
|
|
309
322
|
source: {
|
|
@@ -317,4 +330,4 @@ var T = {
|
|
|
317
330
|
} };
|
|
318
331
|
}));
|
|
319
332
|
//#endregion
|
|
320
|
-
export {
|
|
333
|
+
export { x as CitationCard, w as CitationCardProvider, E as CitationDropdown, S as CitationMarker, k as annotationHighlightId, O as annotationsToPdfHighlights, K as getReferenceAttachmentGroups, z as groupAnnotationsBySource, V as injectCitationSentinels, U as isReferenceOnlyAttachment, M as normalizeRawAnnotations, G as parsePdfPageReference, H as replaceSentinelsInChildren, N as resolveMessageAnnotations, P as useAnnotations, I as useCitationCard, T as useCitationCardContext };
|
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.
|
|
4
|
+
"version": "1.1.0-dev.91",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"main": "./index.js",
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
"peerDependencies": {
|
|
19
19
|
"react": "^19.0.0",
|
|
20
20
|
"@tabler/icons-react": "^3.0.0",
|
|
21
|
-
"@epam/ai-dial-chat-shared": "1.1.0-dev.
|
|
21
|
+
"@epam/ai-dial-chat-shared": "1.1.0-dev.91",
|
|
22
22
|
"@epam/ai-dial-ui-kit": "^0.13.0-dev.26",
|
|
23
23
|
"@epam/pdf-highlighter-kit": ">=0.0.14"
|
|
24
24
|
},
|