@sparkelf/dsh-client-ui-skill-center 0.2.1-alpha.28 → 0.2.1-alpha.29

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 (2) hide show
  1. package/lib/client.js +116 -119
  2. package/package.json +1 -1
package/lib/client.js CHANGED
@@ -4,11 +4,11 @@ window.__ModuleLoader__.load({
4
4
  var module = { exports: {} };
5
5
  var exports = module.exports;
6
6
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
7
- let react_jsx_runtime = require("react/jsx-runtime");
8
7
  let react = require("react");
9
8
  let _deepseek_ai_dsh_client_ui_primitives = require("@deepseek-ai/dsh-client-ui-primitives");
9
+ let react_jsx_runtime = require("react/jsx-runtime");
10
10
  //#region \0dsh-css:/root/projects/deepseek-harness-plus/packages/plus/ui-skill-center/src/client/SkillCenterPage.module.css.mjs
11
- const css = ".DGiSta_page{box-sizing:border-box;height:100%;color:var(--dsw-alias-label-primary);flex-direction:column;align-items:center;gap:32px;padding:28px clamp(24px,4vw,48px) 48px;display:flex;overflow:auto}.DGiSta_page>*{width:100%;max-width:960px}.DGiSta_pageHead{justify-content:space-between;align-items:flex-start;gap:16px;display:flex}.DGiSta_pageTitle{margin:0;font-size:20px;font-weight:500;line-height:28px}.DGiSta_pageIntro{color:var(--dsw-alias-label-secondary);margin:4px 0 0;font-size:13px;line-height:20px}.DGiSta_toolbar{justify-content:flex-end;align-items:center;gap:16px;display:flex}.DGiSta_iconButton{width:28px;height:28px;color:var(--dsw-alias-label-caption);cursor:pointer;background:0 0;border:0;border-radius:28px;justify-content:center;align-items:center;display:inline-flex}.DGiSta_iconButton:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-secondary)}.DGiSta_iconButton:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:1px}.DGiSta_iconWrap{display:inline-flex}.DGiSta_button{border:.5px solid var(--dsw-alias-border-l3);height:32px;color:var(--dsw-alias-label-primary);cursor:pointer;background:0 0;border-radius:8px;padding:0 12px;font-size:13px}.DGiSta_button:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.DGiSta_button:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:1px}.DGiSta_search{box-sizing:border-box;border:.5px solid var(--dsw-alias-border-l3);width:100%;height:36px;color:var(--dsw-alias-label-primary);background:0 0;border-radius:10px;padding:0 12px;font-size:13px}.DGiSta_search::placeholder{color:var(--dsw-alias-label-tertiary)}.DGiSta_group{margin-top:32px}.DGiSta_groupTitle{align-items:baseline;gap:8px;margin:0 0 4px;font-size:15px;font-weight:500;line-height:22px;display:flex}.DGiSta_groupCount{color:var(--dsw-alias-label-tertiary);font-size:13px;font-weight:400}.DGiSta_groupHint{color:var(--dsw-alias-label-caption);font-size:12px;font-weight:400}.DGiSta_cards{margin:0;padding:0;list-style:none}.DGiSta_card{border-radius:12px;min-width:0;margin:0 -8px}.DGiSta_card:hover{background:var(--dsw-alias-interactive-bg-hover)}.DGiSta_cardHead{align-items:center;gap:14px;padding:8px;display:flex}.DGiSta_cardIcon{border:.5px solid var(--dsw-alias-border-l3);width:48px;height:48px;color:var(--dsw-alias-label-secondary);border-radius:10px;flex:none;justify-content:center;align-items:center;display:inline-flex}.DGiSta_cardForeign{opacity:.72}.DGiSta_cardMain{flex-direction:column;flex:1;gap:4px;min-width:0;display:flex}.DGiSta_workspaceBadge{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-secondary);vertical-align:middle;border-radius:4px;margin-left:8px;padding:1px 6px;font-size:11px;font-weight:400;line-height:16px}.DGiSta_cardTitle{text-overflow:ellipsis;white-space:nowrap;font-size:14px;font-weight:500;line-height:20px;overflow:hidden}.DGiSta_cardDesc{color:var(--dsw-alias-label-secondary);-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:13px;line-height:18px;display:-webkit-box;overflow:hidden}.DGiSta_cardWhenToUse{color:var(--dsw-alias-label-caption);font-size:12px;line-height:18px}.DGiSta_cardMarks{flex-wrap:wrap;gap:6px;margin-top:2px;display:flex}.DGiSta_mark{border:.5px solid var(--dsw-alias-border-l3);color:var(--dsw-alias-label-tertiary);border-radius:4px;padding:1px 6px;font-size:11px;line-height:16px}.DGiSta_markOn{border-color:var(--dsw-alias-state-business-primary);color:var(--dsw-alias-state-business-primary)}.DGiSta_markOff{border-color:var(--dsw-alias-border-l4);color:var(--dsw-alias-label-caption)}.DGiSta_markDanger{border-color:var(--dsw-alias-state-error-primary);color:var(--dsw-alias-state-error-primary)}.DGiSta_cardEnd{flex:none;align-items:center;gap:8px;display:flex}.DGiSta_switch{background:var(--dsw-alias-border-l3);cursor:pointer;border:none;border-radius:10px;width:36px;height:20px;transition:background .12s;position:relative}.DGiSta_switch:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:1px}.DGiSta_switchOn{background:var(--dsw-alias-state-success-primary)}.DGiSta_switch:after{content:\"\";background:var(--dsw-alias-bg-layer-1);border-radius:50%;width:16px;height:16px;transition:transform .12s;position:absolute;top:2px;left:2px}.DGiSta_switchOn:after{transform:translate(16px)}.DGiSta_dialog{width:min(560px,100%)}.DGiSta_form{flex-direction:column;gap:12px;display:flex}.DGiSta_field{flex-direction:column;gap:4px;display:flex}.DGiSta_fieldLabel{color:var(--dsw-alias-label-secondary);font-size:12px;line-height:18px}.DGiSta_input{box-sizing:border-box;border:.5px solid var(--dsw-alias-border-l3);height:32px;color:var(--dsw-alias-label-primary);background:0 0;border-radius:8px;padding:0 10px;font-size:13px}.DGiSta_textarea{box-sizing:border-box;border:.5px solid var(--dsw-alias-border-l3);min-height:80px;color:var(--dsw-alias-label-primary);font-family:var(--dsw-font-markdown-code-block-small);resize:vertical;background:0 0;border-radius:8px;padding:8px 10px;font-size:12px}.DGiSta_status{text-align:center;color:var(--dsw-alias-label-tertiary);padding:32px 0;font-size:13px}.DGiSta_statusError{color:var(--dsw-alias-state-error-primary)}";
11
+ const css = ".DGiSta_page{box-sizing:border-box;height:100%;color:var(--dsw-alias-label-primary);flex-direction:column;align-items:center;gap:32px;padding:28px clamp(24px,4vw,48px) 48px;display:flex;overflow:auto}.DGiSta_page>*{width:100%;max-width:960px}.DGiSta_pageHead{justify-content:space-between;align-items:flex-start;gap:16px;display:flex}.DGiSta_pageTitle{margin:0;font-size:20px;font-weight:500;line-height:28px}.DGiSta_pageIntro{color:var(--dsw-alias-label-secondary);margin:4px 0 0;font-size:13px;line-height:20px}.DGiSta_toolbar{justify-content:flex-end;align-items:center;gap:16px;display:flex}.DGiSta_iconButton{width:28px;height:28px;color:var(--dsw-alias-label-caption);cursor:pointer;background:0 0;border:0;border-radius:28px;justify-content:center;align-items:center;display:inline-flex}.DGiSta_iconButton:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-secondary)}.DGiSta_iconButton:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:1px}.DGiSta_iconWrap{display:inline-flex}.DGiSta_button{border:.5px solid var(--dsw-alias-border-l3);height:32px;color:var(--dsw-alias-label-primary);cursor:pointer;background:0 0;border-radius:8px;padding:0 12px;font-size:13px}.DGiSta_button:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.DGiSta_button:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:1px}.DGiSta_search{box-sizing:border-box;border:.5px solid var(--dsw-alias-border-l3);width:100%;height:36px;color:var(--dsw-alias-label-primary);background:0 0;border-radius:10px;padding:0 12px;font-size:13px}.DGiSta_search::placeholder{color:var(--dsw-alias-label-tertiary)}.DGiSta_group{margin-top:28px}.DGiSta_groupTitle{align-items:baseline;gap:8px;margin:0 0 12px;font-size:15px;font-weight:500;line-height:22px;display:flex}.DGiSta_groupCount{color:var(--dsw-alias-label-tertiary);font-size:13px;font-weight:400}.DGiSta_groupHint{color:var(--dsw-alias-label-caption);font-size:12px;font-weight:400}.DGiSta_cards{grid-template-columns:repeat(2,minmax(0,1fr));align-items:start;gap:10px;margin:0;padding:0;list-style:none;display:grid}.DGiSta_card{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-1);border-radius:12px;flex-direction:column;align-self:start;gap:12px;min-width:0;padding:12px 14px;display:flex}.DGiSta_cardHead{align-items:center;gap:10px;min-width:0;display:flex}.DGiSta_cardIcon{background:var(--dsw-alias-bg-layer-2);width:28px;height:28px;color:var(--dsw-alias-label-secondary);border-radius:50%;flex:none;place-items:center;display:grid}.DGiSta_cardForeign{opacity:.72}.DGiSta_workspaceBadge{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-secondary);vertical-align:middle;border-radius:4px;margin-left:8px;padding:1px 6px;font-size:11px;font-weight:400;line-height:16px}.DGiSta_cardTitle{text-overflow:ellipsis;white-space:nowrap;font-size:15px;font-weight:600;line-height:22px;overflow:hidden}.DGiSta_cardTitleRow{flex:1;align-items:center;gap:8px;min-width:0;display:flex}.DGiSta_cardDesc{color:var(--dsw-alias-label-secondary);-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:12px;line-height:18px;display:-webkit-box;overflow:hidden}.DGiSta_cardWhenToUse{color:var(--dsw-alias-label-caption);font-size:12px;line-height:18px}.DGiSta_cardMarks{flex-wrap:wrap;gap:6px;margin-top:2px;display:flex}.DGiSta_mark{border:1px solid var(--dsw-alias-border-l3);color:var(--dsw-alias-label-secondary);white-space:nowrap;border-radius:4px;padding:1px 6px;font-size:11px;line-height:16px}.DGiSta_markOn{border-color:var(--dsw-alias-state-business-primary);color:var(--dsw-alias-state-business-primary)}.DGiSta_markOff{border-color:var(--dsw-alias-border-l4);color:var(--dsw-alias-label-caption)}.DGiSta_markDanger{border-color:var(--dsw-alias-state-error-primary);color:var(--dsw-alias-state-error-primary)}.DGiSta_cardEnd{flex:none;justify-content:space-between;align-items:center;gap:8px;margin-top:auto;padding-top:2px;display:flex}.DGiSta_cardBody{flex-direction:column;gap:6px;min-width:0;display:flex}.DGiSta_switch{background:var(--dsw-alias-border-l3);cursor:pointer;border:none;border-radius:10px;width:36px;height:20px;transition:background .12s;position:relative}.DGiSta_switch:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:1px}.DGiSta_switchOn{background:var(--dsw-alias-state-success-primary)}.DGiSta_switch:after{content:\"\";background:var(--dsw-alias-bg-layer-1);border-radius:50%;width:16px;height:16px;transition:transform .12s;position:absolute;top:2px;left:2px}.DGiSta_switchOn:after{transform:translate(16px)}.DGiSta_dialog{width:min(560px,100%)}.DGiSta_form{flex-direction:column;gap:12px;display:flex}.DGiSta_field{flex-direction:column;gap:4px;display:flex}.DGiSta_fieldLabel{color:var(--dsw-alias-label-secondary);font-size:12px;line-height:18px}.DGiSta_input{box-sizing:border-box;border:.5px solid var(--dsw-alias-border-l3);height:32px;color:var(--dsw-alias-label-primary);background:0 0;border-radius:8px;padding:0 10px;font-size:13px}.DGiSta_textarea{box-sizing:border-box;border:.5px solid var(--dsw-alias-border-l3);min-height:80px;color:var(--dsw-alias-label-primary);font-family:var(--dsw-font-markdown-code-block-small);resize:vertical;background:0 0;border-radius:8px;padding:8px 10px;font-size:12px}.DGiSta_status{text-align:center;color:var(--dsw-alias-label-tertiary);padding:32px 0;font-size:13px}.DGiSta_statusError{color:var(--dsw-alias-state-error-primary)}";
12
12
  const tagId = "@sparkelf/dsh-client-ui-skill-center/SkillCenterPage.module.css";
13
13
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId) + "]") === null) {
14
14
  const tag = document.createElement("style");
@@ -20,14 +20,15 @@ window.__ModuleLoader__.load({
20
20
  var SkillCenterPage_module_css_default = {
21
21
  "button": "DGiSta_button",
22
22
  "card": "DGiSta_card",
23
+ "cardBody": "DGiSta_cardBody",
23
24
  "cardDesc": "DGiSta_cardDesc",
24
25
  "cardEnd": "DGiSta_cardEnd",
25
26
  "cardForeign": "DGiSta_cardForeign",
26
27
  "cardHead": "DGiSta_cardHead",
27
28
  "cardIcon": "DGiSta_cardIcon",
28
- "cardMain": "DGiSta_cardMain",
29
29
  "cardMarks": "DGiSta_cardMarks",
30
30
  "cardTitle": "DGiSta_cardTitle",
31
+ "cardTitleRow": "DGiSta_cardTitleRow",
31
32
  "cardWhenToUse": "DGiSta_cardWhenToUse",
32
33
  "cards": "DGiSta_cards",
33
34
  "dialog": "DGiSta_dialog",
@@ -59,7 +60,7 @@ window.__ModuleLoader__.load({
59
60
  "workspaceBadge": "DGiSta_workspaceBadge"
60
61
  };
61
62
  //#endregion
62
- //#region lib/types/client/api.js
63
+ //#region src/client/api.ts
63
64
  /**
64
65
  * Skill center API client. Talks to the host route family over same-origin
65
66
  * fetch; the host owns the trust fence.
@@ -131,7 +132,7 @@ window.__ModuleLoader__.load({
131
132
  }
132
133
  };
133
134
  //#endregion
134
- //#region lib/types/client/SkillCenterPage.js
135
+ //#region src/client/SkillCenterPage.tsx
135
136
  /**
136
137
  * Skill center page. Browses the loaded skills grouped by source, toggles model
137
138
  * invocation, creates a skill, and deletes one into a recoverable trash.
@@ -147,9 +148,9 @@ window.__ModuleLoader__.load({
147
148
  * @returns the labelled field.
148
149
  */
149
150
  function DraftField({ label, children }) {
150
- return (0, react_jsx_runtime.jsxs)("div", {
151
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
151
152
  className: SkillCenterPage_module_css_default.field,
152
- children: [(0, react_jsx_runtime.jsx)("span", {
153
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
153
154
  className: SkillCenterPage_module_css_default.fieldLabel,
154
155
  children: label
155
156
  }), children]
@@ -161,73 +162,75 @@ window.__ModuleLoader__.load({
161
162
  * @returns the row.
162
163
  */
163
164
  function SkillCard({ skill, t, onToggle, onDelete }) {
164
- return (0, react_jsx_runtime.jsx)("li", {
165
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("li", {
165
166
  className: skill.isActiveWorkspace === false && skill.workspaceName !== void 0 ? SkillCenterPage_module_css_default.card + " " + SkillCenterPage_module_css_default.cardForeign : SkillCenterPage_module_css_default.card,
166
- children: (0, react_jsx_runtime.jsxs)("div", {
167
- className: SkillCenterPage_module_css_default.cardHead,
168
- children: [
169
- (0, react_jsx_runtime.jsx)("span", {
167
+ children: [
168
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
169
+ className: SkillCenterPage_module_css_default.cardHead,
170
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
170
171
  className: SkillCenterPage_module_css_default.cardIcon,
171
- children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconSkillOutlineRegular, { size: 22 })
172
- }),
173
- (0, react_jsx_runtime.jsxs)("div", {
174
- className: SkillCenterPage_module_css_default.cardMain,
175
- children: [
176
- (0, react_jsx_runtime.jsxs)("div", {
177
- className: SkillCenterPage_module_css_default.cardTitle,
178
- children: [skill.name, skill.workspaceName === void 0 ? null : (0, react_jsx_runtime.jsx)("span", {
179
- className: SkillCenterPage_module_css_default.workspaceBadge,
180
- children: skill.workspaceName
181
- })]
182
- }),
183
- (0, react_jsx_runtime.jsx)("div", {
184
- className: SkillCenterPage_module_css_default.cardDesc,
185
- children: skill.description
186
- }),
187
- skill.whenToUse === void 0 ? null : (0, react_jsx_runtime.jsx)("div", {
188
- className: SkillCenterPage_module_css_default.cardWhenToUse,
189
- children: skill.whenToUse
190
- }),
191
- (0, react_jsx_runtime.jsxs)("div", {
192
- className: SkillCenterPage_module_css_default.cardMarks,
193
- children: [
194
- (0, react_jsx_runtime.jsx)("span", {
195
- className: skill.modelInvocable ? SkillCenterPage_module_css_default.mark + " " + SkillCenterPage_module_css_default.markOn : SkillCenterPage_module_css_default.mark + " " + SkillCenterPage_module_css_default.markOff,
196
- children: t("skill.modelInvocable")
197
- }),
198
- (0, react_jsx_runtime.jsx)("span", {
199
- className: skill.userInvocable ? SkillCenterPage_module_css_default.mark + " " + SkillCenterPage_module_css_default.markOn : SkillCenterPage_module_css_default.mark + " " + SkillCenterPage_module_css_default.markOff,
200
- children: t("skill.userInvocable")
201
- }),
202
- skill.linked === true ? (0, react_jsx_runtime.jsx)("span", {
203
- className: SkillCenterPage_module_css_default.mark + " " + SkillCenterPage_module_css_default.markDanger,
204
- children: t("skill.linked")
205
- }) : null
206
- ]
207
- })
208
- ]
209
- }),
210
- (0, react_jsx_runtime.jsxs)("div", {
211
- className: SkillCenterPage_module_css_default.cardEnd,
212
- children: [(0, react_jsx_runtime.jsx)("button", {
213
- type: "button",
214
- className: skill.modelInvocable ? SkillCenterPage_module_css_default.switch + " " + SkillCenterPage_module_css_default.switchOn : SkillCenterPage_module_css_default.switch,
215
- "aria-label": skill.modelInvocable ? t("skill.disabled") : t("skill.enabled"),
216
- "aria-pressed": skill.modelInvocable,
217
- onClick: () => {
218
- onToggle(skill, !skill.modelInvocable);
219
- }
220
- }), skill.path === void 0 || skill.linked === true ? null : (0, react_jsx_runtime.jsx)("button", {
221
- type: "button",
222
- className: SkillCenterPage_module_css_default.button,
223
- onClick: () => {
224
- onDelete(skill);
225
- },
226
- children: t("action.delete")
172
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconSkillOutlineRegular, { size: 16 })
173
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
174
+ className: SkillCenterPage_module_css_default.cardTitleRow,
175
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
176
+ className: SkillCenterPage_module_css_default.cardTitle,
177
+ children: skill.name
178
+ }), skill.workspaceName === void 0 ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
179
+ className: SkillCenterPage_module_css_default.workspaceBadge,
180
+ children: skill.workspaceName
227
181
  })]
228
- })
229
- ]
230
- })
182
+ })]
183
+ }),
184
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
185
+ className: SkillCenterPage_module_css_default.cardBody,
186
+ children: [
187
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
188
+ className: SkillCenterPage_module_css_default.cardDesc,
189
+ children: skill.description
190
+ }),
191
+ skill.whenToUse === void 0 ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
192
+ className: SkillCenterPage_module_css_default.cardWhenToUse,
193
+ children: skill.whenToUse
194
+ }),
195
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
196
+ className: SkillCenterPage_module_css_default.cardMarks,
197
+ children: [
198
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
199
+ className: skill.modelInvocable ? SkillCenterPage_module_css_default.mark + " " + SkillCenterPage_module_css_default.markOn : SkillCenterPage_module_css_default.mark + " " + SkillCenterPage_module_css_default.markOff,
200
+ children: t("skill.modelInvocable")
201
+ }),
202
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
203
+ className: skill.userInvocable ? SkillCenterPage_module_css_default.mark + " " + SkillCenterPage_module_css_default.markOn : SkillCenterPage_module_css_default.mark + " " + SkillCenterPage_module_css_default.markOff,
204
+ children: t("skill.userInvocable")
205
+ }),
206
+ skill.linked === true ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
207
+ className: SkillCenterPage_module_css_default.mark + " " + SkillCenterPage_module_css_default.markDanger,
208
+ children: t("skill.linked")
209
+ }) : null
210
+ ]
211
+ })
212
+ ]
213
+ }),
214
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
215
+ className: SkillCenterPage_module_css_default.cardEnd,
216
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
217
+ type: "button",
218
+ className: skill.modelInvocable ? SkillCenterPage_module_css_default.switch + " " + SkillCenterPage_module_css_default.switchOn : SkillCenterPage_module_css_default.switch,
219
+ "aria-label": skill.modelInvocable ? t("skill.disabled") : t("skill.enabled"),
220
+ "aria-pressed": skill.modelInvocable,
221
+ onClick: () => {
222
+ onToggle(skill, !skill.modelInvocable);
223
+ }
224
+ }), skill.path === void 0 || skill.linked === true ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
225
+ type: "button",
226
+ className: SkillCenterPage_module_css_default.button,
227
+ onClick: () => {
228
+ onDelete(skill);
229
+ },
230
+ children: t("action.delete")
231
+ })]
232
+ })
233
+ ]
231
234
  });
232
235
  }
233
236
  /**
@@ -344,20 +347,20 @@ window.__ModuleLoader__.load({
344
347
  load
345
348
  ]);
346
349
  const total = state.kind === "ready" ? state.payload.groups.reduce((n, g) => n + g.skills.length, 0) : 0;
347
- return (0, react_jsx_runtime.jsxs)("div", {
350
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
348
351
  className: SkillCenterPage_module_css_default.page,
349
352
  children: [
350
- (0, react_jsx_runtime.jsxs)("header", {
353
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("header", {
351
354
  className: SkillCenterPage_module_css_default.pageHead,
352
- children: [(0, react_jsx_runtime.jsxs)("div", { children: [(0, react_jsx_runtime.jsx)("h1", {
355
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h1", {
353
356
  className: SkillCenterPage_module_css_default.pageTitle,
354
357
  children: t("panel")
355
- }), (0, react_jsx_runtime.jsx)("p", {
358
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
356
359
  className: SkillCenterPage_module_css_default.pageIntro,
357
360
  children: t("panel.intro")
358
- })] }), (0, react_jsx_runtime.jsxs)("div", {
361
+ })] }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
359
362
  className: SkillCenterPage_module_css_default.toolbar,
360
- children: [(0, react_jsx_runtime.jsx)("button", {
363
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
361
364
  type: "button",
362
365
  className: SkillCenterPage_module_css_default.iconButton,
363
366
  "aria-label": t("action.refresh"),
@@ -365,15 +368,15 @@ window.__ModuleLoader__.load({
365
368
  onClick: () => {
366
369
  load();
367
370
  },
368
- children: (0, react_jsx_runtime.jsx)("span", {
371
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
369
372
  className: SkillCenterPage_module_css_default.iconWrap,
370
373
  "aria-hidden": "true",
371
- children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconRefreshOutlineRegular, {})
374
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconRefreshOutlineRegular, {})
372
375
  })
373
- }), (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
376
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
374
377
  variant: "primary",
375
378
  size: "sm",
376
- icon: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconPlusOutlineRegular, { size: 13 }),
379
+ icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconPlusOutlineRegular, { size: 13 }),
377
380
  onClick: () => {
378
381
  setCreating((v) => !v);
379
382
  },
@@ -381,7 +384,7 @@ window.__ModuleLoader__.load({
381
384
  })]
382
385
  })]
383
386
  }),
384
- (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Modal, {
387
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Modal, {
385
388
  open: creating,
386
389
  onClose: () => {
387
390
  setCreating(false);
@@ -389,58 +392,58 @@ window.__ModuleLoader__.load({
389
392
  title: t("create.title"),
390
393
  closeLabel: t("action.cancel"),
391
394
  className: SkillCenterPage_module_css_default.dialog,
392
- footer: (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [(0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
395
+ footer: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
393
396
  variant: "outline",
394
397
  autoFocus: true,
395
398
  onClick: () => {
396
399
  setCreating(false);
397
400
  },
398
401
  children: t("action.cancel")
399
- }), (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
402
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
400
403
  variant: "primary",
401
404
  onClick: () => {
402
405
  submit();
403
406
  },
404
407
  children: t("action.confirm")
405
408
  })] }),
406
- children: (0, react_jsx_runtime.jsxs)("div", {
409
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
407
410
  className: SkillCenterPage_module_css_default.form,
408
411
  children: [
409
- (0, react_jsx_runtime.jsx)(DraftField, {
412
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DraftField, {
410
413
  label: t("create.name"),
411
- children: (0, react_jsx_runtime.jsx)("input", {
414
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
412
415
  className: SkillCenterPage_module_css_default.input,
413
416
  value: draft.name,
414
417
  onChange: set("name")
415
418
  })
416
419
  }),
417
- (0, react_jsx_runtime.jsx)(DraftField, {
420
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DraftField, {
418
421
  label: t("create.description"),
419
- children: (0, react_jsx_runtime.jsx)("input", {
422
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
420
423
  className: SkillCenterPage_module_css_default.input,
421
424
  value: draft.description,
422
425
  onChange: set("description")
423
426
  })
424
427
  }),
425
- (0, react_jsx_runtime.jsx)(DraftField, {
428
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DraftField, {
426
429
  label: t("create.whenToUse"),
427
- children: (0, react_jsx_runtime.jsx)("input", {
430
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
428
431
  className: SkillCenterPage_module_css_default.input,
429
432
  value: draft.whenToUse,
430
433
  onChange: set("whenToUse")
431
434
  })
432
435
  }),
433
- (0, react_jsx_runtime.jsx)(DraftField, {
436
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DraftField, {
434
437
  label: t("create.content"),
435
- children: (0, react_jsx_runtime.jsx)("textarea", {
438
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("textarea", {
436
439
  className: SkillCenterPage_module_css_default.textarea,
437
440
  value: draft.content,
438
441
  onChange: set("content")
439
442
  })
440
443
  }),
441
- (0, react_jsx_runtime.jsx)(DraftField, {
444
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DraftField, {
442
445
  label: t("create.root"),
443
- children: (0, react_jsx_runtime.jsxs)("select", {
446
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("select", {
444
447
  className: SkillCenterPage_module_css_default.input,
445
448
  value: draft.root,
446
449
  onChange: (e) => {
@@ -449,10 +452,10 @@ window.__ModuleLoader__.load({
449
452
  root: e.target.value === "project" ? "project" : "user"
450
453
  }));
451
454
  },
452
- children: [(0, react_jsx_runtime.jsx)("option", {
455
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", {
453
456
  value: "user",
454
457
  children: t("create.rootUser")
455
- }), (0, react_jsx_runtime.jsx)("option", {
458
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", {
456
459
  value: "project",
457
460
  children: t("create.rootProject")
458
461
  })]
@@ -461,7 +464,7 @@ window.__ModuleLoader__.load({
461
464
  ]
462
465
  })
463
466
  }),
464
- (0, react_jsx_runtime.jsx)("input", {
467
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
465
468
  className: SkillCenterPage_module_css_default.search,
466
469
  placeholder: t("search.placeholder"),
467
470
  value: query,
@@ -469,11 +472,11 @@ window.__ModuleLoader__.load({
469
472
  setQuery(e.target.value);
470
473
  }
471
474
  }),
472
- state.kind === "loading" ? (0, react_jsx_runtime.jsx)("div", {
475
+ state.kind === "loading" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
473
476
  className: SkillCenterPage_module_css_default.status,
474
477
  children: t("state.loading")
475
478
  }) : null,
476
- state.kind === "failed" ? (0, react_jsx_runtime.jsxs)("div", {
479
+ state.kind === "failed" ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
477
480
  className: SkillCenterPage_module_css_default.status + " " + SkillCenterPage_module_css_default.statusError,
478
481
  children: [
479
482
  t("state.failed"),
@@ -481,32 +484,32 @@ window.__ModuleLoader__.load({
481
484
  state.message
482
485
  ]
483
486
  }) : null,
484
- state.kind === "ready" && groups.length === 0 ? (0, react_jsx_runtime.jsx)("div", {
487
+ state.kind === "ready" && groups.length === 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
485
488
  className: SkillCenterPage_module_css_default.status,
486
489
  children: query.trim() === "" ? t("state.empty") : t("search.noMatches")
487
490
  }) : null,
488
- state.kind === "ready" && groups.length > 0 && total === 0 ? (0, react_jsx_runtime.jsx)("div", {
491
+ state.kind === "ready" && groups.length > 0 && total === 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
489
492
  className: SkillCenterPage_module_css_default.status,
490
493
  children: t("state.empty")
491
494
  }) : null,
492
- groups.map((group) => (0, react_jsx_runtime.jsxs)("div", {
495
+ groups.map((group) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
493
496
  className: SkillCenterPage_module_css_default.group,
494
- children: [(0, react_jsx_runtime.jsxs)("h2", {
497
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("h2", {
495
498
  className: SkillCenterPage_module_css_default.groupTitle,
496
499
  children: [
497
500
  group.title,
498
- (0, react_jsx_runtime.jsx)("span", {
501
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
499
502
  className: SkillCenterPage_module_css_default.groupCount,
500
503
  children: group.skills.length
501
504
  }),
502
- (0, react_jsx_runtime.jsx)("span", {
505
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
503
506
  className: SkillCenterPage_module_css_default.groupHint,
504
507
  children: group.hint
505
508
  })
506
509
  ]
507
- }), (0, react_jsx_runtime.jsx)("ul", {
510
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("ul", {
508
511
  className: SkillCenterPage_module_css_default.cards,
509
- children: group.skills.map((skill) => (0, react_jsx_runtime.jsx)(SkillCard, {
512
+ children: group.skills.map((skill) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SkillCard, {
510
513
  skill,
511
514
  t,
512
515
  onToggle: (s, enabled) => {
@@ -518,28 +521,22 @@ window.__ModuleLoader__.load({
518
521
  }, group.key + ":" + skill.name))
519
522
  })]
520
523
  }, group.key)),
521
- renderSlot("skill-center.section", {})
524
+ renderSlot("skill-center.section", { query })
522
525
  ]
523
526
  });
524
527
  }
525
528
  //#endregion
526
- //#region lib/types/client/SkillCenterPanelIcon.js
529
+ //#region src/client/SkillCenterPanelIcon.tsx
527
530
  /**
528
531
  * Render the glyph at the size the sidebar asks for.
529
532
  * @param props - the sidebar's icon share: requested edge and selected state.
530
533
  * @returns the icon element.
531
534
  */
532
535
  function SkillCenterPanelIcon({ size }) {
533
- return (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconSkillOutlineRegular, { size });
536
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconSkillOutlineRegular, { size });
534
537
  }
535
538
  //#endregion
536
- //#region lib/types/client/locales.js
537
- /**
538
- * Skill center dictionaries. Keys are typed so the panel and the sidebar entry
539
- * cannot reference a string that does not exist in both languages.
540
- *
541
- * @module @sparkelf/dsh-client-ui-skill-center/client/locales
542
- */
539
+ //#region src/client/locales.ts
543
540
  /** Simplified Chinese dictionary. */
544
541
  const zh = {
545
542
  "panel": "技能中心",
@@ -601,7 +598,7 @@ window.__ModuleLoader__.load({
601
598
  "delete.confirm": "Deleting moves it into .trash, where it can be restored. Delete?"
602
599
  };
603
600
  //#endregion
604
- //#region lib/types/client/index.js
601
+ //#region src/client/index.ts
605
602
  /** Dictionary namespace owned by this plugin. */
606
603
  const NS = "skillCenter";
607
604
  /** The id shared by the sidebar entry and the main panel it opens. */
package/package.json CHANGED
@@ -61,5 +61,5 @@
61
61
  },
62
62
  "type": "module",
63
63
  "types": "lib/types/index.d.ts",
64
- "version": "0.2.1-alpha.28"
64
+ "version": "0.2.1-alpha.29"
65
65
  }