dsh-mnemon-source-skills 0.5.1 → 0.5.2
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.
- package/README.md +7 -1
- package/lib/client.js +500 -26
- package/lib/contracts.d.ts +40 -1
- package/lib/index.js +282 -11
- package/lib/types/client/api.d.ts +18 -1
- package/lib/types/client/trash-page.d.ts +11 -0
- package/lib/types/client/ui.d.ts +1 -1
- package/lib/types/contracts.d.ts +39 -0
- package/package.json +2 -2
- package/presentation/locales.json +72 -6
- package/presentation/page.module.css +5 -0
package/lib/client.js
CHANGED
|
@@ -96,6 +96,11 @@ window.__ModuleLoader__.load({
|
|
|
96
96
|
key,
|
|
97
97
|
expectedHash
|
|
98
98
|
}),
|
|
99
|
+
trash: () => read("trash-list"),
|
|
100
|
+
previewTrashRestore: (input) => read("trash-restore-preview", input),
|
|
101
|
+
restoreTrash: (input) => mutate("trash-restore", input),
|
|
102
|
+
purgeTrash: (id) => mutate("trash-purge", { id }),
|
|
103
|
+
emptyTrash: () => mutate("trash-empty", {}),
|
|
99
104
|
restoreVersion: (key, versionId, expectedHash) => mutate("version-restore", {
|
|
100
105
|
key,
|
|
101
106
|
versionId,
|
|
@@ -151,10 +156,12 @@ window.__ModuleLoader__.load({
|
|
|
151
156
|
"page.readOnly": "只读",
|
|
152
157
|
"tabs.aria": "技能管理分页",
|
|
153
158
|
"tabs.waiting": "{count} 项待处理",
|
|
159
|
+
"tabs.trash": "{count} 项待清理",
|
|
154
160
|
"tab.skills": "技能",
|
|
155
161
|
"tab.evolution": "进化",
|
|
156
162
|
"tab.evals": "评测",
|
|
157
163
|
"tab.market": "市场",
|
|
164
|
+
"tab.trash": "回收站",
|
|
158
165
|
"common.loading": "加载中",
|
|
159
166
|
"common.cancel": "取消",
|
|
160
167
|
"common.close": "关闭",
|
|
@@ -197,8 +204,10 @@ window.__ModuleLoader__.load({
|
|
|
197
204
|
"skills.improvePlaceholder": "例如:发布说明按模块分组",
|
|
198
205
|
"skills.improveStart": "生成草案",
|
|
199
206
|
"skills.improveStarted": "正在生成草案,完成后在「进化」中查看",
|
|
200
|
-
"skills.
|
|
201
|
-
"skills.
|
|
207
|
+
"skills.remove": "移除",
|
|
208
|
+
"skills.removeTitle": "移除 {name}?",
|
|
209
|
+
"skills.removeBody": "技能会移到「回收站」页,可以随时恢复,也可以在那里彻底删除。",
|
|
210
|
+
"skills.removed": "已移除 {name}",
|
|
202
211
|
"skills.deleted": "已删除 {name}",
|
|
203
212
|
"invocation.label": "调用",
|
|
204
213
|
"invocation.both": "自动与 / 命令",
|
|
@@ -236,6 +245,7 @@ window.__ModuleLoader__.load({
|
|
|
236
245
|
"tests.progress": "回测中 {done}/{total}",
|
|
237
246
|
"tests.score": "{score} 分",
|
|
238
247
|
"tests.errors": "{count} 个未能运行",
|
|
248
|
+
"tests.unmeasured": "{count} 个未测",
|
|
239
249
|
"tests.withoutSkill": "无技能",
|
|
240
250
|
"tests.deleteTitle": "删除这个用例?",
|
|
241
251
|
"tests.newTitle": "添加用例",
|
|
@@ -245,6 +255,8 @@ window.__ModuleLoader__.load({
|
|
|
245
255
|
"tests.prompt": "任务",
|
|
246
256
|
"tests.promptHint": "用户会怎么说",
|
|
247
257
|
"tests.context": "背景(可选)",
|
|
258
|
+
"tests.requiresVision": "依赖图片输入",
|
|
259
|
+
"tests.requiresVisionHint": "纯文本回测无法接收图片。勾选后,此用例标为未测,不调用模型,也不计入评分和基线比较。",
|
|
248
260
|
"tests.checksLabel": "检查项",
|
|
249
261
|
"tests.checkPlaceholder": "结果应当……",
|
|
250
262
|
"tests.addCheck": "添加检查项",
|
|
@@ -438,6 +450,8 @@ window.__ModuleLoader__.load({
|
|
|
438
450
|
"run.verdict.pass": "通过",
|
|
439
451
|
"run.verdict.fail": "未通过",
|
|
440
452
|
"run.verdict.error": "出错",
|
|
453
|
+
"run.verdict.unmeasured": "未测",
|
|
454
|
+
"run.requiresVision": "此用例依赖图片输入,纯文本回测无法判定。未调用模型,不计入评分和基线比较。",
|
|
441
455
|
"versions.reason.install": "安装",
|
|
442
456
|
"diff.copy": "复制",
|
|
443
457
|
"diff.copied": "已复制",
|
|
@@ -448,7 +462,31 @@ window.__ModuleLoader__.load({
|
|
|
448
462
|
"diff.unwrap": "不换行",
|
|
449
463
|
"common.less": "收起",
|
|
450
464
|
"common.moreCount": "另 {count} 条",
|
|
451
|
-
"tests.history": "回测记录"
|
|
465
|
+
"tests.history": "回测记录",
|
|
466
|
+
"trash.title": "回收站",
|
|
467
|
+
"trash.body": "移除的技能还在磁盘上:可以恢复,也可以在这里彻底删除。",
|
|
468
|
+
"trash.emptyTitle": "回收站是空的",
|
|
469
|
+
"trash.emptyBody": "在「技能」页把技能「移除」后,它会先到这里。",
|
|
470
|
+
"trash.meta": "{time} · {size}",
|
|
471
|
+
"trash.restore": "恢复",
|
|
472
|
+
"trash.restoreHint": "放回它原来所在的目录",
|
|
473
|
+
"trash.restored": "已恢复 {name}",
|
|
474
|
+
"trash.purge": "彻底删除",
|
|
475
|
+
"trash.purgeTitle": "彻底删除 {name}?",
|
|
476
|
+
"trash.purgeBody": "文件会从磁盘上删除,无法恢复。",
|
|
477
|
+
"trash.purged": "已彻底删除 {name}",
|
|
478
|
+
"trash.empty": "清空回收站",
|
|
479
|
+
"trash.clearTitle": "清空回收站里的 {count} 项?",
|
|
480
|
+
"trash.clearBody": "这些文件会从磁盘上删除,无法恢复。",
|
|
481
|
+
"trash.emptied": "已清空 {count} 项",
|
|
482
|
+
"trash.file": "单个 Markdown 文件",
|
|
483
|
+
"trash.bundle": "技能目录",
|
|
484
|
+
"trash.restoreTitle": "恢复 {name}",
|
|
485
|
+
"trash.chooseRoot": "请选择恢复位置",
|
|
486
|
+
"trash.original": "原位置",
|
|
487
|
+
"trash.chooseHint": "可选择恢复位置或改名。同名替换需要明确确认,现有技能会保留在回收站。",
|
|
488
|
+
"trash.replace": "替换同名技能,并将现有版本保留在回收站",
|
|
489
|
+
"trash.confirmName": "输入 {name} 确认彻底删除"
|
|
452
490
|
};
|
|
453
491
|
var en = {
|
|
454
492
|
"page.title": "Skills",
|
|
@@ -456,10 +494,12 @@ window.__ModuleLoader__.load({
|
|
|
456
494
|
"page.readOnly": "Read-only",
|
|
457
495
|
"tabs.aria": "Skills pages",
|
|
458
496
|
"tabs.waiting": "{count} waiting",
|
|
497
|
+
"tabs.trash": "{count:item|items} removed",
|
|
459
498
|
"tab.skills": "Skills",
|
|
460
499
|
"tab.evolution": "Evolution",
|
|
461
500
|
"tab.evals": "Evals",
|
|
462
501
|
"tab.market": "Market",
|
|
502
|
+
"tab.trash": "Trash",
|
|
463
503
|
"common.loading": "Loading",
|
|
464
504
|
"common.cancel": "Cancel",
|
|
465
505
|
"common.close": "Close",
|
|
@@ -502,8 +542,10 @@ window.__ModuleLoader__.load({
|
|
|
502
542
|
"skills.improvePlaceholder": "For example: group release notes by module",
|
|
503
543
|
"skills.improveStart": "Draft",
|
|
504
544
|
"skills.improveStarted": "Drafting; it shows under Evolution when ready",
|
|
505
|
-
"skills.
|
|
506
|
-
"skills.
|
|
545
|
+
"skills.remove": "Remove",
|
|
546
|
+
"skills.removeTitle": "Remove {name}?",
|
|
547
|
+
"skills.removeBody": "The skill moves to the Trash tab, where you can restore it or delete it for good.",
|
|
548
|
+
"skills.removed": "Removed {name}",
|
|
507
549
|
"skills.deleted": "Deleted {name}",
|
|
508
550
|
"invocation.label": "Invocation",
|
|
509
551
|
"invocation.both": "Auto and / command",
|
|
@@ -541,6 +583,7 @@ window.__ModuleLoader__.load({
|
|
|
541
583
|
"tests.progress": "Backtesting {done}/{total}",
|
|
542
584
|
"tests.score": "score {score}",
|
|
543
585
|
"tests.errors": "{count} could not run",
|
|
586
|
+
"tests.unmeasured": "{count} not measured",
|
|
544
587
|
"tests.withoutSkill": "No skill",
|
|
545
588
|
"tests.deleteTitle": "Delete this case?",
|
|
546
589
|
"tests.newTitle": "Add case",
|
|
@@ -550,6 +593,8 @@ window.__ModuleLoader__.load({
|
|
|
550
593
|
"tests.prompt": "Task",
|
|
551
594
|
"tests.promptHint": "What the user would say",
|
|
552
595
|
"tests.context": "Context (optional)",
|
|
596
|
+
"tests.requiresVision": "Requires image input",
|
|
597
|
+
"tests.requiresVisionHint": "Text-only backtests cannot receive images. Marked cases are not measured: no model calls, scores, or baseline comparisons.",
|
|
553
598
|
"tests.checksLabel": "Checks",
|
|
554
599
|
"tests.checkPlaceholder": "The result should…",
|
|
555
600
|
"tests.addCheck": "Add check",
|
|
@@ -743,6 +788,8 @@ window.__ModuleLoader__.load({
|
|
|
743
788
|
"run.verdict.pass": "Pass",
|
|
744
789
|
"run.verdict.fail": "Fail",
|
|
745
790
|
"run.verdict.error": "Error",
|
|
791
|
+
"run.verdict.unmeasured": "Not measured",
|
|
792
|
+
"run.requiresVision": "This case requires image input that text-only backtests cannot receive. No model was called; this case is excluded from scores and baseline comparisons.",
|
|
746
793
|
"versions.reason.install": "Install",
|
|
747
794
|
"diff.copy": "Copy",
|
|
748
795
|
"diff.copied": "Copied",
|
|
@@ -753,11 +800,35 @@ window.__ModuleLoader__.load({
|
|
|
753
800
|
"diff.unwrap": "Don't wrap",
|
|
754
801
|
"common.less": "Less",
|
|
755
802
|
"common.moreCount": "{count} more",
|
|
756
|
-
"tests.history": "Backtests"
|
|
803
|
+
"tests.history": "Backtests",
|
|
804
|
+
"trash.title": "Trash",
|
|
805
|
+
"trash.body": "Removed skills stay on disk here: restore one, or delete it for good.",
|
|
806
|
+
"trash.emptyTitle": "The Trash is empty",
|
|
807
|
+
"trash.emptyBody": "Removing a skill from the Skills tab puts it here first.",
|
|
808
|
+
"trash.meta": "{time} · {size}",
|
|
809
|
+
"trash.restore": "Restore",
|
|
810
|
+
"trash.restoreHint": "Put it back where it came from",
|
|
811
|
+
"trash.restored": "Restored {name}",
|
|
812
|
+
"trash.purge": "Delete for good",
|
|
813
|
+
"trash.purgeTitle": "Delete {name} for good?",
|
|
814
|
+
"trash.purgeBody": "The files are deleted from disk and cannot be brought back.",
|
|
815
|
+
"trash.purged": "Deleted {name} for good",
|
|
816
|
+
"trash.empty": "Empty the Trash",
|
|
817
|
+
"trash.clearTitle": "Empty the Trash of {count:item|items}?",
|
|
818
|
+
"trash.clearBody": "These files are deleted from disk and cannot be brought back.",
|
|
819
|
+
"trash.emptied": "Emptied {count:item|items}",
|
|
820
|
+
"trash.file": "Markdown file",
|
|
821
|
+
"trash.bundle": "Skill bundle",
|
|
822
|
+
"trash.restoreTitle": "Restore {name}",
|
|
823
|
+
"trash.chooseRoot": "Choose a restore location",
|
|
824
|
+
"trash.original": "Original location",
|
|
825
|
+
"trash.chooseHint": "Choose a location or a different name. Replacing a skill requires confirmation and keeps its current version in the Trash.",
|
|
826
|
+
"trash.replace": "Replace the existing skill and keep its current version in the Trash",
|
|
827
|
+
"trash.confirmName": "Type {name} to confirm permanent deletion"
|
|
757
828
|
};
|
|
758
829
|
//#endregion
|
|
759
830
|
//#region \0source-css:/home/runner/work/dsh-mnemon/dsh-mnemon/plugins/dsh-mnemon-source-skills/presentation/page.module.css.mjs
|
|
760
|
-
const css$1 = ".IIa07q_skPage{flex-direction:column;gap:12px;min-width:0;animation:.22s cubic-bezier(.2,0,0,1) IIa07q_sk-arrive;display:flex}@keyframes IIa07q_sk-arrive{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}@keyframes IIa07q_sk-pop{0%{opacity:0;transform:scale(.6)}70%{transform:scale(1.08)}to{opacity:1;transform:none}}@keyframes IIa07q_sk-spin{to{transform:rotate(360deg)}}@keyframes IIa07q_sk-breathe{50%{opacity:.35}}.IIa07q_skMuted{color:var(--mn-faint);margin:0;font-size:12px;line-height:18px}.IIa07q_skProse{color:var(--mn-muted);white-space:pre-wrap;overflow-wrap:anywhere;margin:0;font-size:13px;line-height:21px}.IIa07q_skBusy{color:var(--mn-muted);align-items:center;gap:8px;padding:6px 0;font-size:12px;line-height:18px;display:inline-flex}.IIa07q_skLink{border-radius:var(--dsw-radius-xs,4px);color:var(--dsw-alias-link,var(--mn-accent));font:inherit;cursor:pointer;background:0 0;border:0;padding:0 2px;font-size:12px;line-height:18px;text-decoration:none;transition:color .12s,background-color .12s}.IIa07q_skLink:hover{background:color-mix(in srgb, var(--mn-accent) 8%, transparent)}.IIa07q_skAlert,.IIa07q_skNotice{border-radius:var(--dsw-radius-md);color:var(--mn-text);align-items:center;gap:8px;margin-bottom:12px;padding:8px 10px 8px 12px;font-size:12px;line-height:18px;display:flex}.IIa07q_skAlert{background:color-mix(in srgb, var(--mn-danger) 9%, transparent)}.IIa07q_skNotice{background:color-mix(in srgb, var(--mn-success) 9%, transparent)}.IIa07q_skAlert>span,.IIa07q_skNotice>span{overflow-wrap:anywhere;flex:1;min-width:0}.IIa07q_skDismiss{border-radius:var(--dsw-radius-xs,4px);width:20px;height:20px;color:inherit;opacity:.55;cursor:pointer;background:0 0;border:0;flex:none;place-items:center;padding:0;font-size:15px;line-height:1;transition:opacity .12s,background-color .12s;display:grid}.IIa07q_skDismiss:hover{background:var(--mn-hover);opacity:1}.IIa07q_skWarn,.IIa07q_skSuccess{border-radius:var(--dsw-radius-md);color:var(--mn-text);margin:0;padding:8px 12px;font-size:12px;line-height:18px}.IIa07q_skWarn{background:color-mix(in srgb, var(--mn-warn) 11%, transparent)}.IIa07q_skSuccess{background:color-mix(in srgb, var(--mn-success) 9%, transparent)}.IIa07q_skDangerButton{background:var(--mn-danger)!important}.IIa07q_skClamp{justify-items:start;gap:2px;display:grid}.IIa07q_skClamp>.IIa07q_skProse[data-clamped]{-webkit-line-clamp:var(--sk-lines,3);-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.IIa07q_skClamp>.IIa07q_skChanges{width:100%}.IIa07q_skCaption{color:var(--mn-faint);letter-spacing:.02em;margin:4px 0 0;font-size:11px;font-weight:500;line-height:16px}.IIa07q_skCallout{border-radius:var(--dsw-radius-md);width:100%;color:var(--mn-text);background:color-mix(in srgb, var(--mn-accent) 8%, transparent);font:inherit;text-align:left;cursor:pointer;border:0;justify-content:space-between;align-items:center;gap:12px;padding:8px 12px;font-size:12px;line-height:18px;transition:background-color .14s;display:flex}.IIa07q_skCallout:hover{background:color-mix(in srgb, var(--mn-accent) 13%, transparent)}.IIa07q_skCallout>b{color:var(--dsw-alias-link,var(--mn-accent));flex:none;font-weight:500;transition:transform .16s cubic-bezier(.2,0,0,1)}.IIa07q_skCallout:hover>b{transform:translate(2px)}.IIa07q_skTabBadge{min-width:16px;color:var(--dsw-alias-label-inverse,#fff);background:var(--mn-accent);text-align:center;font-variant-numeric:tabular-nums;border-radius:999px;margin-left:6px;padding:0 5px;font-size:11px;font-weight:500;line-height:16px;animation:.26s cubic-bezier(.2,0,0,1) IIa07q_sk-pop;display:inline-block}.IIa07q_skIconButton{border-radius:var(--dsw-radius-sm);width:28px;height:28px;color:var(--mn-muted);cursor:pointer;background:0 0;border:0;flex:none;place-items:center;padding:0;transition:color .12s,background-color .12s;display:grid}.IIa07q_skIconButton:hover:not(:disabled),.IIa07q_skIconButton[aria-expanded=true]{color:var(--mn-text);background:var(--mn-hover)}.IIa07q_skIconButton:disabled{cursor:default;opacity:.45}.IIa07q_skIconButton[data-busy]>svg{animation:.9s linear infinite IIa07q_sk-spin}.IIa07q_skIconButton[data-pulse]>svg{color:var(--mn-accent);animation:1.2s ease-in-out infinite IIa07q_sk-breathe}.IIa07q_skIconButton:focus-visible,.IIa07q_skCallout:focus-visible,.IIa07q_skLink:focus-visible{box-shadow:0 0 0 2px var(--dsw-focus-ring-color,var(--mn-accent));outline:none}.IIa07q_skEmpty{place-content:center;justify-items:center;gap:4px;min-height:280px;animation:.26s cubic-bezier(.2,0,0,1) IIa07q_sk-arrive;display:grid}.IIa07q_skEmptyActions{flex-wrap:wrap;justify-content:center;gap:8px;display:flex}.IIa07q_skSplit{grid-template-columns:minmax(268px,340px) minmax(0,1fr);gap:12px;min-height:560px;display:grid}.IIa07q_skList,.IIa07q_skPane{border:.5px solid var(--mn-card-line);border-radius:var(--dsw-radius-lg);min-width:0}.IIa07q_skList{flex-direction:column;padding-bottom:6px;display:flex;overflow:hidden}.IIa07q_skPane{padding:clamp(16px,2vw,24px);overflow:hidden}.IIa07q_skListBar{border-bottom:.5px solid var(--mn-line);align-items:center;gap:8px;padding:10px;display:flex}.IIa07q_skListBar>:first-child{flex:1;min-width:0}.IIa07q_skListNote{color:var(--mn-faint);text-align:center;margin:0;padding:18px 16px;font-size:12px;line-height:18px}.IIa07q_skListFilter{padding:8px 10px 2px}.IIa07q_skListGroup h5{color:var(--mn-faint);letter-spacing:.02em;text-overflow:ellipsis;white-space:nowrap;margin:14px 16px 4px;font-size:11px;font-weight:500;line-height:16px;overflow:hidden}.IIa07q_skListItem{border-radius:var(--dsw-radius-md);width:calc(100% - 12px);color:var(--mn-text);font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;margin:4px 6px 0;padding:9px 10px;transition:background-color .14s;display:block}.IIa07q_skListItem:hover{background:var(--mn-hover)}.IIa07q_skListItem[data-selected]{background:var(--mn-fill)}.IIa07q_skListItem>div{align-items:center;gap:6px;min-width:0;display:flex}.IIa07q_skListItem>div strong{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-size:13px;font-weight:500;line-height:20px;overflow:hidden}.IIa07q_skListItem p{color:var(--mn-muted);-webkit-line-clamp:2;-webkit-box-orient:vertical;margin:3px 0 4px;font-size:12px;line-height:18px;display:-webkit-box;overflow:hidden}.IIa07q_skListItem footer{min-width:0;color:var(--mn-faint);align-items:center;gap:8px;font-size:11px;line-height:16px;display:flex}.IIa07q_skListItem footer time{font-variant-numeric:tabular-nums;flex:none}.IIa07q_skListItem footer span{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.IIa07q_skIcon{border-radius:var(--dsw-radius-md);width:30px;height:30px;color:var(--mn-muted);background:var(--mn-fill);flex:none;place-items:center;font-size:13px;font-weight:600;line-height:1;transition:color .14s,background-color .14s;display:grid}.IIa07q_skRow{border-radius:var(--dsw-radius-md);align-items:center;gap:6px;margin:2px 6px 0;padding-right:8px;transition:background-color .14s;display:flex;position:relative}.IIa07q_skRow:hover{background:var(--mn-hover)}.IIa07q_skRow[data-selected]{background:var(--mn-fill)}.IIa07q_skRow[data-selected] .IIa07q_skIcon{color:var(--mn-text);background:var(--mn-layer-1,var(--mn-hover))}.IIa07q_skRow[data-off] .IIa07q_skRowText,.IIa07q_skRow[data-shadowed] .IIa07q_skRowText{opacity:.55}.IIa07q_skRowMain{min-width:0;color:var(--mn-text);font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;flex:1;align-items:center;gap:10px;padding:8px 0 8px 8px;display:flex}.IIa07q_skRowMain:focus-visible{box-shadow:inset 0 0 0 2px var(--dsw-focus-ring-color,var(--mn-accent));border-radius:var(--dsw-radius-md);outline:none}.IIa07q_skRowText{gap:1px;min-width:0;transition:opacity .14s;display:grid}.IIa07q_skRowText strong{white-space:nowrap;align-items:center;gap:6px;min-width:0;font-size:13px;font-weight:500;line-height:20px;display:flex}.IIa07q_skRowText strong>span{text-overflow:ellipsis;min-width:0;overflow:hidden}.IIa07q_skRowText small{color:var(--mn-faint);text-overflow:ellipsis;white-space:nowrap;font-size:12px;line-height:18px;overflow:hidden}.IIa07q_skScore{min-width:24px;color:var(--mn-muted);font-variant-numeric:tabular-nums;text-align:right;flex:none;font-size:13px;font-weight:500;line-height:20px;animation:.26s cubic-bezier(.2,0,0,1) IIa07q_sk-pop}.IIa07q_skScore[data-tone=good]{color:var(--mn-success)}.IIa07q_skScore[data-tone=bad]{color:var(--mn-danger)}.IIa07q_skDot{background:var(--mn-accent);border-radius:999px;flex:none;width:6px;height:6px;animation:.26s cubic-bezier(.2,0,0,1) IIa07q_sk-pop}.IIa07q_skRowActions{flex:none;align-items:center;gap:8px;display:flex}.IIa07q_skUse{opacity:0;pointer-events:none;transition:opacity .14s,transform .18s cubic-bezier(.2,0,0,1);transform:translate(4px)}.IIa07q_skRow:hover .IIa07q_skUse,.IIa07q_skRow:focus-within .IIa07q_skUse{opacity:1;pointer-events:auto;transform:none}@media (hover:none){.IIa07q_skUse{opacity:1;pointer-events:auto;transform:none}}.IIa07q_skProblems{color:var(--mn-faint);margin:12px 12px 4px;font-size:12px;line-height:18px}.IIa07q_skProblems summary{border-radius:var(--dsw-radius-xs,4px);cursor:pointer;width:fit-content;padding:0 2px}.IIa07q_skProblems summary:hover{color:var(--mn-muted)}.IIa07q_skProblems ul{gap:6px;margin:8px 0 0;padding:0;list-style:none;display:grid}.IIa07q_skProblems li{gap:2px;display:grid}.IIa07q_skProblems code{color:var(--mn-muted);font:11px/16px var(--mn-code)}.IIa07q_skDetail{grid-template-columns:minmax(0,1fr);gap:14px;min-width:0;animation:.2s cubic-bezier(.2,0,0,1) IIa07q_sk-arrive;display:grid}.IIa07q_skDetailHead{justify-content:space-between;align-items:flex-start;gap:16px;display:flex}.IIa07q_skDetailHead>div:first-child{gap:4px;min-width:0;display:grid}.IIa07q_skDetailHead h3{overflow-wrap:anywhere;margin:0;font-size:17px;font-weight:600;line-height:26px}.IIa07q_skDetailHead p{color:var(--mn-muted);margin:0;font-size:13px;line-height:20px}.IIa07q_skDetailActions{flex-wrap:wrap;flex:none;justify-content:flex-end;align-items:center;gap:6px;display:flex}.IIa07q_skKicker{flex-wrap:wrap;align-items:center;gap:6px;display:inline-flex}.IIa07q_skTitleLink{color:inherit;font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;padding:0}.IIa07q_skTitleLink:hover{color:var(--dsw-alias-link,var(--mn-accent))}.IIa07q_skMeta{min-width:0;color:var(--mn-faint);flex-wrap:wrap;align-items:center;gap:0 6px;font-size:12px;line-height:18px;display:flex}.IIa07q_skMeta>*+:before{content:\"·\";color:var(--mn-line-strong,var(--mn-faint));margin-right:6px}.IIa07q_skMeta code{min-width:0;max-width:100%;font:11px/18px var(--mn-code);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.IIa07q_skInvocation{align-items:center;gap:8px;display:flex}.IIa07q_skWhen{color:var(--mn-muted);margin:0;font-size:12px;line-height:18px}.IIa07q_skDoc{overflow-wrap:anywhere;min-width:0;color:var(--mn-text);font-size:13px;line-height:1.75}.IIa07q_skDoc>:first-child{margin-top:0}.IIa07q_skDoc>:last-child{margin-bottom:0}.IIa07q_skDoc h1,.IIa07q_skDoc h2,.IIa07q_skDoc h3,.IIa07q_skDoc h4{color:var(--mn-text);margin:1.4em 0 .5em;font-weight:600;line-height:1.4}.IIa07q_skDoc h1{font-size:1.25em}.IIa07q_skDoc h2{font-size:1.1em}.IIa07q_skDoc h3,.IIa07q_skDoc h4{font-size:1em}.IIa07q_skDoc p,.IIa07q_skDoc ul,.IIa07q_skDoc ol,.IIa07q_skDoc blockquote,.IIa07q_skDoc table,.IIa07q_skDoc pre{margin:.7em 0}.IIa07q_skDoc ul,.IIa07q_skDoc ol{padding-left:1.5em}.IIa07q_skDoc li+li{margin-top:.25em}.IIa07q_skDoc li::marker{color:var(--mn-faint)}.IIa07q_skDoc blockquote{border-left:2px solid var(--mn-line-strong,var(--mn-line));color:var(--mn-muted);margin-inline:0;padding:.1em 1em}.IIa07q_skDoc code{border-radius:var(--dsw-radius-xs,4px);color:var(--mn-text);background:var(--dsw-alias-markdown-inline-code,var(--mn-fill));font:.9em/1.55 var(--mn-code);padding:.12em .38em}.IIa07q_skDoc pre{border-radius:var(--dsw-radius-md);background:var(--dsw-alias-markdown-code-block,var(--mn-fill));max-width:100%;padding:10px 14px;overflow:auto}.IIa07q_skDoc pre code{background:0 0;padding:0;font-size:12px}.IIa07q_skDoc a{color:var(--dsw-alias-link,var(--mn-accent));text-underline-offset:3px;text-decoration-thickness:1px}.IIa07q_skDoc hr{border:0;border-top:.5px solid var(--mn-line);margin:1.6em 0}.IIa07q_skDoc table{border-collapse:collapse;max-width:100%;font-size:12px;display:block;overflow-x:auto}.IIa07q_skDoc th,.IIa07q_skDoc td{border:.5px solid var(--mn-line);text-align:left;vertical-align:top;padding:6px 10px}.IIa07q_skDoc th{background:var(--mn-fill);font-weight:500}.IIa07q_skDoc img{border-radius:var(--dsw-radius-sm);max-width:100%;height:auto}.IIa07q_skFolds{border-top:.5px solid var(--mn-line);grid-template-columns:minmax(0,1fr);min-width:0;margin-top:4px;display:grid}.IIa07q_skFold{border-bottom:.5px solid var(--mn-line);min-width:0}.IIa07q_skFold>header{justify-content:space-between;align-items:center;gap:12px;min-height:40px;display:flex}.IIa07q_skFold>header>button{border-radius:var(--dsw-radius-sm);min-width:0;color:var(--mn-text);font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;flex:1;align-items:center;gap:8px;margin-left:-4px;padding:8px 4px;font-size:13px;font-weight:500;line-height:20px;display:flex}.IIa07q_skFold>header>button>svg{color:var(--mn-faint);flex:none;transition:transform .18s cubic-bezier(.2,0,0,1),color .12s;transform:rotate(-90deg)}.IIa07q_skFold[data-open]>header>button>svg{transform:none}.IIa07q_skFold>header>button:hover>svg{color:var(--mn-text)}.IIa07q_skFold>header>button>small{min-width:0;color:var(--mn-faint);text-overflow:ellipsis;white-space:nowrap;font-size:12px;font-weight:400;overflow:hidden}.IIa07q_skFold>header>button:focus-visible{box-shadow:0 0 0 2px var(--dsw-focus-ring-color,var(--mn-accent));outline:none}.IIa07q_skFold>header>div{align-items:center;gap:6px;display:flex}.IIa07q_skFoldBody{grid-template-columns:minmax(0,1fr);gap:10px;min-width:0;padding:2px 0 14px;display:grid}.IIa07q_skFold[data-link]>header>button{padding-left:24px}.IIa07q_skFold[data-link]>header>button>b{color:var(--mn-faint);margin-left:auto;font-weight:400;transition:transform .16s cubic-bezier(.2,0,0,1),color .12s}.IIa07q_skFold[data-link]>header>button:hover>b{color:var(--dsw-alias-link,var(--mn-accent));transform:translate(2px)}.IIa07q_skVersions{grid-template-columns:minmax(0,1fr);gap:1px;margin:0;padding:0;list-style:none;display:grid}.IIa07q_skVersions li{border-radius:var(--dsw-radius-md);align-items:center;gap:10px;min-height:34px;padding:3px 6px;transition:background-color .12s;display:flex}.IIa07q_skVersions li:hover{background:var(--mn-hover)}.IIa07q_skVersions time{color:var(--mn-muted);font-variant-numeric:tabular-nums;font-size:12px}.IIa07q_skVersions li>span{flex:1}.IIa07q_skResources{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.IIa07q_skResources code{color:var(--mn-muted);background:var(--mn-fill);font:11px/17px var(--mn-code);border-radius:999px;padding:1px 8px}.IIa07q_skEditor{resize:vertical;border:.5px solid var(--mn-field-line);border-radius:var(--dsw-radius-md);width:100%;min-height:420px;color:var(--mn-text);background:var(--mn-input);font:12px/1.6 var(--mn-code);tab-size:2;outline:0;padding:10px 12px;transition:border-color .12s}.IIa07q_skEditor:focus{border-color:var(--mn-accent)}.IIa07q_skTimeline{grid-template-columns:minmax(0,1fr);gap:0;min-width:0;margin:0;padding:0;list-style:none;display:grid}.IIa07q_skTimeline>li{min-width:0}.IIa07q_skTurn{color:var(--mn-faint);letter-spacing:.02em;margin:12px 0 4px;font-size:11px;font-weight:500;line-height:16px}.IIa07q_skTimeline>li:first-child>.IIa07q_skTurn{margin-top:0}.IIa07q_skStep{border-radius:0 var(--dsw-radius-sm) var(--dsw-radius-sm) 0;border-left:2px solid #0000;align-items:flex-start;gap:8px;padding:5px 8px;transition:background-color .14s;display:flex}.IIa07q_skTimeline>li[data-annotated] .IIa07q_skStep{border-left-color:color-mix(in srgb, var(--mn-warn) 70%, transparent);background:color-mix(in srgb, var(--mn-warn) 5%, transparent)}.IIa07q_skTimeline>li[data-highlight] .IIa07q_skStep{border-left-color:var(--mn-accent);background:color-mix(in srgb, var(--mn-accent) 6%, transparent)}.IIa07q_skStepIndex{width:22px;color:var(--mn-faint);text-align:right;font-variant-numeric:tabular-nums;flex:none;font-size:11px;line-height:20px}.IIa07q_skStepGlyph{width:14px;color:var(--mn-faint);text-align:center;flex:none;font-size:12px;line-height:20px}.IIa07q_skTimeline>li[data-kind=skill] .IIa07q_skStepGlyph{color:var(--mn-accent)}.IIa07q_skTimeline>li[data-failed] .IIa07q_skStepGlyph{color:var(--mn-danger)}.IIa07q_skStepBody{flex:1;min-width:0}.IIa07q_skStepHead{flex-wrap:wrap;align-items:center;gap:6px;min-width:0;display:flex}.IIa07q_skStepHead strong{font-size:12px;font-weight:500;line-height:20px}.IIa07q_skStepHead code{min-width:0;max-width:100%;color:var(--mn-faint);font:11px/18px var(--mn-code);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.IIa07q_skStepBody>p{overflow-wrap:anywhere;color:var(--mn-muted);white-space:pre-wrap;margin:1px 0 0;font-size:12px;line-height:18px}.IIa07q_skTimeline[data-compact] .IIa07q_skStepBody>p{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.IIa07q_skAnnotation{color:var(--mn-text);align-items:flex-start;gap:6px;margin-top:6px;font-size:12px;line-height:18px;display:flex}.IIa07q_skEvidence+.IIa07q_skEvidence{margin-top:14px}.IIa07q_skEvidence>header{align-items:center;gap:8px;min-width:0;margin-bottom:6px;display:flex}.IIa07q_skEvidence>header strong{text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:12px;font-weight:500;overflow:hidden}.IIa07q_skEvidence>header span{color:var(--mn-faint);flex:none;font-size:11px}.IIa07q_skEvidence>header button{margin-left:auto}.IIa07q_skChips{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.IIa07q_skDeriveBar{border-radius:var(--dsw-radius-md);background:var(--mn-fill);color:var(--mn-muted);flex-wrap:wrap;align-items:center;gap:8px;padding:8px 10px;font-size:12px;line-height:18px;display:flex}.IIa07q_skDeriveBar>span{min-width:0;margin-right:auto}.IIa07q_skDraft{border-top:.5px solid var(--mn-line);grid-template-columns:minmax(0,1fr);gap:12px;min-width:0;padding-top:14px;display:grid}.IIa07q_skSectionHead{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px 12px;display:flex}.IIa07q_skSectionHead h4{align-items:baseline;gap:8px;margin:0;font-size:14px;font-weight:600;line-height:22px;display:flex}.IIa07q_skSectionHead h4 small{color:var(--mn-faint);font-size:12px;font-weight:400}.IIa07q_skSectionHead>div{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.IIa07q_skChanges{color:var(--mn-muted);gap:3px;margin:0;padding-left:18px;font-size:12px;line-height:18px;display:grid}.IIa07q_skChanges li::marker{color:var(--mn-faint)}.IIa07q_skGuidance{color:var(--mn-faint);gap:2px;margin:0;padding-left:18px;font-size:12px;line-height:18px;display:grid}.IIa07q_skBacktest{border-radius:var(--dsw-radius-md);background:var(--mn-fill);flex-wrap:wrap;align-items:center;gap:6px 10px;min-height:36px;padding:4px 6px 4px 12px;display:flex}.IIa07q_skBacktestLine{min-width:0;color:var(--mn-text);font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;flex:1;align-items:center;gap:10px;padding:4px 0;font-size:12px;line-height:18px;display:flex}.IIa07q_skBacktestLine>span{color:var(--mn-faint);flex:none}.IIa07q_skBacktestLine>strong{text-overflow:ellipsis;white-space:nowrap;font-variant-numeric:tabular-nums;min-width:0;font-weight:500;overflow:hidden}.IIa07q_skBacktestLine>em{color:var(--mn-muted);background:var(--mn-hover);font-variant-numeric:tabular-nums;border-radius:999px;flex:none;padding:0 7px;font-style:normal;font-weight:600}.IIa07q_skBacktest[data-tone=good] .IIa07q_skBacktestLine>em{color:var(--mn-success);background:color-mix(in srgb, var(--mn-success) 12%, transparent)}.IIa07q_skBacktest[data-tone=bad] .IIa07q_skBacktestLine>em{color:var(--mn-danger);background:color-mix(in srgb, var(--mn-danger) 12%, transparent)}.IIa07q_skBacktestLine:hover>strong{text-underline-offset:3px;text-decoration:underline;text-decoration-color:var(--mn-line-strong,var(--mn-faint))}.IIa07q_skTable{border-collapse:collapse;width:100%;font-size:12px;line-height:18px;animation:.18s cubic-bezier(.2,0,0,1) IIa07q_sk-arrive}.IIa07q_skTable th{border-bottom:.5px solid var(--mn-line);color:var(--mn-faint);text-align:left;padding:6px 8px;font-weight:500}.IIa07q_skTable td{border-bottom:.5px solid var(--mn-line);vertical-align:top;padding:7px 8px}.IIa07q_skTable td small{color:var(--mn-faint);margin-top:3px;display:block}.IIa07q_skComposer{border-radius:var(--dsw-radius-lg);background:var(--mn-fill);grid-template-columns:minmax(0,1fr);gap:8px;padding:12px;animation:.18s cubic-bezier(.2,0,0,1) IIa07q_sk-arrive;display:grid}.IIa07q_skComposer label{color:var(--mn-muted);gap:6px;font-size:12px;font-weight:500;line-height:18px;display:grid}.IIa07q_skComposer textarea{resize:vertical;border:.5px solid var(--mn-field-line);border-radius:var(--dsw-radius-md);width:100%;color:var(--mn-text);background:var(--mn-input);font:inherit;outline:0;padding:6px 10px;font-size:13px;line-height:20px;transition:border-color .12s}.IIa07q_skComposer textarea:focus{border-color:var(--mn-accent)}.IIa07q_skComposer>footer{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:8px;display:flex}.IIa07q_skTests{grid-template-columns:minmax(0,1fr);gap:10px;min-width:0;display:grid}.IIa07q_skTestsBar{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.IIa07q_skCases{grid-template-columns:minmax(0,1fr);gap:1px;margin:0;padding:0;list-style:none;display:grid}.IIa07q_skCases>li{border-radius:var(--dsw-radius-md);align-items:flex-start;gap:8px;padding:2px 4px 2px 0;transition:background-color .12s,opacity .14s;display:flex}.IIa07q_skCases>li:hover{background:var(--mn-hover)}.IIa07q_skCases>li[data-off]>details{opacity:.5}.IIa07q_skCases>li>details{flex:1;min-width:0}.IIa07q_skCases>li>:not(details){margin-top:6px}.IIa07q_skCases summary{border-radius:var(--dsw-radius-md);cursor:pointer;align-items:baseline;gap:8px;min-width:0;padding:7px 8px;list-style:none;display:flex}.IIa07q_skCases summary::-webkit-details-marker{display:none}.IIa07q_skCases summary strong{text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:13px;font-weight:500;line-height:20px;overflow:hidden}.IIa07q_skCases summary small{color:var(--mn-faint);flex:none;font-size:11px}.IIa07q_skCases details[open] summary strong{white-space:normal}.IIa07q_skCases details>p{color:var(--mn-muted);white-space:pre-wrap;overflow-wrap:anywhere;margin:0 8px 8px;font-size:12px;line-height:18px}.IIa07q_skCases details>ul{gap:4px;margin:0 8px 8px;padding:0;list-style:none;display:grid}.IIa07q_skCases details>ul li{color:var(--mn-text);align-items:flex-start;gap:6px;font-size:12px;line-height:18px;display:flex}.IIa07q_skCases details>.IIa07q_skLink{margin:0 6px 8px}.IIa07q_skRuns{grid-template-columns:minmax(0,1fr);gap:1px;margin:0;padding:0;list-style:none;display:grid}.IIa07q_skRuns>li>button{border-radius:var(--dsw-radius-md);width:100%;min-width:0;color:var(--mn-text);font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;align-items:center;gap:8px;padding:7px 8px;font-size:12px;line-height:18px;transition:background-color .12s;display:flex}.IIa07q_skRuns>li>button:hover,.IIa07q_skRuns>li>button[aria-expanded=true]{background:var(--mn-hover)}.IIa07q_skRuns>li>button>:first-child{flex:none}.IIa07q_skRuns>li>button span{min-width:0;color:var(--mn-muted);text-overflow:ellipsis;white-space:nowrap;font-variant-numeric:tabular-nums;flex:1;overflow:hidden}.IIa07q_skRuns>li>button time{color:var(--mn-faint);flex:none;font-size:11px}.IIa07q_skRunDetail{border-left:.5px solid var(--mn-line);grid-template-columns:minmax(0,1fr);gap:2px;margin:4px 0 8px 12px;padding-left:10px;animation:.18s cubic-bezier(.2,0,0,1) IIa07q_sk-arrive;display:grid}.IIa07q_skRunDetail details{padding:4px 0}.IIa07q_skRunDetail summary{cursor:pointer;align-items:center;gap:8px;min-width:0;font-size:12px;line-height:18px;display:flex}.IIa07q_skRunDetail summary strong{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-weight:500;overflow:hidden}.IIa07q_skRunDetail summary span{color:var(--mn-faint);font-variant-numeric:tabular-nums}.IIa07q_skRunDetail h6{color:var(--mn-faint);margin:8px 0 4px;font-size:11px;font-weight:500}.IIa07q_skVerdicts{grid-template-columns:minmax(0,1fr);gap:2px;margin:6px 0;padding:0;font-size:12px;line-height:18px;list-style:none;display:grid}.IIa07q_skVerdicts li{color:var(--mn-muted);gap:6px;display:flex}.IIa07q_skVerdicts li b{color:var(--mn-danger)}.IIa07q_skVerdicts li[data-pass] b{color:var(--mn-success)}.IIa07q_skRunSteps{color:var(--mn-muted);margin:0;padding-left:18px;font-size:12px;line-height:18px}.IIa07q_skAnswer{border-radius:var(--dsw-radius-md);max-height:240px;color:var(--mn-text);background:var(--mn-fill);font:12px/1.55 var(--mn-code);white-space:pre-wrap;overflow-wrap:anywhere;margin:0;padding:8px 10px;overflow:auto}.IIa07q_skForm{gap:14px;display:grid}.IIa07q_skField{gap:6px;display:grid}.IIa07q_skField>label{color:var(--mn-muted);font-size:12px;font-weight:500;line-height:18px}.IIa07q_skForm input:not([type=checkbox]):not([type=radio]),.IIa07q_skForm textarea{border:.5px solid var(--mn-field-line);border-radius:var(--dsw-radius-md);width:100%;color:var(--mn-text);background:var(--mn-input);font:inherit;outline:0;padding:7px 10px;font-size:13px;line-height:20px;transition:border-color .12s}.IIa07q_skForm input:not([type=checkbox]):not([type=radio]):focus,.IIa07q_skForm textarea:focus{border-color:var(--mn-accent)}.IIa07q_skForm textarea{resize:vertical}.IIa07q_skForm small{color:var(--mn-faint);font-size:11px;line-height:16px}.IIa07q_skFormRow{display:flex}.IIa07q_skFormError{color:var(--mn-danger);margin-right:auto;font-size:12px}.IIa07q_skChecks{border:0;gap:6px;margin:0;padding:0;display:grid}.IIa07q_skChecks legend{color:var(--mn-muted);margin-bottom:6px;font-size:12px;font-weight:500}.IIa07q_skChecks>div{align-items:center;gap:10px;display:flex}.IIa07q_skChecks>div>input{flex:1;min-width:0}.IIa07q_skMust{color:var(--mn-muted);white-space:nowrap;flex:none;font-size:12px}.IIa07q_skChecks>button{justify-self:start}.IIa07q_skMarket{gap:14px;display:grid}.IIa07q_skMarketBar{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.IIa07q_skMarketBar>:first-child{flex:1;min-width:220px}.IIa07q_skMarketGrid{grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:12px;display:grid}.IIa07q_skMarketCard{border:.5px solid var(--mn-card-line);border-radius:var(--dsw-radius-lg);background:0 0;flex-direction:column;min-width:0;transition:border-color .16s,box-shadow .2s,transform .2s cubic-bezier(.2,0,0,1);animation:.24s cubic-bezier(.2,0,0,1) backwards IIa07q_sk-arrive;display:flex}.IIa07q_skMarketCard:hover{border-color:var(--mn-line-strong,var(--mn-card-line));box-shadow:var(--dsw-elevation-soft,0 4px 16px #0000000f);transform:translateY(-1px)}.IIa07q_skMarketCard:hover .IIa07q_skIcon{color:var(--mn-text)}.IIa07q_skMarketOpen{color:var(--mn-text);font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;flex:1;align-content:start;gap:10px;padding:14px 14px 6px;display:grid}.IIa07q_skMarketOpen:focus-visible{box-shadow:inset 0 0 0 2px var(--dsw-focus-ring-color,var(--mn-accent));border-radius:var(--dsw-radius-lg);outline:none}.IIa07q_skMarketOpen>header{align-items:center;gap:10px;min-width:0;display:flex}.IIa07q_skMarketOpen>header>div{min-width:0;display:grid}.IIa07q_skMarketOpen strong{text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:500;line-height:20px;overflow:hidden}.IIa07q_skMarketOpen code{color:var(--mn-faint);font:11px/16px var(--mn-code);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.IIa07q_skMarketOpen p{color:var(--mn-muted);-webkit-line-clamp:2;-webkit-box-orient:vertical;margin:0;font-size:12px;line-height:18px;display:-webkit-box;overflow:hidden}.IIa07q_skMarketCard>footer{justify-content:space-between;align-items:center;gap:8px;min-height:42px;padding:0 12px 10px 14px;display:flex}.IIa07q_skMarketCard>footer>span{min-width:0;color:var(--mn-faint);text-overflow:ellipsis;white-space:nowrap;font-size:11px;overflow:hidden}.IIa07q_skMarketDetail{gap:12px;display:grid}.IIa07q_skInline{align-items:center;gap:8px;display:flex}.IIa07q_skInline>:first-child{flex:1;min-width:0}.IIa07q_skMarketSection{gap:8px;animation:.2s cubic-bezier(.2,0,0,1) IIa07q_sk-arrive;display:grid}.IIa07q_skMarketGrid{transition:opacity .16s}.IIa07q_skMarketGrid[data-busy]{opacity:.55}.IIa07q_skMarketAdd{border-radius:var(--dsw-radius-md);background:color-mix(in srgb, var(--mn-accent) 7%, transparent);align-items:center;gap:10px;min-width:0;padding:6px 6px 6px 8px;font-size:12px;line-height:18px;animation:.2s cubic-bezier(.2,0,0,1) IIa07q_sk-arrive;display:flex}.IIa07q_skMarketAdd>span:nth-child(2){min-width:0;color:var(--mn-text);text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.IIa07q_skMarketAdd .IIa07q_skSourceIcon{background:var(--mn-layer-1,var(--mn-fill));width:26px;height:26px}.IIa07q_skMarketStat{font-variant-numeric:tabular-nums;align-items:center;gap:4px;display:inline-flex}.IIa07q_skMarketCard[data-indexed] .IIa07q_skMarketOpen{padding-bottom:4px}.IIa07q_skMarketMeta{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:6px 12px;display:flex}.IIa07q_skAudits{gap:6px;display:grid}.IIa07q_skAudits>div{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.IIa07q_skAuditsLabel{color:var(--mn-faint);margin-right:2px;font-size:12px;line-height:18px}.IIa07q_skAudit{color:var(--mn-text);background:var(--mn-fill);border-radius:999px;align-items:center;gap:6px;padding:2px 9px 2px 8px;font-size:12px;line-height:18px;animation:.26s cubic-bezier(.2,0,0,1) IIa07q_sk-pop;display:inline-flex}.IIa07q_skAudit:before{content:\"\";background:var(--mn-success);border-radius:999px;flex:none;width:6px;height:6px}.IIa07q_skAudit[data-status=warn]:before{background:var(--mn-warn)}.IIa07q_skAudit[data-status=fail]:before{background:var(--mn-danger)}.IIa07q_skAudit small{color:var(--mn-faint);font-size:11px}.IIa07q_skSources{gap:18px;display:grid}.IIa07q_skSourceList{gap:2px;margin:0 -6px;padding:0;list-style:none;display:grid}.IIa07q_skSourceList>li{border-radius:var(--dsw-radius-md);align-items:center;gap:12px;min-width:0;padding:8px 8px 8px 6px;transition:background-color .14s;animation:.2s cubic-bezier(.2,0,0,1) IIa07q_sk-arrive;display:flex}.IIa07q_skSourceList>li:hover{background:var(--mn-hover)}.IIa07q_skSourceIcon{border-radius:var(--dsw-radius-md);width:32px;height:32px;color:var(--mn-muted);background:var(--mn-fill);flex:none;place-items:center;transition:opacity .14s;display:grid}.IIa07q_skSourceText{flex:1;gap:1px;min-width:0;transition:opacity .14s;display:grid}.IIa07q_skSourceText>strong{align-items:center;gap:6px;min-width:0;font-size:13px;font-weight:500;line-height:20px;display:flex}.IIa07q_skSourceText>strong>span{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.IIa07q_skSourceText>small,.IIa07q_skSourceText>em{text-overflow:ellipsis;white-space:nowrap;font-size:12px;font-style:normal;line-height:18px;overflow:hidden}.IIa07q_skSourceText>small{color:var(--mn-faint)}.IIa07q_skSourceText>em{color:var(--mn-danger)}.IIa07q_skSourceList>li[data-off] .IIa07q_skSourceText,.IIa07q_skSourceList>li[data-off] .IIa07q_skSourceIcon{opacity:.5}.IIa07q_skSourceActions{flex:none;align-items:center;gap:6px;display:flex}.IIa07q_skSourceAdd{border-top:.5px solid var(--mn-line);gap:6px;padding-top:16px;display:grid}.IIa07q_skSourceAdd>label{font-size:13px;font-weight:500;line-height:20px}.IIa07q_skSourceHint{min-height:18px;color:var(--mn-faint);text-overflow:ellipsis;white-space:nowrap;margin:0;font-size:12px;line-height:18px;transition:color .14s;overflow:hidden}.IIa07q_skSourceHint[data-state=ok]{color:var(--mn-muted)}.IIa07q_skSourceHint[data-state=warn]{color:var(--mn-warn)}.IIa07q_skFormat summary{border-radius:var(--dsw-radius-xs,4px);width:fit-content;color:var(--mn-muted);cursor:pointer;padding:0 2px;font-size:12px;line-height:18px}.IIa07q_skFormat summary:hover{color:var(--mn-text)}.IIa07q_skFormat ul{gap:12px;margin:12px 0 0;padding:0;list-style:none;display:grid}.IIa07q_skFormat li{align-items:flex-start;gap:10px;display:flex}.IIa07q_skFormat li .IIa07q_skSourceIcon{width:26px;height:26px}.IIa07q_skFormat li>div{gap:1px;font-size:12px;line-height:18px;display:grid}.IIa07q_skFormat li strong{font-weight:500}.IIa07q_skFormat li span{color:var(--mn-muted)}@media (width<=860px){.IIa07q_skSplit{grid-template-columns:minmax(0,1fr)}.IIa07q_skList{max-height:360px;overflow-y:auto}}@media (width<=560px){.IIa07q_skDetailHead{flex-direction:column}.IIa07q_skDetailActions{justify-content:flex-start}}@media (prefers-reduced-motion:reduce){.IIa07q_skPage,.IIa07q_skDetail,.IIa07q_skEmpty,.IIa07q_skTable,.IIa07q_skComposer,.IIa07q_skRunDetail,.IIa07q_skMarketCard,.IIa07q_skMarketSection,.IIa07q_skMarketAdd,.IIa07q_skAudit,.IIa07q_skSourceList>li,.IIa07q_skTabBadge,.IIa07q_skDot,.IIa07q_skScore{animation:none}.IIa07q_skUse,.IIa07q_skFold>header>button>svg,.IIa07q_skFold[data-link]>header>button>b,.IIa07q_skCallout>b,.IIa07q_skMarketCard{transition:none}.IIa07q_skIconButton[data-busy]>svg,.IIa07q_skIconButton[data-pulse]>svg{animation:none}}";
|
|
831
|
+
const css$1 = ".IIa07q_skPage{flex-direction:column;gap:12px;min-width:0;animation:.22s cubic-bezier(.2,0,0,1) IIa07q_sk-arrive;display:flex}@keyframes IIa07q_sk-arrive{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}@keyframes IIa07q_sk-pop{0%{opacity:0;transform:scale(.6)}70%{transform:scale(1.08)}to{opacity:1;transform:none}}@keyframes IIa07q_sk-spin{to{transform:rotate(360deg)}}@keyframes IIa07q_sk-breathe{50%{opacity:.35}}.IIa07q_skMuted{color:var(--mn-faint);margin:0;font-size:12px;line-height:18px}.IIa07q_skProse{color:var(--mn-muted);white-space:pre-wrap;overflow-wrap:anywhere;margin:0;font-size:13px;line-height:21px}.IIa07q_skBusy{color:var(--mn-muted);align-items:center;gap:8px;padding:6px 0;font-size:12px;line-height:18px;display:inline-flex}.IIa07q_skLink{border-radius:var(--dsw-radius-xs,4px);color:var(--dsw-alias-link,var(--mn-accent));font:inherit;cursor:pointer;background:0 0;border:0;padding:0 2px;font-size:12px;line-height:18px;text-decoration:none;transition:color .12s,background-color .12s}.IIa07q_skLink:hover{background:color-mix(in srgb, var(--mn-accent) 8%, transparent)}.IIa07q_skAlert,.IIa07q_skNotice{border-radius:var(--dsw-radius-md);color:var(--mn-text);align-items:center;gap:8px;margin-bottom:12px;padding:8px 10px 8px 12px;font-size:12px;line-height:18px;display:flex}.IIa07q_skAlert{background:color-mix(in srgb, var(--mn-danger) 9%, transparent)}.IIa07q_skNotice{background:color-mix(in srgb, var(--mn-success) 9%, transparent)}.IIa07q_skAlert>span,.IIa07q_skNotice>span{overflow-wrap:anywhere;flex:1;min-width:0}.IIa07q_skDismiss{border-radius:var(--dsw-radius-xs,4px);width:20px;height:20px;color:inherit;opacity:.55;cursor:pointer;background:0 0;border:0;flex:none;place-items:center;padding:0;font-size:15px;line-height:1;transition:opacity .12s,background-color .12s;display:grid}.IIa07q_skDismiss:hover{background:var(--mn-hover);opacity:1}.IIa07q_skWarn,.IIa07q_skSuccess{border-radius:var(--dsw-radius-md);color:var(--mn-text);margin:0;padding:8px 12px;font-size:12px;line-height:18px}.IIa07q_skWarn{background:color-mix(in srgb, var(--mn-warn) 11%, transparent)}.IIa07q_skSuccess{background:color-mix(in srgb, var(--mn-success) 9%, transparent)}.IIa07q_skDangerButton{background:var(--mn-danger)!important}.IIa07q_skClamp{justify-items:start;gap:2px;display:grid}.IIa07q_skClamp>.IIa07q_skProse[data-clamped]{-webkit-line-clamp:var(--sk-lines,3);-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.IIa07q_skClamp>.IIa07q_skChanges{width:100%}.IIa07q_skCaption{color:var(--mn-faint);letter-spacing:.02em;margin:4px 0 0;font-size:11px;font-weight:500;line-height:16px}.IIa07q_skCallout{border-radius:var(--dsw-radius-md);width:100%;color:var(--mn-text);background:color-mix(in srgb, var(--mn-accent) 8%, transparent);font:inherit;text-align:left;cursor:pointer;border:0;justify-content:space-between;align-items:center;gap:12px;padding:8px 12px;font-size:12px;line-height:18px;transition:background-color .14s;display:flex}.IIa07q_skCallout:hover{background:color-mix(in srgb, var(--mn-accent) 13%, transparent)}.IIa07q_skCallout>b{color:var(--dsw-alias-link,var(--mn-accent));flex:none;font-weight:500;transition:transform .16s cubic-bezier(.2,0,0,1)}.IIa07q_skCallout:hover>b{transform:translate(2px)}.IIa07q_skTabBadge{min-width:16px;color:var(--dsw-alias-label-inverse,#fff);background:var(--mn-accent);text-align:center;font-variant-numeric:tabular-nums;border-radius:999px;margin-left:6px;padding:0 5px;font-size:11px;font-weight:500;line-height:16px;animation:.26s cubic-bezier(.2,0,0,1) IIa07q_sk-pop;display:inline-block}.IIa07q_skIconButton{border-radius:var(--dsw-radius-sm);width:28px;height:28px;color:var(--mn-muted);cursor:pointer;background:0 0;border:0;flex:none;place-items:center;padding:0;transition:color .12s,background-color .12s;display:grid}.IIa07q_skIconButton:hover:not(:disabled),.IIa07q_skIconButton[aria-expanded=true]{color:var(--mn-text);background:var(--mn-hover)}.IIa07q_skIconButton:disabled{cursor:default;opacity:.45}.IIa07q_skIconButton[data-busy]>svg{animation:.9s linear infinite IIa07q_sk-spin}.IIa07q_skIconButton[data-pulse]>svg{color:var(--mn-accent);animation:1.2s ease-in-out infinite IIa07q_sk-breathe}.IIa07q_skIconButton:focus-visible,.IIa07q_skCallout:focus-visible,.IIa07q_skLink:focus-visible{box-shadow:0 0 0 2px var(--dsw-focus-ring-color,var(--mn-accent));outline:none}.IIa07q_skEmpty{place-content:center;justify-items:center;gap:4px;min-height:280px;animation:.26s cubic-bezier(.2,0,0,1) IIa07q_sk-arrive;display:grid}.IIa07q_skEmptyActions{flex-wrap:wrap;justify-content:center;gap:8px;display:flex}.IIa07q_skSplit{grid-template-columns:minmax(268px,340px) minmax(0,1fr);gap:12px;min-height:560px;display:grid}.IIa07q_skList,.IIa07q_skPane{border:.5px solid var(--mn-card-line);border-radius:var(--dsw-radius-lg);min-width:0}.IIa07q_skList{flex-direction:column;padding-bottom:6px;display:flex;overflow:hidden}.IIa07q_skPane{padding:clamp(16px,2vw,24px);overflow:hidden}.IIa07q_skListBar{border-bottom:.5px solid var(--mn-line);align-items:center;gap:8px;padding:10px;display:flex}.IIa07q_skListBar>:first-child{flex:1;min-width:0}.IIa07q_skListNote{color:var(--mn-faint);text-align:center;margin:0;padding:18px 16px;font-size:12px;line-height:18px}.IIa07q_skListFilter{padding:8px 10px 2px}.IIa07q_skListGroup h5{color:var(--mn-faint);letter-spacing:.02em;text-overflow:ellipsis;white-space:nowrap;margin:14px 16px 4px;font-size:11px;font-weight:500;line-height:16px;overflow:hidden}.IIa07q_skListItem{border-radius:var(--dsw-radius-md);width:calc(100% - 12px);color:var(--mn-text);font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;margin:4px 6px 0;padding:9px 10px;transition:background-color .14s;display:block}.IIa07q_skListItem:hover{background:var(--mn-hover)}.IIa07q_skListItem[data-selected]{background:var(--mn-fill)}.IIa07q_skListItem>div{align-items:center;gap:6px;min-width:0;display:flex}.IIa07q_skListItem>div strong{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-size:13px;font-weight:500;line-height:20px;overflow:hidden}.IIa07q_skListItem p{color:var(--mn-muted);-webkit-line-clamp:2;-webkit-box-orient:vertical;margin:3px 0 4px;font-size:12px;line-height:18px;display:-webkit-box;overflow:hidden}.IIa07q_skListItem footer{min-width:0;color:var(--mn-faint);align-items:center;gap:8px;font-size:11px;line-height:16px;display:flex}.IIa07q_skListItem footer time{font-variant-numeric:tabular-nums;flex:none}.IIa07q_skListItem footer span{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.IIa07q_skIcon{border-radius:var(--dsw-radius-md);width:30px;height:30px;color:var(--mn-muted);background:var(--mn-fill);flex:none;place-items:center;font-size:13px;font-weight:600;line-height:1;transition:color .14s,background-color .14s;display:grid}.IIa07q_skRow{border-radius:var(--dsw-radius-md);align-items:center;gap:6px;margin:2px 6px 0;padding-right:8px;transition:background-color .14s;display:flex;position:relative}.IIa07q_skRow:hover{background:var(--mn-hover)}.IIa07q_skRow[data-selected]{background:var(--mn-fill)}.IIa07q_skRow[data-selected] .IIa07q_skIcon{color:var(--mn-text);background:var(--mn-layer-1,var(--mn-hover))}.IIa07q_skRow[data-off] .IIa07q_skRowText,.IIa07q_skRow[data-shadowed] .IIa07q_skRowText{opacity:.55}.IIa07q_skRowMain{min-width:0;color:var(--mn-text);font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;flex:1;align-items:center;gap:10px;padding:8px 0 8px 8px;display:flex}.IIa07q_skRowMain:focus-visible{box-shadow:inset 0 0 0 2px var(--dsw-focus-ring-color,var(--mn-accent));border-radius:var(--dsw-radius-md);outline:none}.IIa07q_skRowText{gap:1px;min-width:0;transition:opacity .14s;display:grid}.IIa07q_skRowText strong{white-space:nowrap;align-items:center;gap:6px;min-width:0;font-size:13px;font-weight:500;line-height:20px;display:flex}.IIa07q_skRowText strong>span{text-overflow:ellipsis;min-width:0;overflow:hidden}.IIa07q_skRowText small{color:var(--mn-faint);text-overflow:ellipsis;white-space:nowrap;font-size:12px;line-height:18px;overflow:hidden}.IIa07q_skScore{min-width:24px;color:var(--mn-muted);font-variant-numeric:tabular-nums;text-align:right;flex:none;font-size:13px;font-weight:500;line-height:20px;animation:.26s cubic-bezier(.2,0,0,1) IIa07q_sk-pop}.IIa07q_skScore[data-tone=good]{color:var(--mn-success)}.IIa07q_skScore[data-tone=bad]{color:var(--mn-danger)}.IIa07q_skDot{background:var(--mn-accent);border-radius:999px;flex:none;width:6px;height:6px;animation:.26s cubic-bezier(.2,0,0,1) IIa07q_sk-pop}.IIa07q_skRowActions{flex:none;align-items:center;gap:8px;display:flex}.IIa07q_skUse{opacity:0;pointer-events:none;transition:opacity .14s,transform .18s cubic-bezier(.2,0,0,1);transform:translate(4px)}.IIa07q_skRow:hover .IIa07q_skUse,.IIa07q_skRow:focus-within .IIa07q_skUse{opacity:1;pointer-events:auto;transform:none}@media (hover:none){.IIa07q_skUse{opacity:1;pointer-events:auto;transform:none}}.IIa07q_skProblems{color:var(--mn-faint);margin:12px 12px 4px;font-size:12px;line-height:18px}.IIa07q_skProblems summary{border-radius:var(--dsw-radius-xs,4px);cursor:pointer;width:fit-content;padding:0 2px}.IIa07q_skProblems summary:hover{color:var(--mn-muted)}.IIa07q_skProblems ul{gap:6px;margin:8px 0 0;padding:0;list-style:none;display:grid}.IIa07q_skProblems li{gap:2px;display:grid}.IIa07q_skProblems code{color:var(--mn-muted);font:11px/16px var(--mn-code)}.IIa07q_skDetail{grid-template-columns:minmax(0,1fr);gap:14px;min-width:0;animation:.2s cubic-bezier(.2,0,0,1) IIa07q_sk-arrive;display:grid}.IIa07q_skDetailHead{justify-content:space-between;align-items:flex-start;gap:16px;display:flex}.IIa07q_skDetailHead>div:first-child{gap:4px;min-width:0;display:grid}.IIa07q_skDetailHead h3{overflow-wrap:anywhere;margin:0;font-size:17px;font-weight:600;line-height:26px}.IIa07q_skDetailHead p{color:var(--mn-muted);margin:0;font-size:13px;line-height:20px}.IIa07q_skDetailActions{flex-wrap:wrap;flex:none;justify-content:flex-end;align-items:center;gap:6px;display:flex}.IIa07q_skKicker{flex-wrap:wrap;align-items:center;gap:6px;display:inline-flex}.IIa07q_skTitleLink{color:inherit;font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;padding:0}.IIa07q_skTitleLink:hover{color:var(--dsw-alias-link,var(--mn-accent))}.IIa07q_skMeta{min-width:0;color:var(--mn-faint);flex-wrap:wrap;align-items:center;gap:0 6px;font-size:12px;line-height:18px;display:flex}.IIa07q_skMeta>*+:before{content:\"·\";color:var(--mn-line-strong,var(--mn-faint));margin-right:6px}.IIa07q_skMeta code{min-width:0;max-width:100%;font:11px/18px var(--mn-code);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.IIa07q_skInvocation{align-items:center;gap:8px;display:flex}.IIa07q_skWhen{color:var(--mn-muted);margin:0;font-size:12px;line-height:18px}.IIa07q_skDoc{overflow-wrap:anywhere;min-width:0;color:var(--mn-text);font-size:13px;line-height:1.75}.IIa07q_skDoc>:first-child{margin-top:0}.IIa07q_skDoc>:last-child{margin-bottom:0}.IIa07q_skDoc h1,.IIa07q_skDoc h2,.IIa07q_skDoc h3,.IIa07q_skDoc h4{color:var(--mn-text);margin:1.4em 0 .5em;font-weight:600;line-height:1.4}.IIa07q_skDoc h1{font-size:1.25em}.IIa07q_skDoc h2{font-size:1.1em}.IIa07q_skDoc h3,.IIa07q_skDoc h4{font-size:1em}.IIa07q_skDoc p,.IIa07q_skDoc ul,.IIa07q_skDoc ol,.IIa07q_skDoc blockquote,.IIa07q_skDoc table,.IIa07q_skDoc pre{margin:.7em 0}.IIa07q_skDoc ul,.IIa07q_skDoc ol{padding-left:1.5em}.IIa07q_skDoc li+li{margin-top:.25em}.IIa07q_skDoc li::marker{color:var(--mn-faint)}.IIa07q_skDoc blockquote{border-left:2px solid var(--mn-line-strong,var(--mn-line));color:var(--mn-muted);margin-inline:0;padding:.1em 1em}.IIa07q_skDoc code{border-radius:var(--dsw-radius-xs,4px);color:var(--mn-text);background:var(--dsw-alias-markdown-inline-code,var(--mn-fill));font:.9em/1.55 var(--mn-code);padding:.12em .38em}.IIa07q_skDoc pre{border-radius:var(--dsw-radius-md);background:var(--dsw-alias-markdown-code-block,var(--mn-fill));max-width:100%;padding:10px 14px;overflow:auto}.IIa07q_skDoc pre code{background:0 0;padding:0;font-size:12px}.IIa07q_skDoc a{color:var(--dsw-alias-link,var(--mn-accent));text-underline-offset:3px;text-decoration-thickness:1px}.IIa07q_skDoc hr{border:0;border-top:.5px solid var(--mn-line);margin:1.6em 0}.IIa07q_skDoc table{border-collapse:collapse;max-width:100%;font-size:12px;display:block;overflow-x:auto}.IIa07q_skDoc th,.IIa07q_skDoc td{border:.5px solid var(--mn-line);text-align:left;vertical-align:top;padding:6px 10px}.IIa07q_skDoc th{background:var(--mn-fill);font-weight:500}.IIa07q_skDoc img{border-radius:var(--dsw-radius-sm);max-width:100%;height:auto}.IIa07q_skFolds{border-top:.5px solid var(--mn-line);grid-template-columns:minmax(0,1fr);min-width:0;margin-top:4px;display:grid}.IIa07q_skFold{border-bottom:.5px solid var(--mn-line);min-width:0}.IIa07q_skFold>header{justify-content:space-between;align-items:center;gap:12px;min-height:40px;display:flex}.IIa07q_skFold>header>button{border-radius:var(--dsw-radius-sm);min-width:0;color:var(--mn-text);font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;flex:1;align-items:center;gap:8px;margin-left:-4px;padding:8px 4px;font-size:13px;font-weight:500;line-height:20px;display:flex}.IIa07q_skFold>header>button>svg{color:var(--mn-faint);flex:none;transition:transform .18s cubic-bezier(.2,0,0,1),color .12s;transform:rotate(-90deg)}.IIa07q_skFold[data-open]>header>button>svg{transform:none}.IIa07q_skFold>header>button:hover>svg{color:var(--mn-text)}.IIa07q_skFold>header>button>small{min-width:0;color:var(--mn-faint);text-overflow:ellipsis;white-space:nowrap;font-size:12px;font-weight:400;overflow:hidden}.IIa07q_skFold>header>button:focus-visible{box-shadow:0 0 0 2px var(--dsw-focus-ring-color,var(--mn-accent));outline:none}.IIa07q_skFold>header>div{align-items:center;gap:6px;display:flex}.IIa07q_skFoldBody{grid-template-columns:minmax(0,1fr);gap:10px;min-width:0;padding:2px 0 14px;display:grid}.IIa07q_skFold[data-link]>header>button{padding-left:24px}.IIa07q_skFold[data-link]>header>button>b{color:var(--mn-faint);margin-left:auto;font-weight:400;transition:transform .16s cubic-bezier(.2,0,0,1),color .12s}.IIa07q_skFold[data-link]>header>button:hover>b{color:var(--dsw-alias-link,var(--mn-accent));transform:translate(2px)}.IIa07q_skVersions{grid-template-columns:minmax(0,1fr);gap:1px;margin:0;padding:0;list-style:none;display:grid}.IIa07q_skVersions li{border-radius:var(--dsw-radius-md);align-items:center;gap:10px;min-height:34px;padding:3px 6px;transition:background-color .12s;display:flex}.IIa07q_skVersions li:hover{background:var(--mn-hover)}.IIa07q_skVersions time{color:var(--mn-muted);font-variant-numeric:tabular-nums;font-size:12px}.IIa07q_skVersions li>span{flex:1}.IIa07q_skTrashList li{flex-wrap:wrap;padding-block:10px}.IIa07q_skTrashList li>span{flex:none}.IIa07q_skTrashList li>.IIa07q_skRowText{flex:220px}.IIa07q_skTrashTags{flex-wrap:wrap;gap:6px;display:flex}.IIa07q_skTrashList li>.IIa07q_skTrashActions{flex:none;gap:6px;margin-left:auto;display:flex}.IIa07q_skResources{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.IIa07q_skResources code{color:var(--mn-muted);background:var(--mn-fill);font:11px/17px var(--mn-code);border-radius:999px;padding:1px 8px}.IIa07q_skEditor{resize:vertical;border:.5px solid var(--mn-field-line);border-radius:var(--dsw-radius-md);width:100%;min-height:420px;color:var(--mn-text);background:var(--mn-input);font:12px/1.6 var(--mn-code);tab-size:2;outline:0;padding:10px 12px;transition:border-color .12s}.IIa07q_skEditor:focus{border-color:var(--mn-accent)}.IIa07q_skTimeline{grid-template-columns:minmax(0,1fr);gap:0;min-width:0;margin:0;padding:0;list-style:none;display:grid}.IIa07q_skTimeline>li{min-width:0}.IIa07q_skTurn{color:var(--mn-faint);letter-spacing:.02em;margin:12px 0 4px;font-size:11px;font-weight:500;line-height:16px}.IIa07q_skTimeline>li:first-child>.IIa07q_skTurn{margin-top:0}.IIa07q_skStep{border-radius:0 var(--dsw-radius-sm) var(--dsw-radius-sm) 0;border-left:2px solid #0000;align-items:flex-start;gap:8px;padding:5px 8px;transition:background-color .14s;display:flex}.IIa07q_skTimeline>li[data-annotated] .IIa07q_skStep{border-left-color:color-mix(in srgb, var(--mn-warn) 70%, transparent);background:color-mix(in srgb, var(--mn-warn) 5%, transparent)}.IIa07q_skTimeline>li[data-highlight] .IIa07q_skStep{border-left-color:var(--mn-accent);background:color-mix(in srgb, var(--mn-accent) 6%, transparent)}.IIa07q_skStepIndex{width:22px;color:var(--mn-faint);text-align:right;font-variant-numeric:tabular-nums;flex:none;font-size:11px;line-height:20px}.IIa07q_skStepGlyph{width:14px;color:var(--mn-faint);text-align:center;flex:none;font-size:12px;line-height:20px}.IIa07q_skTimeline>li[data-kind=skill] .IIa07q_skStepGlyph{color:var(--mn-accent)}.IIa07q_skTimeline>li[data-failed] .IIa07q_skStepGlyph{color:var(--mn-danger)}.IIa07q_skStepBody{flex:1;min-width:0}.IIa07q_skStepHead{flex-wrap:wrap;align-items:center;gap:6px;min-width:0;display:flex}.IIa07q_skStepHead strong{font-size:12px;font-weight:500;line-height:20px}.IIa07q_skStepHead code{min-width:0;max-width:100%;color:var(--mn-faint);font:11px/18px var(--mn-code);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.IIa07q_skStepBody>p{overflow-wrap:anywhere;color:var(--mn-muted);white-space:pre-wrap;margin:1px 0 0;font-size:12px;line-height:18px}.IIa07q_skTimeline[data-compact] .IIa07q_skStepBody>p{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.IIa07q_skAnnotation{color:var(--mn-text);align-items:flex-start;gap:6px;margin-top:6px;font-size:12px;line-height:18px;display:flex}.IIa07q_skEvidence+.IIa07q_skEvidence{margin-top:14px}.IIa07q_skEvidence>header{align-items:center;gap:8px;min-width:0;margin-bottom:6px;display:flex}.IIa07q_skEvidence>header strong{text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:12px;font-weight:500;overflow:hidden}.IIa07q_skEvidence>header span{color:var(--mn-faint);flex:none;font-size:11px}.IIa07q_skEvidence>header button{margin-left:auto}.IIa07q_skChips{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.IIa07q_skDeriveBar{border-radius:var(--dsw-radius-md);background:var(--mn-fill);color:var(--mn-muted);flex-wrap:wrap;align-items:center;gap:8px;padding:8px 10px;font-size:12px;line-height:18px;display:flex}.IIa07q_skDeriveBar>span{min-width:0;margin-right:auto}.IIa07q_skDraft{border-top:.5px solid var(--mn-line);grid-template-columns:minmax(0,1fr);gap:12px;min-width:0;padding-top:14px;display:grid}.IIa07q_skSectionHead{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px 12px;display:flex}.IIa07q_skSectionHead h4{align-items:baseline;gap:8px;margin:0;font-size:14px;font-weight:600;line-height:22px;display:flex}.IIa07q_skSectionHead h4 small{color:var(--mn-faint);font-size:12px;font-weight:400}.IIa07q_skSectionHead>div{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.IIa07q_skChanges{color:var(--mn-muted);gap:3px;margin:0;padding-left:18px;font-size:12px;line-height:18px;display:grid}.IIa07q_skChanges li::marker{color:var(--mn-faint)}.IIa07q_skGuidance{color:var(--mn-faint);gap:2px;margin:0;padding-left:18px;font-size:12px;line-height:18px;display:grid}.IIa07q_skBacktest{border-radius:var(--dsw-radius-md);background:var(--mn-fill);flex-wrap:wrap;align-items:center;gap:6px 10px;min-height:36px;padding:4px 6px 4px 12px;display:flex}.IIa07q_skBacktestLine{min-width:0;color:var(--mn-text);font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;flex:1;align-items:center;gap:10px;padding:4px 0;font-size:12px;line-height:18px;display:flex}.IIa07q_skBacktestLine>span{color:var(--mn-faint);flex:none}.IIa07q_skBacktestLine>strong{text-overflow:ellipsis;white-space:nowrap;font-variant-numeric:tabular-nums;min-width:0;font-weight:500;overflow:hidden}.IIa07q_skBacktestLine>em{color:var(--mn-muted);background:var(--mn-hover);font-variant-numeric:tabular-nums;border-radius:999px;flex:none;padding:0 7px;font-style:normal;font-weight:600}.IIa07q_skBacktest[data-tone=good] .IIa07q_skBacktestLine>em{color:var(--mn-success);background:color-mix(in srgb, var(--mn-success) 12%, transparent)}.IIa07q_skBacktest[data-tone=bad] .IIa07q_skBacktestLine>em{color:var(--mn-danger);background:color-mix(in srgb, var(--mn-danger) 12%, transparent)}.IIa07q_skBacktestLine:hover>strong{text-underline-offset:3px;text-decoration:underline;text-decoration-color:var(--mn-line-strong,var(--mn-faint))}.IIa07q_skTable{border-collapse:collapse;width:100%;font-size:12px;line-height:18px;animation:.18s cubic-bezier(.2,0,0,1) IIa07q_sk-arrive}.IIa07q_skTable th{border-bottom:.5px solid var(--mn-line);color:var(--mn-faint);text-align:left;padding:6px 8px;font-weight:500}.IIa07q_skTable td{border-bottom:.5px solid var(--mn-line);vertical-align:top;padding:7px 8px}.IIa07q_skTable td small{color:var(--mn-faint);margin-top:3px;display:block}.IIa07q_skComposer{border-radius:var(--dsw-radius-lg);background:var(--mn-fill);grid-template-columns:minmax(0,1fr);gap:8px;padding:12px;animation:.18s cubic-bezier(.2,0,0,1) IIa07q_sk-arrive;display:grid}.IIa07q_skComposer label{color:var(--mn-muted);gap:6px;font-size:12px;font-weight:500;line-height:18px;display:grid}.IIa07q_skComposer textarea{resize:vertical;border:.5px solid var(--mn-field-line);border-radius:var(--dsw-radius-md);width:100%;color:var(--mn-text);background:var(--mn-input);font:inherit;outline:0;padding:6px 10px;font-size:13px;line-height:20px;transition:border-color .12s}.IIa07q_skComposer textarea:focus{border-color:var(--mn-accent)}.IIa07q_skComposer>footer{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:8px;display:flex}.IIa07q_skTests{grid-template-columns:minmax(0,1fr);gap:10px;min-width:0;display:grid}.IIa07q_skTestsBar{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.IIa07q_skCases{grid-template-columns:minmax(0,1fr);gap:1px;margin:0;padding:0;list-style:none;display:grid}.IIa07q_skCases>li{border-radius:var(--dsw-radius-md);align-items:flex-start;gap:8px;padding:2px 4px 2px 0;transition:background-color .12s,opacity .14s;display:flex}.IIa07q_skCases>li:hover{background:var(--mn-hover)}.IIa07q_skCases>li[data-off]>details{opacity:.5}.IIa07q_skCases>li>details{flex:1;min-width:0}.IIa07q_skCases>li>:not(details){margin-top:6px}.IIa07q_skCases summary{border-radius:var(--dsw-radius-md);cursor:pointer;align-items:baseline;gap:8px;min-width:0;padding:7px 8px;list-style:none;display:flex}.IIa07q_skCases summary::-webkit-details-marker{display:none}.IIa07q_skCases summary strong{text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:13px;font-weight:500;line-height:20px;overflow:hidden}.IIa07q_skCases summary small{color:var(--mn-faint);flex:none;font-size:11px}.IIa07q_skCases details[open] summary strong{white-space:normal}.IIa07q_skCases details>p{color:var(--mn-muted);white-space:pre-wrap;overflow-wrap:anywhere;margin:0 8px 8px;font-size:12px;line-height:18px}.IIa07q_skCases details>ul{gap:4px;margin:0 8px 8px;padding:0;list-style:none;display:grid}.IIa07q_skCases details>ul li{color:var(--mn-text);align-items:flex-start;gap:6px;font-size:12px;line-height:18px;display:flex}.IIa07q_skCases details>.IIa07q_skLink{margin:0 6px 8px}.IIa07q_skRuns{grid-template-columns:minmax(0,1fr);gap:1px;margin:0;padding:0;list-style:none;display:grid}.IIa07q_skRuns>li>button{border-radius:var(--dsw-radius-md);width:100%;min-width:0;color:var(--mn-text);font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;align-items:center;gap:8px;padding:7px 8px;font-size:12px;line-height:18px;transition:background-color .12s;display:flex}.IIa07q_skRuns>li>button:hover,.IIa07q_skRuns>li>button[aria-expanded=true]{background:var(--mn-hover)}.IIa07q_skRuns>li>button>:first-child{flex:none}.IIa07q_skRuns>li>button span{min-width:0;color:var(--mn-muted);text-overflow:ellipsis;white-space:nowrap;font-variant-numeric:tabular-nums;flex:1;overflow:hidden}.IIa07q_skRuns>li>button time{color:var(--mn-faint);flex:none;font-size:11px}.IIa07q_skRunDetail{border-left:.5px solid var(--mn-line);grid-template-columns:minmax(0,1fr);gap:2px;margin:4px 0 8px 12px;padding-left:10px;animation:.18s cubic-bezier(.2,0,0,1) IIa07q_sk-arrive;display:grid}.IIa07q_skRunDetail details{padding:4px 0}.IIa07q_skRunDetail summary{cursor:pointer;align-items:center;gap:8px;min-width:0;font-size:12px;line-height:18px;display:flex}.IIa07q_skRunDetail summary strong{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-weight:500;overflow:hidden}.IIa07q_skRunDetail summary span{color:var(--mn-faint);font-variant-numeric:tabular-nums}.IIa07q_skRunDetail h6{color:var(--mn-faint);margin:8px 0 4px;font-size:11px;font-weight:500}.IIa07q_skVerdicts{grid-template-columns:minmax(0,1fr);gap:2px;margin:6px 0;padding:0;font-size:12px;line-height:18px;list-style:none;display:grid}.IIa07q_skVerdicts li{color:var(--mn-muted);gap:6px;display:flex}.IIa07q_skVerdicts li b{color:var(--mn-danger)}.IIa07q_skVerdicts li[data-pass] b{color:var(--mn-success)}.IIa07q_skRunSteps{color:var(--mn-muted);margin:0;padding-left:18px;font-size:12px;line-height:18px}.IIa07q_skAnswer{border-radius:var(--dsw-radius-md);max-height:240px;color:var(--mn-text);background:var(--mn-fill);font:12px/1.55 var(--mn-code);white-space:pre-wrap;overflow-wrap:anywhere;margin:0;padding:8px 10px;overflow:auto}.IIa07q_skForm{gap:14px;display:grid}.IIa07q_skField{gap:6px;display:grid}.IIa07q_skField>label{color:var(--mn-muted);font-size:12px;font-weight:500;line-height:18px}.IIa07q_skForm input:not([type=checkbox]):not([type=radio]),.IIa07q_skForm textarea{border:.5px solid var(--mn-field-line);border-radius:var(--dsw-radius-md);width:100%;color:var(--mn-text);background:var(--mn-input);font:inherit;outline:0;padding:7px 10px;font-size:13px;line-height:20px;transition:border-color .12s}.IIa07q_skForm input:not([type=checkbox]):not([type=radio]):focus,.IIa07q_skForm textarea:focus{border-color:var(--mn-accent)}.IIa07q_skForm textarea{resize:vertical}.IIa07q_skForm small{color:var(--mn-faint);font-size:11px;line-height:16px}.IIa07q_skFormRow{display:flex}.IIa07q_skFormError{color:var(--mn-danger);margin-right:auto;font-size:12px}.IIa07q_skChecks{border:0;gap:6px;margin:0;padding:0;display:grid}.IIa07q_skChecks legend{color:var(--mn-muted);margin-bottom:6px;font-size:12px;font-weight:500}.IIa07q_skChecks>div{align-items:center;gap:10px;display:flex}.IIa07q_skChecks>div>input{flex:1;min-width:0}.IIa07q_skMust{color:var(--mn-muted);white-space:nowrap;flex:none;font-size:12px}.IIa07q_skChecks>button{justify-self:start}.IIa07q_skMarket{gap:14px;display:grid}.IIa07q_skMarketBar{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.IIa07q_skMarketBar>:first-child{flex:1;min-width:220px}.IIa07q_skMarketGrid{grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:12px;display:grid}.IIa07q_skMarketCard{border:.5px solid var(--mn-card-line);border-radius:var(--dsw-radius-lg);background:0 0;flex-direction:column;min-width:0;transition:border-color .16s,box-shadow .2s,transform .2s cubic-bezier(.2,0,0,1);animation:.24s cubic-bezier(.2,0,0,1) backwards IIa07q_sk-arrive;display:flex}.IIa07q_skMarketCard:hover{border-color:var(--mn-line-strong,var(--mn-card-line));box-shadow:var(--dsw-elevation-soft,0 4px 16px #0000000f);transform:translateY(-1px)}.IIa07q_skMarketCard:hover .IIa07q_skIcon{color:var(--mn-text)}.IIa07q_skMarketOpen{color:var(--mn-text);font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;flex:1;align-content:start;gap:10px;padding:14px 14px 6px;display:grid}.IIa07q_skMarketOpen:focus-visible{box-shadow:inset 0 0 0 2px var(--dsw-focus-ring-color,var(--mn-accent));border-radius:var(--dsw-radius-lg);outline:none}.IIa07q_skMarketOpen>header{align-items:center;gap:10px;min-width:0;display:flex}.IIa07q_skMarketOpen>header>div{min-width:0;display:grid}.IIa07q_skMarketOpen strong{text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:500;line-height:20px;overflow:hidden}.IIa07q_skMarketOpen code{color:var(--mn-faint);font:11px/16px var(--mn-code);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.IIa07q_skMarketOpen p{color:var(--mn-muted);-webkit-line-clamp:2;-webkit-box-orient:vertical;margin:0;font-size:12px;line-height:18px;display:-webkit-box;overflow:hidden}.IIa07q_skMarketCard>footer{justify-content:space-between;align-items:center;gap:8px;min-height:42px;padding:0 12px 10px 14px;display:flex}.IIa07q_skMarketCard>footer>span{min-width:0;color:var(--mn-faint);text-overflow:ellipsis;white-space:nowrap;font-size:11px;overflow:hidden}.IIa07q_skMarketDetail{gap:12px;display:grid}.IIa07q_skInline{align-items:center;gap:8px;display:flex}.IIa07q_skInline>:first-child{flex:1;min-width:0}.IIa07q_skMarketSection{gap:8px;animation:.2s cubic-bezier(.2,0,0,1) IIa07q_sk-arrive;display:grid}.IIa07q_skMarketGrid{transition:opacity .16s}.IIa07q_skMarketGrid[data-busy]{opacity:.55}.IIa07q_skMarketAdd{border-radius:var(--dsw-radius-md);background:color-mix(in srgb, var(--mn-accent) 7%, transparent);align-items:center;gap:10px;min-width:0;padding:6px 6px 6px 8px;font-size:12px;line-height:18px;animation:.2s cubic-bezier(.2,0,0,1) IIa07q_sk-arrive;display:flex}.IIa07q_skMarketAdd>span:nth-child(2){min-width:0;color:var(--mn-text);text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.IIa07q_skMarketAdd .IIa07q_skSourceIcon{background:var(--mn-layer-1,var(--mn-fill));width:26px;height:26px}.IIa07q_skMarketStat{font-variant-numeric:tabular-nums;align-items:center;gap:4px;display:inline-flex}.IIa07q_skMarketCard[data-indexed] .IIa07q_skMarketOpen{padding-bottom:4px}.IIa07q_skMarketMeta{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:6px 12px;display:flex}.IIa07q_skAudits{gap:6px;display:grid}.IIa07q_skAudits>div{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.IIa07q_skAuditsLabel{color:var(--mn-faint);margin-right:2px;font-size:12px;line-height:18px}.IIa07q_skAudit{color:var(--mn-text);background:var(--mn-fill);border-radius:999px;align-items:center;gap:6px;padding:2px 9px 2px 8px;font-size:12px;line-height:18px;animation:.26s cubic-bezier(.2,0,0,1) IIa07q_sk-pop;display:inline-flex}.IIa07q_skAudit:before{content:\"\";background:var(--mn-success);border-radius:999px;flex:none;width:6px;height:6px}.IIa07q_skAudit[data-status=warn]:before{background:var(--mn-warn)}.IIa07q_skAudit[data-status=fail]:before{background:var(--mn-danger)}.IIa07q_skAudit small{color:var(--mn-faint);font-size:11px}.IIa07q_skSources{gap:18px;display:grid}.IIa07q_skSourceList{gap:2px;margin:0 -6px;padding:0;list-style:none;display:grid}.IIa07q_skSourceList>li{border-radius:var(--dsw-radius-md);align-items:center;gap:12px;min-width:0;padding:8px 8px 8px 6px;transition:background-color .14s;animation:.2s cubic-bezier(.2,0,0,1) IIa07q_sk-arrive;display:flex}.IIa07q_skSourceList>li:hover{background:var(--mn-hover)}.IIa07q_skSourceIcon{border-radius:var(--dsw-radius-md);width:32px;height:32px;color:var(--mn-muted);background:var(--mn-fill);flex:none;place-items:center;transition:opacity .14s;display:grid}.IIa07q_skSourceText{flex:1;gap:1px;min-width:0;transition:opacity .14s;display:grid}.IIa07q_skSourceText>strong{align-items:center;gap:6px;min-width:0;font-size:13px;font-weight:500;line-height:20px;display:flex}.IIa07q_skSourceText>strong>span{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.IIa07q_skSourceText>small,.IIa07q_skSourceText>em{text-overflow:ellipsis;white-space:nowrap;font-size:12px;font-style:normal;line-height:18px;overflow:hidden}.IIa07q_skSourceText>small{color:var(--mn-faint)}.IIa07q_skSourceText>em{color:var(--mn-danger)}.IIa07q_skSourceList>li[data-off] .IIa07q_skSourceText,.IIa07q_skSourceList>li[data-off] .IIa07q_skSourceIcon{opacity:.5}.IIa07q_skSourceActions{flex:none;align-items:center;gap:6px;display:flex}.IIa07q_skSourceAdd{border-top:.5px solid var(--mn-line);gap:6px;padding-top:16px;display:grid}.IIa07q_skSourceAdd>label{font-size:13px;font-weight:500;line-height:20px}.IIa07q_skSourceHint{min-height:18px;color:var(--mn-faint);text-overflow:ellipsis;white-space:nowrap;margin:0;font-size:12px;line-height:18px;transition:color .14s;overflow:hidden}.IIa07q_skSourceHint[data-state=ok]{color:var(--mn-muted)}.IIa07q_skSourceHint[data-state=warn]{color:var(--mn-warn)}.IIa07q_skFormat summary{border-radius:var(--dsw-radius-xs,4px);width:fit-content;color:var(--mn-muted);cursor:pointer;padding:0 2px;font-size:12px;line-height:18px}.IIa07q_skFormat summary:hover{color:var(--mn-text)}.IIa07q_skFormat ul{gap:12px;margin:12px 0 0;padding:0;list-style:none;display:grid}.IIa07q_skFormat li{align-items:flex-start;gap:10px;display:flex}.IIa07q_skFormat li .IIa07q_skSourceIcon{width:26px;height:26px}.IIa07q_skFormat li>div{gap:1px;font-size:12px;line-height:18px;display:grid}.IIa07q_skFormat li strong{font-weight:500}.IIa07q_skFormat li span{color:var(--mn-muted)}@media (width<=860px){.IIa07q_skSplit{grid-template-columns:minmax(0,1fr)}.IIa07q_skList{max-height:360px;overflow-y:auto}}@media (width<=560px){.IIa07q_skDetailHead{flex-direction:column}.IIa07q_skDetailActions{justify-content:flex-start}}@media (prefers-reduced-motion:reduce){.IIa07q_skPage,.IIa07q_skDetail,.IIa07q_skEmpty,.IIa07q_skTable,.IIa07q_skComposer,.IIa07q_skRunDetail,.IIa07q_skMarketCard,.IIa07q_skMarketSection,.IIa07q_skMarketAdd,.IIa07q_skAudit,.IIa07q_skSourceList>li,.IIa07q_skTabBadge,.IIa07q_skDot,.IIa07q_skScore{animation:none}.IIa07q_skUse,.IIa07q_skFold>header>button>svg,.IIa07q_skFold[data-link]>header>button>b,.IIa07q_skCallout>b,.IIa07q_skMarketCard{transition:none}.IIa07q_skIconButton[data-busy]>svg,.IIa07q_skIconButton[data-pulse]>svg{animation:none}}";
|
|
761
832
|
const id = "dsh-mnemon-source-skills/presentation/page.module.css";
|
|
762
833
|
if (typeof document !== "undefined") {
|
|
763
834
|
let tag = document.querySelector("style[data-plugin-css=" + JSON.stringify(id) + "]");
|
|
@@ -872,6 +943,9 @@ window.__ModuleLoader__.load({
|
|
|
872
943
|
"skTestsBar": "IIa07q_skTestsBar",
|
|
873
944
|
"skTimeline": "IIa07q_skTimeline",
|
|
874
945
|
"skTitleLink": "IIa07q_skTitleLink",
|
|
946
|
+
"skTrashActions": "IIa07q_skTrashActions",
|
|
947
|
+
"skTrashList": "IIa07q_skTrashList",
|
|
948
|
+
"skTrashTags": "IIa07q_skTrashTags",
|
|
875
949
|
"skTurn": "IIa07q_skTurn",
|
|
876
950
|
"skUse": "IIa07q_skUse",
|
|
877
951
|
"skVerdicts": "IIa07q_skVerdicts",
|
|
@@ -2223,6 +2297,15 @@ window.__ModuleLoader__.load({
|
|
|
2223
2297
|
//#region src/client/skill-tests.tsx
|
|
2224
2298
|
/** How many earlier backtests the history keeps on screen. */
|
|
2225
2299
|
const HISTORY = 6;
|
|
2300
|
+
function completedRunSummary(run, t) {
|
|
2301
|
+
const unmeasured = run.results.filter((result) => result.unmeasuredReason === "requires-vision").length;
|
|
2302
|
+
const errors = run.results.filter((result) => result.verdict === "error" && result.unmeasuredReason === void 0).length;
|
|
2303
|
+
return [
|
|
2304
|
+
...run.score === void 0 && unmeasured > 0 ? [] : [t("tests.score", { score: points(run.score) })],
|
|
2305
|
+
...unmeasured > 0 ? [t("tests.unmeasured", { count: unmeasured })] : [],
|
|
2306
|
+
...errors > 0 ? [t("tests.errors", { count: errors })] : []
|
|
2307
|
+
].join(" · ");
|
|
2308
|
+
}
|
|
2226
2309
|
/**
|
|
2227
2310
|
* A skill's test cases and its backtests: the cases with a switch each, one
|
|
2228
2311
|
* button that backtests the current version, and the runs, newest first, each
|
|
@@ -2324,7 +2407,14 @@ window.__ModuleLoader__.load({
|
|
|
2324
2407
|
"data-off": entry.enabled ? void 0 : "",
|
|
2325
2408
|
children: [
|
|
2326
2409
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("details", { children: [
|
|
2327
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("summary", { children: [
|
|
2410
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("summary", { children: [
|
|
2411
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: entry.title }),
|
|
2412
|
+
entry.requiresVision === true && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Tag, {
|
|
2413
|
+
tone: "quiet",
|
|
2414
|
+
children: t("tests.requiresVision")
|
|
2415
|
+
}),
|
|
2416
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: t("tests.checks", { count: entry.checks.length }) })
|
|
2417
|
+
] }),
|
|
2328
2418
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", { children: entry.prompt }),
|
|
2329
2419
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("ul", { children: entry.checks.map((check) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("li", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Tag, {
|
|
2330
2420
|
tone: check.must ? "neutral" : "quiet",
|
|
@@ -2382,7 +2472,7 @@ window.__ModuleLoader__.load({
|
|
|
2382
2472
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: entry.status === "running" ? t("tests.progress", {
|
|
2383
2473
|
done: entry.progress.done,
|
|
2384
2474
|
total: entry.progress.total
|
|
2385
|
-
}) : entry.status === "completed" ?
|
|
2475
|
+
}) : entry.status === "completed" ? completedRunSummary(entry, t) : t(`run.status.${entry.status}`) }),
|
|
2386
2476
|
entry.target.kind === "none" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Tag, {
|
|
2387
2477
|
tone: "quiet",
|
|
2388
2478
|
children: t("tests.withoutSkill")
|
|
@@ -2432,13 +2522,16 @@ window.__ModuleLoader__.load({
|
|
|
2432
2522
|
children: props.run.results.map((result) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("details", { children: [
|
|
2433
2523
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("summary", { children: [
|
|
2434
2524
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Tag, {
|
|
2435
|
-
tone: result.verdict === "pass" ? "success" : result.verdict === "error" ? "danger" : "warning",
|
|
2436
|
-
children: t(`run.verdict.${result.verdict}`)
|
|
2525
|
+
tone: result.unmeasuredReason === "requires-vision" ? "quiet" : result.verdict === "pass" ? "success" : result.verdict === "error" ? "danger" : "warning",
|
|
2526
|
+
children: t(`run.verdict.${result.unmeasuredReason === "requires-vision" ? "unmeasured" : result.verdict}`)
|
|
2437
2527
|
}),
|
|
2438
2528
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: result.title }),
|
|
2439
2529
|
result.verdict !== "error" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: points(result.score) })
|
|
2440
2530
|
] }),
|
|
2441
|
-
result.
|
|
2531
|
+
result.unmeasuredReason === "requires-vision" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
2532
|
+
className: css.skMuted,
|
|
2533
|
+
children: t("run.requiresVision")
|
|
2534
|
+
}) : result.error !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
2442
2535
|
className: css.inlineError,
|
|
2443
2536
|
children: result.error
|
|
2444
2537
|
}),
|
|
@@ -2546,6 +2639,18 @@ window.__ModuleLoader__.load({
|
|
|
2546
2639
|
})
|
|
2547
2640
|
})
|
|
2548
2641
|
}),
|
|
2642
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Checkbox, {
|
|
2643
|
+
checked: value.requiresVision ?? false,
|
|
2644
|
+
label: t("tests.requiresVision"),
|
|
2645
|
+
disabled: props.busy,
|
|
2646
|
+
onChange: (requiresVision) => setValue({
|
|
2647
|
+
...value,
|
|
2648
|
+
requiresVision
|
|
2649
|
+
})
|
|
2650
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
2651
|
+
className: css.skMuted,
|
|
2652
|
+
children: t("tests.requiresVisionHint")
|
|
2653
|
+
})] }),
|
|
2549
2654
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("fieldset", {
|
|
2550
2655
|
className: css.skChecks,
|
|
2551
2656
|
children: [
|
|
@@ -3831,7 +3936,7 @@ window.__ModuleLoader__.load({
|
|
|
3831
3936
|
if (typeof value === "string") return value;
|
|
3832
3937
|
return (language.startsWith("zh") ? value["zh-CN"] ?? value.en : value.en ?? value["zh-CN"]) ?? "";
|
|
3833
3938
|
}
|
|
3834
|
-
function size(bytes) {
|
|
3939
|
+
function size$1(bytes) {
|
|
3835
3940
|
return bytes < 1024 ? `${bytes} B` : bytes < 1048576 ? `${(bytes / 1024).toFixed(1)} KB` : `${(bytes / 1024 / 1024).toFixed(1)} MB`;
|
|
3836
3941
|
}
|
|
3837
3942
|
/** One field of a `SKILL.md` frontmatter, plain or folded, without a YAML parser in the page. */
|
|
@@ -4312,7 +4417,7 @@ window.__ModuleLoader__.load({
|
|
|
4312
4417
|
className: css.skProblems,
|
|
4313
4418
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("summary", { children: t("market.files", {
|
|
4314
4419
|
count: preview.files.length,
|
|
4315
|
-
size: size(preview.totalBytes)
|
|
4420
|
+
size: size$1(preview.totalBytes)
|
|
4316
4421
|
}) }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
4317
4422
|
className: css.skResources,
|
|
4318
4423
|
children: preview.files.slice(0, 40).map((file) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("code", { children: file.path }, file.path))
|
|
@@ -4746,8 +4851,8 @@ window.__ModuleLoader__.load({
|
|
|
4746
4851
|
label: t("skills.improve"),
|
|
4747
4852
|
disabled: !context.writable
|
|
4748
4853
|
}] : [], {
|
|
4749
|
-
id: "
|
|
4750
|
-
label: t("
|
|
4854
|
+
id: "remove",
|
|
4855
|
+
label: t("skills.remove"),
|
|
4751
4856
|
danger: true,
|
|
4752
4857
|
disabled: !context.writable
|
|
4753
4858
|
}];
|
|
@@ -4934,16 +5039,16 @@ window.__ModuleLoader__.load({
|
|
|
4934
5039
|
}),
|
|
4935
5040
|
deleting && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Confirm, {
|
|
4936
5041
|
danger: true,
|
|
4937
|
-
title: t("skills.
|
|
4938
|
-
body: t("skills.
|
|
4939
|
-
confirmLabel: t("
|
|
5042
|
+
title: t("skills.removeTitle", { name: skill.name }),
|
|
5043
|
+
body: t("skills.removeBody"),
|
|
5044
|
+
confirmLabel: t("skills.remove"),
|
|
4940
5045
|
busy,
|
|
4941
5046
|
onClose: () => setDeleting(false),
|
|
4942
5047
|
onConfirm: () => void (async () => {
|
|
4943
5048
|
setBusy(true);
|
|
4944
5049
|
try {
|
|
4945
5050
|
await context.client.deleteSkill(skill.key, skill.hash);
|
|
4946
|
-
context.notice(t("skills.
|
|
5051
|
+
context.notice(t("skills.removed", { name: skill.name }));
|
|
4947
5052
|
setDeleting(false);
|
|
4948
5053
|
props.onDeleted();
|
|
4949
5054
|
context.refresh();
|
|
@@ -5100,6 +5205,347 @@ window.__ModuleLoader__.load({
|
|
|
5100
5205
|
});
|
|
5101
5206
|
}
|
|
5102
5207
|
//#endregion
|
|
5208
|
+
//#region src/client/trash-page.tsx
|
|
5209
|
+
/** A size the eye can compare: bytes under a kilobyte, else whole KiB or MiB. */
|
|
5210
|
+
function size(bytes) {
|
|
5211
|
+
if (bytes < 1024) return `${bytes} B`;
|
|
5212
|
+
return bytes < 1048576 ? `${Math.round(bytes / 1024)} KiB` : `${(bytes / 1048576).toFixed(1)} MiB`;
|
|
5213
|
+
}
|
|
5214
|
+
/**
|
|
5215
|
+
* Skills taken out of DSH's reach: every removal still sits on disk under the
|
|
5216
|
+
* Source's `trash` directory, so it can be put back, and only here can it be
|
|
5217
|
+
* deleted for good.
|
|
5218
|
+
*/
|
|
5219
|
+
function TrashPage(props) {
|
|
5220
|
+
const t = useT();
|
|
5221
|
+
const { context } = props;
|
|
5222
|
+
const [entries, setEntries] = (0, react.useState)(null);
|
|
5223
|
+
const [busy, setBusy] = (0, react.useState)(false);
|
|
5224
|
+
const [purging, setPurging] = (0, react.useState)(null);
|
|
5225
|
+
const [restoring, setRestoring] = (0, react.useState)(null);
|
|
5226
|
+
const [emptying, setEmptying] = (0, react.useState)(false);
|
|
5227
|
+
(0, react.useEffect)(() => {
|
|
5228
|
+
let active = true;
|
|
5229
|
+
context.client.trash().then((value) => {
|
|
5230
|
+
if (active) setEntries(value);
|
|
5231
|
+
}).catch((error) => {
|
|
5232
|
+
if (active) context.fail(error);
|
|
5233
|
+
});
|
|
5234
|
+
return () => {
|
|
5235
|
+
active = false;
|
|
5236
|
+
};
|
|
5237
|
+
}, [context.client, context.revision]);
|
|
5238
|
+
if (entries === null) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Busy, { label: t("common.loading") });
|
|
5239
|
+
const run = async (operation, done) => {
|
|
5240
|
+
setBusy(true);
|
|
5241
|
+
try {
|
|
5242
|
+
await operation();
|
|
5243
|
+
done();
|
|
5244
|
+
setEntries(await context.client.trash());
|
|
5245
|
+
context.refresh();
|
|
5246
|
+
} catch (error) {
|
|
5247
|
+
context.fail(error);
|
|
5248
|
+
} finally {
|
|
5249
|
+
setBusy(false);
|
|
5250
|
+
}
|
|
5251
|
+
};
|
|
5252
|
+
const restore = async (entry) => {
|
|
5253
|
+
setBusy(true);
|
|
5254
|
+
try {
|
|
5255
|
+
const preview = await context.client.previewTrashRestore({ id: entry.id });
|
|
5256
|
+
if (preview.needsRoot || preview.conflict !== void 0) setRestoring({
|
|
5257
|
+
entry,
|
|
5258
|
+
preview
|
|
5259
|
+
});
|
|
5260
|
+
else await run(() => context.client.restoreTrash({ id: entry.id }), () => context.notice(t("trash.restored", { name: entry.name })));
|
|
5261
|
+
} catch {
|
|
5262
|
+
setRestoring({
|
|
5263
|
+
entry,
|
|
5264
|
+
preview: null
|
|
5265
|
+
});
|
|
5266
|
+
} finally {
|
|
5267
|
+
setBusy(false);
|
|
5268
|
+
}
|
|
5269
|
+
};
|
|
5270
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("article", {
|
|
5271
|
+
className: css.skDetail,
|
|
5272
|
+
children: [
|
|
5273
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("header", {
|
|
5274
|
+
className: css.skDetailHead,
|
|
5275
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [
|
|
5276
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h3", { children: t("trash.title") }),
|
|
5277
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", { children: t("trash.body") }),
|
|
5278
|
+
entries.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
5279
|
+
className: css.skMeta,
|
|
5280
|
+
children: t("tabs.trash", { count: entries.length })
|
|
5281
|
+
})
|
|
5282
|
+
] }), entries.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
5283
|
+
className: css.skDetailActions,
|
|
5284
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
5285
|
+
variant: "outline",
|
|
5286
|
+
size: "sm",
|
|
5287
|
+
disabled: !context.writable || busy,
|
|
5288
|
+
onClick: () => setEmptying(true),
|
|
5289
|
+
children: t("trash.empty")
|
|
5290
|
+
})
|
|
5291
|
+
})]
|
|
5292
|
+
}),
|
|
5293
|
+
entries.length === 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Empty, {
|
|
5294
|
+
glyph: "×",
|
|
5295
|
+
title: t("trash.emptyTitle"),
|
|
5296
|
+
children: t("trash.emptyBody")
|
|
5297
|
+
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("ul", {
|
|
5298
|
+
className: `${css.skVersions} ${css.skTrashList}`,
|
|
5299
|
+
children: entries.map((entry) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("li", { children: [
|
|
5300
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(SkillIcon, { name: entry.name }),
|
|
5301
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
5302
|
+
className: css.skRowText,
|
|
5303
|
+
children: [
|
|
5304
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: entry.name }),
|
|
5305
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: t("trash.meta", {
|
|
5306
|
+
time: stamp(entry.trashedAt),
|
|
5307
|
+
size: size(entry.bytes)
|
|
5308
|
+
}) }),
|
|
5309
|
+
entry.originalPath !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", {
|
|
5310
|
+
title: entry.originalPath,
|
|
5311
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("code", { children: entry.originalPath })
|
|
5312
|
+
}),
|
|
5313
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
5314
|
+
className: css.skTrashTags,
|
|
5315
|
+
children: [entry.root !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Tag, {
|
|
5316
|
+
tone: "quiet",
|
|
5317
|
+
children: t(`root.${entry.root}`)
|
|
5318
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Tag, {
|
|
5319
|
+
tone: "quiet",
|
|
5320
|
+
children: t(entry.kind === "file" ? "trash.file" : "trash.bundle")
|
|
5321
|
+
})]
|
|
5322
|
+
})
|
|
5323
|
+
]
|
|
5324
|
+
}),
|
|
5325
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
5326
|
+
className: css.skTrashActions,
|
|
5327
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
5328
|
+
variant: "outline",
|
|
5329
|
+
size: "sm",
|
|
5330
|
+
disabled: !context.writable || busy,
|
|
5331
|
+
title: t("trash.restoreHint"),
|
|
5332
|
+
onClick: () => void restore(entry),
|
|
5333
|
+
children: t("trash.restore")
|
|
5334
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
5335
|
+
variant: "ghost",
|
|
5336
|
+
size: "sm",
|
|
5337
|
+
disabled: !context.writable || busy,
|
|
5338
|
+
onClick: () => setPurging(entry),
|
|
5339
|
+
children: t("trash.purge")
|
|
5340
|
+
})]
|
|
5341
|
+
})
|
|
5342
|
+
] }, entry.id))
|
|
5343
|
+
}),
|
|
5344
|
+
restoring !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RestoreDialog, {
|
|
5345
|
+
context,
|
|
5346
|
+
entry: restoring.entry,
|
|
5347
|
+
initial: restoring.preview,
|
|
5348
|
+
onClose: () => setRestoring(null),
|
|
5349
|
+
onRestored: () => {
|
|
5350
|
+
setRestoring(null);
|
|
5351
|
+
context.client.trash().then(setEntries).catch(context.fail);
|
|
5352
|
+
context.refresh();
|
|
5353
|
+
}
|
|
5354
|
+
}),
|
|
5355
|
+
purging !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(PurgeDialog, {
|
|
5356
|
+
entry: purging,
|
|
5357
|
+
busy,
|
|
5358
|
+
writable: context.writable,
|
|
5359
|
+
onClose: () => setPurging(null),
|
|
5360
|
+
onConfirm: () => void run(() => context.client.purgeTrash(purging.id), () => {
|
|
5361
|
+
context.notice(t("trash.purged", { name: purging.name }));
|
|
5362
|
+
setPurging(null);
|
|
5363
|
+
})
|
|
5364
|
+
}),
|
|
5365
|
+
emptying && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Confirm, {
|
|
5366
|
+
danger: true,
|
|
5367
|
+
title: t("trash.clearTitle", { count: entries.length }),
|
|
5368
|
+
body: t("trash.clearBody"),
|
|
5369
|
+
confirmLabel: t("trash.empty"),
|
|
5370
|
+
busy,
|
|
5371
|
+
onClose: () => setEmptying(false),
|
|
5372
|
+
onConfirm: () => void run(() => context.client.emptyTrash(), () => {
|
|
5373
|
+
context.notice(t("trash.emptied", { count: entries.length }));
|
|
5374
|
+
setEmptying(false);
|
|
5375
|
+
})
|
|
5376
|
+
})
|
|
5377
|
+
]
|
|
5378
|
+
});
|
|
5379
|
+
}
|
|
5380
|
+
function RestoreDialog(props) {
|
|
5381
|
+
const t = useT();
|
|
5382
|
+
const [name, setName] = (0, react.useState)(props.entry.name);
|
|
5383
|
+
const [root, setRoot] = (0, react.useState)(props.initial?.needsRoot === true ? "" : "original");
|
|
5384
|
+
const [preview, setPreview] = (0, react.useState)(props.initial);
|
|
5385
|
+
const [roots, setRoots] = (0, react.useState)(props.initial?.roots ?? []);
|
|
5386
|
+
const [replace, setReplace] = (0, react.useState)(false);
|
|
5387
|
+
const [busy, setBusy] = (0, react.useState)(false);
|
|
5388
|
+
const [error, setError] = (0, react.useState)(null);
|
|
5389
|
+
const validName = /^[a-z0-9]+(?:-[a-z0-9]+)*$/u.test(name) && name.length <= 64;
|
|
5390
|
+
(0, react.useEffect)(() => {
|
|
5391
|
+
let active = true;
|
|
5392
|
+
props.context.client.catalog().then((catalog) => {
|
|
5393
|
+
if (active) setRoots(catalog.roots.map((item) => item.kind));
|
|
5394
|
+
}).catch(props.context.fail);
|
|
5395
|
+
return () => {
|
|
5396
|
+
active = false;
|
|
5397
|
+
};
|
|
5398
|
+
}, [props.context.client]);
|
|
5399
|
+
(0, react.useEffect)(() => {
|
|
5400
|
+
let active = true;
|
|
5401
|
+
setPreview(null);
|
|
5402
|
+
setReplace(false);
|
|
5403
|
+
setError(null);
|
|
5404
|
+
if (!validName || root === "") return () => {
|
|
5405
|
+
active = false;
|
|
5406
|
+
};
|
|
5407
|
+
const input = {
|
|
5408
|
+
id: props.entry.id,
|
|
5409
|
+
name,
|
|
5410
|
+
...root === "original" ? {} : { root }
|
|
5411
|
+
};
|
|
5412
|
+
props.context.client.previewTrashRestore(input).then((value) => {
|
|
5413
|
+
if (active) setPreview(value);
|
|
5414
|
+
}).catch((reason) => {
|
|
5415
|
+
if (active) setError(errorText(reason));
|
|
5416
|
+
});
|
|
5417
|
+
return () => {
|
|
5418
|
+
active = false;
|
|
5419
|
+
};
|
|
5420
|
+
}, [
|
|
5421
|
+
props.context.client,
|
|
5422
|
+
props.entry.id,
|
|
5423
|
+
root,
|
|
5424
|
+
name,
|
|
5425
|
+
validName
|
|
5426
|
+
]);
|
|
5427
|
+
const submit = async () => {
|
|
5428
|
+
if (preview === null || preview.needsRoot || !props.context.writable) return;
|
|
5429
|
+
setBusy(true);
|
|
5430
|
+
setError(null);
|
|
5431
|
+
const input = {
|
|
5432
|
+
id: props.entry.id,
|
|
5433
|
+
name,
|
|
5434
|
+
...root === "original" ? {} : { root },
|
|
5435
|
+
...preview.conflict === void 0 ? {} : {
|
|
5436
|
+
replace,
|
|
5437
|
+
expectedHash: preview.conflict.hash
|
|
5438
|
+
}
|
|
5439
|
+
};
|
|
5440
|
+
try {
|
|
5441
|
+
await props.context.client.restoreTrash(input);
|
|
5442
|
+
props.context.notice(t("trash.restored", { name }));
|
|
5443
|
+
props.onRestored();
|
|
5444
|
+
} catch (reason) {
|
|
5445
|
+
setError(errorText(reason));
|
|
5446
|
+
} finally {
|
|
5447
|
+
setBusy(false);
|
|
5448
|
+
}
|
|
5449
|
+
};
|
|
5450
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(dsh_mnemon_client.SidebarModal, {
|
|
5451
|
+
title: t("trash.restoreTitle", { name: props.entry.name }),
|
|
5452
|
+
busy,
|
|
5453
|
+
onClose: props.onClose,
|
|
5454
|
+
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, {
|
|
5455
|
+
variant: "ghost",
|
|
5456
|
+
disabled: busy,
|
|
5457
|
+
onClick: props.onClose,
|
|
5458
|
+
children: t("common.cancel")
|
|
5459
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
5460
|
+
variant: "primary",
|
|
5461
|
+
disabled: busy || !props.context.writable || !validName || preview === null || preview.needsRoot || preview.conflict !== void 0 && !replace,
|
|
5462
|
+
onClick: () => void submit(),
|
|
5463
|
+
children: t("trash.restore")
|
|
5464
|
+
})] }),
|
|
5465
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
5466
|
+
className: css.skForm,
|
|
5467
|
+
children: [
|
|
5468
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", { children: t("trash.chooseHint") }),
|
|
5469
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(dsh_mnemon_client.SelectField, {
|
|
5470
|
+
label: t("create.root"),
|
|
5471
|
+
value: root,
|
|
5472
|
+
onChange: setRoot,
|
|
5473
|
+
options: [
|
|
5474
|
+
{
|
|
5475
|
+
value: "",
|
|
5476
|
+
label: t("trash.chooseRoot")
|
|
5477
|
+
},
|
|
5478
|
+
...props.initial?.needsRoot === true ? [] : [{
|
|
5479
|
+
value: "original",
|
|
5480
|
+
label: t("trash.original")
|
|
5481
|
+
}],
|
|
5482
|
+
...roots.map((kind) => ({
|
|
5483
|
+
value: kind,
|
|
5484
|
+
label: t(`root.${kind}`)
|
|
5485
|
+
}))
|
|
5486
|
+
]
|
|
5487
|
+
}),
|
|
5488
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(Field, {
|
|
5489
|
+
label: t("create.name"),
|
|
5490
|
+
hint: t("create.nameHint"),
|
|
5491
|
+
children: (control) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
5492
|
+
...control,
|
|
5493
|
+
value: name,
|
|
5494
|
+
disabled: busy,
|
|
5495
|
+
onChange: (event) => setName(event.target.value.trim().toLowerCase())
|
|
5496
|
+
})
|
|
5497
|
+
}),
|
|
5498
|
+
preview?.path !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("code", { children: preview.path }),
|
|
5499
|
+
preview?.conflict !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", { children: [
|
|
5500
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
5501
|
+
type: "checkbox",
|
|
5502
|
+
checked: replace,
|
|
5503
|
+
disabled: busy,
|
|
5504
|
+
onChange: (event) => setReplace(event.target.checked)
|
|
5505
|
+
}),
|
|
5506
|
+
" ",
|
|
5507
|
+
t("trash.replace")
|
|
5508
|
+
] }),
|
|
5509
|
+
error !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
5510
|
+
role: "alert",
|
|
5511
|
+
className: css.skFormError,
|
|
5512
|
+
children: error
|
|
5513
|
+
})
|
|
5514
|
+
]
|
|
5515
|
+
})
|
|
5516
|
+
});
|
|
5517
|
+
}
|
|
5518
|
+
function PurgeDialog(props) {
|
|
5519
|
+
const t = useT();
|
|
5520
|
+
const [name, setName] = (0, react.useState)("");
|
|
5521
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(dsh_mnemon_client.SidebarModal, {
|
|
5522
|
+
title: t("trash.purgeTitle", { name: props.entry.name }),
|
|
5523
|
+
description: t("trash.purgeBody"),
|
|
5524
|
+
busy: props.busy,
|
|
5525
|
+
onClose: props.onClose,
|
|
5526
|
+
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, {
|
|
5527
|
+
variant: "ghost",
|
|
5528
|
+
disabled: props.busy,
|
|
5529
|
+
onClick: props.onClose,
|
|
5530
|
+
children: t("common.cancel")
|
|
5531
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
5532
|
+
variant: "primary",
|
|
5533
|
+
className: css.skDangerButton,
|
|
5534
|
+
disabled: props.busy || !props.writable || name !== props.entry.name,
|
|
5535
|
+
onClick: props.onConfirm,
|
|
5536
|
+
children: t("trash.purge")
|
|
5537
|
+
})] }),
|
|
5538
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Field, {
|
|
5539
|
+
label: t("trash.confirmName", { name: props.entry.name }),
|
|
5540
|
+
children: (control) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
5541
|
+
...control,
|
|
5542
|
+
value: name,
|
|
5543
|
+
onChange: (event) => setName(event.target.value)
|
|
5544
|
+
})
|
|
5545
|
+
})
|
|
5546
|
+
});
|
|
5547
|
+
}
|
|
5548
|
+
//#endregion
|
|
5103
5549
|
//#region src/client/use-skill.tsx
|
|
5104
5550
|
/**
|
|
5105
5551
|
* "Use" puts `/name ` into the conversation's input, where DSH's own gesture
|
|
@@ -5179,7 +5625,8 @@ window.__ModuleLoader__.load({
|
|
|
5179
5625
|
"skills",
|
|
5180
5626
|
"evolution",
|
|
5181
5627
|
"evals",
|
|
5182
|
-
"market"
|
|
5628
|
+
"market",
|
|
5629
|
+
"trash"
|
|
5183
5630
|
];
|
|
5184
5631
|
const POLL_MS = 3e3;
|
|
5185
5632
|
const NOTICE_MS = 5e3;
|
|
@@ -5275,11 +5722,25 @@ window.__ModuleLoader__.load({
|
|
|
5275
5722
|
};
|
|
5276
5723
|
}, [client, revision]);
|
|
5277
5724
|
const busy = overview !== null && (overview.counts.runsRunning > 0 || overview.counts.drafting > 0);
|
|
5725
|
+
const wasBusy = (0, react.useRef)(false);
|
|
5278
5726
|
(0, react.useEffect)(() => {
|
|
5727
|
+
if (wasBusy.current && !busy) refresh();
|
|
5728
|
+
wasBusy.current = busy;
|
|
5279
5729
|
if (!busy) return;
|
|
5280
5730
|
const timer = setInterval(refresh, POLL_MS);
|
|
5281
5731
|
return () => clearInterval(timer);
|
|
5282
5732
|
}, [busy, refresh]);
|
|
5733
|
+
(0, react.useEffect)(() => {
|
|
5734
|
+
const resume = () => {
|
|
5735
|
+
if (document.visibilityState !== "hidden") refresh();
|
|
5736
|
+
};
|
|
5737
|
+
window.addEventListener("focus", resume);
|
|
5738
|
+
document.addEventListener("visibilitychange", resume);
|
|
5739
|
+
return () => {
|
|
5740
|
+
window.removeEventListener("focus", resume);
|
|
5741
|
+
document.removeEventListener("visibilitychange", resume);
|
|
5742
|
+
};
|
|
5743
|
+
}, [refresh]);
|
|
5283
5744
|
(0, react.useEffect)(() => {
|
|
5284
5745
|
if (notice === null) return;
|
|
5285
5746
|
const timer = setTimeout(() => setNotice(null), NOTICE_MS);
|
|
@@ -5327,6 +5788,7 @@ window.__ModuleLoader__.load({
|
|
|
5327
5788
|
...props.sessionId === void 0 ? {} : { sessionId: props.sessionId }
|
|
5328
5789
|
};
|
|
5329
5790
|
const waiting = overview === null ? 0 : overview.counts.pending + overview.counts.drafts;
|
|
5791
|
+
const trashed = overview === null ? 0 : overview.counts.trash;
|
|
5330
5792
|
const tabs = /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
5331
5793
|
className: sidebarCss.memoryNavigation,
|
|
5332
5794
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
@@ -5339,11 +5801,19 @@ window.__ModuleLoader__.load({
|
|
|
5339
5801
|
"aria-selected": location.tab === tab,
|
|
5340
5802
|
"data-active": location.tab === tab ? "" : void 0,
|
|
5341
5803
|
onClick: () => setLocation({ tab }),
|
|
5342
|
-
children: [
|
|
5343
|
-
|
|
5344
|
-
"
|
|
5345
|
-
|
|
5346
|
-
|
|
5804
|
+
children: [
|
|
5805
|
+
t(`tab.${tab}`),
|
|
5806
|
+
tab === "evolution" && waiting > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("b", {
|
|
5807
|
+
className: css.skTabBadge,
|
|
5808
|
+
"aria-label": t("tabs.waiting", { count: waiting }),
|
|
5809
|
+
children: waiting
|
|
5810
|
+
}),
|
|
5811
|
+
tab === "trash" && trashed > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("b", {
|
|
5812
|
+
className: css.skTabBadge,
|
|
5813
|
+
"aria-label": t("tabs.trash", { count: trashed }),
|
|
5814
|
+
children: trashed
|
|
5815
|
+
})
|
|
5816
|
+
]
|
|
5347
5817
|
}, tab))
|
|
5348
5818
|
})
|
|
5349
5819
|
});
|
|
@@ -5396,6 +5866,10 @@ window.__ModuleLoader__.load({
|
|
|
5396
5866
|
location.tab === "market" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MarketPage, {
|
|
5397
5867
|
context,
|
|
5398
5868
|
location
|
|
5869
|
+
}),
|
|
5870
|
+
location.tab === "trash" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TrashPage, {
|
|
5871
|
+
context,
|
|
5872
|
+
location
|
|
5399
5873
|
})
|
|
5400
5874
|
]
|
|
5401
5875
|
}, location.tab)
|