@epam/ai-dial-skills 1.2.0-dev.99 → 1.2.0-rc.0

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