@sparkelf/dsh-client-ui-skill-center 0.2.0-rc.13 → 0.2.0-rc.15

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 +67 -61
  2. package/package.json +1 -1
package/lib/client.js CHANGED
@@ -4,9 +4,9 @@ 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");
7
8
  let react = require("react");
8
9
  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
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_cardMain{flex-direction:column;flex:1;gap:4px;min-width:0;display:flex}.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)}";
12
12
  const tagId = "@sparkelf/dsh-client-ui-skill-center/SkillCenterPage.module.css";
@@ -57,7 +57,7 @@ window.__ModuleLoader__.load({
57
57
  "toolbar": "DGiSta_toolbar"
58
58
  };
59
59
  //#endregion
60
- //#region src/client/api.ts
60
+ //#region lib/types/client/api.js
61
61
  /**
62
62
  * Skill center API client. Talks to the host route family over same-origin
63
63
  * fetch; the host owns the trust fence.
@@ -129,7 +129,7 @@ window.__ModuleLoader__.load({
129
129
  }
130
130
  };
131
131
  //#endregion
132
- //#region src/client/SkillCenterPage.tsx
132
+ //#region lib/types/client/SkillCenterPage.js
133
133
  /**
134
134
  * Skill center page. Browses the loaded skills grouped by source, toggles model
135
135
  * invocation, creates a skill, and deletes one into a recoverable trash.
@@ -145,9 +145,9 @@ window.__ModuleLoader__.load({
145
145
  * @returns the labelled field.
146
146
  */
147
147
  function DraftField({ label, children }) {
148
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
148
+ return (0, react_jsx_runtime.jsxs)("div", {
149
149
  className: SkillCenterPage_module_css_default.field,
150
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
150
+ children: [(0, react_jsx_runtime.jsx)("span", {
151
151
  className: SkillCenterPage_module_css_default.fieldLabel,
152
152
  children: label
153
153
  }), children]
@@ -159,42 +159,42 @@ window.__ModuleLoader__.load({
159
159
  * @returns the row.
160
160
  */
161
161
  function SkillCard({ skill, t, onToggle, onDelete }) {
162
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("li", {
162
+ return (0, react_jsx_runtime.jsx)("li", {
163
163
  className: SkillCenterPage_module_css_default.card,
164
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
164
+ children: (0, react_jsx_runtime.jsxs)("div", {
165
165
  className: SkillCenterPage_module_css_default.cardHead,
166
166
  children: [
167
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
167
+ (0, react_jsx_runtime.jsx)("span", {
168
168
  className: SkillCenterPage_module_css_default.cardIcon,
169
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconSkillOutline16, { size: 22 })
169
+ children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconSkillOutline16, { size: 22 })
170
170
  }),
171
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
171
+ (0, react_jsx_runtime.jsxs)("div", {
172
172
  className: SkillCenterPage_module_css_default.cardMain,
173
173
  children: [
174
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
174
+ (0, react_jsx_runtime.jsx)("div", {
175
175
  className: SkillCenterPage_module_css_default.cardTitle,
176
176
  children: skill.name
177
177
  }),
178
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
178
+ (0, react_jsx_runtime.jsx)("div", {
179
179
  className: SkillCenterPage_module_css_default.cardDesc,
180
180
  children: skill.description
181
181
  }),
182
- skill.whenToUse === void 0 ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
182
+ skill.whenToUse === void 0 ? null : (0, react_jsx_runtime.jsx)("div", {
183
183
  className: SkillCenterPage_module_css_default.cardWhenToUse,
184
184
  children: skill.whenToUse
185
185
  }),
186
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
186
+ (0, react_jsx_runtime.jsxs)("div", {
187
187
  className: SkillCenterPage_module_css_default.cardMarks,
188
188
  children: [
189
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
189
+ (0, react_jsx_runtime.jsx)("span", {
190
190
  className: skill.modelInvocable ? SkillCenterPage_module_css_default.mark + " " + SkillCenterPage_module_css_default.markOn : SkillCenterPage_module_css_default.mark + " " + SkillCenterPage_module_css_default.markOff,
191
191
  children: t("skill.modelInvocable")
192
192
  }),
193
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
193
+ (0, react_jsx_runtime.jsx)("span", {
194
194
  className: skill.userInvocable ? SkillCenterPage_module_css_default.mark + " " + SkillCenterPage_module_css_default.markOn : SkillCenterPage_module_css_default.mark + " " + SkillCenterPage_module_css_default.markOff,
195
195
  children: t("skill.userInvocable")
196
196
  }),
197
- skill.linked === true ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
197
+ skill.linked === true ? (0, react_jsx_runtime.jsx)("span", {
198
198
  className: SkillCenterPage_module_css_default.mark + " " + SkillCenterPage_module_css_default.markDanger,
199
199
  children: t("skill.linked")
200
200
  }) : null
@@ -202,9 +202,9 @@ window.__ModuleLoader__.load({
202
202
  })
203
203
  ]
204
204
  }),
205
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
205
+ (0, react_jsx_runtime.jsxs)("div", {
206
206
  className: SkillCenterPage_module_css_default.cardEnd,
207
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
207
+ children: [(0, react_jsx_runtime.jsx)("button", {
208
208
  type: "button",
209
209
  className: skill.modelInvocable ? SkillCenterPage_module_css_default.switch + " " + SkillCenterPage_module_css_default.switchOn : SkillCenterPage_module_css_default.switch,
210
210
  "aria-label": skill.modelInvocable ? t("skill.disabled") : t("skill.enabled"),
@@ -212,7 +212,7 @@ window.__ModuleLoader__.load({
212
212
  onClick: () => {
213
213
  onToggle(skill, !skill.modelInvocable);
214
214
  }
215
- }), skill.path === void 0 || skill.linked === true ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
215
+ }), skill.path === void 0 || skill.linked === true ? null : (0, react_jsx_runtime.jsx)("button", {
216
216
  type: "button",
217
217
  className: SkillCenterPage_module_css_default.button,
218
218
  onClick: () => {
@@ -334,20 +334,20 @@ window.__ModuleLoader__.load({
334
334
  load
335
335
  ]);
336
336
  const total = state.kind === "ready" ? state.payload.groups.reduce((n, g) => n + g.skills.length, 0) : 0;
337
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
337
+ return (0, react_jsx_runtime.jsxs)("div", {
338
338
  className: SkillCenterPage_module_css_default.page,
339
339
  children: [
340
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("header", {
340
+ (0, react_jsx_runtime.jsxs)("header", {
341
341
  className: SkillCenterPage_module_css_default.pageHead,
342
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h1", {
342
+ children: [(0, react_jsx_runtime.jsxs)("div", { children: [(0, react_jsx_runtime.jsx)("h1", {
343
343
  className: SkillCenterPage_module_css_default.pageTitle,
344
344
  children: t("panel")
345
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
345
+ }), (0, react_jsx_runtime.jsx)("p", {
346
346
  className: SkillCenterPage_module_css_default.pageIntro,
347
347
  children: t("panel.intro")
348
- })] }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
348
+ })] }), (0, react_jsx_runtime.jsxs)("div", {
349
349
  className: SkillCenterPage_module_css_default.toolbar,
350
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
350
+ children: [(0, react_jsx_runtime.jsx)("button", {
351
351
  type: "button",
352
352
  className: SkillCenterPage_module_css_default.iconButton,
353
353
  "aria-label": t("action.refresh"),
@@ -355,15 +355,15 @@ window.__ModuleLoader__.load({
355
355
  onClick: () => {
356
356
  load();
357
357
  },
358
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
358
+ children: (0, react_jsx_runtime.jsx)("span", {
359
359
  className: SkillCenterPage_module_css_default.iconWrap,
360
360
  "aria-hidden": "true",
361
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconRefreshOutline16, {})
361
+ children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconRefreshOutline16, {})
362
362
  })
363
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
363
+ }), (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
364
364
  variant: "primary",
365
365
  size: "sm",
366
- icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconPlusOutline16, { size: 13 }),
366
+ icon: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconPlusOutline16, { size: 13 }),
367
367
  onClick: () => {
368
368
  setCreating((v) => !v);
369
369
  },
@@ -371,7 +371,7 @@ window.__ModuleLoader__.load({
371
371
  })]
372
372
  })]
373
373
  }),
374
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Modal, {
374
+ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Modal, {
375
375
  open: creating,
376
376
  onClose: () => {
377
377
  setCreating(false);
@@ -379,58 +379,58 @@ window.__ModuleLoader__.load({
379
379
  title: t("create.title"),
380
380
  closeLabel: t("action.cancel"),
381
381
  className: SkillCenterPage_module_css_default.dialog,
382
- 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, {
382
+ footer: (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [(0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
383
383
  variant: "outline",
384
384
  autoFocus: true,
385
385
  onClick: () => {
386
386
  setCreating(false);
387
387
  },
388
388
  children: t("action.cancel")
389
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
389
+ }), (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
390
390
  variant: "primary",
391
391
  onClick: () => {
392
392
  submit();
393
393
  },
394
394
  children: t("action.confirm")
395
395
  })] }),
396
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
396
+ children: (0, react_jsx_runtime.jsxs)("div", {
397
397
  className: SkillCenterPage_module_css_default.form,
398
398
  children: [
399
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DraftField, {
399
+ (0, react_jsx_runtime.jsx)(DraftField, {
400
400
  label: t("create.name"),
401
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
401
+ children: (0, react_jsx_runtime.jsx)("input", {
402
402
  className: SkillCenterPage_module_css_default.input,
403
403
  value: draft.name,
404
404
  onChange: set("name")
405
405
  })
406
406
  }),
407
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DraftField, {
407
+ (0, react_jsx_runtime.jsx)(DraftField, {
408
408
  label: t("create.description"),
409
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
409
+ children: (0, react_jsx_runtime.jsx)("input", {
410
410
  className: SkillCenterPage_module_css_default.input,
411
411
  value: draft.description,
412
412
  onChange: set("description")
413
413
  })
414
414
  }),
415
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DraftField, {
415
+ (0, react_jsx_runtime.jsx)(DraftField, {
416
416
  label: t("create.whenToUse"),
417
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
417
+ children: (0, react_jsx_runtime.jsx)("input", {
418
418
  className: SkillCenterPage_module_css_default.input,
419
419
  value: draft.whenToUse,
420
420
  onChange: set("whenToUse")
421
421
  })
422
422
  }),
423
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DraftField, {
423
+ (0, react_jsx_runtime.jsx)(DraftField, {
424
424
  label: t("create.content"),
425
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("textarea", {
425
+ children: (0, react_jsx_runtime.jsx)("textarea", {
426
426
  className: SkillCenterPage_module_css_default.textarea,
427
427
  value: draft.content,
428
428
  onChange: set("content")
429
429
  })
430
430
  }),
431
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DraftField, {
431
+ (0, react_jsx_runtime.jsx)(DraftField, {
432
432
  label: t("create.root"),
433
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("select", {
433
+ children: (0, react_jsx_runtime.jsxs)("select", {
434
434
  className: SkillCenterPage_module_css_default.input,
435
435
  value: draft.root,
436
436
  onChange: (e) => {
@@ -439,10 +439,10 @@ window.__ModuleLoader__.load({
439
439
  root: e.target.value === "project" ? "project" : "user"
440
440
  }));
441
441
  },
442
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", {
442
+ children: [(0, react_jsx_runtime.jsx)("option", {
443
443
  value: "user",
444
444
  children: t("create.rootUser")
445
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", {
445
+ }), (0, react_jsx_runtime.jsx)("option", {
446
446
  value: "project",
447
447
  children: t("create.rootProject")
448
448
  })]
@@ -451,7 +451,7 @@ window.__ModuleLoader__.load({
451
451
  ]
452
452
  })
453
453
  }),
454
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
454
+ (0, react_jsx_runtime.jsx)("input", {
455
455
  className: SkillCenterPage_module_css_default.search,
456
456
  placeholder: t("search.placeholder"),
457
457
  value: query,
@@ -459,11 +459,11 @@ window.__ModuleLoader__.load({
459
459
  setQuery(e.target.value);
460
460
  }
461
461
  }),
462
- state.kind === "loading" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
462
+ state.kind === "loading" ? (0, react_jsx_runtime.jsx)("div", {
463
463
  className: SkillCenterPage_module_css_default.status,
464
464
  children: t("state.loading")
465
465
  }) : null,
466
- state.kind === "failed" ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
466
+ state.kind === "failed" ? (0, react_jsx_runtime.jsxs)("div", {
467
467
  className: SkillCenterPage_module_css_default.status + " " + SkillCenterPage_module_css_default.statusError,
468
468
  children: [
469
469
  t("state.failed"),
@@ -471,32 +471,32 @@ window.__ModuleLoader__.load({
471
471
  state.message
472
472
  ]
473
473
  }) : null,
474
- state.kind === "ready" && groups.length === 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
474
+ state.kind === "ready" && groups.length === 0 ? (0, react_jsx_runtime.jsx)("div", {
475
475
  className: SkillCenterPage_module_css_default.status,
476
476
  children: query.trim() === "" ? t("state.empty") : t("search.noMatches")
477
477
  }) : null,
478
- state.kind === "ready" && groups.length > 0 && total === 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
478
+ state.kind === "ready" && groups.length > 0 && total === 0 ? (0, react_jsx_runtime.jsx)("div", {
479
479
  className: SkillCenterPage_module_css_default.status,
480
480
  children: t("state.empty")
481
481
  }) : null,
482
- groups.map((group) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
482
+ groups.map((group) => (0, react_jsx_runtime.jsxs)("div", {
483
483
  className: SkillCenterPage_module_css_default.group,
484
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("h2", {
484
+ children: [(0, react_jsx_runtime.jsxs)("h2", {
485
485
  className: SkillCenterPage_module_css_default.groupTitle,
486
486
  children: [
487
487
  group.title,
488
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
488
+ (0, react_jsx_runtime.jsx)("span", {
489
489
  className: SkillCenterPage_module_css_default.groupCount,
490
490
  children: group.skills.length
491
491
  }),
492
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
492
+ (0, react_jsx_runtime.jsx)("span", {
493
493
  className: SkillCenterPage_module_css_default.groupHint,
494
494
  children: group.hint
495
495
  })
496
496
  ]
497
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("ul", {
497
+ }), (0, react_jsx_runtime.jsx)("ul", {
498
498
  className: SkillCenterPage_module_css_default.cards,
499
- children: group.skills.map((skill) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SkillCard, {
499
+ children: group.skills.map((skill) => (0, react_jsx_runtime.jsx)(SkillCard, {
500
500
  skill,
501
501
  t,
502
502
  onToggle: (s, enabled) => {
@@ -512,17 +512,23 @@ window.__ModuleLoader__.load({
512
512
  });
513
513
  }
514
514
  //#endregion
515
- //#region src/client/SkillCenterPanelIcon.tsx
515
+ //#region lib/types/client/SkillCenterPanelIcon.js
516
516
  /**
517
517
  * Render the glyph at the size the sidebar asks for.
518
518
  * @param props - the sidebar's icon share: requested edge and selected state.
519
519
  * @returns the icon element.
520
520
  */
521
521
  function SkillCenterPanelIcon({ size }) {
522
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconSkillOutline16, { size });
522
+ return (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconSkillOutline16, { size });
523
523
  }
524
524
  //#endregion
525
- //#region src/client/locales.ts
525
+ //#region lib/types/client/locales.js
526
+ /**
527
+ * Skill center dictionaries. Keys are typed so the panel and the sidebar entry
528
+ * cannot reference a string that does not exist in both languages.
529
+ *
530
+ * @module @sparkelf/dsh-client-ui-skill-center/client/locales
531
+ */
526
532
  /** Simplified Chinese dictionary. */
527
533
  const zh = {
528
534
  "panel": "技能中心",
@@ -584,7 +590,7 @@ window.__ModuleLoader__.load({
584
590
  "delete.confirm": "Deleting moves it into .trash, where it can be restored. Delete?"
585
591
  };
586
592
  //#endregion
587
- //#region src/client/index.ts
593
+ //#region lib/types/client/index.js
588
594
  /** Dictionary namespace owned by this plugin. */
589
595
  const NS = "skillCenter";
590
596
  /** 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.0-rc.13"
64
+ "version": "0.2.0-rc.15"
65
65
  }