@epam/ai-dial-skills 1.2.0-dev.181 → 1.2.0-dev.185
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/hooks/useSkillSelectorOverlay/useSkillSelectorOverlay.d.ts +1 -1
- package/hooks/useSkillSelectorOverlay/useSkillSelectorOverlay.d.ts.map +1 -1
- package/index.js +285 -302
- package/models/skill-selector-overlay.d.ts +24 -31
- package/models/skill-selector-overlay.d.ts.map +1 -1
- package/package.json +4 -4
|
@@ -7,5 +7,5 @@ import { UseSkillSelectorOverlayOptions, UseSkillSelectorOverlayResult } from '.
|
|
|
7
7
|
* listing data, favorites state, labels, the deployment-support signal, and
|
|
8
8
|
* the modal/panel components.
|
|
9
9
|
*/
|
|
10
|
-
export declare const useSkillSelectorOverlay: ({
|
|
10
|
+
export declare const useSkillSelectorOverlay: ({ isSkillsSupported, skills, sharedWithMe, publicSkills, favoriteIds, onToggleFavorite, labels, historyChipLabelClassName, activeMentionDetailsTrigger, renderCatalogContent, detailsPanelComponent: DetailsPanelComponent, }: UseSkillSelectorOverlayOptions) => UseSkillSelectorOverlayResult;
|
|
11
11
|
//# sourceMappingURL=useSkillSelectorOverlay.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSkillSelectorOverlay.d.ts","sourceRoot":"","sources":["../../../src/hooks/useSkillSelectorOverlay/useSkillSelectorOverlay.tsx"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EACV,8BAA8B,EAC9B,6BAA6B,EAC9B,MAAM,qCAAqC,CAAC;AAK7C;;;;;;;GAOG;AACH,eAAO,MAAM,uBAAuB,GAAI,
|
|
1
|
+
{"version":3,"file":"useSkillSelectorOverlay.d.ts","sourceRoot":"","sources":["../../../src/hooks/useSkillSelectorOverlay/useSkillSelectorOverlay.tsx"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EACV,8BAA8B,EAC9B,6BAA6B,EAC9B,MAAM,qCAAqC,CAAC;AAK7C;;;;;;;GAOG;AACH,eAAO,MAAM,uBAAuB,GAAI,+NAYrC,8BAA8B,KAAG,6BA8XnC,CAAC"}
|
package/index.js
CHANGED
|
@@ -1,26 +1,26 @@
|
|
|
1
1
|
import { DeploymentIcon as e, buildCssVars as t, isSkillSelectionUnsupported as n, mergeClasses as r } from "@epam/ai-dial-chat-shared";
|
|
2
2
|
import { BASE_ICON_SIZE as i, Button as a, ButtonAppearance as o, ButtonVariant as s, DIAL_ICON_SIZE as c, DIAL_KIT_ICON_STROKE as l, Dropdown as u, FileDropzone as d, GhostButton as f, Highlight as p, Input as m, InteractiveTooltip as h, Popup as g, PopupSize as _, Search as v, ToggleIconButton as y, TooltipPlacement as b } from "@epam/ai-dial-ui-kit";
|
|
3
3
|
import { Suspense as x, useCallback as S, useEffect as C, useId as ee, useLayoutEffect as w, useMemo as T, useRef as E, useState as D } from "react";
|
|
4
|
-
import { IconBlocks as O, IconChevronDown as
|
|
5
|
-
import { Fragment as
|
|
6
|
-
import { DialFileNodeType as
|
|
7
|
-
import { CatalogContentNodeType as
|
|
4
|
+
import { IconBlocks as O, IconChevronDown as k, IconEye as te, IconStarFilled as A, IconX as j } from "@tabler/icons-react";
|
|
5
|
+
import { Fragment as M, jsx as N, jsxs as P } from "react/jsx-runtime";
|
|
6
|
+
import { DialFileNodeType as F, DialFoldersTree as I } from "@epam/ai-dial-react-file-manager";
|
|
7
|
+
import { CatalogContentNodeType as L, DetailsPanel as R } from "@epam/ai-dial-catalog";
|
|
8
8
|
//#region src/constants/public-class-names.ts
|
|
9
|
-
var
|
|
9
|
+
var z = {
|
|
10
10
|
selectorField: "dial-skills-selector-field",
|
|
11
11
|
favoritesPanel: "dial-skills-favorites-panel",
|
|
12
12
|
chip: "dial-skills-chip"
|
|
13
|
-
},
|
|
13
|
+
}, B = ({ description: e, unsupportedMessage: t, viewDetailsLabel: n = "View details", onViewDetails: r, viewDetailsTabIndex: i }) => t == null ? /* @__PURE__ */ P("div", {
|
|
14
14
|
className: "flex flex-col gap-3",
|
|
15
|
-
children: [e != null && e !== "" && /* @__PURE__ */
|
|
15
|
+
children: [e != null && e !== "" && /* @__PURE__ */ N("p", {
|
|
16
16
|
className: "text-start",
|
|
17
17
|
children: e
|
|
18
|
-
}), /* @__PURE__ */
|
|
18
|
+
}), /* @__PURE__ */ N(a, {
|
|
19
19
|
variant: s.Primary,
|
|
20
20
|
appearance: o.Link,
|
|
21
21
|
className: "h-[24px] self-start",
|
|
22
22
|
label: n,
|
|
23
|
-
iconBefore: /* @__PURE__ */
|
|
23
|
+
iconBefore: /* @__PURE__ */ N(te, {
|
|
24
24
|
size: c.SM,
|
|
25
25
|
stroke: l,
|
|
26
26
|
"aria-hidden": !0
|
|
@@ -28,10 +28,10 @@ var L = {
|
|
|
28
28
|
onClick: r,
|
|
29
29
|
tabIndex: i
|
|
30
30
|
})]
|
|
31
|
-
}) : /* @__PURE__ */
|
|
31
|
+
}) : /* @__PURE__ */ N("p", {
|
|
32
32
|
className: "text-start",
|
|
33
33
|
children: t
|
|
34
|
-
}),
|
|
34
|
+
}), V = ({ name: e, path: t, description: n, isUnsupported: i = !1, labelClassName: a = "dial-body-paragraph-text text-accent", unsupportedLabelClassName: o = "text-error", unsupportedClassName: s = "bg-error", detailsTrigger: c = "hover", onViewDetails: l, labels: u = {} }) => {
|
|
35
35
|
let { viewDetailsLabel: d = "View details", unsupportedTooltipLabel: f = "Selected model does not support skills. Remove the skill or select different model to proceed." } = u, [p, m] = D(0), [g, _] = D(!1), v = c === "click", y = () => {
|
|
36
36
|
_(!1), m((e) => e + 1), l(t);
|
|
37
37
|
}, x = (e) => {
|
|
@@ -39,29 +39,29 @@ var L = {
|
|
|
39
39
|
}, S = E(null), [C, ee] = D(null);
|
|
40
40
|
return w(() => {
|
|
41
41
|
ee(S.current?.getBoundingClientRect().width ?? null);
|
|
42
|
-
}, [a]), /* @__PURE__ */
|
|
42
|
+
}, [a]), /* @__PURE__ */ N(h, {
|
|
43
43
|
asChild: !0,
|
|
44
44
|
placement: b.Top,
|
|
45
45
|
open: v ? g : void 0,
|
|
46
46
|
onOpenChange: v ? _ : void 0,
|
|
47
47
|
contentClassName: "max-w-[550px]",
|
|
48
|
-
content: i ? /* @__PURE__ */
|
|
48
|
+
content: i ? /* @__PURE__ */ N(B, { unsupportedMessage: f }) : /* @__PURE__ */ N(B, {
|
|
49
49
|
description: n,
|
|
50
50
|
viewDetailsLabel: d,
|
|
51
51
|
onViewDetails: y
|
|
52
52
|
}),
|
|
53
|
-
children: /* @__PURE__ */
|
|
53
|
+
children: /* @__PURE__ */ P("span", {
|
|
54
54
|
tabIndex: 0,
|
|
55
|
-
className: r("relative -me-1 -ms-1 inline-block cursor-pointer select-text rounded-full pe-1 ps-1", i ? s : "hover:bg-info focus-visible:bg-info active:bg-info", i ? r(a, o) : a,
|
|
55
|
+
className: r("relative -me-1 -ms-1 inline-block cursor-pointer select-text rounded-full pe-1 ps-1", i ? s : "hover:bg-info focus-visible:bg-info active:bg-info", i ? r(a, o) : a, z.chip),
|
|
56
56
|
"aria-label": `/${e}`,
|
|
57
57
|
onClick: v ? () => _(!0) : void 0,
|
|
58
58
|
onKeyDown: x,
|
|
59
|
-
children: [/* @__PURE__ */
|
|
59
|
+
children: [/* @__PURE__ */ N("span", {
|
|
60
60
|
ref: S,
|
|
61
61
|
"aria-hidden": !0,
|
|
62
62
|
className: "inset-inline-start-0 pointer-events-none absolute top-0 select-none",
|
|
63
63
|
children: "/"
|
|
64
|
-
}), /* @__PURE__ */
|
|
64
|
+
}), /* @__PURE__ */ N("span", {
|
|
65
65
|
"aria-hidden": !0,
|
|
66
66
|
className: "select-none",
|
|
67
67
|
style: { paddingInlineStart: C ?? void 0 },
|
|
@@ -69,7 +69,7 @@ var L = {
|
|
|
69
69
|
})]
|
|
70
70
|
})
|
|
71
71
|
}, p);
|
|
72
|
-
},
|
|
72
|
+
}, H = {
|
|
73
73
|
row: "_row_1v431_1",
|
|
74
74
|
header: "_header_1v431_8",
|
|
75
75
|
emptyHint: "_emptyHint_1v431_12",
|
|
@@ -80,105 +80,105 @@ var L = {
|
|
|
80
80
|
rowLeaving: "_rowLeaving_1v431_32",
|
|
81
81
|
rowFadeOut: "_rowFadeOut_1v431_1",
|
|
82
82
|
listContent: "_listContent_1v431_60"
|
|
83
|
-
},
|
|
84
|
-
let { myCollectionLabel: O = "My Collection", emptyHintLabel:
|
|
83
|
+
}, U = "px-3 pb-0.5 pt-2", W = 180, G = 288, K = ({ favorites: n, onSelect: i, onToggleFavorite: a, onBrowse: o, onViewDetails: s, className: l, rowClassName: u, searchQuery: d, listboxId: m, activeOptionId: g, isMenu: _ = !1, labels: v = {}, colors: b, nameClassName: x = "dial-small-text", headerClassName: S = "dial-tiny-lead-semi-text", emptyHintClassName: T = "dial-small-text" }) => {
|
|
84
|
+
let { myCollectionLabel: O = "My Collection", emptyHintLabel: k = "Star a skill to pin it here", browseLabel: te = "Browse", removeFromFavoritesLabel: j = "Remove from favorites", viewDetailsLabel: M = "View details", noMatchingSkillsLabel: F = "No matching skills" } = v, I = t({
|
|
85
85
|
"--fs-row-hover-bg": b?.rowHoverBackground,
|
|
86
86
|
"--fs-header-text": b?.headerText,
|
|
87
87
|
"--fs-empty-hint-text": b?.emptyHintText,
|
|
88
88
|
"--fs-star-color": b?.starColor,
|
|
89
89
|
"--fs-footer-border": b?.footerBorder
|
|
90
|
-
}), [
|
|
90
|
+
}), [L, R] = D(/* @__PURE__ */ new Set()), V = E(/* @__PURE__ */ new Map());
|
|
91
91
|
C(() => {
|
|
92
|
-
let e =
|
|
92
|
+
let e = V.current;
|
|
93
93
|
return () => {
|
|
94
94
|
e.forEach((e) => clearTimeout(e)), e.clear();
|
|
95
95
|
};
|
|
96
96
|
}, []);
|
|
97
|
-
let
|
|
98
|
-
|
|
99
|
-
let
|
|
97
|
+
let K = m != null, ne = _ && !K, q = K || ne ? "none" : void 0, J = "button";
|
|
98
|
+
K ? J = "option" : ne && (J = "menuitem");
|
|
99
|
+
let Y = ee(), X = d != null, Z = d?.toLowerCase() ?? "", Q = X ? n.filter((e) => e.name.toLowerCase().includes(Z)) : n, $ = E(null), [re, ie] = D();
|
|
100
100
|
w(() => {
|
|
101
|
-
|
|
101
|
+
$.current && ie(Math.min($.current.scrollHeight, G));
|
|
102
102
|
}, [n, d]);
|
|
103
|
-
let
|
|
103
|
+
let ae = (e, t) => {
|
|
104
104
|
e.target === e.currentTarget && (e.key === "Enter" || e.key === " ") && (e.preventDefault(), i(t));
|
|
105
|
-
},
|
|
106
|
-
|
|
105
|
+
}, oe = (e) => {
|
|
106
|
+
R((t) => new Set(t).add(e));
|
|
107
107
|
let t = setTimeout(() => {
|
|
108
|
-
a?.(e),
|
|
108
|
+
a?.(e), R((t) => {
|
|
109
109
|
let n = new Set(t);
|
|
110
110
|
return n.delete(e), n;
|
|
111
|
-
}),
|
|
112
|
-
},
|
|
113
|
-
|
|
111
|
+
}), V.current.delete(e);
|
|
112
|
+
}, W);
|
|
113
|
+
V.current.set(e, t);
|
|
114
114
|
};
|
|
115
|
-
return /* @__PURE__ */
|
|
116
|
-
className: r("flex w-full flex-col desktop:w-[280px]", l,
|
|
117
|
-
style:
|
|
115
|
+
return /* @__PURE__ */ P("div", {
|
|
116
|
+
className: r("flex w-full flex-col desktop:w-[280px]", l, z.favoritesPanel),
|
|
117
|
+
style: I,
|
|
118
118
|
children: [
|
|
119
|
-
/* @__PURE__ */
|
|
120
|
-
id:
|
|
121
|
-
className: r(S,
|
|
119
|
+
/* @__PURE__ */ N("p", {
|
|
120
|
+
id: Y,
|
|
121
|
+
className: r(S, U, H.header),
|
|
122
122
|
children: O
|
|
123
123
|
}),
|
|
124
|
-
/* @__PURE__ */
|
|
125
|
-
className: r("max-h-72 min-h-0 flex-1 overflow-y-auto",
|
|
126
|
-
style: { maxHeight:
|
|
127
|
-
children: /* @__PURE__ */
|
|
128
|
-
ref:
|
|
129
|
-
children:
|
|
124
|
+
/* @__PURE__ */ N("div", {
|
|
125
|
+
className: r("max-h-72 min-h-0 flex-1 overflow-y-auto", H.listContent),
|
|
126
|
+
style: { maxHeight: re },
|
|
127
|
+
children: /* @__PURE__ */ N("div", {
|
|
128
|
+
ref: $,
|
|
129
|
+
children: Q.length > 0 ? /* @__PURE__ */ N("ul", {
|
|
130
130
|
id: m,
|
|
131
|
-
role:
|
|
132
|
-
"aria-labelledby":
|
|
131
|
+
role: K ? "listbox" : q,
|
|
132
|
+
"aria-labelledby": K ? Y : void 0,
|
|
133
133
|
className: "flex flex-col gap-1 px-1 pb-1",
|
|
134
|
-
children:
|
|
135
|
-
let n =
|
|
136
|
-
role:
|
|
134
|
+
children: Q.map((t) => {
|
|
135
|
+
let n = K ? `${m}-${encodeURIComponent(t.id)}` : void 0, o = K ? -1 : void 0, l = /* @__PURE__ */ P("div", {
|
|
136
|
+
role: J,
|
|
137
137
|
id: n,
|
|
138
|
-
"aria-selected":
|
|
138
|
+
"aria-selected": K ? n === g : void 0,
|
|
139
139
|
"aria-label": t.name,
|
|
140
140
|
tabIndex: 0,
|
|
141
|
-
className: r("flex cursor-pointer items-center gap-2 rounded-lg border border-transparent px-2 py-1.5 transition-colors",
|
|
141
|
+
className: r("flex cursor-pointer items-center gap-2 rounded-lg border border-transparent px-2 py-1.5 transition-colors", H.row, u),
|
|
142
142
|
onClick: () => i(t),
|
|
143
|
-
onKeyDown: (e) =>
|
|
143
|
+
onKeyDown: (e) => ae(e, t),
|
|
144
144
|
children: [
|
|
145
|
-
/* @__PURE__ */
|
|
145
|
+
/* @__PURE__ */ N(e, {
|
|
146
146
|
size: c.MD,
|
|
147
147
|
initialsName: t.name
|
|
148
148
|
}),
|
|
149
|
-
d == null ? /* @__PURE__ */
|
|
149
|
+
d == null ? /* @__PURE__ */ N("span", {
|
|
150
150
|
className: r(x, "min-w-0 flex-1 truncate text-start"),
|
|
151
151
|
children: t.name
|
|
152
|
-
}) : /* @__PURE__ */
|
|
152
|
+
}) : /* @__PURE__ */ N(p, {
|
|
153
153
|
text: t.name,
|
|
154
154
|
query: d,
|
|
155
155
|
maxLines: 1,
|
|
156
156
|
className: r(x, "min-w-0 flex-1 text-start")
|
|
157
157
|
}),
|
|
158
|
-
a && /* @__PURE__ */
|
|
159
|
-
icon: /* @__PURE__ */
|
|
158
|
+
a && /* @__PURE__ */ N(y, {
|
|
159
|
+
icon: /* @__PURE__ */ N(A, {
|
|
160
160
|
size: c.SM,
|
|
161
|
-
className:
|
|
161
|
+
className: H.star,
|
|
162
162
|
"aria-hidden": !0
|
|
163
163
|
}),
|
|
164
|
-
"aria-label":
|
|
164
|
+
"aria-label": j,
|
|
165
165
|
isSelected: !0,
|
|
166
166
|
tabIndex: o,
|
|
167
167
|
onClick: (e) => {
|
|
168
|
-
e.stopPropagation(),
|
|
168
|
+
e.stopPropagation(), oe(t.id);
|
|
169
169
|
}
|
|
170
170
|
})
|
|
171
171
|
]
|
|
172
172
|
});
|
|
173
|
-
return /* @__PURE__ */
|
|
174
|
-
role:
|
|
175
|
-
className:
|
|
176
|
-
children: s ? /* @__PURE__ */
|
|
173
|
+
return /* @__PURE__ */ N("li", {
|
|
174
|
+
role: q,
|
|
175
|
+
className: L.has(t.id) ? H.rowLeaving : H.rowEnter,
|
|
176
|
+
children: s ? /* @__PURE__ */ N(h, {
|
|
177
177
|
asChild: !0,
|
|
178
178
|
contentClassName: "max-w-[550px]",
|
|
179
|
-
content: /* @__PURE__ */
|
|
179
|
+
content: /* @__PURE__ */ N(B, {
|
|
180
180
|
description: t.description,
|
|
181
|
-
viewDetailsLabel:
|
|
181
|
+
viewDetailsLabel: M,
|
|
182
182
|
onViewDetails: () => s(t),
|
|
183
183
|
viewDetailsTabIndex: o
|
|
184
184
|
}),
|
|
@@ -186,43 +186,43 @@ var L = {
|
|
|
186
186
|
}) : l
|
|
187
187
|
}, t.id);
|
|
188
188
|
})
|
|
189
|
-
}) :
|
|
189
|
+
}) : X && Z !== "" ? /* @__PURE__ */ N("p", {
|
|
190
190
|
role: "status",
|
|
191
191
|
"aria-live": "polite",
|
|
192
|
-
className: r(T, "px-4 py-4 text-start",
|
|
193
|
-
children:
|
|
194
|
-
}) : /* @__PURE__ */
|
|
195
|
-
className: r(T, "px-4 py-4 text-start",
|
|
196
|
-
children:
|
|
192
|
+
className: r(T, "px-4 py-4 text-start", H.emptyHint),
|
|
193
|
+
children: F
|
|
194
|
+
}) : /* @__PURE__ */ N("p", {
|
|
195
|
+
className: r(T, "px-4 py-4 text-start", H.emptyHint),
|
|
196
|
+
children: k
|
|
197
197
|
})
|
|
198
198
|
})
|
|
199
199
|
}),
|
|
200
|
-
/* @__PURE__ */
|
|
201
|
-
className: r("border-t px-2 py-3",
|
|
202
|
-
children: /* @__PURE__ */
|
|
203
|
-
role:
|
|
204
|
-
label:
|
|
200
|
+
/* @__PURE__ */ N("div", {
|
|
201
|
+
className: r("border-t px-2 py-3", H.footer),
|
|
202
|
+
children: /* @__PURE__ */ N(f, {
|
|
203
|
+
role: ne ? "menuitem" : void 0,
|
|
204
|
+
label: te,
|
|
205
205
|
className: "w-full justify-center",
|
|
206
206
|
onClick: o
|
|
207
207
|
})
|
|
208
208
|
})
|
|
209
209
|
]
|
|
210
210
|
});
|
|
211
|
-
},
|
|
211
|
+
}, ne = ".zip,.md", q = ({ isOpen: e, errorText: t, accept: n = ne, labels: r, onClose: i, onFilesSelected: a, onFilesRejected: o }) => {
|
|
212
212
|
let { dialogTitle: s = "Upload skill", dropZoneLabel: c = "Drag and drop it or click here to upload", dropZoneMobileLabel: l = "Click here to upload", formatsLabel: u = "File formats .zip and SKILL.md", fileInputAriaLabel: f = "Upload a skill ZIP archive or a SKILL.md file", closeAriaLabel: p = "Close" } = r ?? {};
|
|
213
|
-
return /* @__PURE__ */
|
|
213
|
+
return /* @__PURE__ */ N(g, {
|
|
214
214
|
open: e,
|
|
215
215
|
size: _.Sm,
|
|
216
216
|
header: s,
|
|
217
217
|
closeAriaLabel: p,
|
|
218
218
|
onClose: i,
|
|
219
|
-
children: /* @__PURE__ */
|
|
219
|
+
children: /* @__PURE__ */ N("div", {
|
|
220
220
|
className: "px-6 py-4",
|
|
221
|
-
children: /* @__PURE__ */
|
|
222
|
-
label: /* @__PURE__ */ M
|
|
221
|
+
children: /* @__PURE__ */ N(d, {
|
|
222
|
+
label: /* @__PURE__ */ P(M, { children: [/* @__PURE__ */ N("span", {
|
|
223
223
|
className: "desktop:hidden",
|
|
224
224
|
children: l
|
|
225
|
-
}), /* @__PURE__ */
|
|
225
|
+
}), /* @__PURE__ */ N("span", {
|
|
226
226
|
className: "hidden desktop:inline",
|
|
227
227
|
children: c
|
|
228
228
|
})] }),
|
|
@@ -235,34 +235,34 @@ var L = {
|
|
|
235
235
|
})
|
|
236
236
|
})
|
|
237
237
|
});
|
|
238
|
-
},
|
|
238
|
+
}, J = ({ isOpen: e, onClose: t, onSelect: n, title: r, renderContent: i }) => /* @__PURE__ */ N(g, {
|
|
239
239
|
open: e,
|
|
240
240
|
header: r,
|
|
241
241
|
size: _.Lg,
|
|
242
242
|
className: "h-[min(90vh,860px)] !max-w-[min(95vw,1200px)] overflow-hidden",
|
|
243
243
|
onClose: t,
|
|
244
|
-
children: /* @__PURE__ */
|
|
244
|
+
children: /* @__PURE__ */ N("div", {
|
|
245
245
|
className: "h-[min(80vh,840px)] overflow-auto",
|
|
246
|
-
children: /* @__PURE__ */
|
|
246
|
+
children: /* @__PURE__ */ N(x, {
|
|
247
247
|
fallback: null,
|
|
248
248
|
children: e && i(n, t)
|
|
249
249
|
})
|
|
250
250
|
})
|
|
251
|
-
}),
|
|
251
|
+
}), Y = (e, t = null) => e.map((e) => e.type === L.Folder ? {
|
|
252
252
|
path: e.id,
|
|
253
253
|
name: e.name,
|
|
254
|
-
nodeType:
|
|
254
|
+
nodeType: F.FOLDER,
|
|
255
255
|
parentPath: t,
|
|
256
256
|
folderId: e.id,
|
|
257
|
-
items:
|
|
257
|
+
items: Y(e.items, e.id)
|
|
258
258
|
} : {
|
|
259
259
|
path: e.id,
|
|
260
260
|
name: e.name,
|
|
261
|
-
nodeType:
|
|
261
|
+
nodeType: F.ITEM,
|
|
262
262
|
parentPath: t,
|
|
263
263
|
folderId: t ?? ""
|
|
264
|
-
}),
|
|
265
|
-
items: T(() =>
|
|
264
|
+
}), X = ({ nodes: e, selectedFileId: t, expandedFolderIds: n, onToggleFolder: r, onSelectFile: i, onClose: a, ariaLabel: o }) => /* @__PURE__ */ N(I, {
|
|
265
|
+
items: T(() => Y(e), [e]),
|
|
266
266
|
showFiles: !0,
|
|
267
267
|
areHiddenFilesVisible: !0,
|
|
268
268
|
selectedPath: t,
|
|
@@ -272,15 +272,15 @@ var L = {
|
|
|
272
272
|
for (let t of n) e.has(t) || r(t);
|
|
273
273
|
},
|
|
274
274
|
onItemClick: (e) => {
|
|
275
|
-
e.nodeType ===
|
|
275
|
+
e.nodeType === F.ITEM && i(e.path);
|
|
276
276
|
},
|
|
277
277
|
ariaLabel: o,
|
|
278
278
|
autoFocus: !0,
|
|
279
279
|
onEscape: a
|
|
280
|
-
}),
|
|
280
|
+
}), Z = (e) => /* @__PURE__ */ N(R, {
|
|
281
281
|
...e,
|
|
282
|
-
renderContentFileTree: (e) => /* @__PURE__ */
|
|
283
|
-
}),
|
|
282
|
+
renderContentFileTree: (e) => /* @__PURE__ */ N(X, { ...e })
|
|
283
|
+
}), Q = (e) => e == null || /[\s/]/.test(e), $ = (e, t, n) => {
|
|
284
284
|
let r = [], i = 0;
|
|
285
285
|
return t.forEach((t, a) => {
|
|
286
286
|
let o = `/${n(t.url)}`, s = i;
|
|
@@ -288,7 +288,7 @@ var L = {
|
|
|
288
288
|
let t = e.indexOf(o, s);
|
|
289
289
|
if (t === -1) return;
|
|
290
290
|
let n = t + o.length;
|
|
291
|
-
if (
|
|
291
|
+
if (Q(e[n])) {
|
|
292
292
|
r.push({
|
|
293
293
|
skillIndex: a,
|
|
294
294
|
start: t,
|
|
@@ -299,7 +299,7 @@ var L = {
|
|
|
299
299
|
s = t + 1;
|
|
300
300
|
}
|
|
301
301
|
}), r;
|
|
302
|
-
},
|
|
302
|
+
}, re = (e, t) => {
|
|
303
303
|
let n = Math.min(e.length, t.length), r = 0;
|
|
304
304
|
for (; r < n && e[r] === t[r];) r += 1;
|
|
305
305
|
let i = n - r, a = 0;
|
|
@@ -309,13 +309,13 @@ var L = {
|
|
|
309
309
|
deletedLength: e.length - r - a,
|
|
310
310
|
insertedLength: t.length - r - a
|
|
311
311
|
};
|
|
312
|
-
},
|
|
312
|
+
}, ie = (e, t) => {
|
|
313
313
|
let n = t.start + t.deletedLength, r = t.insertedLength - t.deletedLength;
|
|
314
314
|
return e.reduce((e, i) => i.start + i.length <= t.start ? (e.push(i), e) : (i.start >= n && e.push({
|
|
315
315
|
...i,
|
|
316
316
|
start: i.start + r
|
|
317
317
|
}), e), []);
|
|
318
|
-
},
|
|
318
|
+
}, ae = (e, t, n, r, i) => {
|
|
319
319
|
let a = r.length + 1, o = a + +!!i, s = e.map((e) => e.start >= t ? {
|
|
320
320
|
...e,
|
|
321
321
|
start: e.start + o
|
|
@@ -326,7 +326,7 @@ var L = {
|
|
|
326
326
|
length: a
|
|
327
327
|
};
|
|
328
328
|
return [...s, c].sort((e, t) => e.start - t.start);
|
|
329
|
-
},
|
|
329
|
+
}, oe = (e, t) => e.find((e) => e.start + e.length === t), se = () => {
|
|
330
330
|
let [e, t] = D(""), [n, r] = D([]), i = E(e);
|
|
331
331
|
i.current = e;
|
|
332
332
|
let a = E(n);
|
|
@@ -334,14 +334,14 @@ var L = {
|
|
|
334
334
|
draft: e,
|
|
335
335
|
anchors: n,
|
|
336
336
|
onDraftChange: S((e) => {
|
|
337
|
-
let n =
|
|
338
|
-
r((e) =>
|
|
337
|
+
let n = re(i.current, e);
|
|
338
|
+
r((e) => ie(e, n)), i.current = e, t(e);
|
|
339
339
|
}, []),
|
|
340
340
|
insertMention: S((e, n, a) => {
|
|
341
341
|
let o = i.current, s = !/^\s/.test(o.slice(a)), c = `/${n}${s ? " " : ""}`, l = o.slice(0, a) + c + o.slice(a);
|
|
342
|
-
return i.current = l, t(l), r((t) =>
|
|
342
|
+
return i.current = l, t(l), r((t) => ae(t, a, e, n, s)), s;
|
|
343
343
|
}, []),
|
|
344
|
-
onBackspaceAtCaret: S((e) =>
|
|
344
|
+
onBackspaceAtCaret: S((e) => oe(a.current, e), []),
|
|
345
345
|
orderedSkills: T(() => {
|
|
346
346
|
if (n.length !== 0) return n.map((e) => ({ url: e.url }));
|
|
347
347
|
}, [n]),
|
|
@@ -349,7 +349,7 @@ var L = {
|
|
|
349
349
|
t(""), r([]);
|
|
350
350
|
}, []),
|
|
351
351
|
seedFromMessage: S((e, n, i) => {
|
|
352
|
-
let a = n ?? [], o =
|
|
352
|
+
let a = n ?? [], o = $(e, a, i);
|
|
353
353
|
t(e), r(o.map((e) => {
|
|
354
354
|
let t = a[e.skillIndex];
|
|
355
355
|
return {
|
|
@@ -361,215 +361,198 @@ var L = {
|
|
|
361
361
|
}));
|
|
362
362
|
}, [])
|
|
363
363
|
};
|
|
364
|
-
},
|
|
364
|
+
}, ce = (e) => ({
|
|
365
365
|
id: e.url,
|
|
366
366
|
name: e.name,
|
|
367
367
|
description: e.description
|
|
368
|
-
}),
|
|
368
|
+
}), le = (e) => {
|
|
369
369
|
let t = e.split("/").filter((e) => e.length > 0);
|
|
370
370
|
return t[t.length - 1] ?? e;
|
|
371
|
-
},
|
|
372
|
-
let { addMenuLabel:
|
|
373
|
-
...
|
|
374
|
-
...
|
|
375
|
-
...
|
|
371
|
+
}, ue = ({ isSkillsSupported: e, skills: t, sharedWithMe: n, publicSkills: r, favoriteIds: a, onToggleFavorite: o, labels: s, historyChipLabelClassName: c, activeMentionDetailsTrigger: u, renderCatalogContent: d, detailsPanelComponent: f }) => {
|
|
372
|
+
let { addMenuLabel: p = "Skills", backLabel: m = "Back", catalogModalTitleLabel: h = "Use skill", emptyQueryHintLabel: g = "Type to filter", panelLabels: _ } = s ?? {}, [v, y] = D(!1), [b, C] = D(null), [ee, w] = D(0), [E, k] = D(0), [te, A] = D(void 0), j = se(), M = T(() => [
|
|
373
|
+
...t,
|
|
374
|
+
...n ?? [],
|
|
375
|
+
...r ?? []
|
|
376
376
|
], [
|
|
377
|
+
t,
|
|
377
378
|
n,
|
|
378
|
-
r
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
labels: { viewDetailsLabel: v?.viewDetailsLabel }
|
|
379
|
+
r
|
|
380
|
+
]), P = T(() => new Map(M.map((e) => [e.url, e])), [M]), F = S((e) => P.get(e)?.name ?? le(e), [P]), I = T(() => M.filter((e) => a.has(e.url)).map((e) => ce(e)), [M, a]), L = j.anchors.length > 0 && !e, R = T(() => j.anchors.map((t) => ({
|
|
381
|
+
start: t.start,
|
|
382
|
+
length: t.length,
|
|
383
|
+
isUnsupported: !e,
|
|
384
|
+
render: () => /* @__PURE__ */ N(V, {
|
|
385
|
+
name: t.name,
|
|
386
|
+
path: t.url,
|
|
387
|
+
labelClassName: c,
|
|
388
|
+
description: P.get(t.url)?.description,
|
|
389
|
+
isUnsupported: !e,
|
|
390
|
+
detailsTrigger: u,
|
|
391
|
+
onViewDetails: C,
|
|
392
|
+
labels: { viewDetailsLabel: _?.viewDetailsLabel }
|
|
393
393
|
})
|
|
394
394
|
})), [
|
|
395
|
-
|
|
396
|
-
|
|
395
|
+
j.anchors,
|
|
396
|
+
e,
|
|
397
397
|
P,
|
|
398
|
+
c,
|
|
398
399
|
u,
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
let r = M.insertMention(e, t, n);
|
|
400
|
+
_
|
|
401
|
+
]), z = S((e, t, n) => {
|
|
402
|
+
let r = j.insertMention(e, t, n);
|
|
403
403
|
k((e) => e + 1), A(n + 1 + t.length + +!!r);
|
|
404
|
-
}, [
|
|
405
|
-
|
|
406
|
-
}, [
|
|
407
|
-
|
|
408
|
-
}, [
|
|
404
|
+
}, [j]), B = S(() => {
|
|
405
|
+
j.reset(), k((e) => e + 1), A(void 0);
|
|
406
|
+
}, [j]), H = S((e, t) => {
|
|
407
|
+
j.seedFromMessage(e, t, F), k((e) => e + 1), A(void 0);
|
|
408
|
+
}, [j, F]), U = S((e, t) => {
|
|
409
409
|
if (t == null || t.length === 0) return null;
|
|
410
|
-
let n =
|
|
410
|
+
let n = $(e, t, F), r = [], i = 0;
|
|
411
411
|
return n.forEach((n) => {
|
|
412
412
|
n.start > i && r.push(e.slice(i, n.start));
|
|
413
|
-
let a = t[n.skillIndex], o = P.get(a.url), s = o?.name ??
|
|
414
|
-
r.push(/* @__PURE__ */
|
|
413
|
+
let a = t[n.skillIndex], o = P.get(a.url), s = o?.name ?? le(a.url);
|
|
414
|
+
r.push(/* @__PURE__ */ N(V, {
|
|
415
415
|
name: s,
|
|
416
416
|
path: a.url,
|
|
417
|
-
labelClassName:
|
|
417
|
+
labelClassName: c,
|
|
418
418
|
description: o?.description,
|
|
419
|
-
onViewDetails:
|
|
420
|
-
labels: { viewDetailsLabel:
|
|
419
|
+
onViewDetails: C,
|
|
420
|
+
labels: { viewDetailsLabel: _?.viewDetailsLabel }
|
|
421
421
|
}, `${a.url}-${n.start}`)), i = n.start + n.length;
|
|
422
422
|
}), i < e.length && r.push(e.slice(i)), r;
|
|
423
423
|
}, [
|
|
424
424
|
F,
|
|
425
425
|
P,
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
]),
|
|
426
|
+
c,
|
|
427
|
+
_
|
|
428
|
+
]), W = S((e) => e == null || e.length === 0 ? null : e.map((e) => {
|
|
429
429
|
let t = P.get(e.url);
|
|
430
|
-
return /* @__PURE__ */
|
|
431
|
-
name: t?.name ??
|
|
430
|
+
return /* @__PURE__ */ N(V, {
|
|
431
|
+
name: t?.name ?? le(e.url),
|
|
432
432
|
path: e.url,
|
|
433
|
-
labelClassName:
|
|
433
|
+
labelClassName: c,
|
|
434
434
|
description: t?.description,
|
|
435
|
-
onViewDetails:
|
|
436
|
-
labels: { viewDetailsLabel:
|
|
435
|
+
onViewDetails: C,
|
|
436
|
+
labels: { viewDetailsLabel: _?.viewDetailsLabel }
|
|
437
437
|
}, e.url);
|
|
438
438
|
}), [
|
|
439
439
|
P,
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
]),
|
|
440
|
+
c,
|
|
441
|
+
_
|
|
442
|
+
]), G = S((e, t) => /* @__PURE__ */ N(K, {
|
|
443
443
|
favorites: I,
|
|
444
444
|
isMenu: !0,
|
|
445
445
|
onSelect: (n) => {
|
|
446
|
-
|
|
446
|
+
z(n.id, n.name, t), e();
|
|
447
447
|
},
|
|
448
|
-
onToggleFavorite:
|
|
448
|
+
onToggleFavorite: o,
|
|
449
449
|
onBrowse: () => {
|
|
450
|
-
|
|
450
|
+
w(t), e(), y(!0);
|
|
451
451
|
},
|
|
452
452
|
onViewDetails: (t) => {
|
|
453
|
-
e(),
|
|
453
|
+
e(), C(t.id);
|
|
454
454
|
},
|
|
455
|
-
labels:
|
|
455
|
+
labels: _
|
|
456
456
|
}), [
|
|
457
457
|
I,
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
]), J = T(() => y ? {
|
|
462
|
-
key: "skills",
|
|
463
|
-
title: m,
|
|
464
|
-
icon: /* @__PURE__ */ j(O, {
|
|
465
|
-
size: i,
|
|
466
|
-
"aria-hidden": !0,
|
|
467
|
-
stroke: l
|
|
468
|
-
}),
|
|
469
|
-
renderOverlay: K,
|
|
470
|
-
backLabel: h
|
|
471
|
-
} : void 0, [
|
|
472
|
-
y,
|
|
473
|
-
m,
|
|
474
|
-
h,
|
|
475
|
-
K
|
|
476
|
-
]), Y = T(() => y ? {
|
|
477
|
-
triggerPrefix: "/",
|
|
478
|
-
menuLabel: m,
|
|
479
|
-
emptyQueryHint: _,
|
|
480
|
-
renderMenu: ({ query: e, caretPosition: t, close: n, listboxId: r, activeOptionId: i }) => /* @__PURE__ */ j(W, {
|
|
481
|
-
favorites: I,
|
|
482
|
-
searchQuery: e,
|
|
483
|
-
listboxId: r,
|
|
484
|
-
activeOptionId: i,
|
|
485
|
-
onSelect: (e) => {
|
|
486
|
-
n({ consumeQuery: !0 }), B(e.id, e.name, t);
|
|
487
|
-
},
|
|
488
|
-
onToggleFavorite: s,
|
|
489
|
-
onBrowse: () => {
|
|
490
|
-
n({ consumeQuery: !0 }), te(t), C(!0);
|
|
491
|
-
},
|
|
492
|
-
onViewDetails: (e) => {
|
|
493
|
-
n({ consumeQuery: !0 }), w(e.id);
|
|
494
|
-
},
|
|
495
|
-
labels: v
|
|
496
|
-
})
|
|
497
|
-
} : void 0, [
|
|
498
|
-
y,
|
|
499
|
-
m,
|
|
500
|
-
_,
|
|
501
|
-
I,
|
|
502
|
-
B,
|
|
503
|
-
s,
|
|
504
|
-
v
|
|
458
|
+
z,
|
|
459
|
+
o,
|
|
460
|
+
_
|
|
505
461
|
]);
|
|
506
|
-
return
|
|
507
|
-
skillMenuOverlay:
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
462
|
+
return {
|
|
463
|
+
skillMenuOverlay: T(() => e ? {
|
|
464
|
+
key: "skills",
|
|
465
|
+
title: p,
|
|
466
|
+
icon: /* @__PURE__ */ N(O, {
|
|
467
|
+
size: i,
|
|
468
|
+
"aria-hidden": !0,
|
|
469
|
+
stroke: l
|
|
470
|
+
}),
|
|
471
|
+
renderOverlay: G,
|
|
472
|
+
backLabel: m
|
|
473
|
+
} : void 0, [
|
|
474
|
+
e,
|
|
475
|
+
p,
|
|
476
|
+
m,
|
|
477
|
+
G
|
|
478
|
+
]),
|
|
479
|
+
commandMenu: T(() => e ? {
|
|
480
|
+
triggerPrefix: "/",
|
|
481
|
+
menuLabel: p,
|
|
482
|
+
emptyQueryHint: g,
|
|
483
|
+
renderMenu: ({ query: e, caretPosition: t, close: n, listboxId: r, activeOptionId: i }) => /* @__PURE__ */ N(K, {
|
|
484
|
+
favorites: I,
|
|
485
|
+
searchQuery: e,
|
|
486
|
+
listboxId: r,
|
|
487
|
+
activeOptionId: i,
|
|
488
|
+
onSelect: (e) => {
|
|
489
|
+
n({ consumeQuery: !0 }), z(e.id, e.name, t);
|
|
490
|
+
},
|
|
491
|
+
onToggleFavorite: o,
|
|
492
|
+
onBrowse: () => {
|
|
493
|
+
n({ consumeQuery: !0 }), w(t), y(!0);
|
|
494
|
+
},
|
|
495
|
+
onViewDetails: (e) => {
|
|
496
|
+
n({ consumeQuery: !0 }), C(e.id);
|
|
497
|
+
},
|
|
498
|
+
labels: _
|
|
499
|
+
})
|
|
500
|
+
} : void 0, [
|
|
501
|
+
e,
|
|
502
|
+
p,
|
|
503
|
+
g,
|
|
504
|
+
I,
|
|
505
|
+
z,
|
|
506
|
+
o,
|
|
507
|
+
_
|
|
508
|
+
]),
|
|
509
|
+
skillCatalogModal: /* @__PURE__ */ N(J, {
|
|
510
|
+
isOpen: v,
|
|
511
|
+
onClose: () => y(!1),
|
|
512
512
|
onSelect: (e) => {
|
|
513
|
-
|
|
513
|
+
z(e, F(e), ee), y(!1);
|
|
514
514
|
},
|
|
515
|
-
title:
|
|
516
|
-
renderContent:
|
|
515
|
+
title: h,
|
|
516
|
+
renderContent: d
|
|
517
517
|
}),
|
|
518
|
-
skillDetailsPanel: /* @__PURE__ */
|
|
518
|
+
skillDetailsPanel: /* @__PURE__ */ N(x, {
|
|
519
519
|
fallback: null,
|
|
520
|
-
children: /* @__PURE__ */
|
|
521
|
-
skillId:
|
|
522
|
-
onClose: () =>
|
|
520
|
+
children: /* @__PURE__ */ N(f, {
|
|
521
|
+
skillId: b,
|
|
522
|
+
onClose: () => C(null)
|
|
523
523
|
})
|
|
524
524
|
}),
|
|
525
|
-
message:
|
|
526
|
-
messageRevision:
|
|
525
|
+
message: j.draft,
|
|
526
|
+
messageRevision: E,
|
|
527
527
|
activeMentions: R,
|
|
528
|
-
onDraftChange:
|
|
529
|
-
onBackspaceAtCaret:
|
|
530
|
-
caretPositionOverride:
|
|
528
|
+
onDraftChange: j.onDraftChange,
|
|
529
|
+
onBackspaceAtCaret: j.onBackspaceAtCaret,
|
|
530
|
+
caretPositionOverride: te,
|
|
531
531
|
isSkillUnsupported: L,
|
|
532
|
-
selectedSkills:
|
|
533
|
-
resetSkillMentions:
|
|
532
|
+
selectedSkills: j.orderedSkills,
|
|
533
|
+
resetSkillMentions: B,
|
|
534
534
|
seedSkillMentions: H,
|
|
535
535
|
renderHistorySkillSegments: U,
|
|
536
|
-
renderHistorySkills:
|
|
537
|
-
} : {
|
|
538
|
-
skillMenuOverlay: void 0,
|
|
539
|
-
commandMenu: void 0,
|
|
540
|
-
skillCatalogModal: null,
|
|
541
|
-
skillDetailsPanel: null,
|
|
542
|
-
message: "",
|
|
543
|
-
messageRevision: 0,
|
|
544
|
-
activeMentions: [],
|
|
545
|
-
onDraftChange: () => void 0,
|
|
546
|
-
onBackspaceAtCaret: () => void 0,
|
|
547
|
-
caretPositionOverride: void 0,
|
|
548
|
-
isSkillUnsupported: !1,
|
|
549
|
-
selectedSkills: void 0,
|
|
550
|
-
resetSkillMentions: () => void 0,
|
|
551
|
-
seedSkillMentions: () => void 0,
|
|
552
|
-
renderHistorySkillSegments: () => null,
|
|
553
|
-
renderHistorySkills: () => null
|
|
536
|
+
renderHistorySkills: W
|
|
554
537
|
};
|
|
555
|
-
},
|
|
538
|
+
}, de = {
|
|
556
539
|
background: "_background_14zdf_1",
|
|
557
540
|
border: "_border_14zdf_5",
|
|
558
541
|
value: "_value_14zdf_9",
|
|
559
542
|
clear: "_clear_14zdf_13",
|
|
560
543
|
invalid: "_invalid_14zdf_17"
|
|
561
544
|
}, fe = [], pe = ({ value: e, onChange: i, displayName: a, favorites: o = fe, onToggleFavorite: s, onViewDetails: c, renderOverlay: d, isSkillsSupported: p, isDisabled: h = !1, isInvalid: g = !1, labelledById: _, describedById: y, labels: b, renderCatalogContent: x, className: S, styles: w }) => {
|
|
562
|
-
let [T, O] = D(!1), [
|
|
563
|
-
|
|
545
|
+
let [T, O] = D(!1), [te, A] = D(!1), [F, I] = D(""), L = E(null), R = ee(), B = E(null), V = E(!1), H = n(e, p), U = p && !h, W = T && U, G = te && U, ne = () => {
|
|
546
|
+
B.current && !B.current.disabled ? B.current.focus() : L.current?.querySelector("button:not(:disabled)")?.focus();
|
|
564
547
|
};
|
|
565
548
|
C(() => {
|
|
566
|
-
|
|
567
|
-
}, [
|
|
568
|
-
let
|
|
569
|
-
e && !
|
|
570
|
-
},
|
|
571
|
-
|
|
572
|
-
},
|
|
549
|
+
V.current && !W && !G && ((document.activeElement === document.body || L.current?.contains(document.activeElement)) && ne(), O(!1), A(!1)), V.current = W || G;
|
|
550
|
+
}, [W, G]);
|
|
551
|
+
let q = (e) => {
|
|
552
|
+
e && !U || (I(""), O(e));
|
|
553
|
+
}, Y = (e) => {
|
|
554
|
+
U && i(e), O(!1), A(!1);
|
|
555
|
+
}, X = {
|
|
573
556
|
...t({
|
|
574
557
|
"--ssf-text": w?.colors?.text,
|
|
575
558
|
"--ssf-bg": w?.colors?.background,
|
|
@@ -577,114 +560,114 @@ var L = {
|
|
|
577
560
|
"--ssf-error": w?.colors?.error
|
|
578
561
|
}),
|
|
579
562
|
...w?.cssVars
|
|
580
|
-
},
|
|
581
|
-
id:
|
|
563
|
+
}, Z = /* @__PURE__ */ P("div", {
|
|
564
|
+
id: R,
|
|
582
565
|
className: "w-full min-w-0",
|
|
583
|
-
children: [/* @__PURE__ */
|
|
566
|
+
children: [/* @__PURE__ */ N("div", {
|
|
584
567
|
className: "p-2",
|
|
585
|
-
children: /* @__PURE__ */
|
|
586
|
-
value:
|
|
587
|
-
onChange: (e) =>
|
|
568
|
+
children: /* @__PURE__ */ N(v, {
|
|
569
|
+
value: F,
|
|
570
|
+
onChange: (e) => I(e ?? ""),
|
|
588
571
|
placeholder: b.searchPlaceholder ?? "Search skills",
|
|
589
572
|
"aria-label": b.searchPlaceholder ?? "Search skills",
|
|
590
573
|
clearLabel: b.clearSearchLabel ?? "Clear search"
|
|
591
574
|
})
|
|
592
|
-
}), /* @__PURE__ */
|
|
575
|
+
}), /* @__PURE__ */ N(K, {
|
|
593
576
|
className: "min-w-0 desktop:w-full",
|
|
594
577
|
rowClassName: "min-h-11",
|
|
595
578
|
favorites: o,
|
|
596
|
-
searchQuery:
|
|
579
|
+
searchQuery: F,
|
|
597
580
|
labels: b.panelLabels,
|
|
598
|
-
onSelect: (e) =>
|
|
581
|
+
onSelect: (e) => Y(e.id),
|
|
599
582
|
onToggleFavorite: s,
|
|
600
583
|
onViewDetails: c ? (e) => {
|
|
601
584
|
O(!1), c(e);
|
|
602
585
|
} : void 0,
|
|
603
586
|
onBrowse: () => {
|
|
604
|
-
O(!1),
|
|
587
|
+
O(!1), A(!0);
|
|
605
588
|
}
|
|
606
589
|
})]
|
|
607
|
-
}),
|
|
608
|
-
inputRef:
|
|
590
|
+
}), Q = /* @__PURE__ */ N(m, {
|
|
591
|
+
inputRef: B,
|
|
609
592
|
readOnly: !0,
|
|
610
593
|
role: "combobox",
|
|
611
594
|
"aria-haspopup": "dialog",
|
|
612
|
-
"aria-expanded":
|
|
613
|
-
"aria-controls":
|
|
595
|
+
"aria-expanded": W,
|
|
596
|
+
"aria-controls": W ? R : void 0,
|
|
614
597
|
"aria-labelledby": _,
|
|
615
598
|
"aria-describedby": y,
|
|
616
|
-
"aria-invalid": g ||
|
|
617
|
-
disabled: !
|
|
618
|
-
invalid: g ||
|
|
599
|
+
"aria-invalid": g || H,
|
|
600
|
+
disabled: !U,
|
|
601
|
+
invalid: g || H,
|
|
619
602
|
value: e ? a || e : "",
|
|
620
603
|
placeholder: b.placeholder,
|
|
621
604
|
title: p ? e ? a || e : void 0 : b.unsupportedTooltipLabel,
|
|
622
605
|
containerClassName: "w-full min-w-0",
|
|
623
|
-
wrapperClassName: r("cursor-pointer", "--ssf-bg" in
|
|
624
|
-
className: r("min-w-0 cursor-pointer text-ellipsis", "--ssf-text" in
|
|
606
|
+
wrapperClassName: r("cursor-pointer", "--ssf-bg" in X && de.background, "--ssf-border" in X && de.border, (g || H) && de.invalid, w?.triggerClassName),
|
|
607
|
+
className: r("min-w-0 cursor-pointer text-ellipsis", "--ssf-text" in X && de.value, w?.typography?.fontClassName ?? "dial-small-text"),
|
|
625
608
|
onKeyDown: (e) => {
|
|
626
609
|
[
|
|
627
610
|
"Enter",
|
|
628
611
|
" ",
|
|
629
612
|
"ArrowDown"
|
|
630
|
-
].includes(e.key) ? (e.preventDefault(), e.stopPropagation(),
|
|
613
|
+
].includes(e.key) ? (e.preventDefault(), e.stopPropagation(), q(e.key === "ArrowDown" || !W)) : e.key === "Escape" && q(!1);
|
|
631
614
|
},
|
|
632
|
-
iconAfter: /* @__PURE__ */
|
|
615
|
+
iconAfter: /* @__PURE__ */ P("span", {
|
|
633
616
|
className: "flex shrink-0 items-center",
|
|
634
|
-
children: [e && /* @__PURE__ */
|
|
617
|
+
children: [e && /* @__PURE__ */ N(f, {
|
|
635
618
|
type: "button",
|
|
636
|
-
className: r("size-11 shrink-0",
|
|
619
|
+
className: r("size-11 shrink-0", de.clear),
|
|
637
620
|
disabled: h,
|
|
638
621
|
"aria-label": b.removeSkillLabel,
|
|
639
622
|
onKeyDown: (e) => e.stopPropagation(),
|
|
640
623
|
onClick: (e) => {
|
|
641
|
-
e.stopPropagation(), i(void 0), O(!1),
|
|
624
|
+
e.stopPropagation(), i(void 0), O(!1), U ? B.current?.focus() : L.current?.focus();
|
|
642
625
|
},
|
|
643
|
-
iconBefore: /* @__PURE__ */ j
|
|
626
|
+
iconBefore: /* @__PURE__ */ N(j, {
|
|
644
627
|
"aria-hidden": !0,
|
|
645
628
|
size: 18,
|
|
646
629
|
stroke: l
|
|
647
630
|
})
|
|
648
|
-
}), /* @__PURE__ */
|
|
631
|
+
}), /* @__PURE__ */ N(k, {
|
|
649
632
|
"aria-hidden": !0,
|
|
650
633
|
size: 20,
|
|
651
634
|
stroke: l,
|
|
652
|
-
className: r("transition-transform",
|
|
635
|
+
className: r("transition-transform", W && "rotate-180")
|
|
653
636
|
})]
|
|
654
637
|
})
|
|
655
638
|
});
|
|
656
|
-
return /* @__PURE__ */
|
|
657
|
-
ref:
|
|
639
|
+
return /* @__PURE__ */ P("div", {
|
|
640
|
+
ref: L,
|
|
658
641
|
role: "group",
|
|
659
642
|
"aria-labelledby": _,
|
|
660
643
|
tabIndex: -1,
|
|
661
|
-
className: r("min-w-0", S,
|
|
662
|
-
style:
|
|
663
|
-
children: [d ? /* @__PURE__ */ M
|
|
644
|
+
className: r("min-w-0", S, z.selectorField),
|
|
645
|
+
style: X,
|
|
646
|
+
children: [d ? /* @__PURE__ */ P(M, { children: [/* @__PURE__ */ N("div", {
|
|
664
647
|
className: "w-full min-w-0",
|
|
665
|
-
onClick: () =>
|
|
666
|
-
children:
|
|
667
|
-
}), d(
|
|
668
|
-
open:
|
|
669
|
-
onOpenChange:
|
|
670
|
-
disabled: !
|
|
648
|
+
onClick: () => q(!W),
|
|
649
|
+
children: Q
|
|
650
|
+
}), d(Z, W, () => q(!1))] }) : /* @__PURE__ */ N(u, {
|
|
651
|
+
open: W,
|
|
652
|
+
onOpenChange: q,
|
|
653
|
+
disabled: !U,
|
|
671
654
|
className: "w-full min-w-0",
|
|
672
655
|
listClassName: "w-[min(var(--reference-width),calc(100vw-2rem))] max-w-full",
|
|
673
|
-
renderOverlay: () => /* @__PURE__ */
|
|
656
|
+
renderOverlay: () => /* @__PURE__ */ N("div", {
|
|
674
657
|
role: "dialog",
|
|
675
658
|
"aria-labelledby": _,
|
|
676
|
-
children:
|
|
659
|
+
children: Z
|
|
677
660
|
}),
|
|
678
661
|
initialFocus: 0,
|
|
679
|
-
children:
|
|
680
|
-
}),
|
|
662
|
+
children: Q
|
|
663
|
+
}), G && /* @__PURE__ */ N(J, {
|
|
681
664
|
isOpen: !0,
|
|
682
|
-
onClose: () =>
|
|
665
|
+
onClose: () => A(!1),
|
|
683
666
|
title: b.modalTitle,
|
|
684
|
-
onSelect:
|
|
667
|
+
onSelect: Y,
|
|
685
668
|
renderContent: x
|
|
686
669
|
})]
|
|
687
670
|
});
|
|
688
671
|
};
|
|
689
672
|
//#endregion
|
|
690
|
-
export {
|
|
673
|
+
export { V as ChatSkill, K as FavoriteSkillsPanel, z as SKILLS_CLASS, q as SkillArchiveUploadDialog, J as SkillCatalogModal, X as SkillContentFileTree, Z as SkillDetailsSidePanel, B as SkillInfoTooltipContent, pe as SkillSelectorField, ce as buildFavoriteSkillItem, re as diffTextChange, oe as findMentionAtCaret, le as getSkillFallbackName, ae as insertAnchor, $ as matchSkillMentions, ie as reconcileAnchors, se as useSkillMentions, ue as useSkillSelectorOverlay };
|
|
@@ -34,21 +34,16 @@ export interface SkillSelectorOverlayLabels {
|
|
|
34
34
|
}
|
|
35
35
|
/** Options accepted by `useSkillSelectorOverlay`. */
|
|
36
36
|
export interface UseSkillSelectorOverlayOptions {
|
|
37
|
-
/**
|
|
38
|
-
* Whether the skill flow is enabled. While `false` the hook returns empty
|
|
39
|
-
* outputs: no menu entry, no modal, no panel, no chips.
|
|
40
|
-
*/
|
|
41
|
-
isEnabled: boolean;
|
|
42
37
|
/**
|
|
43
38
|
* Whether the input's current deployment supports skills. While `false`
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
* `custom_content.skills`/history rendering, and this boolean fold,
|
|
51
|
-
* the unsupported state.
|
|
39
|
+
* the entry points are omitted — no Add-menu item and no slash menu — but
|
|
40
|
+
* a tracked mention stays in the draft text and folds into
|
|
41
|
+
* `isSkillUnsupported` for the host's own send-disabled condition. The
|
|
42
|
+
* host resolves this from its own deployment data. Note: a live-composing
|
|
43
|
+
* mention has no per-mention error styling of its own (it renders as a
|
|
44
|
+
* plain highlighted run, not a `ChatSkill`); only the sent
|
|
45
|
+
* `custom_content.skills`/history rendering, and this boolean fold,
|
|
46
|
+
* reflect the unsupported state.
|
|
52
47
|
*/
|
|
53
48
|
isSkillsSupported: boolean;
|
|
54
49
|
/** The user's own skills. */
|
|
@@ -89,28 +84,27 @@ export interface UseSkillSelectorOverlayOptions {
|
|
|
89
84
|
export interface UseSkillSelectorOverlayResult {
|
|
90
85
|
/**
|
|
91
86
|
* The Skills entry for the `menuOverlays` prop of
|
|
92
|
-
* `ConversationInput`/`EditMessageInput`/`Input`. `undefined` while the
|
|
93
|
-
*
|
|
94
|
-
*
|
|
95
|
-
*
|
|
87
|
+
* `ConversationInput`/`EditMessageInput`/`Input`. `undefined` while the
|
|
88
|
+
* current deployment does not support skills: the host omits the entry
|
|
89
|
+
* entirely when this is `undefined`, so a stub renderer would leave the
|
|
90
|
+
* menu item in place with nothing behind it.
|
|
96
91
|
*/
|
|
97
92
|
skillMenuOverlay?: MenuOverlayConfig;
|
|
98
93
|
/**
|
|
99
94
|
* The Skills entry for the `commandMenu` prop of
|
|
100
95
|
* `ConversationInput`/`EditMessageInput`/`Input`: typing `/` into an empty
|
|
101
96
|
* textarea opens the favorites panel in search mode above the input.
|
|
102
|
-
* `undefined` while the
|
|
103
|
-
*
|
|
97
|
+
* `undefined` while the current deployment does not support skills,
|
|
98
|
+
* disabling the slash menu entirely.
|
|
104
99
|
*/
|
|
105
100
|
commandMenu?: CommandMenuConfig;
|
|
106
101
|
/**
|
|
107
102
|
* The browse modal element. Render at a stable level outside the popover
|
|
108
|
-
* (e.g. next to the input)
|
|
103
|
+
* (e.g. next to the input).
|
|
109
104
|
*/
|
|
110
105
|
skillCatalogModal: ReactNode;
|
|
111
106
|
/**
|
|
112
107
|
* The skill details side panel opened by a row tooltip's "View details".
|
|
113
|
-
* `null` while `isEnabled` is `false`.
|
|
114
108
|
*/
|
|
115
109
|
skillDetailsPanel: ReactNode;
|
|
116
110
|
/**
|
|
@@ -135,7 +129,7 @@ export interface UseSkillSelectorOverlayResult {
|
|
|
135
129
|
* Every currently-tracked skill mention's character range within the
|
|
136
130
|
* composer's live draft text, for `ConversationInput`/`EditMessageInput`/
|
|
137
131
|
* `Input`'s `activeMentions` prop (the live-composing highlighted-run
|
|
138
|
-
* render). Empty while nothing is mentioned
|
|
132
|
+
* render). Empty while nothing is mentioned.
|
|
139
133
|
*/
|
|
140
134
|
activeMentions: HighlightedTextRange[];
|
|
141
135
|
/**
|
|
@@ -166,15 +160,14 @@ export interface UseSkillSelectorOverlayResult {
|
|
|
166
160
|
/**
|
|
167
161
|
* Whether at least one skill is mentioned while the current deployment does
|
|
168
162
|
* not support skills — hosts must fold this into their send-disabled
|
|
169
|
-
* conditions.
|
|
163
|
+
* conditions.
|
|
170
164
|
*/
|
|
171
165
|
isSkillUnsupported: boolean;
|
|
172
166
|
/**
|
|
173
167
|
* Every currently-tracked mention as the send-time `custom_content.skills`
|
|
174
168
|
* payload, in left-to-right text order — `undefined` while nothing is
|
|
175
|
-
* mentioned
|
|
176
|
-
*
|
|
177
|
-
* successful send.
|
|
169
|
+
* mentioned, so `custom_content.skills` is omitted entirely. Cleared to
|
|
170
|
+
* `undefined` by `resetSkillMentions` after a successful send.
|
|
178
171
|
*/
|
|
179
172
|
selectedSkills: RequestSkill[] | undefined;
|
|
180
173
|
/**
|
|
@@ -198,9 +191,9 @@ export interface UseSkillSelectorOverlayResult {
|
|
|
198
191
|
* `textSegments` prop. Resolves each entry's name from the listing pools
|
|
199
192
|
* matched on its url, falling back to the url's last non-empty segment,
|
|
200
193
|
* sharing the "View details" panel with the favorite rows. Returns `null`
|
|
201
|
-
* while `
|
|
202
|
-
*
|
|
203
|
-
*
|
|
194
|
+
* while `skills` is empty/absent; a mention `matchSkillMentions` cannot
|
|
195
|
+
* locate in `content` is simply omitted from the render (see
|
|
196
|
+
* `matchSkillMentions`'s own doc for that heuristic).
|
|
204
197
|
*/
|
|
205
198
|
renderHistorySkillSegments: (content: string, skills: RequestSkill[] | undefined) => ReactNode[] | null;
|
|
206
199
|
/**
|
|
@@ -208,8 +201,8 @@ export interface UseSkillSelectorOverlayResult {
|
|
|
208
201
|
* ignoring text position — for `AssistantMessageBubble`'s `beforeContent`
|
|
209
202
|
* slot, since assistant text is model-generated markdown and never
|
|
210
203
|
* authors positioned mentions. Each entry's name/description resolve the
|
|
211
|
-
* same way as `renderHistorySkillSegments`. Returns `null` while
|
|
212
|
-
*
|
|
204
|
+
* same way as `renderHistorySkillSegments`. Returns `null` while the
|
|
205
|
+
* array is empty/absent.
|
|
213
206
|
*/
|
|
214
207
|
renderHistorySkills: (skills: RequestSkill[] | undefined) => ReactNode;
|
|
215
208
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-selector-overlay.d.ts","sourceRoot":"","sources":["../../src/models/skill-selector-overlay.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,EACV,iBAAiB,EACjB,oBAAoB,EACpB,iBAAiB,EAClB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACtD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAE/E;;;;;GAKG;AACH,MAAM,WAAW,+BAA+B;IAC9C,iFAAiF;IACjF,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,2EAA2E;IAC3E,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,qEAAqE;AACrE,MAAM,WAAW,0BAA0B;IACzC,2EAA2E;IAC3E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gFAAgF;IAChF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+EAA+E;IAC/E,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC;;;OAGG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,uEAAuE;IACvE,WAAW,CAAC,EAAE,yBAAyB,CAAC;CACzC;AAED,qDAAqD;AACrD,MAAM,WAAW,8BAA8B;IAC7C
|
|
1
|
+
{"version":3,"file":"skill-selector-overlay.d.ts","sourceRoot":"","sources":["../../src/models/skill-selector-overlay.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@epam/ai-dial-skills",
|
|
3
3
|
"description": "Host-agnostic UI for picking a favorite skill to attach to a chat input",
|
|
4
|
-
"version": "1.2.0-dev.
|
|
4
|
+
"version": "1.2.0-dev.185",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"main": "./index.js",
|
|
@@ -18,11 +18,11 @@
|
|
|
18
18
|
},
|
|
19
19
|
"dependencies": {
|
|
20
20
|
"@tabler/icons-react": "^3.44.0",
|
|
21
|
-
"@epam/ai-dial-catalog": "1.2.0-dev.
|
|
22
|
-
"@epam/ai-dial-conversation-input": "1.2.0-dev.
|
|
21
|
+
"@epam/ai-dial-catalog": "1.2.0-dev.185",
|
|
22
|
+
"@epam/ai-dial-conversation-input": "1.2.0-dev.185"
|
|
23
23
|
},
|
|
24
24
|
"peerDependencies": {
|
|
25
|
-
"@epam/ai-dial-chat-shared": "1.2.0-dev.
|
|
25
|
+
"@epam/ai-dial-chat-shared": "1.2.0-dev.185",
|
|
26
26
|
"@epam/ai-dial-react-file-manager": "^0.3.0-dev.15",
|
|
27
27
|
"@epam/ai-dial-ui-kit": "^0.15.0-dev.21",
|
|
28
28
|
"react": "^19.2.8"
|