@epam/ai-dial-skills 1.2.0-dev.3 → 1.2.0-dev.300

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 (51) 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 +14 -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 +639 -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-skill-item.d.ts +1 -1
  27. package/models/favorite-skill-item.d.ts.map +1 -1
  28. package/models/favorite-skills-panel-props.d.ts +32 -5
  29. package/models/favorite-skills-panel-props.d.ts.map +1 -1
  30. package/models/skill-archive-upload-dialog-props.d.ts +37 -0
  31. package/models/skill-archive-upload-dialog-props.d.ts.map +1 -0
  32. package/models/skill-info-tooltip-content-props.d.ts +19 -0
  33. package/models/skill-info-tooltip-content-props.d.ts.map +1 -1
  34. package/models/skill-mention-anchor.d.ts +12 -0
  35. package/models/skill-mention-anchor.d.ts.map +1 -0
  36. package/models/skill-selector-field-props.d.ts +72 -0
  37. package/models/skill-selector-field-props.d.ts.map +1 -0
  38. package/models/skill-selector-overlay.d.ts +138 -56
  39. package/models/skill-selector-overlay.d.ts.map +1 -1
  40. package/package.json +6 -5
  41. package/test-setup.d.ts +1 -0
  42. package/types/skill-unresolved-reason.d.ts +8 -0
  43. package/types/skill-unresolved-reason.d.ts.map +1 -0
  44. package/utils/catalog-content-dial-files.d.ts +10 -0
  45. package/utils/catalog-content-dial-files.d.ts.map +1 -0
  46. package/utils/skill-mention-matching.d.ts +25 -0
  47. package/utils/skill-mention-matching.d.ts.map +1 -0
  48. package/utils/skill-mention-tracking.d.ts +51 -0
  49. package/utils/skill-mention-tracking.d.ts.map +1 -0
  50. package/utils/skill-url.d.ts +1 -0
  51. package/utils/skill-url.d.ts.map +1 -1
package/index.js CHANGED
@@ -1,340 +1,732 @@
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 ee, DetailsPanel as z } from "@epam/ai-dial-catalog";
8
+ //#region src/constants/public-class-names.ts
9
+ var B = {
10
+ selectorField: "dial-skills-selector-field",
11
+ favoritesPanel: "dial-skills-favorites-panel",
12
+ chip: "dial-skills-chip"
13
+ }, V = /* @__PURE__ */ function(e) {
14
+ return e.Deleted = "deleted", e.NotShared = "not-shared", e;
15
+ }({}), H = ({ 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 === V.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
+ }, U = ({ 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(H, { unsupportedMessage: m }) : /* @__PURE__ */ F(H, {
68
+ description: n,
36
69
  viewDetailsLabel: f,
37
- onViewDetails: () => {
38
- g((e) => e + 1), c(t);
39
- }
70
+ onViewDetails: C
71
+ }) : /* @__PURE__ */ F(H, {
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, B.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
+ }, W = {
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
+ }, G = "px-3 pb-0.5 pt-2", te = 180, ne = 288, K = ({ 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
+ }), [ee, z] = O(/* @__PURE__ */ new Set()), V = D(/* @__PURE__ */ new Map());
114
+ C(() => {
115
+ let e = V.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 U = h != null, K = _ && !U, q = U || K ? "none" : void 0, J = "button";
121
+ U ? J = "option" : K && (J = "menuitem");
122
+ let Y = w(), X = m != null, Z = m?.toLowerCase() ?? "", re = X ? n.filter((e) => e.name.toLowerCase().includes(Z)) : n, Q = D(null), [ie, ae] = O();
123
+ T(() => {
124
+ Q.current && ae(Math.min(Q.current.scrollHeight, ne));
125
+ }, [n, m]);
126
+ let $ = (e, t) => {
80
127
  e.target === e.currentTarget && (e.key === "Enter" || e.key === " ") && (e.preventDefault(), i(t));
81
- }, J = (e) => {
128
+ }, oe = (e) => {
82
129
  z((t) => new Set(t).add(e));
83
130
  let t = setTimeout(() => {
84
- a(e), z((t) => {
131
+ a?.(e), z((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
+ }), V.current.delete(e);
135
+ }, te);
136
+ V.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, B.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: Y,
144
+ className: r(S, G, W.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", W.listContent),
149
+ style: { maxHeight: ie },
150
+ children: /* @__PURE__ */ F("div", {
151
+ ref: Q,
152
+ children: re.length > 0 ? /* @__PURE__ */ F("ul", {
153
+ id: h,
154
+ role: U ? "listbox" : q,
155
+ "aria-labelledby": U ? Y : 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: re.map((t) => {
158
+ let n = U ? `${h}-${encodeURIComponent(t.id)}` : void 0, o = U ? -1 : void 0, l = /* @__PURE__ */ I("div", {
159
+ role: J,
160
+ id: n,
161
+ "aria-selected": U ? 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", W.row, u),
111
165
  onClick: () => i(t),
112
- onKeyDown: (e) => q(e, t),
166
+ onKeyDown: (e) => $(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: W.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: q,
198
+ className: ee.has(t.id) ? W.rowLeaving : W.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(H, {
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
+ }) : X && Z !== "" ? /* @__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", W.emptyHint),
216
+ children: L
217
+ }) : /* @__PURE__ */ F("p", {
218
+ className: r(E, "px-4 py-4 text-start", W.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", W.footer),
225
+ children: /* @__PURE__ */ F(d, {
226
+ role: K ? "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
+ }, q = ".zip,.md", J = ({ isOpen: e, errorText: t, isUploading: n = !1, accept: r = q, 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
+ }, Y = ({ 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
+ }), X = (e, t = null) => e.map((e) => e.type === ee.Folder ? {
276
+ path: e.id,
277
+ name: e.name,
278
+ nodeType: L.FOLDER,
279
+ parentPath: t,
280
+ folderId: e.id,
281
+ items: X(e.items, e.id)
282
+ } : {
283
+ path: e.id,
284
+ name: e.name,
285
+ nodeType: L.ITEM,
286
+ parentPath: t,
287
+ folderId: t ?? ""
288
+ }), Z = ({ nodes: e, selectedFileId: t, expandedFolderIds: n, onToggleFolder: r, onSelectFile: i, onClose: a, ariaLabel: o }) => /* @__PURE__ */ F(R, {
289
+ items: E(() => X(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
+ }), re = (e) => /* @__PURE__ */ F(z, {
305
+ ...e,
306
+ renderContentFileTree: (e) => /* @__PURE__ */ F(Z, { ...e })
307
+ }), Q = (e) => e == null || /[\s/]/.test(e), ie = (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 (Q(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
+ }, ae = (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
+ }, $ = (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 = ae(i.current, e);
370
+ r((e) => $(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 = ie(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 ? V.Deleted : V.NotShared, me = "/", he = ({ isSkillsSupported: e, skills: t, sharedWithMe: n, publicSkills: r, favoriteIds: a, viewerBucket: o, onToggleFavorite: s, labels: c, historyChipLabelClassName: u, activeMentionDetailsTrigger: d, historyDetailsTrigger: f, renderCatalogContent: p, detailsPanelComponent: m }) => {
425
+ let { addMenuLabel: h = "Skills", backLabel: g = "Back", catalogModalTitleLabel: _ = "Use skill", emptyQueryHintLabel: v = "Type to filter", deletedTooltipLabel: y, notSharedTooltipLabel: b, unsupportedTooltipLabel: C, panelLabels: w } = c ?? {}, [T, A] = O(!1), [j, M] = O(null), [N, P] = O(0), I = D(null), [L, R] = O(0), [ee, z] = O(void 0), B = le(), V = 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,
221
- V,
222
- x,
223
- 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),
432
+ r
433
+ ]), H = E(() => new Map(V.map((e) => [e.url, e])), [V]), W = S((e) => H.get(e)?.name ?? de(e), [H]), G = E(() => V.filter((e) => a.has(e.url)).map((e) => ue(e)), [V, a]), te = B.anchors.length > 0 && !e, ne = E(() => B.anchors.map((t) => ({
434
+ start: t.start,
435
+ length: t.length,
436
+ isUnsupported: !e,
437
+ render: () => /* @__PURE__ */ F(U, {
438
+ name: t.name,
439
+ path: t.url,
440
+ labelClassName: u,
441
+ description: H.get(t.url)?.description,
442
+ isUnsupported: !e,
443
+ detailsTrigger: d,
444
+ onViewDetails: M,
445
+ labels: {
446
+ viewDetailsLabel: w?.viewDetailsLabel,
447
+ unsupportedTooltipLabel: C
448
+ }
449
+ })
450
+ })), [
451
+ B.anchors,
452
+ e,
453
+ H,
454
+ u,
455
+ d,
456
+ w,
457
+ C
458
+ ]), q = S((e, t, n) => {
459
+ let r = B.insertMention(e, t, n);
460
+ R((e) => e + 1), z(n + 1 + t.length + +!!r);
461
+ }, [B]), J = S((e) => {
462
+ let t = ce(B.draft, e, me);
463
+ return t == null ? e : (B.onDraftChange(B.draft.slice(0, t.start) + B.draft.slice(t.end)), t.start);
464
+ }, [B]), X = S((e) => {
465
+ let t = ce(B.draft, e, me);
466
+ if (t == null) return;
467
+ let n = B.anchors.find((e) => e.start === t.start && e.start + e.length === t.end);
468
+ return {
469
+ position: t.start,
470
+ text: B.draft.slice(t.start, t.end),
471
+ mentionUrl: n?.url
472
+ };
473
+ }, [B]), Z = S(() => {
474
+ B.reset(), R((e) => e + 1), z(void 0);
475
+ }, [B]), re = S((e, t) => {
476
+ B.seedFromMessage(e, t, W), R((e) => e + 1), z(void 0);
477
+ }, [B, W]), Q = S((e, t) => {
478
+ if (t == null || t.length === 0) return null;
479
+ let n = ie(e, t, W), r = [], i = 0;
480
+ return n.forEach((n) => {
481
+ n.start > i && r.push(e.slice(i, n.start));
482
+ let a = t[n.skillIndex], s = H.get(a.url), c = s?.name ?? de(a.url), l = s == null ? pe(a.url, o) : void 0;
483
+ r.push(/* @__PURE__ */ F(U, {
484
+ name: c,
485
+ path: a.url,
486
+ labelClassName: u,
487
+ description: s?.description,
488
+ unresolvedReason: l,
489
+ detailsTrigger: f,
490
+ onViewDetails: M,
491
+ labels: {
492
+ viewDetailsLabel: w?.viewDetailsLabel,
493
+ deletedTooltipLabel: y,
494
+ notSharedTooltipLabel: b
495
+ }
496
+ }, `${a.url}-${n.start}`)), i = n.start + n.length;
497
+ }), i < e.length && r.push(e.slice(i)), r;
498
+ }, [
499
+ W,
500
+ H,
501
+ u,
502
+ f,
503
+ w,
504
+ o,
505
+ y,
506
+ b
507
+ ]), ae = S((e) => e == null || e.length === 0 ? null : e.map((e) => {
508
+ let t = H.get(e.url), n = t?.name ?? de(e.url), r = t == null ? pe(e.url, o) : void 0;
509
+ return /* @__PURE__ */ F(U, {
510
+ name: n,
228
511
  path: e.url,
229
512
  labelClassName: u,
230
513
  description: t?.description,
231
- onViewDetails: k,
232
- labels: { viewDetailsLabel: x?.viewDetailsLabel }
514
+ unresolvedReason: r,
515
+ detailsTrigger: f,
516
+ onViewDetails: M,
517
+ labels: {
518
+ viewDetailsLabel: w?.viewDetailsLabel,
519
+ deletedTooltipLabel: y,
520
+ notSharedTooltipLabel: b
521
+ }
233
522
  }, e.url);
234
523
  }), [
235
- P,
524
+ H,
236
525
  u,
237
- x
238
- ]), J = _((e) => /* @__PURE__ */ E(F, {
239
- favorites: L,
240
- onSelect: (t) => {
241
- H(t.id), e();
526
+ f,
527
+ w,
528
+ o,
529
+ y,
530
+ b
531
+ ]), $ = S((e, t) => /* @__PURE__ */ F(K, {
532
+ favorites: G,
533
+ isMenu: !0,
534
+ onSelect: (n) => {
535
+ q(n.id, n.name, J(t)), e();
242
536
  },
243
537
  onToggleFavorite: s,
244
538
  onBrowse: () => {
245
- e(), D(!0);
539
+ let n = X(t);
540
+ P(J(t)), I.current = n ?? null, e(), A(!0);
246
541
  },
247
- onViewDetails: (t) => {
248
- e(), k(t.id);
542
+ onViewDetails: (n) => {
543
+ J(t), e(), M(n.id);
249
544
  },
250
- labels: x
545
+ labels: w
251
546
  }), [
252
- L,
253
- H,
547
+ G,
548
+ q,
549
+ J,
550
+ X,
254
551
  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
552
+ w
298
553
  ]);
299
- return e ? {
300
- skillMenuOverlay: Y,
301
- commandMenu: X,
302
- skillCatalogModal: /* @__PURE__ */ E(I, {
554
+ return {
555
+ skillMenuOverlay: E(() => e ? {
556
+ key: "skills",
557
+ title: h,
558
+ icon: /* @__PURE__ */ F(k, {
559
+ size: i,
560
+ "aria-hidden": !0,
561
+ stroke: l
562
+ }),
563
+ renderOverlay: $,
564
+ backLabel: g
565
+ } : void 0, [
566
+ e,
567
+ h,
568
+ g,
569
+ $
570
+ ]),
571
+ commandMenu: E(() => e ? {
572
+ triggerPrefix: me,
573
+ menuLabel: h,
574
+ emptyQueryHint: v,
575
+ renderMenu: ({ query: e, caretPosition: t, close: n, listboxId: r, activeOptionId: i }) => /* @__PURE__ */ F(K, {
576
+ favorites: G,
577
+ searchQuery: e,
578
+ listboxId: r,
579
+ activeOptionId: i,
580
+ onSelect: (e) => {
581
+ n({ consumeQuery: !0 }), q(e.id, e.name, t);
582
+ },
583
+ onToggleFavorite: s,
584
+ onBrowse: () => {
585
+ let r = `${me}${e}`, i = B.anchors.find((e) => e.start === t && e.length === r.length);
586
+ n({
587
+ consumeQuery: !0,
588
+ returnFocus: !1
589
+ }), P(t), I.current = {
590
+ position: t,
591
+ text: r,
592
+ mentionUrl: i?.url
593
+ }, A(!0);
594
+ },
595
+ onViewDetails: (e) => {
596
+ n({ consumeQuery: !0 }), M(e.id);
597
+ },
598
+ labels: w
599
+ })
600
+ } : void 0, [
601
+ e,
602
+ h,
603
+ v,
604
+ G,
605
+ q,
606
+ B.anchors,
607
+ s,
608
+ w
609
+ ]),
610
+ skillCatalogModal: /* @__PURE__ */ F(Y, {
303
611
  isOpen: T,
304
- onClose: () => D(!1),
612
+ onClose: S(() => {
613
+ A(!1);
614
+ let e = I.current;
615
+ if (I.current = null, e == null) return;
616
+ let { position: t, text: n, mentionUrl: r } = e;
617
+ r == null ? B.onDraftChange(B.draft.slice(0, t) + n + B.draft.slice(t)) : B.restoreMention(r, n.slice(1), t), R((e) => e + 1), z(t + n.length);
618
+ }, [B]),
305
619
  onSelect: (e) => {
306
- H(e), D(!1);
620
+ I.current = null, q(e, W(e), N), A(!1);
307
621
  },
308
- title: h,
309
- renderContent: d
622
+ title: _,
623
+ renderContent: p
310
624
  }),
311
- skillDetailsPanel: /* @__PURE__ */ E(g, {
625
+ skillDetailsPanel: /* @__PURE__ */ F(x, {
312
626
  fallback: null,
313
- children: /* @__PURE__ */ E(f, {
314
- skillId: O,
315
- onClose: () => k(null)
627
+ children: /* @__PURE__ */ F(m, {
628
+ skillId: j,
629
+ onClose: () => M(null)
316
630
  })
317
631
  }),
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
632
+ message: B.draft,
633
+ messageRevision: L,
634
+ activeMentions: ne,
635
+ onDraftChange: B.onDraftChange,
636
+ onBackspaceAtCaret: B.onBackspaceAtCaret,
637
+ caretPositionOverride: ee,
638
+ isSkillUnsupported: te,
639
+ selectedSkills: B.orderedSkills,
640
+ resetSkillMentions: Z,
641
+ seedSkillMentions: re,
642
+ renderHistorySkillSegments: Q,
643
+ renderHistorySkills: ae
337
644
  };
645
+ }, ge = {
646
+ background: "_background_1ult0_1",
647
+ border: "_border_1ult0_5",
648
+ value: "_value_1ult0_9",
649
+ clear: "_clear_1ult0_13",
650
+ invalid: "_invalid_1ult0_17"
651
+ }, _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 }) => {
652
+ 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, {
653
+ id: e,
654
+ name: o?.[e] || e
655
+ }]));
656
+ s.forEach((e) => P.set(e.id, e));
657
+ let L = [...P.values()].map((t) => ({
658
+ value: t.id,
659
+ label: t.name,
660
+ labelNode: b.trim() ? /* @__PURE__ */ F(f, {
661
+ text: t.name,
662
+ query: b,
663
+ maxLines: 1
664
+ }) : void 0,
665
+ icon: /* @__PURE__ */ F(e, {
666
+ size: c.SM,
667
+ initialsName: t.name
668
+ }),
669
+ disabled: !l
670
+ })), R = {
671
+ ...t({
672
+ "--ssf-text": h?.colors?.text,
673
+ "--ssf-bg": h?.colors?.background,
674
+ "--ssf-border": h?.colors?.border,
675
+ "--ssf-error": h?.colors?.error
676
+ }),
677
+ ...h?.cssVars
678
+ };
679
+ return T(() => {
680
+ let e = S.current?.querySelector("[role=\"combobox\"]");
681
+ e && (N ? e.setAttribute("aria-describedby", C) : e.removeAttribute("aria-describedby"), d || E ? e.setAttribute("aria-invalid", "true") : e.removeAttribute("aria-invalid"));
682
+ }, [
683
+ N,
684
+ C,
685
+ d,
686
+ u,
687
+ E
688
+ ]), /* @__PURE__ */ I("div", {
689
+ ref: S,
690
+ className: r("min-w-0", m, B.selectorField),
691
+ style: R,
692
+ children: [/* @__PURE__ */ F(y, {
693
+ tooltip: j,
694
+ hideTooltip: l,
695
+ triggerClassName: "block w-full min-w-0",
696
+ children: /* @__PURE__ */ F("div", {
697
+ inert: u ? !0 : void 0,
698
+ children: /* @__PURE__ */ F(g, {
699
+ multiple: !0,
700
+ searchable: !0,
701
+ open: A,
702
+ onOpenChange: (e) => {
703
+ e && !k || v(e);
704
+ },
705
+ onSearchQueryChange: x,
706
+ value: i,
707
+ onChange: (e) => {
708
+ u || a(Array.isArray(e) ? e : [e]);
709
+ },
710
+ options: L,
711
+ placeholder: p.placeholder,
712
+ labelProps: { label: p.fieldLabel },
713
+ error: d,
714
+ caption: M ? j : void 0,
715
+ searchPlaceholder: p.searchPlaceholder ?? "Search skills",
716
+ emptyStateTitle: b.trim() ? p.noMatchingSkillsLabel ?? "No matching skills" : p.emptyLabel ?? "No skills available",
717
+ disabled: u || M,
718
+ invalid: !!d || E,
719
+ className: "w-full min-w-0",
720
+ 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),
721
+ listClassName: "w-[min(var(--reference-width),calc(100vw-2rem))] max-w-full"
722
+ })
723
+ })
724
+ }), N && /* @__PURE__ */ F("span", {
725
+ id: C,
726
+ className: "sr-only",
727
+ children: N
728
+ })]
729
+ });
338
730
  };
339
731
  //#endregion
340
- export { A as ChatSkill, F as FavoriteSkillsPanel, I as SkillCatalogModal, L as SkillDetailsSidePanel, k as SkillInfoTooltipContent, R as buildFavoriteSkillItem, B as useSkillSelectorOverlay };
732
+ export { U as ChatSkill, K as FavoriteSkillsPanel, B as SKILLS_CLASS, J as SkillArchiveUploadDialog, Y as SkillCatalogModal, Z as SkillContentFileTree, re as SkillDetailsSidePanel, H as SkillInfoTooltipContent, ye as SkillSelectorField, V as SkillUnresolvedReason, ue as buildFavoriteSkillItem, ae as diffTextChange, se as findMentionAtCaret, de as getSkillFallbackName, oe as insertAnchor, ie as matchSkillMentions, $ as reconcileAnchors, le as useSkillMentions, he as useSkillSelectorOverlay };