@epam/ai-dial-skills 1.2.0-dev.73 → 1.2.0-dev.78

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.
@@ -0,0 +1,9 @@
1
+ import { FC } from 'react';
2
+ import { SkillArchiveUploadDialogProps } from '../../models/skill-archive-upload-dialog-props';
3
+ /**
4
+ * Dialog presenting the drop area and supported formats for a skill-archive upload, so the host
5
+ * can start the flow before the native file picker appears. Presentation only — the host wires
6
+ * selection/rejection/close to its own import controller.
7
+ */
8
+ export declare const SkillArchiveUploadDialog: FC<SkillArchiveUploadDialogProps>;
9
+ //# sourceMappingURL=SkillArchiveUploadDialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SkillArchiveUploadDialog.d.ts","sourceRoot":"","sources":["../../../src/components/SkillArchiveUploadDialog/SkillArchiveUploadDialog.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,gDAAgD,CAAC;AAIpG;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,EAAE,EAAE,CAAC,6BAA6B,CA4CtE,CAAC"}
package/index.css CHANGED
@@ -1,2 +1,2 @@
1
1
  ._row_1ovug_1:hover,._row_1ovug_1:focus-visible{background:var(--fs-row-hover-bg,var(--bg-layer-sunken,#eef1f7))}._header_1ovug_5{color:var(--fs-header-text,var(--text-tertiary,#848e9c))}._emptyHint_1ovug_9{color:var(--fs-empty-hint-text,var(--text-icon-tertiary,#848e9c))}._star_1ovug_13{color:var(--fs-star-color,var(--text-warning-icon,#eec840))}._footer_1ovug_17{border-top-color:var(--fs-footer-border,var(--stroke-tertiary,#e0e6f0))}._rowEnter_1ovug_25{animation:.2s ease-out _rowFadeIn_1ovug_1}._rowLeaving_1ovug_29{pointer-events:none;animation:.18s ease-out forwards _rowFadeOut_1ovug_1}@keyframes _rowFadeIn_1ovug_1{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}@keyframes _rowFadeOut_1ovug_1{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.96)}}._listContent_1ovug_57{transition:max-height .2s}@media (prefers-reduced-motion:reduce){._rowEnter_1ovug_25,._rowLeaving_1ovug_29{animation:none}._listContent_1ovug_57{transition:none}}
2
- /*$vite$:1*/.visible{visibility:visible}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.hidden{display:none}.h-\[24px\]{height:24px}.h-\[40px\]{height:40px}.h-\[min\(80vh\2c 840px\)\]{height:min(80vh,840px)}.h-\[min\(90vh\2c 860px\)\]{height:min(90vh,860px)}.h-auto{height:auto}.max-h-72{max-height:18rem}.min-h-0{min-height:0}.w-full{width:100%}.min-w-0{min-width:0}.\!max-w-\[min\(95vw\2c 1200px\)\]{max-width:min(95vw,1200px)!important}.max-w-\[550px\]{max-width:550px}.flex-1{flex:1 1 0%}.cursor-pointer{cursor:pointer}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-center{justify-content:center}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.self-start{align-self:flex-start}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rounded-lg{border-radius:.5rem}.border{border-width:1px}.border-t{border-top-width:1px}.border-transparent{border-color:transparent}.bg-error{background-color:var(--bg-error,#f3d6d8)}.px-1{padding-left:.25rem;padding-right:.25rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.py-0{padding-bottom:0;padding-top:0}.py-1{padding-bottom:.25rem;padding-top:.25rem}.py-1\.5{padding-bottom:.375rem;padding-top:.375rem}.py-3{padding-bottom:.75rem;padding-top:.75rem}.py-4{padding-bottom:1rem;padding-top:1rem}.pb-0{padding-bottom:0}.pb-0\.5{padding-bottom:.125rem}.pb-1{padding-bottom:.25rem}.pt-2{padding-top:.5rem}.text-start{text-align:start}.text-error{color:var(--text-error,#ae2f2f)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}@media (min-width:1280px){.desktop\:w-\[280px\]{width:280px}}
2
+ /*$vite$:1*/.visible{visibility:visible}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.hidden{display:none}.h-\[24px\]{height:24px}.h-\[40px\]{height:40px}.h-\[min\(80vh\2c 840px\)\]{height:min(80vh,840px)}.h-\[min\(90vh\2c 860px\)\]{height:min(90vh,860px)}.h-auto{height:auto}.max-h-72{max-height:18rem}.min-h-0{min-height:0}.w-full{width:100%}.min-w-0{min-width:0}.\!max-w-\[min\(95vw\2c 1200px\)\]{max-width:min(95vw,1200px)!important}.max-w-\[550px\]{max-width:550px}.flex-1{flex:1 1 0%}.cursor-pointer{cursor:pointer}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-center{justify-content:center}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.self-start{align-self:flex-start}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rounded-lg{border-radius:.5rem}.border{border-width:1px}.border-t{border-top-width:1px}.border-transparent{border-color:transparent}.bg-error{background-color:var(--bg-error,#f3d6d8)}.px-1{padding-left:.25rem;padding-right:.25rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-0{padding-bottom:0;padding-top:0}.py-1{padding-bottom:.25rem;padding-top:.25rem}.py-1\.5{padding-bottom:.375rem;padding-top:.375rem}.py-3{padding-bottom:.75rem;padding-top:.75rem}.py-4{padding-bottom:1rem;padding-top:1rem}.pb-0{padding-bottom:0}.pb-0\.5{padding-bottom:.125rem}.pb-1{padding-bottom:.25rem}.pt-2{padding-top:.5rem}.text-start{text-align:start}.text-error{color:var(--text-error,#ae2f2f)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}@media (min-width:1280px){.desktop\:inline{display:inline}.desktop\:hidden{display:none}.desktop\:w-\[280px\]{width:280px}}
package/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  export { ChatSkill } from './components/ChatSkill/ChatSkill';
2
2
  export { FavoriteSkillsPanel } from './components/FavoriteSkillsPanel/FavoriteSkillsPanel';
3
+ export { SkillArchiveUploadDialog } from './components/SkillArchiveUploadDialog/SkillArchiveUploadDialog';
3
4
  export { SkillCatalogModal } from './components/SkillCatalogModal/SkillCatalogModal';
4
5
  export { SkillDetailsSidePanel } from './components/SkillDetailsSidePanel/SkillDetailsSidePanel';
5
6
  export { SkillInfoTooltipContent } from './components/SkillInfoTooltipContent/SkillInfoTooltipContent';
@@ -8,6 +9,7 @@ export { buildFavoriteSkillItem } from './models/favorite-skill-item';
8
9
  export type { ChatSkillLabels, ChatSkillProps, } from './models/chat-skill-props';
9
10
  export type { FavoriteSkillItem, SkillListingEntry, } from './models/favorite-skill-item';
10
11
  export type { FavoriteSkillsPanelColors, FavoriteSkillsPanelLabels, FavoriteSkillsPanelProps, } from './models/favorite-skills-panel-props';
12
+ export type { SkillArchiveUploadDialogLabels, SkillArchiveUploadDialogProps, } from './models/skill-archive-upload-dialog-props';
11
13
  export type { SkillCatalogModalProps } from './models/skill-catalog-modal-props';
12
14
  export type { SkillDetailsSidePanelProps } from './models/skill-details-side-panel-props';
13
15
  export type { SkillInfoTooltipContentProps } from './models/skill-info-tooltip-content-props';
package/index.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sDAAsD,CAAC;AAC3F,OAAO,EAAE,iBAAiB,EAAE,MAAM,kDAAkD,CAAC;AACrF,OAAO,EAAE,qBAAqB,EAAE,MAAM,0DAA0D,CAAC;AACjG,OAAO,EAAE,uBAAuB,EAAE,MAAM,8DAA8D,CAAC;AACvG,OAAO,EAAE,uBAAuB,EAAE,MAAM,yDAAyD,CAAC;AAClG,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AACtE,YAAY,EACV,eAAe,EACf,cAAc,GACf,MAAM,2BAA2B,CAAC;AACnC,YAAY,EACV,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,8BAA8B,CAAC;AACtC,YAAY,EACV,yBAAyB,EACzB,yBAAyB,EACzB,wBAAwB,GACzB,MAAM,sCAAsC,CAAC;AAC9C,YAAY,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AACjF,YAAY,EAAE,0BAA0B,EAAE,MAAM,yCAAyC,CAAC;AAC1F,YAAY,EAAE,4BAA4B,EAAE,MAAM,2CAA2C,CAAC;AAC9F,YAAY,EACV,+BAA+B,EAC/B,0BAA0B,EAC1B,8BAA8B,EAC9B,6BAA6B,GAC9B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sDAAsD,CAAC;AAC3F,OAAO,EAAE,wBAAwB,EAAE,MAAM,gEAAgE,CAAC;AAC1G,OAAO,EAAE,iBAAiB,EAAE,MAAM,kDAAkD,CAAC;AACrF,OAAO,EAAE,qBAAqB,EAAE,MAAM,0DAA0D,CAAC;AACjG,OAAO,EAAE,uBAAuB,EAAE,MAAM,8DAA8D,CAAC;AACvG,OAAO,EAAE,uBAAuB,EAAE,MAAM,yDAAyD,CAAC;AAClG,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AACtE,YAAY,EACV,eAAe,EACf,cAAc,GACf,MAAM,2BAA2B,CAAC;AACnC,YAAY,EACV,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,8BAA8B,CAAC;AACtC,YAAY,EACV,yBAAyB,EACzB,yBAAyB,EACzB,wBAAwB,GACzB,MAAM,sCAAsC,CAAC;AAC9C,YAAY,EACV,8BAA8B,EAC9B,6BAA6B,GAC9B,MAAM,4CAA4C,CAAC;AACpD,YAAY,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AACjF,YAAY,EAAE,0BAA0B,EAAE,MAAM,yCAAyC,CAAC;AAC1F,YAAY,EAAE,4BAA4B,EAAE,MAAM,2CAA2C,CAAC;AAC9F,YAAY,EACV,+BAA+B,EAC/B,0BAA0B,EAC1B,8BAA8B,EAC9B,6BAA6B,GAC9B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC"}
package/index.js CHANGED
@@ -1,56 +1,56 @@
1
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";
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";
7
7
  //#region src/constants/public-class-names.ts
8
- var k = {
8
+ var j = {
9
9
  favoritesPanel: "dial-skills-favorites-panel",
10
10
  chip: "dial-skills-chip"
11
- }, A = ({ description: e, unsupportedMessage: t, viewDetailsLabel: n = "View details", onViewDetails: r }) => t == null ? /* @__PURE__ */ D("div", {
11
+ }, M = ({ description: e, unsupportedMessage: t, viewDetailsLabel: n = "View details", onViewDetails: r }) => t == null ? /* @__PURE__ */ k("div", {
12
12
  className: "flex flex-col gap-3",
13
- children: [e != null && e !== "" && /* @__PURE__ */ E("p", {
13
+ children: [e != null && e !== "" && /* @__PURE__ */ O("p", {
14
14
  className: "text-start",
15
15
  children: e
16
- }), /* @__PURE__ */ E(i, {
16
+ }), /* @__PURE__ */ O(i, {
17
17
  variant: o.Primary,
18
18
  appearance: a.Link,
19
19
  className: "h-[24px] self-start",
20
20
  label: n,
21
- iconBefore: /* @__PURE__ */ E(w, {
21
+ iconBefore: /* @__PURE__ */ O(T, {
22
22
  size: s.SM,
23
23
  stroke: c,
24
24
  "aria-hidden": !0
25
25
  }),
26
26
  onClick: r
27
27
  })]
28
- }) : /* @__PURE__ */ E("p", {
28
+ }) : /* @__PURE__ */ O("p", {
29
29
  className: "text-start",
30
30
  children: t
31
- }), j = ({ 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 = {} }) => {
32
- 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);
33
- return /* @__PURE__ */ E(d, {
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, {
34
34
  asChild: !0,
35
- placement: h.Top,
35
+ placement: g.Top,
36
36
  contentClassName: "max-w-[550px]",
37
- content: i ? /* @__PURE__ */ E(A, { unsupportedMessage: p }) : /* @__PURE__ */ E(A, {
37
+ content: i ? /* @__PURE__ */ O(M, { unsupportedMessage: p }) : /* @__PURE__ */ O(M, {
38
38
  description: r,
39
- viewDetailsLabel: f,
39
+ viewDetailsLabel: d,
40
40
  onViewDetails: () => {
41
- g((e) => e + 1), c(t);
41
+ h((e) => e + 1), c(t);
42
42
  }
43
43
  }),
44
- children: /* @__PURE__ */ E("span", {
44
+ children: /* @__PURE__ */ O("span", {
45
45
  className: "inline-flex items-center",
46
- children: /* @__PURE__ */ E(l, {
46
+ children: /* @__PURE__ */ O(u, {
47
47
  label: `/${e}`,
48
48
  textClassName: i ? n(a, o) : a,
49
- className: n("h-auto px-2 py-0", i && s, k.chip)
49
+ className: n("h-auto px-2 py-0", i && s, j.chip)
50
50
  })
51
51
  })
52
52
  }, m);
53
- }, M = {
53
+ }, P = {
54
54
  row: "_row_1ovug_1",
55
55
  header: "_header_1ovug_5",
56
56
  emptyHint: "_emptyHint_1ovug_9",
@@ -61,24 +61,24 @@ var k = {
61
61
  rowLeaving: "_rowLeaving_1ovug_29",
62
62
  rowFadeOut: "_rowFadeOut_1ovug_1",
63
63
  listContent: "_listContent_1ovug_57"
64
- }, N = "px-3 pb-0.5 pt-2", P = 180, F = 288, I = ({ 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" }) => {
65
- let { myCollectionLabel: C = "My Collection", emptyHintLabel: w = "Star a skill to pin it here", browseLabel: O = "Browse", removeFromFavoritesLabel: j = "Remove from favorites", viewDetailsLabel: I = "View details", noMatchingSkillsLabel: L = "No matching skills" } = p, R = t({
66
- "--fs-row-hover-bg": h?.rowHoverBackground,
67
- "--fs-header-text": h?.headerText,
68
- "--fs-empty-hint-text": h?.emptyHintText,
69
- "--fs-star-color": h?.starColor,
70
- "--fs-footer-border": h?.footerBorder
71
- }), [z, B] = S(/* @__PURE__ */ new Set()), V = x(/* @__PURE__ */ new Map());
72
- v(() => {
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
73
  let e = V.current;
74
74
  return () => {
75
75
  e.forEach((e) => clearTimeout(e)), e.clear();
76
76
  };
77
77
  }, []);
78
- let H = f != null, U = f?.toLowerCase() ?? "", W = H ? r.filter((e) => e.name.toLowerCase().includes(U)) : r, G = x(null), [K, q] = S();
79
- y(() => {
80
- G.current && q(Math.min(G.current.scrollHeight, F));
81
- }, [r, f]);
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
82
  let J = (e, t) => {
83
83
  e.target === e.currentTarget && (e.key === "Enter" || e.key === " ") && (e.preventDefault(), i(t));
84
84
  }, Y = (e) => {
@@ -88,52 +88,52 @@ var k = {
88
88
  let n = new Set(t);
89
89
  return n.delete(e), n;
90
90
  }), V.current.delete(e);
91
- }, P);
91
+ }, I);
92
92
  V.current.set(e, t);
93
93
  };
94
- return /* @__PURE__ */ D("div", {
95
- className: n("flex w-full flex-col desktop:w-[280px]", k.favoritesPanel),
94
+ return /* @__PURE__ */ k("div", {
95
+ className: n("flex w-full flex-col desktop:w-[280px]", j.favoritesPanel),
96
96
  style: R,
97
97
  children: [
98
- /* @__PURE__ */ E("p", {
99
- className: n(_, N, M.header),
100
- children: C
98
+ /* @__PURE__ */ O("p", {
99
+ className: n(_, F, P.header),
100
+ children: x
101
101
  }),
102
- /* @__PURE__ */ E("div", {
103
- className: n("max-h-72 min-h-0 flex-1 overflow-y-auto", M.listContent),
102
+ /* @__PURE__ */ O("div", {
103
+ className: n("max-h-72 min-h-0 flex-1 overflow-y-auto", P.listContent),
104
104
  style: { maxHeight: K },
105
- children: /* @__PURE__ */ E("div", {
105
+ children: /* @__PURE__ */ O("div", {
106
106
  ref: G,
107
- children: W.length > 0 ? /* @__PURE__ */ E("ul", {
107
+ children: W.length > 0 ? /* @__PURE__ */ O("ul", {
108
108
  className: "flex flex-col gap-1 px-1 pb-1",
109
109
  children: W.map((t) => {
110
- let r = /* @__PURE__ */ D("div", {
110
+ let r = /* @__PURE__ */ k("div", {
111
111
  role: "button",
112
112
  tabIndex: 0,
113
- className: n("flex cursor-pointer items-center gap-2 rounded-lg border border-transparent px-2 py-1.5 transition-colors", M.row),
113
+ className: n("flex cursor-pointer items-center gap-2 rounded-lg border border-transparent px-2 py-1.5 transition-colors", P.row),
114
114
  onClick: () => i(t),
115
115
  onKeyDown: (e) => J(e, t),
116
116
  children: [
117
- /* @__PURE__ */ E(e, {
117
+ /* @__PURE__ */ O(e, {
118
118
  size: s.MD,
119
119
  initialsName: t.name
120
120
  }),
121
- f == null ? /* @__PURE__ */ E("span", {
121
+ l == null ? /* @__PURE__ */ O("span", {
122
122
  className: n(g, "min-w-0 flex-1 truncate text-start"),
123
123
  children: t.name
124
- }) : /* @__PURE__ */ E(u, {
124
+ }) : /* @__PURE__ */ O(d, {
125
125
  text: t.name,
126
- query: f,
126
+ query: l,
127
127
  maxLines: 1,
128
128
  className: n(g, "min-w-0 flex-1 text-start")
129
129
  }),
130
- /* @__PURE__ */ E(m, {
131
- icon: /* @__PURE__ */ E(T, {
130
+ /* @__PURE__ */ O(h, {
131
+ icon: /* @__PURE__ */ O(E, {
132
132
  size: s.SM,
133
- className: M.star,
133
+ className: P.star,
134
134
  "aria-hidden": !0
135
135
  }),
136
- "aria-label": j,
136
+ "aria-label": D,
137
137
  isSelected: !0,
138
138
  onClick: (e) => {
139
139
  e.stopPropagation(), Y(t.id);
@@ -141,63 +141,90 @@ var k = {
141
141
  })
142
142
  ]
143
143
  });
144
- return /* @__PURE__ */ E("li", {
145
- className: z.has(t.id) ? M.rowLeaving : M.rowEnter,
146
- children: /* @__PURE__ */ E(d, {
144
+ return /* @__PURE__ */ O("li", {
145
+ className: z.has(t.id) ? P.rowLeaving : P.rowEnter,
146
+ children: /* @__PURE__ */ O(f, {
147
147
  asChild: !0,
148
148
  contentClassName: "max-w-[550px]",
149
- content: /* @__PURE__ */ E(A, {
149
+ content: /* @__PURE__ */ O(M, {
150
150
  description: t.description,
151
- viewDetailsLabel: I,
151
+ viewDetailsLabel: A,
152
152
  onViewDetails: () => c(t)
153
153
  }),
154
154
  children: r
155
155
  })
156
156
  }, t.id);
157
157
  })
158
- }) : H && U !== "" ? /* @__PURE__ */ E("p", {
158
+ }) : H && U !== "" ? /* @__PURE__ */ O("p", {
159
159
  role: "status",
160
160
  "aria-live": "polite",
161
- className: n(b, "px-4 py-4 text-start", M.emptyHint),
162
- children: L
163
- }) : /* @__PURE__ */ E("p", {
164
- className: n(b, "px-4 py-4 text-start", M.emptyHint),
161
+ className: n(v, "px-4 py-4 text-start", P.emptyHint),
162
+ children: N
163
+ }) : /* @__PURE__ */ O("p", {
164
+ className: n(v, "px-4 py-4 text-start", P.emptyHint),
165
165
  children: w
166
166
  })
167
167
  })
168
168
  }),
169
- /* @__PURE__ */ E("div", {
170
- className: n("border-t px-2 py-3", M.footer),
171
- children: /* @__PURE__ */ E(l, {
172
- label: O,
169
+ /* @__PURE__ */ O("div", {
170
+ className: n("border-t px-2 py-3", P.footer),
171
+ children: /* @__PURE__ */ O(u, {
172
+ label: T,
173
173
  className: "w-full justify-center",
174
174
  onClick: o
175
175
  })
176
176
  })
177
177
  ]
178
178
  });
179
- }, L = ({ isOpen: e, onClose: t, onSelect: n, title: r, renderContent: i }) => /* @__PURE__ */ E(f, {
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, {
182
+ 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", {
191
+ className: "desktop:hidden",
192
+ children: u
193
+ }), /* @__PURE__ */ O("span", {
194
+ className: "hidden desktop:inline",
195
+ children: c
196
+ })] }),
197
+ description: d,
198
+ ariaLabel: f,
199
+ accept: n,
200
+ errorText: t,
201
+ onChange: a,
202
+ onReject: o
203
+ })
204
+ })
205
+ });
206
+ }, V = ({ isOpen: e, onClose: t, onSelect: n, title: r, renderContent: i }) => /* @__PURE__ */ O(p, {
180
207
  open: e,
181
208
  header: r,
182
- size: p.Lg,
209
+ size: m.Lg,
183
210
  className: "h-[min(90vh,860px)] !max-w-[min(95vw,1200px)] overflow-hidden",
184
211
  onClose: t,
185
- children: /* @__PURE__ */ E("div", {
212
+ children: /* @__PURE__ */ O("div", {
186
213
  className: "h-[min(80vh,840px)] overflow-auto",
187
- children: /* @__PURE__ */ E(g, {
214
+ children: /* @__PURE__ */ O(_, {
188
215
  fallback: null,
189
216
  children: e && i(n, t)
190
217
  })
191
218
  })
192
- }), R = (e) => /* @__PURE__ */ E(O, { ...e }), z = (e) => ({
219
+ }), H = (e) => /* @__PURE__ */ O(A, { ...e }), U = (e) => ({
193
220
  id: e.url,
194
221
  name: e.name,
195
222
  description: e.description
196
- }), B = (e) => {
223
+ }), W = (e) => {
197
224
  let t = e.split("/").filter((e) => e.length > 0);
198
225
  return t[t.length - 1] ?? e;
199
- }, V = ({ isEnabled: e, isSkillsSupported: t, skills: n, sharedWithMe: i, publicSkills: a, favoriteIds: o, onToggleFavorite: s, labels: l, historyChipLabelClassName: u, renderCatalogContent: d, detailsPanelComponent: f }) => {
200
- 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), [A, M] = S(null), N = b(() => [
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(() => [
201
228
  ...n,
202
229
  ...i ?? [],
203
230
  ...a ?? []
@@ -205,61 +232,61 @@ var k = {
205
232
  n,
206
233
  i,
207
234
  a
208
- ]), P = b(() => new Map(N.map((e) => [e.url, e])), [N]), F = b(() => N.filter((e) => o.has(e.url)).map((e) => z(e)), [N, o]), R = b(() => A == null ? null : P.get(A) ?? null, [P, A]), V = R != null && !t, H = _((e) => {
209
- M(e);
210
- }, []), U = _(() => {
211
- M(null);
212
- }, []), W = A, G = b(() => A == null ? void 0 : [{ url: A }], [A]), K = b(() => R == null ? null : /* @__PURE__ */ E(j, {
213
- name: R.name,
214
- path: R.url,
215
- description: R.description,
216
- isUnsupported: V,
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,
217
244
  onViewDetails: k,
218
245
  labels: {
219
- viewDetailsLabel: x?.viewDetailsLabel,
246
+ viewDetailsLabel: b?.viewDetailsLabel,
220
247
  unsupportedTooltipLabel: y
221
248
  }
222
249
  }), [
223
- R,
224
- V,
225
- x,
250
+ I,
251
+ L,
252
+ b,
226
253
  y
227
- ]), q = _((e) => e == null || e.length === 0 ? null : e.map((e) => {
254
+ ]), q = v((e) => e == null || e.length === 0 ? null : e.map((e) => {
228
255
  let t = P.get(e.url);
229
- return /* @__PURE__ */ E(j, {
230
- name: t?.name ?? B(e.url),
256
+ return /* @__PURE__ */ O(N, {
257
+ name: t?.name ?? W(e.url),
231
258
  path: e.url,
232
259
  labelClassName: u,
233
260
  description: t?.description,
234
261
  onViewDetails: k,
235
- labels: { viewDetailsLabel: x?.viewDetailsLabel }
262
+ labels: { viewDetailsLabel: b?.viewDetailsLabel }
236
263
  }, e.url);
237
264
  }), [
238
265
  P,
239
266
  u,
240
- x
241
- ]), J = _((e) => /* @__PURE__ */ E(I, {
267
+ b
268
+ ]), J = v((e) => /* @__PURE__ */ O(R, {
242
269
  favorites: F,
243
270
  onSelect: (t) => {
244
- H(t.id), e();
271
+ z(t.id), e();
245
272
  },
246
273
  onToggleFavorite: s,
247
274
  onBrowse: () => {
248
- e(), D(!0);
275
+ e(), E(!0);
249
276
  },
250
277
  onViewDetails: (t) => {
251
278
  e(), k(t.id);
252
279
  },
253
- labels: x
280
+ labels: b
254
281
  }), [
255
282
  F,
256
- H,
283
+ z,
257
284
  s,
258
- x
259
- ]), Y = b(() => w ? {
285
+ b
286
+ ]), Y = x(() => S ? {
260
287
  key: "skills",
261
288
  title: p,
262
- icon: /* @__PURE__ */ E(C, {
289
+ icon: /* @__PURE__ */ O(w, {
263
290
  size: r,
264
291
  "aria-hidden": !0,
265
292
  stroke: c
@@ -267,63 +294,63 @@ var k = {
267
294
  renderOverlay: J,
268
295
  backLabel: m
269
296
  } : void 0, [
270
- w,
297
+ S,
271
298
  p,
272
299
  m,
273
300
  J
274
- ]), X = b(() => w ? {
301
+ ]), X = x(() => S ? {
275
302
  triggerPrefix: "/",
276
303
  menuLabel: p,
277
- emptyQueryHint: v,
278
- renderMenu: ({ query: e, close: t }) => /* @__PURE__ */ E(I, {
304
+ emptyQueryHint: g,
305
+ renderMenu: ({ query: e, close: t }) => /* @__PURE__ */ O(R, {
279
306
  favorites: F,
280
307
  searchQuery: e,
281
308
  onSelect: (e) => {
282
- t({ consumeQuery: !0 }), H(e.id);
309
+ t({ consumeQuery: !0 }), z(e.id);
283
310
  },
284
311
  onToggleFavorite: s,
285
312
  onBrowse: () => {
286
- t({ consumeQuery: !0 }), D(!0);
313
+ t({ consumeQuery: !0 }), E(!0);
287
314
  },
288
315
  onViewDetails: (e) => {
289
316
  t({ consumeQuery: !0 }), k(e.id);
290
317
  },
291
- labels: x
318
+ labels: b
292
319
  })
293
320
  } : void 0, [
294
- w,
321
+ S,
295
322
  p,
296
- v,
323
+ g,
297
324
  F,
298
- H,
325
+ z,
299
326
  s,
300
- x
327
+ b
301
328
  ]);
302
329
  return e ? {
303
330
  skillMenuOverlay: Y,
304
331
  commandMenu: X,
305
- skillCatalogModal: /* @__PURE__ */ E(L, {
332
+ skillCatalogModal: /* @__PURE__ */ O(V, {
306
333
  isOpen: T,
307
- onClose: () => D(!1),
334
+ onClose: () => E(!1),
308
335
  onSelect: (e) => {
309
- H(e), D(!1);
336
+ z(e), E(!1);
310
337
  },
311
338
  title: h,
312
339
  renderContent: d
313
340
  }),
314
- skillDetailsPanel: /* @__PURE__ */ E(g, {
341
+ skillDetailsPanel: /* @__PURE__ */ O(_, {
315
342
  fallback: null,
316
- children: /* @__PURE__ */ E(f, {
317
- skillId: O,
343
+ children: /* @__PURE__ */ O(f, {
344
+ skillId: D,
318
345
  onClose: () => k(null)
319
346
  })
320
347
  }),
321
348
  selectedSkillElement: K,
322
- selectedSkillPath: W,
349
+ selectedSkillPath: H,
323
350
  selectedSkills: G,
324
- isSkillUnsupported: V,
325
- selectSkill: H,
326
- removeSelectedSkill: U,
351
+ isSkillUnsupported: L,
352
+ selectSkill: z,
353
+ removeSelectedSkill: B,
327
354
  renderHistorySkills: q
328
355
  } : {
329
356
  skillMenuOverlay: void 0,
@@ -340,4 +367,4 @@ var k = {
340
367
  };
341
368
  };
342
369
  //#endregion
343
- export { j as ChatSkill, I as FavoriteSkillsPanel, k as SKILLS_CLASS, L as SkillCatalogModal, R as SkillDetailsSidePanel, A as SkillInfoTooltipContent, z as buildFavoriteSkillItem, V as useSkillSelectorOverlay };
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 };
@@ -0,0 +1,33 @@
1
+ /** Labels for {@link SkillArchiveUploadDialogProps}; each has an English default. */
2
+ export interface SkillArchiveUploadDialogLabels {
3
+ /** Dialog header. Defaults to `'Upload skill'`. */
4
+ dialogTitle?: string;
5
+ /** Drop-zone label shown on desktop widths. Defaults to `'Drag and drop it or click here to upload'`. */
6
+ dropZoneLabel?: string;
7
+ /** Drop-zone label shown on mobile widths. Defaults to `'Click here to upload'`. */
8
+ dropZoneMobileLabel?: string;
9
+ /** Sentence describing accepted formats, shown under the drop zone. Defaults to `'File formats .zip and SKILL.md'`. */
10
+ formatsLabel?: string;
11
+ /** Accessible name for the native file input. Defaults to `'Upload a skill ZIP archive or a SKILL.md file'`. */
12
+ fileInputAriaLabel?: string;
13
+ /** Accessible name for the dialog's close button. Defaults to `'Close'`. */
14
+ closeAriaLabel?: string;
15
+ }
16
+ /** Props for {@link SkillArchiveUploadDialog}. */
17
+ export interface SkillArchiveUploadDialogProps {
18
+ /** Whether the dialog is open. */
19
+ isOpen: boolean;
20
+ /** Rejection message rendered under the drop area; omit when nothing was rejected. */
21
+ errorText?: string;
22
+ /** `accept` value forwarded to the drop zone/native file input. Defaults to `'.zip,.md'`. */
23
+ accept?: string;
24
+ /** Labels rendered by the dialog; each falls back to an English default. */
25
+ labels?: SkillArchiveUploadDialogLabels;
26
+ /** Called on Escape, the close button, or an outside click. */
27
+ onClose: () => void;
28
+ /** Called with the picked or dropped files that `accept` allowed through. */
29
+ onFilesSelected: (files: File[]) => void;
30
+ /** Called when a drop carried files that `accept` excluded. */
31
+ onFilesRejected: () => void;
32
+ }
33
+ //# sourceMappingURL=skill-archive-upload-dialog-props.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-archive-upload-dialog-props.d.ts","sourceRoot":"","sources":["../../src/models/skill-archive-upload-dialog-props.ts"],"names":[],"mappings":"AAAA,qFAAqF;AACrF,MAAM,WAAW,8BAA8B;IAC7C,mDAAmD;IACnD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yGAAyG;IACzG,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oFAAoF;IACpF,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,uHAAuH;IACvH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gHAAgH;IAChH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,4EAA4E;IAC5E,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,kDAAkD;AAClD,MAAM,WAAW,6BAA6B;IAC5C,kCAAkC;IAClC,MAAM,EAAE,OAAO,CAAC;IAChB,sFAAsF;IACtF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6FAA6F;IAC7F,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4EAA4E;IAC5E,MAAM,CAAC,EAAE,8BAA8B,CAAC;IACxC,+DAA+D;IAC/D,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,6EAA6E;IAC7E,eAAe,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC;IACzC,+DAA+D;IAC/D,eAAe,EAAE,MAAM,IAAI,CAAC;CAC7B"}
@@ -1,4 +1,4 @@
1
- import { RequestSkill } from '../../../chat-shared/src/index.ts';
1
+ import { RequestSkill } from '@epam/ai-dial-chat-shared';
2
2
  import { CommandMenuConfig, MenuOverlayConfig } from '@epam/ai-dial-conversation-input';
3
3
  import { ComponentType, ReactNode } from 'react';
4
4
  import { SkillListingEntry } from './favorite-skill-item';
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@epam/ai-dial-skills",
3
3
  "description": "Host-agnostic UI for picking a favorite skill to attach to a chat input",
4
- "version": "1.2.0-dev.73",
4
+ "version": "1.2.0-dev.78",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
7
7
  "main": "./index.js",
@@ -18,11 +18,11 @@
18
18
  },
19
19
  "dependencies": {
20
20
  "@tabler/icons-react": "^3.44.0",
21
- "@epam/ai-dial-catalog": "1.2.0-dev.73",
22
- "@epam/ai-dial-conversation-input": "1.2.0-dev.73"
21
+ "@epam/ai-dial-catalog": "1.2.0-dev.78",
22
+ "@epam/ai-dial-conversation-input": "1.2.0-dev.78"
23
23
  },
24
24
  "peerDependencies": {
25
- "@epam/ai-dial-chat-shared": "1.2.0-dev.73",
25
+ "@epam/ai-dial-chat-shared": "1.2.0-dev.78",
26
26
  "@epam/ai-dial-ui-kit": "^0.15.0-dev.9",
27
27
  "react": "^19.2.8"
28
28
  },