@epam/ai-dial-skills 1.2.0-dev.28 → 1.2.0-dev.282

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.
Files changed (49) hide show
  1. package/components/ChatSkill/ChatSkill.d.ts +3 -2
  2. package/components/ChatSkill/ChatSkill.d.ts.map +1 -1
  3. package/components/FavoriteSkillsPanel/FavoriteSkillsPanel.d.ts.map +1 -1
  4. package/components/SkillArchiveUploadDialog/SkillArchiveUploadDialog.d.ts +9 -0
  5. package/components/SkillArchiveUploadDialog/SkillArchiveUploadDialog.d.ts.map +1 -0
  6. package/components/SkillContentFileTree/SkillContentFileTree.d.ts +11 -0
  7. package/components/SkillContentFileTree/SkillContentFileTree.d.ts.map +1 -0
  8. package/components/SkillDetailsSidePanel/SkillDetailsSidePanel.d.ts +2 -1
  9. package/components/SkillDetailsSidePanel/SkillDetailsSidePanel.d.ts.map +1 -1
  10. package/components/SkillInfoTooltipContent/SkillInfoTooltipContent.d.ts +1 -1
  11. package/components/SkillInfoTooltipContent/SkillInfoTooltipContent.d.ts.map +1 -1
  12. package/components/SkillSelectorField/SkillSelectorField.d.ts +5 -0
  13. package/components/SkillSelectorField/SkillSelectorField.d.ts.map +1 -0
  14. package/constants/public-class-names.d.ts +15 -0
  15. package/constants/public-class-names.d.ts.map +1 -0
  16. package/hooks/useSkillMentions/useSkillMentions.d.ts +52 -0
  17. package/hooks/useSkillMentions/useSkillMentions.d.ts.map +1 -0
  18. package/hooks/useSkillSelectorOverlay/useSkillSelectorOverlay.d.ts +5 -4
  19. package/hooks/useSkillSelectorOverlay/useSkillSelectorOverlay.d.ts.map +1 -1
  20. package/index.css +2 -2
  21. package/index.d.ts +16 -1
  22. package/index.d.ts.map +1 -1
  23. package/index.js +631 -247
  24. package/models/chat-skill-props.d.ts +29 -0
  25. package/models/chat-skill-props.d.ts.map +1 -1
  26. package/models/favorite-skills-panel-props.d.ts +32 -5
  27. package/models/favorite-skills-panel-props.d.ts.map +1 -1
  28. package/models/skill-archive-upload-dialog-props.d.ts +37 -0
  29. package/models/skill-archive-upload-dialog-props.d.ts.map +1 -0
  30. package/models/skill-info-tooltip-content-props.d.ts +19 -0
  31. package/models/skill-info-tooltip-content-props.d.ts.map +1 -1
  32. package/models/skill-mention-anchor.d.ts +12 -0
  33. package/models/skill-mention-anchor.d.ts.map +1 -0
  34. package/models/skill-selector-field-props.d.ts +72 -0
  35. package/models/skill-selector-field-props.d.ts.map +1 -0
  36. package/models/skill-selector-overlay.d.ts +128 -57
  37. package/models/skill-selector-overlay.d.ts.map +1 -1
  38. package/package.json +6 -5
  39. package/test-setup.d.ts +1 -0
  40. package/types/skill-unresolved-reason.d.ts +8 -0
  41. package/types/skill-unresolved-reason.d.ts.map +1 -0
  42. package/utils/catalog-content-dial-files.d.ts +10 -0
  43. package/utils/catalog-content-dial-files.d.ts.map +1 -0
  44. package/utils/skill-mention-matching.d.ts +25 -0
  45. package/utils/skill-mention-matching.d.ts.map +1 -0
  46. package/utils/skill-mention-tracking.d.ts +51 -0
  47. package/utils/skill-mention-tracking.d.ts.map +1 -0
  48. package/utils/skill-url.d.ts +1 -0
  49. package/utils/skill-url.d.ts.map +1 -1
package/index.js CHANGED
@@ -1,340 +1,724 @@
1
- import { DeploymentIcon as e, buildCssVars as t, mergeClasses as n } from "@epam/ai-dial-chat-shared";
2
- import { BASE_ICON_SIZE as r, Button as i, ButtonAppearance as a, ButtonVariant as o, DIAL_ICON_SIZE as s, DIAL_KIT_ICON_STROKE as c, GhostButton as l, Highlight as u, InteractiveTooltip as d, Popup as f, PopupSize as p, ToggleIconButton as m, TooltipPlacement as h } from "@epam/ai-dial-ui-kit";
3
- import { Suspense as g, useCallback as _, useEffect as v, useLayoutEffect as y, useMemo as b, useRef as x, useState as S } from "react";
4
- import { IconBlocks as C, IconEye as w, IconStarFilled as T } from "@tabler/icons-react";
5
- import { jsx as E, jsxs as D } from "react/jsx-runtime";
6
- import { DetailsPanel as O } from "@epam/ai-dial-catalog";
7
- //#region src/components/SkillInfoTooltipContent/SkillInfoTooltipContent.tsx
8
- var k = ({ description: e, unsupportedMessage: t, viewDetailsLabel: n = "View details", onViewDetails: r }) => t == null ? /* @__PURE__ */ D("div", {
9
- className: "flex flex-col gap-3",
10
- children: [e != null && e !== "" && /* @__PURE__ */ E("p", {
1
+ import { DeploymentIcon as e, buildCssVars as t, isSkillSelectionUnsupported as n, mergeClasses as r } from "@epam/ai-dial-chat-shared";
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, FileDropzone as u, GhostButton as d, Highlight as f, InteractiveTooltip as p, Popup as m, PopupSize as h, Select as g, Spinner as _, ToggleIconButton as v, Tooltip as y, TooltipPlacement as b } from "@epam/ai-dial-ui-kit";
3
+ import { Suspense as x, useCallback as S, useEffect as C, useId as w, useLayoutEffect as T, useMemo as E, useRef as D, useState as O } from "react";
4
+ import { IconBlocks as k, IconEye as A, IconLock as j, IconStarFilled as M, IconTrash as N } from "@tabler/icons-react";
5
+ import { Fragment as P, jsx as F, jsxs as I } from "react/jsx-runtime";
6
+ import { DialFileNodeType as L, DialFoldersTree as R } from "@epam/ai-dial-react-file-manager";
7
+ import { CatalogContentNodeType as z, DetailsPanel as B } from "@epam/ai-dial-catalog";
8
+ //#region src/constants/public-class-names.ts
9
+ var V = {
10
+ selectorField: "dial-skills-selector-field",
11
+ favoritesPanel: "dial-skills-favorites-panel",
12
+ chip: "dial-skills-chip"
13
+ }, H = /* @__PURE__ */ function(e) {
14
+ return e.Deleted = "deleted", e.NotShared = "not-shared", e;
15
+ }({}), U = ({ description: e, unsupportedMessage: t, unresolvedReason: n, deletedMessage: r, notSharedMessage: i, viewDetailsLabel: u = "View details", onViewDetails: d, viewDetailsTabIndex: f }) => {
16
+ if (n != null) {
17
+ let e = n === H.Deleted, t = e ? N : j, a = e ? r : i;
18
+ return /* @__PURE__ */ I("div", {
19
+ className: "flex flex-row items-center gap-2",
20
+ children: [/* @__PURE__ */ F(t, {
21
+ size: c.MD,
22
+ stroke: l,
23
+ "aria-hidden": !0,
24
+ className: "shrink-0 text-secondary"
25
+ }), /* @__PURE__ */ F("p", {
26
+ className: "dial-tiny-text text-start text-primary",
27
+ children: a
28
+ })]
29
+ });
30
+ }
31
+ return t == null ? /* @__PURE__ */ I("div", {
32
+ className: "flex flex-col gap-3",
33
+ children: [e != null && e !== "" && /* @__PURE__ */ F("p", {
34
+ className: "text-start",
35
+ children: e
36
+ }), /* @__PURE__ */ F(a, {
37
+ variant: s.Primary,
38
+ appearance: o.Link,
39
+ className: "h-[24px] self-start",
40
+ label: u,
41
+ iconBefore: /* @__PURE__ */ F(A, {
42
+ size: c.SM,
43
+ stroke: l,
44
+ "aria-hidden": !0
45
+ }),
46
+ onClick: d,
47
+ tabIndex: f
48
+ })]
49
+ }) : /* @__PURE__ */ F("p", {
11
50
  className: "text-start",
12
- children: e
13
- }), /* @__PURE__ */ E(i, {
14
- variant: o.Primary,
15
- appearance: a.Link,
16
- className: "h-[24px] self-start",
17
- label: n,
18
- iconBefore: /* @__PURE__ */ E(w, {
19
- size: s.SM,
20
- stroke: c,
21
- "aria-hidden": !0
22
- }),
23
- onClick: r
24
- })]
25
- }) : /* @__PURE__ */ E("p", {
26
- className: "text-start",
27
- children: t
28
- }), A = ({ name: e, path: t, description: r, isUnsupported: i = !1, labelClassName: a = "dial-body-paragraph-text", unsupportedLabelClassName: o = "text-error", unsupportedClassName: s = "bg-error", onViewDetails: c, labels: u = {} }) => {
29
- let { viewDetailsLabel: f = "View details", unsupportedTooltipLabel: p = "Selected model does not support skills. Remove the skill or select different model to proceed." } = u, [m, g] = S(0);
30
- return /* @__PURE__ */ E(d, {
51
+ children: t
52
+ });
53
+ }, W = ({ name: e, path: t, description: n, isUnsupported: i = !1, unresolvedReason: a, labelClassName: o = "dial-body-paragraph-text text-accent", unsupportedLabelClassName: s = "text-error", unsupportedClassName: c = "bg-error", detailsTrigger: l = "hover", onViewDetails: u, labels: d = {} }) => {
54
+ let { viewDetailsLabel: f = "View details", unsupportedTooltipLabel: m = "Selected model does not support skills. Remove the skill or select different model to proceed.", deletedTooltipLabel: h = "This skill has been deleted. Its details are no longer available.", notSharedTooltipLabel: g = "You don't have access to this skill, so its details aren't shown. Ask the chat owner to share it with you." } = d, [_, v] = O(0), [y, x] = O(!1), S = l === "click", C = () => {
55
+ x(!1), v((e) => e + 1), u(t);
56
+ }, w = (e) => {
57
+ !S || e.key !== "Enter" && e.key !== " " || (e.preventDefault(), x(!0));
58
+ }, E = D(null), [k, A] = O(null);
59
+ return T(() => {
60
+ A(E.current?.getBoundingClientRect().width ?? null);
61
+ }, [o]), /* @__PURE__ */ F(p, {
31
62
  asChild: !0,
32
- placement: h.Top,
63
+ placement: b.Top,
64
+ open: S ? y : void 0,
65
+ onOpenChange: S ? x : void 0,
33
66
  contentClassName: "max-w-[550px]",
34
- content: i ? /* @__PURE__ */ E(k, { unsupportedMessage: p }) : /* @__PURE__ */ E(k, {
35
- description: r,
67
+ content: a == null ? i ? /* @__PURE__ */ F(U, { unsupportedMessage: m }) : /* @__PURE__ */ F(U, {
68
+ description: n,
36
69
  viewDetailsLabel: f,
37
- onViewDetails: () => {
38
- g((e) => e + 1), c(t);
39
- }
70
+ onViewDetails: C
71
+ }) : /* @__PURE__ */ F(U, {
72
+ unresolvedReason: a,
73
+ deletedMessage: h,
74
+ notSharedMessage: g
40
75
  }),
41
- children: /* @__PURE__ */ E("span", {
42
- className: "inline-flex items-center",
43
- children: /* @__PURE__ */ E(l, {
44
- label: `/${e}`,
45
- textClassName: i ? n(a, o) : a,
46
- className: i ? n("h-auto px-2 py-0", s) : "h-auto px-2 py-0"
47
- })
76
+ children: /* @__PURE__ */ I("span", {
77
+ tabIndex: 0,
78
+ className: r("relative -me-1 -ms-1 inline cursor-pointer select-text rounded-full pe-1 ps-1", i ? c : "hover:bg-info focus-visible:bg-info active:bg-info", i ? r(o, s) : o, V.chip),
79
+ "aria-label": `/${e}`,
80
+ onClick: S ? () => x(!0) : void 0,
81
+ onKeyDown: w,
82
+ children: [/* @__PURE__ */ F("span", {
83
+ ref: E,
84
+ "aria-hidden": !0,
85
+ className: "inset-inline-start-0 pointer-events-none absolute top-0 select-none",
86
+ children: "/"
87
+ }), /* @__PURE__ */ F("span", {
88
+ "aria-hidden": !0,
89
+ className: "select-none",
90
+ style: { paddingInlineStart: k ?? void 0 },
91
+ children: e
92
+ })]
48
93
  })
49
- }, m);
50
- }, j = {
51
- row: "_row_1ovug_1",
52
- header: "_header_1ovug_5",
53
- emptyHint: "_emptyHint_1ovug_9",
54
- star: "_star_1ovug_13",
55
- footer: "_footer_1ovug_17",
56
- rowEnter: "_rowEnter_1ovug_25",
57
- rowFadeIn: "_rowFadeIn_1ovug_1",
58
- rowLeaving: "_rowLeaving_1ovug_29",
59
- rowFadeOut: "_rowFadeOut_1ovug_1",
60
- listContent: "_listContent_1ovug_57"
61
- }, M = "px-3 pb-0.5 pt-2", N = 180, P = 288, F = ({ favorites: r, onSelect: i, onToggleFavorite: a, onBrowse: o, onViewDetails: c, searchQuery: f, labels: p = {}, colors: h, nameClassName: g = "dial-small-text", headerClassName: _ = "dial-tiny-lead-semi-text", emptyHintClassName: b = "dial-small-text" }) => {
62
- let { myCollectionLabel: C = "My Collection", emptyHintLabel: w = "Star a skill to pin it here", browseLabel: O = "Browse", removeFromFavoritesLabel: A = "Remove from favorites", viewDetailsLabel: F = "View details", noMatchingSkillsLabel: I = "No matching skills" } = p, L = t({
63
- "--fs-row-hover-bg": h?.rowHoverBackground,
64
- "--fs-header-text": h?.headerText,
65
- "--fs-empty-hint-text": h?.emptyHintText,
66
- "--fs-star-color": h?.starColor,
67
- "--fs-footer-border": h?.footerBorder
68
- }), [R, z] = S(/* @__PURE__ */ new Set()), B = x(/* @__PURE__ */ new Map());
69
- v(() => {
70
- let e = B.current;
94
+ }, _);
95
+ }, G = {
96
+ row: "_row_1v431_1",
97
+ header: "_header_1v431_8",
98
+ emptyHint: "_emptyHint_1v431_12",
99
+ star: "_star_1v431_16",
100
+ footer: "_footer_1v431_20",
101
+ rowEnter: "_rowEnter_1v431_28",
102
+ rowFadeIn: "_rowFadeIn_1v431_1",
103
+ rowLeaving: "_rowLeaving_1v431_32",
104
+ rowFadeOut: "_rowFadeOut_1v431_1",
105
+ listContent: "_listContent_1v431_60"
106
+ }, ee = "px-3 pb-0.5 pt-2", K = 180, q = 288, J = ({ favorites: n, onSelect: i, onToggleFavorite: a, onBrowse: o, onViewDetails: s, className: l, rowClassName: u, searchQuery: m, listboxId: h, activeOptionId: g, isMenu: _ = !1, labels: y = {}, colors: b, nameClassName: x = "dial-small-text", headerClassName: S = "dial-tiny-lead-semi-text", emptyHintClassName: E = "dial-small-text" }) => {
107
+ let { myCollectionLabel: k = "My Collection", emptyHintLabel: A = "Star a skill to pin it here", browseLabel: j = "Browse", removeFromFavoritesLabel: N = "Remove from favorites", viewDetailsLabel: P = "View details", noMatchingSkillsLabel: L = "No matching skills" } = y, R = t({
108
+ "--fs-row-hover-bg": b?.rowHoverBackground,
109
+ "--fs-header-text": b?.headerText,
110
+ "--fs-empty-hint-text": b?.emptyHintText,
111
+ "--fs-star-color": b?.starColor,
112
+ "--fs-footer-border": b?.footerBorder
113
+ }), [z, B] = O(/* @__PURE__ */ new Set()), H = D(/* @__PURE__ */ new Map());
114
+ C(() => {
115
+ let e = H.current;
71
116
  return () => {
72
117
  e.forEach((e) => clearTimeout(e)), e.clear();
73
118
  };
74
119
  }, []);
75
- let V = f != null, H = f?.toLowerCase() ?? "", U = V ? r.filter((e) => e.name.toLowerCase().includes(H)) : r, W = x(null), [G, K] = S();
76
- y(() => {
77
- W.current && K(Math.min(W.current.scrollHeight, P));
78
- }, [r, f]);
79
- let q = (e, t) => {
120
+ let W = h != null, J = _ && !W, Y = W || J ? "none" : void 0, X = "button";
121
+ W ? X = "option" : J && (X = "menuitem");
122
+ let te = w(), Z = m != null, Q = m?.toLowerCase() ?? "", ne = Z ? n.filter((e) => e.name.toLowerCase().includes(Q)) : n, $ = D(null), [re, ie] = O();
123
+ T(() => {
124
+ $.current && ie(Math.min($.current.scrollHeight, q));
125
+ }, [n, m]);
126
+ let ae = (e, t) => {
80
127
  e.target === e.currentTarget && (e.key === "Enter" || e.key === " ") && (e.preventDefault(), i(t));
81
- }, J = (e) => {
82
- z((t) => new Set(t).add(e));
128
+ }, oe = (e) => {
129
+ B((t) => new Set(t).add(e));
83
130
  let t = setTimeout(() => {
84
- a(e), z((t) => {
131
+ a?.(e), B((t) => {
85
132
  let n = new Set(t);
86
133
  return n.delete(e), n;
87
- }), B.current.delete(e);
88
- }, N);
89
- B.current.set(e, t);
134
+ }), H.current.delete(e);
135
+ }, K);
136
+ H.current.set(e, t);
90
137
  };
91
- return /* @__PURE__ */ D("div", {
92
- className: "flex w-full flex-col desktop:w-[280px]",
93
- style: L,
138
+ return /* @__PURE__ */ I("div", {
139
+ className: r("flex w-full flex-col desktop:w-[280px]", l, V.favoritesPanel),
140
+ style: R,
94
141
  children: [
95
- /* @__PURE__ */ E("p", {
96
- className: n(_, M, j.header),
97
- children: C
142
+ /* @__PURE__ */ F("p", {
143
+ id: te,
144
+ className: r(S, ee, G.header),
145
+ children: k
98
146
  }),
99
- /* @__PURE__ */ E("div", {
100
- className: n("max-h-72 min-h-0 flex-1 overflow-y-auto", j.listContent),
101
- style: { maxHeight: G },
102
- children: /* @__PURE__ */ E("div", {
103
- ref: W,
104
- children: U.length > 0 ? /* @__PURE__ */ E("ul", {
147
+ /* @__PURE__ */ F("div", {
148
+ className: r("max-h-72 min-h-0 flex-1 overflow-y-auto", G.listContent),
149
+ style: { maxHeight: re },
150
+ children: /* @__PURE__ */ F("div", {
151
+ ref: $,
152
+ children: ne.length > 0 ? /* @__PURE__ */ F("ul", {
153
+ id: h,
154
+ role: W ? "listbox" : Y,
155
+ "aria-labelledby": W ? te : void 0,
105
156
  className: "flex flex-col gap-1 px-1 pb-1",
106
- children: U.map((t) => {
107
- let r = /* @__PURE__ */ D("div", {
108
- role: "button",
157
+ children: ne.map((t) => {
158
+ let n = W ? `${h}-${encodeURIComponent(t.id)}` : void 0, o = W ? -1 : void 0, l = /* @__PURE__ */ I("div", {
159
+ role: X,
160
+ id: n,
161
+ "aria-selected": W ? n === g : void 0,
162
+ "aria-label": t.name,
109
163
  tabIndex: 0,
110
- className: n("flex cursor-pointer items-center gap-2 rounded-lg border border-transparent px-2 py-1.5 transition-colors", j.row),
164
+ className: r("flex cursor-pointer items-center gap-2 rounded-lg border border-transparent px-2 py-1.5 transition-colors", G.row, u),
111
165
  onClick: () => i(t),
112
- onKeyDown: (e) => q(e, t),
166
+ onKeyDown: (e) => ae(e, t),
113
167
  children: [
114
- /* @__PURE__ */ E(e, {
115
- size: s.MD,
168
+ /* @__PURE__ */ F(e, {
169
+ size: c.MD,
116
170
  initialsName: t.name
117
171
  }),
118
- f == null ? /* @__PURE__ */ E("span", {
119
- className: n(g, "min-w-0 flex-1 truncate text-start"),
172
+ m == null ? /* @__PURE__ */ F("span", {
173
+ className: r(x, "min-w-0 flex-1 truncate text-start"),
120
174
  children: t.name
121
- }) : /* @__PURE__ */ E(u, {
175
+ }) : /* @__PURE__ */ F(f, {
122
176
  text: t.name,
123
- query: f,
177
+ query: m,
124
178
  maxLines: 1,
125
- className: n(g, "min-w-0 flex-1 text-start")
179
+ className: r(x, "min-w-0 flex-1 text-start")
126
180
  }),
127
- /* @__PURE__ */ E(m, {
128
- icon: /* @__PURE__ */ E(T, {
129
- size: s.SM,
130
- className: j.star,
181
+ a && /* @__PURE__ */ F(v, {
182
+ icon: /* @__PURE__ */ F(M, {
183
+ size: c.SM,
184
+ className: G.star,
131
185
  "aria-hidden": !0
132
186
  }),
133
- "aria-label": A,
187
+ "aria-label": N,
134
188
  isSelected: !0,
189
+ tabIndex: o,
135
190
  onClick: (e) => {
136
- e.stopPropagation(), J(t.id);
191
+ e.stopPropagation(), oe(t.id);
137
192
  }
138
193
  })
139
194
  ]
140
195
  });
141
- return /* @__PURE__ */ E("li", {
142
- className: R.has(t.id) ? j.rowLeaving : j.rowEnter,
143
- children: /* @__PURE__ */ E(d, {
196
+ return /* @__PURE__ */ F("li", {
197
+ role: Y,
198
+ className: z.has(t.id) ? G.rowLeaving : G.rowEnter,
199
+ children: s ? /* @__PURE__ */ F(p, {
144
200
  asChild: !0,
145
201
  contentClassName: "max-w-[550px]",
146
- content: /* @__PURE__ */ E(k, {
202
+ content: /* @__PURE__ */ F(U, {
147
203
  description: t.description,
148
- viewDetailsLabel: F,
149
- onViewDetails: () => c(t)
204
+ viewDetailsLabel: P,
205
+ onViewDetails: () => s(t),
206
+ viewDetailsTabIndex: o
150
207
  }),
151
- children: r
152
- })
208
+ children: l
209
+ }) : l
153
210
  }, t.id);
154
211
  })
155
- }) : V && H !== "" ? /* @__PURE__ */ E("p", {
212
+ }) : Z && Q !== "" ? /* @__PURE__ */ F("p", {
156
213
  role: "status",
157
214
  "aria-live": "polite",
158
- className: n(b, "px-4 py-4 text-start", j.emptyHint),
159
- children: I
160
- }) : /* @__PURE__ */ E("p", {
161
- className: n(b, "px-4 py-4 text-start", j.emptyHint),
162
- children: w
215
+ className: r(E, "px-4 py-4 text-start", G.emptyHint),
216
+ children: L
217
+ }) : /* @__PURE__ */ F("p", {
218
+ className: r(E, "px-4 py-4 text-start", G.emptyHint),
219
+ children: A
163
220
  })
164
221
  })
165
222
  }),
166
- /* @__PURE__ */ E("div", {
167
- className: n("border-t px-2 py-3", j.footer),
168
- children: /* @__PURE__ */ E(l, {
169
- label: O,
223
+ /* @__PURE__ */ F("div", {
224
+ className: r("border-t px-2 py-3", G.footer),
225
+ children: /* @__PURE__ */ F(d, {
226
+ role: J ? "menuitem" : void 0,
227
+ label: j,
170
228
  className: "w-full justify-center",
171
229
  onClick: o
172
230
  })
173
231
  })
174
232
  ]
175
233
  });
176
- }, I = ({ isOpen: e, onClose: t, onSelect: n, title: r, renderContent: i }) => /* @__PURE__ */ E(f, {
234
+ }, Y = ".zip,.md", X = ({ isOpen: e, errorText: t, isUploading: n = !1, accept: r = Y, labels: i, onClose: a, onFilesSelected: o, onFilesRejected: s }) => {
235
+ let { dialogTitle: c = "Upload skill", dropZoneLabel: l = "Drag and drop it or click here to upload", dropZoneMobileLabel: d = "Click here to upload", formatsLabel: f = "File formats .zip and SKILL.md", fileInputAriaLabel: p = "Upload a skill ZIP archive or a SKILL.md file", closeAriaLabel: g = "Close", uploadingAriaLabel: v = "Uploading skill" } = i ?? {};
236
+ return /* @__PURE__ */ F(m, {
237
+ open: e,
238
+ size: h.Sm,
239
+ header: c,
240
+ closeAriaLabel: g,
241
+ onClose: a,
242
+ children: /* @__PURE__ */ I("div", {
243
+ className: "flex flex-col gap-4 px-6 py-4",
244
+ children: [/* @__PURE__ */ F(u, {
245
+ label: /* @__PURE__ */ I(P, { children: [/* @__PURE__ */ F("span", {
246
+ className: "desktop:hidden",
247
+ children: d
248
+ }), /* @__PURE__ */ F("span", {
249
+ className: "hidden desktop:inline",
250
+ children: l
251
+ })] }),
252
+ description: f,
253
+ ariaLabel: p,
254
+ accept: r,
255
+ disabled: n,
256
+ errorText: n ? void 0 : t,
257
+ onChange: o,
258
+ onReject: s
259
+ }), n && /* @__PURE__ */ F(_, { ariaLabel: v })]
260
+ })
261
+ });
262
+ }, te = ({ isOpen: e, onClose: t, onSelect: n, title: r, renderContent: i }) => /* @__PURE__ */ F(m, {
177
263
  open: e,
178
264
  header: r,
179
- size: p.Lg,
265
+ size: h.Lg,
180
266
  className: "h-[min(90vh,860px)] !max-w-[min(95vw,1200px)] overflow-hidden",
181
267
  onClose: t,
182
- children: /* @__PURE__ */ E("div", {
268
+ children: /* @__PURE__ */ F("div", {
183
269
  className: "h-[min(80vh,840px)] overflow-auto",
184
- children: /* @__PURE__ */ E(g, {
270
+ children: /* @__PURE__ */ F(x, {
185
271
  fallback: null,
186
272
  children: e && i(n, t)
187
273
  })
188
274
  })
189
- }), L = (e) => /* @__PURE__ */ E(O, { ...e }), R = (e) => ({
275
+ }), Z = (e, t = null) => e.map((e) => e.type === z.Folder ? {
276
+ path: e.id,
277
+ name: e.name,
278
+ nodeType: L.FOLDER,
279
+ parentPath: t,
280
+ folderId: e.id,
281
+ items: Z(e.items, e.id)
282
+ } : {
283
+ path: e.id,
284
+ name: e.name,
285
+ nodeType: L.ITEM,
286
+ parentPath: t,
287
+ folderId: t ?? ""
288
+ }), Q = ({ nodes: e, selectedFileId: t, expandedFolderIds: n, onToggleFolder: r, onSelectFile: i, onClose: a, ariaLabel: o }) => /* @__PURE__ */ F(R, {
289
+ items: E(() => Z(e), [e]),
290
+ showFiles: !0,
291
+ areHiddenFilesVisible: !0,
292
+ selectedPath: t,
293
+ expandedPaths: E(() => new Set(n), [n]),
294
+ onExpandedPathsChange: (e) => {
295
+ for (let t of e) n.has(t) || r(t);
296
+ for (let t of n) e.has(t) || r(t);
297
+ },
298
+ onItemClick: (e) => {
299
+ e.nodeType === L.ITEM && i(e.path);
300
+ },
301
+ ariaLabel: o,
302
+ autoFocus: !0,
303
+ onEscape: a
304
+ }), ne = (e) => /* @__PURE__ */ F(B, {
305
+ ...e,
306
+ renderContentFileTree: (e) => /* @__PURE__ */ F(Q, { ...e })
307
+ }), $ = (e) => e == null || /[\s/]/.test(e), re = (e, t, n) => {
308
+ let r = [], i = 0;
309
+ return t.forEach((t, a) => {
310
+ let o = `/${n(t.url)}`, s = i;
311
+ for (; s <= e.length;) {
312
+ let t = e.indexOf(o, s);
313
+ if (t === -1) return;
314
+ let n = t + o.length;
315
+ if ($(e[n])) {
316
+ r.push({
317
+ skillIndex: a,
318
+ start: t,
319
+ length: o.length
320
+ }), i = n;
321
+ return;
322
+ }
323
+ s = t + 1;
324
+ }
325
+ }), r;
326
+ }, ie = (e, t) => {
327
+ let n = Math.min(e.length, t.length), r = 0;
328
+ for (; r < n && e[r] === t[r];) r += 1;
329
+ let i = n - r, a = 0;
330
+ for (; a < i && e[e.length - 1 - a] === t[t.length - 1 - a];) a += 1;
331
+ return {
332
+ start: r,
333
+ deletedLength: e.length - r - a,
334
+ insertedLength: t.length - r - a
335
+ };
336
+ }, ae = (e, t) => {
337
+ let n = t.start + t.deletedLength, r = t.insertedLength - t.deletedLength;
338
+ return e.reduce((e, i) => i.start + i.length <= t.start ? (e.push(i), e) : (i.start >= n && e.push({
339
+ ...i,
340
+ start: i.start + r
341
+ }), e), []);
342
+ }, oe = (e, t, n, r, i) => {
343
+ let a = r.length + 1, o = a + +!!i, s = e.map((e) => e.start >= t ? {
344
+ ...e,
345
+ start: e.start + o
346
+ } : e), c = {
347
+ url: n,
348
+ name: r,
349
+ start: t,
350
+ length: a
351
+ };
352
+ return [...s, c].sort((e, t) => e.start - t.start);
353
+ }, se = (e, t) => e.find((e) => e.start + e.length === t), ce = (e, t, n) => {
354
+ let r = t;
355
+ for (; r > 0 && !/\s/.test(e[r - 1]);) r--;
356
+ let i = r;
357
+ for (; i < e.length && !/\s/.test(e[i]);) i++;
358
+ let a = e.slice(r, i);
359
+ if (!(!a.startsWith(n) || a.slice(n.length).includes(n))) return {
360
+ start: r,
361
+ end: i
362
+ };
363
+ }, le = () => {
364
+ let [e, t] = O(""), [n, r] = O([]), i = D(e);
365
+ i.current = e;
366
+ let a = D(n);
367
+ a.current = n;
368
+ let o = S((e) => {
369
+ let n = ie(i.current, e);
370
+ r((e) => ae(e, n)), i.current = e, t(e);
371
+ }, []), s = S((e, n, a) => {
372
+ let o = i.current, s = !/^\s/.test(o.slice(a)), c = `/${n}${s ? " " : ""}`, l = o.slice(0, a) + c + o.slice(a);
373
+ return i.current = l, t(l), r((t) => oe(t, a, e, n, s)), s;
374
+ }, []), c = S((e, n, a) => {
375
+ let o = i.current, s = `/${n}`, c = o.slice(0, a) + s + o.slice(a);
376
+ i.current = c, t(c), r((t) => oe(t, a, e, n, !1));
377
+ }, []), l = S((e) => se(a.current, e), []), u = E(() => {
378
+ if (n.length !== 0) return n.map((e) => ({ url: e.url }));
379
+ }, [n]), d = S(() => {
380
+ t(""), r([]);
381
+ }, []), f = S((e, n, i) => {
382
+ let a = n ?? [], o = re(e, a, i);
383
+ t(e), r(o.map((e) => {
384
+ let t = a[e.skillIndex];
385
+ return {
386
+ url: t.url,
387
+ name: i(t.url),
388
+ start: e.start,
389
+ length: e.length
390
+ };
391
+ }));
392
+ }, []);
393
+ return E(() => ({
394
+ draft: e,
395
+ anchors: n,
396
+ onDraftChange: o,
397
+ insertMention: s,
398
+ restoreMention: c,
399
+ onBackspaceAtCaret: l,
400
+ orderedSkills: u,
401
+ reset: d,
402
+ seedFromMessage: f
403
+ }), [
404
+ e,
405
+ n,
406
+ o,
407
+ s,
408
+ c,
409
+ l,
410
+ u,
411
+ d,
412
+ f
413
+ ]);
414
+ }, ue = (e) => ({
190
415
  id: e.url,
191
416
  name: e.name,
192
417
  description: e.description
193
- }), z = (e) => {
418
+ }), de = (e) => {
194
419
  let t = e.split("/").filter((e) => e.length > 0);
195
420
  return t[t.length - 1] ?? e;
196
- }, B = ({ isEnabled: e, isSkillsSupported: t, skills: n, sharedWithMe: i, publicSkills: a, favoriteIds: o, onToggleFavorite: s, labels: l, historyChipLabelClassName: u, renderCatalogContent: d, detailsPanelComponent: f }) => {
197
- let { addMenuLabel: p = "Skills", backLabel: m = "Back", catalogModalTitleLabel: h = "Use skill", emptyQueryHintLabel: v = "Type to filter", unsupportedTooltipLabel: y = "Selected model does not support skills. Remove the skill or select different model to proceed.", panelLabels: x } = l ?? {}, w = e && t, [T, D] = S(!1), [O, k] = S(null), [j, M] = S(null), N = b(() => [
198
- ...n,
199
- ...i ?? [],
200
- ...a ?? []
421
+ }, fe = (e) => {
422
+ let t = e.split("/").filter((e) => e.length > 0);
423
+ return t[0] !== "skills" || t.length < 3 ? null : t[1];
424
+ }, pe = (e, t) => fe(e) === t ? H.Deleted : H.NotShared, me = "/", he = ({ isSkillsSupported: e, skills: t, sharedWithMe: n, publicSkills: r, favoriteIds: a, viewerBucket: o, onToggleFavorite: s, labels: c, historyChipLabelClassName: u, activeMentionDetailsTrigger: d, renderCatalogContent: f, detailsPanelComponent: p }) => {
425
+ let { addMenuLabel: m = "Skills", backLabel: h = "Back", catalogModalTitleLabel: g = "Use skill", emptyQueryHintLabel: _ = "Type to filter", deletedTooltipLabel: v, notSharedTooltipLabel: y, panelLabels: b } = c ?? {}, [C, w] = O(!1), [T, A] = O(null), [j, M] = O(0), N = D(null), [P, I] = O(0), [L, R] = O(void 0), z = le(), B = E(() => [
426
+ ...t,
427
+ ...n ?? [],
428
+ ...r ?? []
201
429
  ], [
430
+ t,
202
431
  n,
203
- i,
204
- a
205
- ]), P = b(() => new Map(N.map((e) => [e.url, e])), [N]), L = b(() => N.filter((e) => o.has(e.url)).map((e) => R(e)), [N, o]), B = b(() => j == null ? null : P.get(j) ?? null, [P, j]), V = B != null && !t, H = _((e) => {
206
- M(e);
207
- }, []), U = _(() => {
208
- M(null);
209
- }, []), W = j, G = b(() => j == null ? void 0 : [{ url: j }], [j]), K = b(() => B == null ? null : /* @__PURE__ */ E(A, {
210
- name: B.name,
211
- path: B.url,
212
- description: B.description,
213
- isUnsupported: V,
214
- onViewDetails: k,
215
- labels: {
216
- viewDetailsLabel: x?.viewDetailsLabel,
217
- unsupportedTooltipLabel: y
218
- }
219
- }), [
220
- B,
432
+ r
433
+ ]), V = E(() => new Map(B.map((e) => [e.url, e])), [B]), H = S((e) => V.get(e)?.name ?? de(e), [V]), U = E(() => B.filter((e) => a.has(e.url)).map((e) => ue(e)), [B, a]), G = z.anchors.length > 0 && !e, ee = E(() => z.anchors.map((t) => ({
434
+ start: t.start,
435
+ length: t.length,
436
+ isUnsupported: !e,
437
+ render: () => /* @__PURE__ */ F(W, {
438
+ name: t.name,
439
+ path: t.url,
440
+ labelClassName: u,
441
+ description: V.get(t.url)?.description,
442
+ isUnsupported: !e,
443
+ detailsTrigger: d,
444
+ onViewDetails: A,
445
+ labels: { viewDetailsLabel: b?.viewDetailsLabel }
446
+ })
447
+ })), [
448
+ z.anchors,
449
+ e,
450
+ V,
451
+ u,
452
+ d,
453
+ b
454
+ ]), K = S((e, t, n) => {
455
+ let r = z.insertMention(e, t, n);
456
+ I((e) => e + 1), R(n + 1 + t.length + +!!r);
457
+ }, [z]), q = S((e) => {
458
+ let t = ce(z.draft, e, me);
459
+ return t == null ? e : (z.onDraftChange(z.draft.slice(0, t.start) + z.draft.slice(t.end)), t.start);
460
+ }, [z]), Y = S((e) => {
461
+ let t = ce(z.draft, e, me);
462
+ if (t == null) return;
463
+ let n = z.anchors.find((e) => e.start === t.start && e.start + e.length === t.end);
464
+ return {
465
+ position: t.start,
466
+ text: z.draft.slice(t.start, t.end),
467
+ mentionUrl: n?.url
468
+ };
469
+ }, [z]), X = S(() => {
470
+ z.reset(), I((e) => e + 1), R(void 0);
471
+ }, [z]), Z = S((e, t) => {
472
+ z.seedFromMessage(e, t, H), I((e) => e + 1), R(void 0);
473
+ }, [z, H]), Q = S((e, t) => {
474
+ if (t == null || t.length === 0) return null;
475
+ let n = re(e, t, H), r = [], i = 0;
476
+ return n.forEach((n) => {
477
+ n.start > i && r.push(e.slice(i, n.start));
478
+ let a = t[n.skillIndex], s = V.get(a.url), c = s?.name ?? de(a.url), l = s == null ? pe(a.url, o) : void 0;
479
+ r.push(/* @__PURE__ */ F(W, {
480
+ name: c,
481
+ path: a.url,
482
+ labelClassName: u,
483
+ description: s?.description,
484
+ unresolvedReason: l,
485
+ onViewDetails: A,
486
+ labels: {
487
+ viewDetailsLabel: b?.viewDetailsLabel,
488
+ deletedTooltipLabel: v,
489
+ notSharedTooltipLabel: y
490
+ }
491
+ }, `${a.url}-${n.start}`)), i = n.start + n.length;
492
+ }), i < e.length && r.push(e.slice(i)), r;
493
+ }, [
494
+ H,
221
495
  V,
222
- x,
496
+ u,
497
+ b,
498
+ o,
499
+ v,
223
500
  y
224
- ]), q = _((e) => e == null || e.length === 0 ? null : e.map((e) => {
225
- let t = P.get(e.url);
226
- return /* @__PURE__ */ E(A, {
227
- name: t?.name ?? z(e.url),
501
+ ]), ne = S((e) => e == null || e.length === 0 ? null : e.map((e) => {
502
+ let t = V.get(e.url), n = t?.name ?? de(e.url), r = t == null ? pe(e.url, o) : void 0;
503
+ return /* @__PURE__ */ F(W, {
504
+ name: n,
228
505
  path: e.url,
229
506
  labelClassName: u,
230
507
  description: t?.description,
231
- onViewDetails: k,
232
- labels: { viewDetailsLabel: x?.viewDetailsLabel }
508
+ unresolvedReason: r,
509
+ onViewDetails: A,
510
+ labels: {
511
+ viewDetailsLabel: b?.viewDetailsLabel,
512
+ deletedTooltipLabel: v,
513
+ notSharedTooltipLabel: y
514
+ }
233
515
  }, e.url);
234
516
  }), [
235
- P,
517
+ V,
236
518
  u,
237
- x
238
- ]), J = _((e) => /* @__PURE__ */ E(F, {
239
- favorites: L,
240
- onSelect: (t) => {
241
- H(t.id), e();
519
+ b,
520
+ o,
521
+ v,
522
+ y
523
+ ]), $ = S((e, t) => /* @__PURE__ */ F(J, {
524
+ favorites: U,
525
+ isMenu: !0,
526
+ onSelect: (n) => {
527
+ K(n.id, n.name, q(t)), e();
242
528
  },
243
529
  onToggleFavorite: s,
244
530
  onBrowse: () => {
245
- e(), D(!0);
531
+ let n = Y(t);
532
+ M(q(t)), N.current = n ?? null, e(), w(!0);
246
533
  },
247
- onViewDetails: (t) => {
248
- e(), k(t.id);
534
+ onViewDetails: (n) => {
535
+ q(t), e(), A(n.id);
249
536
  },
250
- labels: x
537
+ labels: b
251
538
  }), [
252
- L,
253
- H,
539
+ U,
540
+ K,
541
+ q,
542
+ Y,
254
543
  s,
255
- x
256
- ]), Y = b(() => w ? {
257
- key: "skills",
258
- title: p,
259
- icon: /* @__PURE__ */ E(C, {
260
- size: r,
261
- "aria-hidden": !0,
262
- stroke: c
263
- }),
264
- renderOverlay: J,
265
- backLabel: m
266
- } : void 0, [
267
- w,
268
- p,
269
- m,
270
- J
271
- ]), X = b(() => w ? {
272
- triggerPrefix: "/",
273
- menuLabel: p,
274
- emptyQueryHint: v,
275
- renderMenu: ({ query: e, close: t }) => /* @__PURE__ */ E(F, {
276
- favorites: L,
277
- searchQuery: e,
278
- onSelect: (e) => {
279
- t({ consumeQuery: !0 }), H(e.id);
280
- },
281
- onToggleFavorite: s,
282
- onBrowse: () => {
283
- t({ consumeQuery: !0 }), D(!0);
284
- },
285
- onViewDetails: (e) => {
286
- t({ consumeQuery: !0 }), k(e.id);
287
- },
288
- labels: x
289
- })
290
- } : void 0, [
291
- w,
292
- p,
293
- v,
294
- L,
295
- H,
296
- s,
297
- x
544
+ b
298
545
  ]);
299
- return e ? {
300
- skillMenuOverlay: Y,
301
- commandMenu: X,
302
- skillCatalogModal: /* @__PURE__ */ E(I, {
303
- isOpen: T,
304
- onClose: () => D(!1),
546
+ return {
547
+ skillMenuOverlay: E(() => e ? {
548
+ key: "skills",
549
+ title: m,
550
+ icon: /* @__PURE__ */ F(k, {
551
+ size: i,
552
+ "aria-hidden": !0,
553
+ stroke: l
554
+ }),
555
+ renderOverlay: $,
556
+ backLabel: h
557
+ } : void 0, [
558
+ e,
559
+ m,
560
+ h,
561
+ $
562
+ ]),
563
+ commandMenu: E(() => e ? {
564
+ triggerPrefix: me,
565
+ menuLabel: m,
566
+ emptyQueryHint: _,
567
+ renderMenu: ({ query: e, caretPosition: t, close: n, listboxId: r, activeOptionId: i }) => /* @__PURE__ */ F(J, {
568
+ favorites: U,
569
+ searchQuery: e,
570
+ listboxId: r,
571
+ activeOptionId: i,
572
+ onSelect: (e) => {
573
+ n({ consumeQuery: !0 }), K(e.id, e.name, t);
574
+ },
575
+ onToggleFavorite: s,
576
+ onBrowse: () => {
577
+ let r = `${me}${e}`, i = z.anchors.find((e) => e.start === t && e.length === r.length);
578
+ n({
579
+ consumeQuery: !0,
580
+ returnFocus: !1
581
+ }), M(t), N.current = {
582
+ position: t,
583
+ text: r,
584
+ mentionUrl: i?.url
585
+ }, w(!0);
586
+ },
587
+ onViewDetails: (e) => {
588
+ n({ consumeQuery: !0 }), A(e.id);
589
+ },
590
+ labels: b
591
+ })
592
+ } : void 0, [
593
+ e,
594
+ m,
595
+ _,
596
+ U,
597
+ K,
598
+ z.anchors,
599
+ s,
600
+ b
601
+ ]),
602
+ skillCatalogModal: /* @__PURE__ */ F(te, {
603
+ isOpen: C,
604
+ onClose: S(() => {
605
+ w(!1);
606
+ let e = N.current;
607
+ if (N.current = null, e == null) return;
608
+ let { position: t, text: n, mentionUrl: r } = e;
609
+ r == null ? z.onDraftChange(z.draft.slice(0, t) + n + z.draft.slice(t)) : z.restoreMention(r, n.slice(1), t), I((e) => e + 1), R(t + n.length);
610
+ }, [z]),
305
611
  onSelect: (e) => {
306
- H(e), D(!1);
612
+ N.current = null, K(e, H(e), j), w(!1);
307
613
  },
308
- title: h,
309
- renderContent: d
614
+ title: g,
615
+ renderContent: f
310
616
  }),
311
- skillDetailsPanel: /* @__PURE__ */ E(g, {
617
+ skillDetailsPanel: /* @__PURE__ */ F(x, {
312
618
  fallback: null,
313
- children: /* @__PURE__ */ E(f, {
314
- skillId: O,
315
- onClose: () => k(null)
619
+ children: /* @__PURE__ */ F(p, {
620
+ skillId: T,
621
+ onClose: () => A(null)
316
622
  })
317
623
  }),
318
- selectedSkillElement: K,
319
- selectedSkillPath: W,
320
- selectedSkills: G,
321
- isSkillUnsupported: V,
322
- selectSkill: H,
323
- removeSelectedSkill: U,
324
- renderHistorySkills: q
325
- } : {
326
- skillMenuOverlay: void 0,
327
- commandMenu: void 0,
328
- skillCatalogModal: null,
329
- skillDetailsPanel: null,
330
- selectedSkillElement: null,
331
- selectedSkillPath: null,
332
- selectedSkills: void 0,
333
- isSkillUnsupported: !1,
334
- selectSkill: () => void 0,
335
- removeSelectedSkill: () => void 0,
336
- renderHistorySkills: () => null
624
+ message: z.draft,
625
+ messageRevision: P,
626
+ activeMentions: ee,
627
+ onDraftChange: z.onDraftChange,
628
+ onBackspaceAtCaret: z.onBackspaceAtCaret,
629
+ caretPositionOverride: L,
630
+ isSkillUnsupported: G,
631
+ selectedSkills: z.orderedSkills,
632
+ resetSkillMentions: X,
633
+ seedSkillMentions: Z,
634
+ renderHistorySkillSegments: Q,
635
+ renderHistorySkills: ne
337
636
  };
637
+ }, ge = {
638
+ background: "_background_14zdf_1",
639
+ border: "_border_14zdf_5",
640
+ value: "_value_14zdf_9",
641
+ clear: "_clear_14zdf_13",
642
+ invalid: "_invalid_14zdf_17"
643
+ }, _e = [], ve = "Selected model does not support skills. Select a different model to use a skill.", ye = ({ value: i, onChange: a, displayNames: o, skills: s = _e, isSkillsSupported: l, isDisabled: u = !1, error: d, labels: p, className: m, styles: h }) => {
644
+ let [_, v] = O(!1), [b, x] = O(""), S = D(null), C = w(), E = i.some((e) => n(e, l)), k = l && !u, A = _ && k, j = i.length > 0 ? p.unsupportedTooltipLabel : p.unavailableTooltipLabel ?? ve, M = !l && i.length === 0, N = d ?? (M ? j : void 0), P = new Map(i.map((e) => [e, {
645
+ id: e,
646
+ name: o?.[e] || e
647
+ }]));
648
+ s.forEach((e) => P.set(e.id, e));
649
+ let L = [...P.values()].map((t) => ({
650
+ value: t.id,
651
+ label: t.name,
652
+ labelNode: b.trim() ? /* @__PURE__ */ F(f, {
653
+ text: t.name,
654
+ query: b,
655
+ maxLines: 1
656
+ }) : void 0,
657
+ icon: /* @__PURE__ */ F(e, {
658
+ size: c.SM,
659
+ initialsName: t.name
660
+ }),
661
+ disabled: !l
662
+ })), R = {
663
+ ...t({
664
+ "--ssf-text": h?.colors?.text,
665
+ "--ssf-bg": h?.colors?.background,
666
+ "--ssf-border": h?.colors?.border,
667
+ "--ssf-error": h?.colors?.error
668
+ }),
669
+ ...h?.cssVars
670
+ };
671
+ return T(() => {
672
+ let e = S.current?.querySelector("[role=\"combobox\"]");
673
+ e && (N ? e.setAttribute("aria-describedby", C) : e.removeAttribute("aria-describedby"), d || E ? e.setAttribute("aria-invalid", "true") : e.removeAttribute("aria-invalid"));
674
+ }, [
675
+ N,
676
+ C,
677
+ d,
678
+ u,
679
+ E
680
+ ]), /* @__PURE__ */ I("div", {
681
+ ref: S,
682
+ className: r("min-w-0", m, V.selectorField),
683
+ style: R,
684
+ children: [/* @__PURE__ */ F(y, {
685
+ tooltip: j,
686
+ hideTooltip: l,
687
+ triggerClassName: "block w-full min-w-0",
688
+ children: /* @__PURE__ */ F("div", {
689
+ inert: u ? !0 : void 0,
690
+ children: /* @__PURE__ */ F(g, {
691
+ multiple: !0,
692
+ searchable: !0,
693
+ open: A,
694
+ onOpenChange: (e) => {
695
+ e && !k || v(e);
696
+ },
697
+ onSearchQueryChange: x,
698
+ value: i,
699
+ onChange: (e) => {
700
+ u || a(Array.isArray(e) ? e : [e]);
701
+ },
702
+ options: L,
703
+ placeholder: p.placeholder,
704
+ labelProps: { label: p.fieldLabel },
705
+ error: d,
706
+ caption: M ? j : void 0,
707
+ searchPlaceholder: p.searchPlaceholder ?? "Search skills",
708
+ emptyStateTitle: b.trim() ? p.noMatchingSkillsLabel ?? "No matching skills" : p.emptyLabel ?? "No skills available",
709
+ disabled: u || M,
710
+ invalid: !!d || E,
711
+ className: "w-full min-w-0",
712
+ fieldClassName: r(k ? "cursor-pointer" : "cursor-not-allowed", "--ssf-bg" in R && ge.background, "--ssf-border" in R && ge.border, "--ssf-text" in R && ge.value, (d || E) && ge.invalid, h?.typography?.fontClassName ?? "dial-small-text", h?.triggerClassName),
713
+ listClassName: "w-[min(var(--reference-width),calc(100vw-2rem))] max-w-full"
714
+ })
715
+ })
716
+ }), N && /* @__PURE__ */ F("span", {
717
+ id: C,
718
+ className: "sr-only",
719
+ children: N
720
+ })]
721
+ });
338
722
  };
339
723
  //#endregion
340
- export { A as ChatSkill, F as FavoriteSkillsPanel, I as SkillCatalogModal, L as SkillDetailsSidePanel, k as SkillInfoTooltipContent, R as buildFavoriteSkillItem, B as useSkillSelectorOverlay };
724
+ export { W as ChatSkill, J as FavoriteSkillsPanel, V as SKILLS_CLASS, X as SkillArchiveUploadDialog, te as SkillCatalogModal, Q as SkillContentFileTree, ne as SkillDetailsSidePanel, U as SkillInfoTooltipContent, ye as SkillSelectorField, H as SkillUnresolvedReason, ue as buildFavoriteSkillItem, ie as diffTextChange, se as findMentionAtCaret, de as getSkillFallbackName, oe as insertAnchor, re as matchSkillMentions, ae as reconcileAnchors, le as useSkillMentions, he as useSkillSelectorOverlay };