@stofone/dsh-agent-roster 0.8.3 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +18 -1
- package/README.md +2 -0
- package/README.zh.md +5 -1
- package/client.js +578 -229
- package/lib/library.js +5 -0
- package/locale/en.json +12 -3
- package/locale/zh.json +12 -3
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,22 @@
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [0.9.0] - 2026-11-03
|
|
8
|
+
|
|
9
|
+
### The roster list is a ledger
|
|
10
|
+
|
|
11
|
+
- **Rows, not cards.** Each roster is one row: a 3px state edge (lit only for `error` / `warn`),
|
|
12
|
+
a monospace id column, the title with its one-line description, right-aligned counts and a
|
|
13
|
+
quiet pair of actions. Duplicate / copy-create / delete moved into the expanded area — 21
|
|
14
|
+
rosters go from 105 always-visible buttons to 42.
|
|
15
|
+
- **The edge is the only loud thing.** Healthy rows carry no colour at all; the accent colour is
|
|
16
|
+
reserved for the selected tab underline and the selected tag's left edge. Every colour still
|
|
17
|
+
comes from `--dsw-alias-*` tokens, so light and dark themes stay consistent.
|
|
18
|
+
- **Teams are rows too**, collapsed by default, with the same state edge.
|
|
19
|
+
- **The header states what the library holds**: rosters, members, teams, and the owning
|
|
20
|
+
`organization.yaml` id when the directory has one.
|
|
21
|
+
- Narrow panels (below 860px) fold the tag pool into a wrapping top row instead of clipping it.
|
|
22
|
+
|
|
7
23
|
## [0.8.3] - 2026-11-03
|
|
8
24
|
|
|
9
25
|
### The panel no longer cuts long content
|
|
@@ -340,7 +356,8 @@
|
|
|
340
356
|
- 工具返回值含 `undefined` 键,运行时按 `value is not lossless JSON` 整次拒绝;缺失值统一写 `null`,
|
|
341
357
|
且所有返回值先过 `lib/json.js#lossless`。
|
|
342
358
|
|
|
343
|
-
[Unreleased]: https://github.com/dsh-agent-roster/dsh-agent-roster/compare/v0.
|
|
359
|
+
[Unreleased]: https://github.com/dsh-agent-roster/dsh-agent-roster/compare/v0.9.0...main
|
|
360
|
+
[0.9.0]: https://github.com/dsh-agent-roster/dsh-agent-roster/releases/tag/v0.9.0
|
|
344
361
|
[0.8.3]: https://github.com/dsh-agent-roster/dsh-agent-roster/releases/tag/v0.8.3
|
|
345
362
|
[0.8.2]: https://github.com/dsh-agent-roster/dsh-agent-roster/releases/tag/v0.8.2
|
|
346
363
|
[0.8.1]: https://github.com/dsh-agent-roster/dsh-agent-roster/releases/tag/v0.8.1
|
package/README.md
CHANGED
|
@@ -268,6 +268,8 @@ member and finally `roster_verify`. Creating the team stays with the runtime.
|
|
|
268
268
|
|
|
269
269
|
## Sidebar panel
|
|
270
270
|
|
|
271
|
+
The roster list is a **ledger, not a wall of cards**: one row per roster — a 3px state edge (lit only when something is wrong, quiet when it is fine), a monospace id column, the title with a one-line description, right-aligned counts (members / errors / warnings / deployment), and a quiet pair of actions (edit, expand). Duplicate, copy-create and delete moved into the expanded area, which turns 105 buttons across 21 rosters into 42. Below 860px the tag pool becomes a top row and the metadata wraps.
|
|
272
|
+
|
|
271
273
|
The panel takes the full page width; nothing constrains it to a reading column. The archive list has
|
|
272
274
|
a **tag pool** on the left: every tag present in the library, with how many archives carry it. Clicking
|
|
273
275
|
tags narrows the list — multiple selections are ANDed — and one button clears the selection. The tag
|
package/README.zh.md
CHANGED
|
@@ -260,7 +260,11 @@ node bin/cli.mjs validate --dir orgs/agent-roster-collective
|
|
|
260
260
|
|
|
261
261
|
## 左侧栏面板
|
|
262
262
|
|
|
263
|
-
|
|
263
|
+
面板铺满整个页面宽度,外层容器不设阅读列宽度。
|
|
264
|
+
|
|
265
|
+
档案列表是**账本,不是卡片墙**:一行一份档案——左沿 3 像素状态色(只有出错或有提醒时才亮,正常的档案不标记)、等宽字体的 id 列、标题与一句话描述、右侧计数(成员数 / 错误 / 提醒 / 部署态),最后是一对安静的操作(编辑、展开成员)。复制、复制建队、删除收在展开区里,21 份档案的 105 个按钮因此变成 42 个。窄于 860 像素时标签池从左侧栏变成顶上一行、元数据自动折行。
|
|
266
|
+
|
|
267
|
+
档案列表左侧是**标签池**:列出全库出现过的标签
|
|
264
268
|
以及各标签的档案数,点标签即筛选——多选是「且」,一个按钮清除选择。标签池只影响视图,不会把
|
|
265
269
|
标签写回文件。
|
|
266
270
|
|
package/client.js
CHANGED
|
@@ -652,80 +652,100 @@ window.__ModuleLoader__.load({
|
|
|
652
652
|
);
|
|
653
653
|
}
|
|
654
654
|
|
|
655
|
+
/**
|
|
656
|
+
* 一行 = 一份档案。
|
|
657
|
+
*
|
|
658
|
+
* 名册是列表不是画廊:id 立在第一列当"脊",状态长在左沿,操作平时只露两个入口。
|
|
659
|
+
* 复制/建队/删除这些低频且危险的动作收进展开区——否则 21 份档案就是 105 个按钮。
|
|
660
|
+
*/
|
|
655
661
|
function RosterCard({ roster, deployment, captainReport, sessions, onToast, onEdit, onDuplicate, onDelete, onCopy }) {
|
|
656
662
|
const [open, setOpen] = useState(false);
|
|
657
|
-
const
|
|
663
|
+
const diagnostics = roster.diagnostics ?? [];
|
|
664
|
+
const errors = diagnostics.filter((item) => item?.severity === "error").length;
|
|
665
|
+
const warnings = diagnostics.filter((item) => item?.severity === "warn").length;
|
|
658
666
|
const deployed = deployment !== undefined && deployment.deployed > 0;
|
|
667
|
+
const drifted = deployment !== undefined ? deployment.drifted : 0;
|
|
668
|
+
|
|
669
|
+
const tone = errors > 0 ? " rstr-row-error" : warnings > 0 ? " rstr-row-warn" : "";
|
|
659
670
|
|
|
660
671
|
return h(
|
|
661
672
|
"article",
|
|
662
|
-
{ className: `rstr-
|
|
673
|
+
{ className: `rstr-row${tone}${open ? " rstr-row-open" : ""}` },
|
|
663
674
|
h(
|
|
664
|
-
"
|
|
665
|
-
{ className: "rstr-
|
|
675
|
+
"div",
|
|
676
|
+
{ className: "rstr-row-body" },
|
|
677
|
+
h("code", { className: "rstr-row-id", title: roster.id }, roster.id),
|
|
666
678
|
h(
|
|
667
679
|
"div",
|
|
668
|
-
|
|
680
|
+
{ className: "rstr-row-text" },
|
|
669
681
|
h(
|
|
670
|
-
"
|
|
671
|
-
{ className: "rstr-
|
|
672
|
-
|
|
682
|
+
"h3",
|
|
683
|
+
{ className: "rstr-row-title" },
|
|
684
|
+
roster.title || roster.id,
|
|
673
685
|
h(Chip, null, t("roster.version", { version: roster.version })),
|
|
674
686
|
errors > 0 ? h(Badge, { tone: "error" }, t("roster.diagnostics", { count: errors })) : null,
|
|
675
687
|
),
|
|
676
|
-
h("
|
|
677
|
-
roster.description ? h("p", { className: "rstr-muted" }, roster.description) : null,
|
|
678
|
-
),
|
|
679
|
-
),
|
|
680
|
-
h(
|
|
681
|
-
"div",
|
|
682
|
-
{ className: "rstr-card-meta" },
|
|
683
|
-
h("span", null, t("roster.members", { count: roster.members.length })),
|
|
684
|
-
h("span", { className: "rstr-muted" }, roster.file),
|
|
685
|
-
h(
|
|
686
|
-
"span",
|
|
687
|
-
{ className: deployed ? "rstr-ok" : "rstr-muted" },
|
|
688
|
-
deployed
|
|
689
|
-
? t("roster.deployed", { teams: (deployment.teams ?? []).join(", ") })
|
|
690
|
-
: t("roster.notDeployed"),
|
|
688
|
+
roster.description ? h("p", { className: "rstr-row-desc" }, roster.description) : null,
|
|
691
689
|
),
|
|
692
|
-
deployment !== undefined && deployment.drifted > 0
|
|
693
|
-
? h(Badge, { tone: "warn" }, t("roster.drifted", { count: deployment.drifted }))
|
|
694
|
-
: null,
|
|
695
|
-
),
|
|
696
|
-
h(
|
|
697
|
-
"div",
|
|
698
|
-
{ className: "rstr-card-actions" },
|
|
699
|
-
h("button", { type: "button", className: "rstr-btn", onClick: () => onEdit(roster) }, t("roster.edit")),
|
|
700
|
-
h("button", { type: "button", className: "rstr-btn", onClick: () => onDuplicate(roster) }, t("roster.duplicate")),
|
|
701
|
-
h("button", { type: "button", className: "rstr-btn", onClick: () => onCopy(roster) }, t("roster.copyCreate")),
|
|
702
690
|
h(
|
|
703
|
-
"
|
|
704
|
-
{
|
|
705
|
-
t("roster.
|
|
691
|
+
"div",
|
|
692
|
+
{ className: "rstr-row-stats" },
|
|
693
|
+
h("span", null, t("roster.members", { count: roster.members.length })),
|
|
694
|
+
errors > 0
|
|
695
|
+
? h("span", { className: "rstr-stat-error" }, t("roster.diagnostics", { count: errors }))
|
|
696
|
+
: warnings > 0
|
|
697
|
+
? h("span", { className: "rstr-stat-warn" }, t("roster.warnings", { count: warnings }))
|
|
698
|
+
: null,
|
|
699
|
+
h(
|
|
700
|
+
"span",
|
|
701
|
+
{ className: deployed ? "rstr-stat-ok" : undefined },
|
|
702
|
+
deployed
|
|
703
|
+
? drifted > 0
|
|
704
|
+
? t("roster.deployedDrifted", { teams: (deployment.teams ?? []).join(", "), count: drifted })
|
|
705
|
+
: t("roster.deployed", { teams: (deployment.teams ?? []).join(", ") })
|
|
706
|
+
: t("roster.notDeployed"),
|
|
707
|
+
),
|
|
706
708
|
),
|
|
707
709
|
h(
|
|
708
|
-
"
|
|
709
|
-
{
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
"
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
710
|
+
"div",
|
|
711
|
+
{ className: "rstr-row-actions" },
|
|
712
|
+
h("button", { type: "button", className: "rstr-btn rstr-btn-sm rstr-btn-quiet", onClick: () => onEdit(roster) }, t("roster.edit")),
|
|
713
|
+
h(
|
|
714
|
+
"button",
|
|
715
|
+
{
|
|
716
|
+
type: "button",
|
|
717
|
+
className: "rstr-btn rstr-btn-sm rstr-btn-quiet",
|
|
718
|
+
"aria-expanded": open,
|
|
719
|
+
onClick: () => setOpen(!open),
|
|
720
|
+
},
|
|
721
|
+
open ? t("roster.hideMembers") : t("roster.showMembers"),
|
|
722
|
+
h("span", { className: "rstr-caret", "aria-hidden": "true" }, open ? "\u25b4" : "\u25be"),
|
|
723
|
+
),
|
|
716
724
|
),
|
|
717
725
|
),
|
|
718
726
|
open
|
|
719
727
|
? h(
|
|
720
728
|
"div",
|
|
721
|
-
{ className: "rstr-
|
|
729
|
+
{ className: "rstr-row-detail" },
|
|
722
730
|
roster.members.length === 0
|
|
723
731
|
? h("p", { className: "rstr-muted" }, t("roster.noMembers"))
|
|
724
|
-
:
|
|
732
|
+
: h(
|
|
733
|
+
"div",
|
|
734
|
+
{ className: "rstr-members" },
|
|
735
|
+
roster.members.map((member) => h(MemberBlock, { key: member.name, member })),
|
|
736
|
+
),
|
|
725
737
|
roster.captain === null || roster.captain === undefined
|
|
726
738
|
? null
|
|
727
739
|
: h(CaptainPanel, { roster, report: captainReport, sessions: sessions ?? [], onToast }),
|
|
728
|
-
h(DiagnosticList, { items:
|
|
740
|
+
h(DiagnosticList, { items: diagnostics }),
|
|
741
|
+
h("p", { className: "rstr-hint" }, `roster.file: ${roster.file}`),
|
|
742
|
+
h(
|
|
743
|
+
"div",
|
|
744
|
+
{ className: "rstr-row-detail-actions" },
|
|
745
|
+
h("button", { type: "button", className: "rstr-btn rstr-btn-sm", onClick: () => onDuplicate(roster) }, t("roster.duplicate")),
|
|
746
|
+
h("button", { type: "button", className: "rstr-btn rstr-btn-sm", onClick: () => onCopy(roster) }, t("roster.copyCreate")),
|
|
747
|
+
h("button", { type: "button", className: "rstr-btn rstr-btn-sm rstr-btn-danger", onClick: () => onDelete(roster) }, t("roster.delete")),
|
|
748
|
+
),
|
|
729
749
|
)
|
|
730
750
|
: null,
|
|
731
751
|
);
|
|
@@ -735,76 +755,104 @@ window.__ModuleLoader__.load({
|
|
|
735
755
|
/* 团队视图 */
|
|
736
756
|
/* ------------------------------------------------------------------ */
|
|
737
757
|
|
|
758
|
+
/**
|
|
759
|
+
* 一行 = 一个团队。默认收起:团队页是用来"看谁在跑、有没有偏"的,不是用来读成员清单的。
|
|
760
|
+
*/
|
|
738
761
|
function TeamCard({ team }) {
|
|
762
|
+
const [open, setOpen] = useState(false);
|
|
763
|
+
const phase = team.phase === "staged" ? t("team.phaseStaged") : t("team.phaseRunning");
|
|
764
|
+
const tone = team.escalated ? " rstr-row-error" : team.halted || team.phase === "staged" ? " rstr-row-warn" : "";
|
|
765
|
+
|
|
739
766
|
return h(
|
|
740
767
|
"article",
|
|
741
|
-
{ className: "rstr-
|
|
768
|
+
{ className: `rstr-row${tone}${open ? " rstr-row-open" : ""}` },
|
|
742
769
|
h(
|
|
743
|
-
"
|
|
744
|
-
{ className: "rstr-
|
|
770
|
+
"div",
|
|
771
|
+
{ className: "rstr-row-body" },
|
|
772
|
+
h("code", { className: "rstr-row-id", title: team.id }, team.id),
|
|
745
773
|
h(
|
|
746
774
|
"div",
|
|
747
|
-
|
|
775
|
+
{ className: "rstr-row-text" },
|
|
748
776
|
h(
|
|
749
|
-
"
|
|
750
|
-
{ className: "rstr-
|
|
751
|
-
|
|
752
|
-
h(Badge, { tone: team.phase === "staged" ? "warn" : "ok" },
|
|
777
|
+
"h3",
|
|
778
|
+
{ className: "rstr-row-title" },
|
|
779
|
+
team.name || team.id,
|
|
780
|
+
h(Badge, { tone: team.phase === "staged" ? "warn" : "ok" }, phase),
|
|
753
781
|
team.halted ? h(Badge, { tone: "warn" }, t("team.halted")) : null,
|
|
754
782
|
team.escalated ? h(Badge, { tone: "error" }, t("team.escalated")) : null,
|
|
755
783
|
),
|
|
756
|
-
h("
|
|
757
|
-
team.description ? h("p", { className: "rstr-muted" }, team.description) : null,
|
|
784
|
+
team.description ? h("p", { className: "rstr-row-desc" }, team.description) : null,
|
|
758
785
|
),
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
{ className: "rstr-members" },
|
|
769
|
-
h("div", { className: "rstr-label rstr-mt" }, t("team.members")),
|
|
770
|
-
team.members.map((member) =>
|
|
786
|
+
h(
|
|
787
|
+
"div",
|
|
788
|
+
{ className: "rstr-row-stats" },
|
|
789
|
+
h("span", null, t("team.taskCount", { count: team.tasks.total })),
|
|
790
|
+
h("span", null, t("roster.members", { count: team.members.length })),
|
|
791
|
+
),
|
|
792
|
+
h(
|
|
793
|
+
"div",
|
|
794
|
+
{ className: "rstr-row-actions" },
|
|
771
795
|
h(
|
|
796
|
+
"button",
|
|
797
|
+
{
|
|
798
|
+
type: "button",
|
|
799
|
+
className: "rstr-btn rstr-btn-sm rstr-btn-quiet",
|
|
800
|
+
"aria-expanded": open,
|
|
801
|
+
onClick: () => setOpen(!open),
|
|
802
|
+
},
|
|
803
|
+
open ? t("team.hideMembers") : t("team.showMembers"),
|
|
804
|
+
h("span", { className: "rstr-caret", "aria-hidden": "true" }, open ? "\u25b4" : "\u25be"),
|
|
805
|
+
),
|
|
806
|
+
),
|
|
807
|
+
),
|
|
808
|
+
open
|
|
809
|
+
? h(
|
|
772
810
|
"div",
|
|
773
|
-
{
|
|
811
|
+
{ className: "rstr-row-detail" },
|
|
774
812
|
h(
|
|
775
813
|
"div",
|
|
776
|
-
{ className: "rstr-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
member.rosterId !== null ? h("span", { className: "rstr-muted" }, t("team.managed", { roster: member.rosterId })) : null,
|
|
790
|
-
h("span", { className: "rstr-muted" }, t("team.promptChars", { count: member.promptChars })),
|
|
791
|
-
),
|
|
792
|
-
member.drift.length > 0
|
|
793
|
-
? h(
|
|
794
|
-
"ul",
|
|
795
|
-
{ className: "rstr-drift" },
|
|
796
|
-
member.drift.map((item) =>
|
|
797
|
-
h(
|
|
798
|
-
"li",
|
|
799
|
-
{ key: item.field },
|
|
800
|
-
t("team.driftDetail", { field: item.field, wanted: item.roster, actual: item.runtime }),
|
|
801
|
-
),
|
|
814
|
+
{ className: "rstr-members" },
|
|
815
|
+
team.members.map((member) =>
|
|
816
|
+
h(
|
|
817
|
+
"div",
|
|
818
|
+
{ key: member.name, className: "rstr-member" },
|
|
819
|
+
h(
|
|
820
|
+
"div",
|
|
821
|
+
{ className: "rstr-member-head" },
|
|
822
|
+
h("strong", null, member.name),
|
|
823
|
+
member.role ? h(Chip, null, member.role) : null,
|
|
824
|
+
member.rosterId === null
|
|
825
|
+
? h(Badge, { tone: "muted" }, t("team.unmanaged"))
|
|
826
|
+
: h(Badge, { tone: member.faithful ? "ok" : "warn" }, t(member.faithful ? "team.faithful" : "team.drift")),
|
|
802
827
|
),
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
828
|
+
h(
|
|
829
|
+
"div",
|
|
830
|
+
{ className: "rstr-member-meta" },
|
|
831
|
+
member.model ? h("span", null, `${t("member.model")}: ${member.model}`) : null,
|
|
832
|
+
member.reasoningEffort ? h("span", null, `${t("member.effort")}: ${member.reasoningEffort}`) : null,
|
|
833
|
+
member.toolPolicy ? h("span", null, `${t("member.policy")}: ${member.toolPolicy}`) : null,
|
|
834
|
+
member.rosterId !== null ? h("span", { className: "rstr-muted" }, t("team.managed", { roster: member.rosterId })) : null,
|
|
835
|
+
h("span", { className: "rstr-muted" }, t("team.promptChars", { count: member.promptChars })),
|
|
836
|
+
),
|
|
837
|
+
member.drift.length > 0
|
|
838
|
+
? h(
|
|
839
|
+
"ul",
|
|
840
|
+
{ className: "rstr-drift" },
|
|
841
|
+
member.drift.map((item) =>
|
|
842
|
+
h(
|
|
843
|
+
"li",
|
|
844
|
+
{ key: item.field },
|
|
845
|
+
t("team.driftDetail", { field: item.field, wanted: item.roster, actual: item.runtime }),
|
|
846
|
+
),
|
|
847
|
+
),
|
|
848
|
+
)
|
|
849
|
+
: null,
|
|
850
|
+
),
|
|
851
|
+
),
|
|
852
|
+
),
|
|
853
|
+
h("p", { className: "rstr-hint" }, `${t("team.file")}: ${team.file}`),
|
|
854
|
+
)
|
|
855
|
+
: null,
|
|
808
856
|
);
|
|
809
857
|
}
|
|
810
858
|
|
|
@@ -1320,21 +1368,23 @@ window.__ModuleLoader__.load({
|
|
|
1320
1368
|
}
|
|
1321
1369
|
}
|
|
1322
1370
|
|
|
1371
|
+
const organization = (snapshot?.workspaces ?? []).map((workspace) => workspace.organization).find((item) => item && item.id)?.id ?? "";
|
|
1372
|
+
|
|
1323
1373
|
const header = h(
|
|
1324
1374
|
"header",
|
|
1325
1375
|
{ className: "rstr-head" },
|
|
1326
1376
|
h(
|
|
1327
1377
|
"div",
|
|
1328
|
-
|
|
1378
|
+
{ className: "rstr-head-main" },
|
|
1329
1379
|
h("h1", { className: "rstr-h1" }, t("panel.title")),
|
|
1380
|
+
// 抬头只放"这库里有什么":几份档案、几个人、几支队在跑、属于哪个组织。
|
|
1330
1381
|
h(
|
|
1331
|
-
"
|
|
1332
|
-
{ className: "rstr-
|
|
1333
|
-
t("panel.
|
|
1334
|
-
|
|
1335
|
-
|
|
1336
|
-
|
|
1337
|
-
}),
|
|
1382
|
+
"div",
|
|
1383
|
+
{ className: "rstr-head-meta" },
|
|
1384
|
+
h("span", null, h("b", null, String(snapshot?.summary?.rosters ?? 0)), " ", t("panel.metaRosters")),
|
|
1385
|
+
h("span", null, h("b", null, String(snapshot?.summary?.members ?? 0)), " ", t("panel.metaMembers")),
|
|
1386
|
+
h("span", null, h("b", null, String(snapshot?.summary?.teams ?? 0)), " ", t("panel.metaTeams")),
|
|
1387
|
+
organization === "" ? null : h("span", null, t("panel.metaOrganization", { name: organization })),
|
|
1338
1388
|
),
|
|
1339
1389
|
),
|
|
1340
1390
|
h(
|
|
@@ -2063,156 +2113,455 @@ window.__ModuleLoader__.load({
|
|
|
2063
2113
|
* 需要"淡色底"的地方用 `color-mix(... , transparent)` 自己算,深浅主题都成立。
|
|
2064
2114
|
* 文本色一律显式给出(不用 inherit),避免继承到与背景同色的文本。
|
|
2065
2115
|
*/
|
|
2066
|
-
const CSS =
|
|
2067
|
-
|
|
2068
|
-
|
|
2069
|
-
|
|
2116
|
+
const CSS = `/* ============================================================
|
|
2117
|
+
dsh-agent-roster — panel styles
|
|
2118
|
+
Everything derives from host theme aliases (--dsw-alias-*).
|
|
2119
|
+
No literal colors: the host owns light/dark.
|
|
2120
|
+
============================================================ */
|
|
2121
|
+
|
|
2122
|
+
.rstr-page {
|
|
2123
|
+
display: flex;
|
|
2124
|
+
flex-direction: column;
|
|
2125
|
+
gap: 0;
|
|
2126
|
+
padding: 0;
|
|
2127
|
+
width: 100%;
|
|
2128
|
+
height: 100%;
|
|
2129
|
+
min-height: 0;
|
|
2130
|
+
box-sizing: border-box;
|
|
2131
|
+
overflow-y: auto;
|
|
2132
|
+
overflow-x: hidden;
|
|
2133
|
+
color: var(--dsw-alias-label-primary);
|
|
2134
|
+
font-size: 13px;
|
|
2135
|
+
line-height: 1.6;
|
|
2136
|
+
}
|
|
2137
|
+
|
|
2138
|
+
/* ---- masthead --------------------------------------------------------- */
|
|
2139
|
+
|
|
2140
|
+
.rstr-head {
|
|
2141
|
+
display: flex;
|
|
2142
|
+
align-items: flex-end;
|
|
2143
|
+
justify-content: space-between;
|
|
2144
|
+
gap: 20px;
|
|
2145
|
+
flex-wrap: wrap;
|
|
2146
|
+
padding: 24px 28px 14px;
|
|
2147
|
+
border-bottom: 1px solid var(--dsw-alias-border-l1);
|
|
2148
|
+
}
|
|
2149
|
+
.rstr-head-main { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
|
|
2150
|
+
.rstr-h1 { margin: 0; font-size: 26px; font-weight: 650; letter-spacing: -0.02em; color: var(--dsw-alias-label-primary); }
|
|
2151
|
+
.rstr-head-meta { display: flex; flex-wrap: wrap; gap: 18px; font-size: 12px; color: var(--dsw-alias-label-secondary); font-variant-numeric: tabular-nums; }
|
|
2152
|
+
.rstr-head-meta > span > b { font-weight: 600; color: var(--dsw-alias-label-primary); }
|
|
2153
|
+
.rstr-head-actions { display: flex; gap: 6px; flex-wrap: wrap; }
|
|
2154
|
+
|
|
2155
|
+
/* ---- tabs ------------------------------------------------------------- */
|
|
2156
|
+
|
|
2157
|
+
.rstr-tabs {
|
|
2158
|
+
display: flex;
|
|
2159
|
+
gap: 22px;
|
|
2160
|
+
padding: 0 28px;
|
|
2161
|
+
border-bottom: 1px solid var(--dsw-alias-border-l1);
|
|
2162
|
+
position: sticky;
|
|
2163
|
+
top: 0;
|
|
2164
|
+
z-index: 2;
|
|
2165
|
+
background: var(--dsw-alias-bg-base);
|
|
2166
|
+
}
|
|
2167
|
+
.rstr-tab {
|
|
2168
|
+
border: none;
|
|
2169
|
+
background: transparent;
|
|
2170
|
+
padding: 11px 0 9px;
|
|
2171
|
+
font-size: 13px;
|
|
2172
|
+
font-family: inherit;
|
|
2173
|
+
color: var(--dsw-alias-label-secondary);
|
|
2174
|
+
cursor: pointer;
|
|
2175
|
+
border-bottom: 2px solid transparent;
|
|
2176
|
+
display: inline-flex;
|
|
2177
|
+
align-items: baseline;
|
|
2178
|
+
gap: 6px;
|
|
2179
|
+
margin-bottom: -1px;
|
|
2180
|
+
}
|
|
2181
|
+
.rstr-tab:hover { color: var(--dsw-alias-label-primary); }
|
|
2182
|
+
.rstr-tab:focus-visible { outline: 2px solid var(--dsw-alias-state-business-primary); outline-offset: 2px; }
|
|
2183
|
+
.rstr-tab-on { color: var(--dsw-alias-label-primary); border-bottom-color: var(--dsw-alias-state-business-primary); font-weight: 600; }
|
|
2184
|
+
.rstr-tab-count { font-size: 12px; color: var(--dsw-alias-label-secondary); font-variant-numeric: tabular-nums; }
|
|
2185
|
+
|
|
2186
|
+
/* ---- banner ----------------------------------------------------------- */
|
|
2187
|
+
|
|
2188
|
+
.rstr-banner {
|
|
2189
|
+
display: flex;
|
|
2190
|
+
align-items: center;
|
|
2191
|
+
justify-content: space-between;
|
|
2192
|
+
gap: 14px;
|
|
2193
|
+
margin: 14px 28px 0;
|
|
2194
|
+
padding: 9px 12px 9px 14px;
|
|
2195
|
+
border-left: 3px solid var(--dsw-alias-state-warn-primary);
|
|
2196
|
+
background: color-mix(in srgb, var(--dsw-alias-state-warn-primary) 8%, transparent);
|
|
2197
|
+
color: var(--dsw-alias-label-primary);
|
|
2198
|
+
font-size: 13px;
|
|
2199
|
+
}
|
|
2200
|
+
|
|
2201
|
+
/* ---- 档案页:标签脊 + 账本 ------------------------------------------- */
|
|
2202
|
+
|
|
2203
|
+
.rstr-rosters {
|
|
2204
|
+
display: grid;
|
|
2205
|
+
grid-template-columns: 176px minmax(0, 1fr);
|
|
2206
|
+
align-items: start;
|
|
2207
|
+
}
|
|
2208
|
+
.rstr-tagpool {
|
|
2209
|
+
display: flex;
|
|
2210
|
+
flex-direction: column;
|
|
2211
|
+
gap: 2px;
|
|
2212
|
+
padding: 16px 12px 20px 20px;
|
|
2213
|
+
border-right: 1px solid var(--dsw-alias-border-l1);
|
|
2214
|
+
position: sticky;
|
|
2215
|
+
top: 41px;
|
|
2216
|
+
align-self: start;
|
|
2217
|
+
min-width: 0;
|
|
2218
|
+
}
|
|
2219
|
+
.rstr-tagpool-title {
|
|
2220
|
+
display: flex;
|
|
2221
|
+
align-items: baseline;
|
|
2222
|
+
justify-content: space-between;
|
|
2223
|
+
font-size: 11px;
|
|
2224
|
+
font-weight: 600;
|
|
2225
|
+
color: var(--dsw-alias-label-secondary);
|
|
2226
|
+
padding: 0 6px 6px;
|
|
2227
|
+
}
|
|
2228
|
+
.rstr-tagpool-list { display: flex; flex-direction: column; gap: 1px; min-width: 0; }
|
|
2229
|
+
.rstr-tag {
|
|
2230
|
+
display: flex;
|
|
2231
|
+
align-items: baseline;
|
|
2232
|
+
justify-content: space-between;
|
|
2233
|
+
gap: 8px;
|
|
2234
|
+
width: 100%;
|
|
2235
|
+
border: none;
|
|
2236
|
+
border-left: 2px solid transparent;
|
|
2237
|
+
background: transparent;
|
|
2238
|
+
color: var(--dsw-alias-label-secondary);
|
|
2239
|
+
padding: 4px 6px;
|
|
2240
|
+
font-size: 12px;
|
|
2241
|
+
font-family: inherit;
|
|
2242
|
+
cursor: pointer;
|
|
2243
|
+
text-align: left;
|
|
2244
|
+
border-radius: 0 4px 4px 0;
|
|
2245
|
+
}
|
|
2246
|
+
.rstr-tag:hover { background: var(--dsw-alias-interactive-bg-hover); color: var(--dsw-alias-label-primary); }
|
|
2247
|
+
.rstr-tag:focus-visible { outline: 2px solid var(--dsw-alias-state-business-primary); outline-offset: -2px; }
|
|
2248
|
+
.rstr-tag-on {
|
|
2249
|
+
border-left-color: var(--dsw-alias-state-business-primary);
|
|
2250
|
+
background: color-mix(in srgb, var(--dsw-alias-state-business-primary) 8%, transparent);
|
|
2251
|
+
color: var(--dsw-alias-label-primary);
|
|
2252
|
+
font-weight: 600;
|
|
2253
|
+
}
|
|
2254
|
+
.rstr-tag-name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
2255
|
+
.rstr-tag-count { font-size: 11px; color: var(--dsw-alias-label-secondary); font-variant-numeric: tabular-nums; }
|
|
2256
|
+
.rstr-tag-clear { align-self: flex-start; margin-top: 8px; }
|
|
2257
|
+
|
|
2258
|
+
.rstr-rosters-main { display: flex; flex-direction: column; min-width: 0; padding: 16px 28px 28px; gap: 12px; }
|
|
2259
|
+
|
|
2260
|
+
/* ---- 工具条 ----------------------------------------------------------- */
|
|
2261
|
+
|
|
2262
|
+
.rstr-toolbar { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
|
|
2263
|
+
.rstr-toolbar-actions { display: flex; gap: 6px; margin-left: auto; }
|
|
2264
|
+
.rstr-search {
|
|
2265
|
+
max-width: 320px;
|
|
2266
|
+
border-color: transparent;
|
|
2267
|
+
background: var(--dsw-alias-bg-layer-2);
|
|
2268
|
+
}
|
|
2269
|
+
.rstr-search:focus-visible { background: var(--dsw-alias-bg-layer-1); border-color: var(--dsw-alias-border-l3); }
|
|
2270
|
+
|
|
2271
|
+
/* ---- 账本(行) ------------------------------------------------------- */
|
|
2272
|
+
|
|
2273
|
+
.rstr-cards { display: flex; flex-direction: column; min-width: 0; border-top: 1px solid var(--dsw-alias-border-l2); }
|
|
2274
|
+
|
|
2275
|
+
.rstr-row {
|
|
2276
|
+
position: relative;
|
|
2277
|
+
display: flex;
|
|
2278
|
+
flex-direction: column;
|
|
2279
|
+
min-width: 0;
|
|
2280
|
+
border-bottom: 1px solid var(--dsw-alias-border-l1);
|
|
2281
|
+
padding-left: 15px;
|
|
2282
|
+
content-visibility: auto;
|
|
2283
|
+
contain-intrinsic-size: auto 68px;
|
|
2284
|
+
}
|
|
2285
|
+
.rstr-row::before {
|
|
2286
|
+
content: "";
|
|
2287
|
+
position: absolute;
|
|
2288
|
+
left: 0;
|
|
2289
|
+
top: 0;
|
|
2290
|
+
bottom: 0;
|
|
2291
|
+
width: 3px;
|
|
2292
|
+
background: transparent;
|
|
2293
|
+
transition: width .12s ease;
|
|
2294
|
+
}
|
|
2295
|
+
.rstr-row-error::before { background: var(--dsw-alias-state-error-primary); }
|
|
2296
|
+
.rstr-row-warn::before { background: var(--dsw-alias-state-warn-primary); }
|
|
2297
|
+
.rstr-row:hover { background: var(--dsw-alias-interactive-bg-hover); }
|
|
2298
|
+
.rstr-row:hover::before { width: 5px; }
|
|
2299
|
+
.rstr-row-open { background: var(--dsw-alias-interactive-bg-hover); }
|
|
2300
|
+
.rstr-row-open::before { width: 5px; }
|
|
2301
|
+
|
|
2302
|
+
.rstr-row-body {
|
|
2303
|
+
display: grid;
|
|
2304
|
+
grid-template-columns: minmax(88px, 140px) minmax(0, 1fr) auto auto;
|
|
2305
|
+
align-items: baseline;
|
|
2306
|
+
gap: 8px 16px;
|
|
2307
|
+
padding: 13px 8px 13px 0;
|
|
2308
|
+
min-width: 0;
|
|
2309
|
+
}
|
|
2310
|
+
.rstr-row-id {
|
|
2311
|
+
font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
|
|
2312
|
+
font-size: 13px;
|
|
2313
|
+
font-weight: 600;
|
|
2314
|
+
color: var(--dsw-alias-label-primary);
|
|
2315
|
+
overflow: hidden;
|
|
2316
|
+
text-overflow: ellipsis;
|
|
2317
|
+
white-space: nowrap;
|
|
2318
|
+
}
|
|
2319
|
+
.rstr-row-text { min-width: 0; display: flex; flex-direction: column; gap: 2px; }
|
|
2320
|
+
.rstr-row-title { margin: 0; font-size: 14px; font-weight: 500; color: var(--dsw-alias-label-primary); display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap; }
|
|
2321
|
+
.rstr-row-desc {
|
|
2322
|
+
margin: 0;
|
|
2323
|
+
font-size: 12px;
|
|
2324
|
+
color: var(--dsw-alias-label-secondary);
|
|
2325
|
+
overflow: hidden;
|
|
2326
|
+
text-overflow: ellipsis;
|
|
2327
|
+
white-space: nowrap;
|
|
2328
|
+
}
|
|
2329
|
+
.rstr-row-stats { display: flex; align-items: baseline; gap: 12px; font-size: 12px; color: var(--dsw-alias-label-secondary); font-variant-numeric: tabular-nums; white-space: nowrap; }
|
|
2330
|
+
.rstr-row-stats b { font-weight: 600; color: var(--dsw-alias-label-primary); }
|
|
2331
|
+
.rstr-stat-error { color: color-mix(in srgb, var(--dsw-alias-state-error-primary) 78%, var(--dsw-alias-label-primary)); font-weight: 600; }
|
|
2332
|
+
.rstr-stat-warn { color: color-mix(in srgb, var(--dsw-alias-state-warn-label) 82%, var(--dsw-alias-label-primary)); font-weight: 600; }
|
|
2333
|
+
.rstr-stat-ok { color: color-mix(in srgb, var(--dsw-alias-state-success-primary) 65%, var(--dsw-alias-label-primary)); }
|
|
2334
|
+
.rstr-row-actions { display: flex; align-items: center; gap: 4px; justify-self: end; }
|
|
2335
|
+
|
|
2336
|
+
.rstr-row-detail {
|
|
2337
|
+
display: flex;
|
|
2338
|
+
flex-direction: column;
|
|
2339
|
+
gap: 12px;
|
|
2340
|
+
padding: 10px 14px 18px 14px;
|
|
2341
|
+
margin: 0 0 12px -1px;
|
|
2342
|
+
min-width: 0;
|
|
2343
|
+
background: var(--dsw-alias-bg-layer-2);
|
|
2344
|
+
}
|
|
2345
|
+
.rstr-row-detail-actions { display: flex; gap: 6px; flex-wrap: wrap; padding-top: 4px; }
|
|
2346
|
+
|
|
2347
|
+
/* ---- 成员块 ----------------------------------------------------------- */
|
|
2348
|
+
|
|
2349
|
+
.rstr-members { display: flex; flex-direction: column; gap: 0; border-top: 1px dashed var(--dsw-alias-border-l1); }
|
|
2350
|
+
.rstr-member {
|
|
2351
|
+
display: grid;
|
|
2352
|
+
grid-template-columns: minmax(120px, 170px) minmax(0, 1fr) auto;
|
|
2353
|
+
gap: 6px 16px;
|
|
2354
|
+
align-items: baseline;
|
|
2355
|
+
padding: 9px 4px;
|
|
2356
|
+
border-bottom: 1px solid var(--dsw-alias-border-l1);
|
|
2357
|
+
min-width: 0;
|
|
2358
|
+
}
|
|
2359
|
+
.rstr-member:last-child { border-bottom: none; }
|
|
2360
|
+
.rstr-member-head { display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap; min-width: 0; }
|
|
2361
|
+
.rstr-member-name { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size: 12px; font-weight: 600; color: var(--dsw-alias-label-primary); }
|
|
2362
|
+
.rstr-member-desc { margin: 0; font-size: 12px; color: var(--dsw-alias-label-secondary); min-width: 0; }
|
|
2363
|
+
.rstr-member-meta { display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap; font-size: 11px; color: var(--dsw-alias-label-secondary); justify-self: end; font-variant-numeric: tabular-nums; }
|
|
2364
|
+
|
|
2365
|
+
/* ---- 队长块 ----------------------------------------------------------- */
|
|
2366
|
+
|
|
2367
|
+
.rstr-captain { display: flex; flex-direction: column; gap: 10px; border-top: 1px dashed var(--dsw-alias-border-l1); padding-top: 12px; }
|
|
2368
|
+
.rstr-meta-grid { display: grid; grid-template-columns: auto repeat(3, auto); justify-content: start; gap: 6px 20px; align-items: baseline; font-size: 12px; font-variant-numeric: tabular-nums; }
|
|
2369
|
+
.rstr-checks { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, max-content)); gap: 0 24px; }
|
|
2370
|
+
.rstr-check { display: flex; justify-content: space-between; gap: 18px; font-size: 12px; border-bottom: 1px solid var(--dsw-alias-border-l1); padding: 4px 0; }
|
|
2371
|
+
.rstr-apply { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; }
|
|
2372
|
+
.rstr-segmented { display: inline-flex; border: 1px solid var(--dsw-alias-border-l3); }
|
|
2373
|
+
.rstr-seg { border: none; background: transparent; padding: 5px 12px; font-size: 12px; font-family: inherit; cursor: pointer; color: var(--dsw-alias-label-secondary); }
|
|
2374
|
+
.rstr-seg:hover { background: var(--dsw-alias-interactive-bg-hover); }
|
|
2375
|
+
.rstr-seg-on { background: color-mix(in srgb, var(--dsw-alias-state-business-primary) 10%, transparent); color: var(--dsw-alias-label-primary); font-weight: 600; }
|
|
2376
|
+
|
|
2377
|
+
/* ---- 诊断 ------------------------------------------------------------- */
|
|
2378
|
+
|
|
2379
|
+
.rstr-diagnostics { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; }
|
|
2380
|
+
.rstr-diag {
|
|
2381
|
+
display: flex;
|
|
2382
|
+
gap: 10px;
|
|
2383
|
+
align-items: baseline;
|
|
2384
|
+
flex-wrap: wrap;
|
|
2385
|
+
font-size: 12px;
|
|
2386
|
+
padding: 7px 0 7px 10px;
|
|
2387
|
+
border-left: 2px solid var(--dsw-alias-border-l3);
|
|
2388
|
+
color: var(--dsw-alias-label-primary);
|
|
2389
|
+
}
|
|
2390
|
+
.rstr-diag-error { border-left-color: var(--dsw-alias-state-error-primary); }
|
|
2391
|
+
.rstr-diag-warn { border-left-color: var(--dsw-alias-state-warn-primary); }
|
|
2392
|
+
.rstr-diag-reason { color: var(--dsw-alias-label-primary); }
|
|
2393
|
+
.rstr-diag code.rstr-code { font-size: 11px; }
|
|
2394
|
+
|
|
2395
|
+
/* ---- 档案源 ----------------------------------------------------------- */
|
|
2396
|
+
|
|
2397
|
+
.rstr-sources { display: flex; flex-direction: column; gap: 0; border-top: 1px solid var(--dsw-alias-border-l2); }
|
|
2398
|
+
.rstr-sources-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; margin-bottom: 12px; }
|
|
2399
|
+
.rstr-source-detail {
|
|
2400
|
+
display: flex;
|
|
2401
|
+
flex-direction: column;
|
|
2402
|
+
gap: 2px;
|
|
2403
|
+
min-width: 0;
|
|
2404
|
+
max-height: 320px;
|
|
2405
|
+
overflow-y: auto;
|
|
2406
|
+
overflow-x: hidden;
|
|
2407
|
+
padding: 6px 0 10px 15px;
|
|
2408
|
+
border-bottom: 1px solid var(--dsw-alias-border-l1);
|
|
2409
|
+
}
|
|
2410
|
+
.rstr-source-roster { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; min-width: 0; font-size: 12px; padding: 3px 0; }
|
|
2411
|
+
.rstr-source-roster > .rstr-muted { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
2412
|
+
|
|
2413
|
+
/* ---- 通用件 ----------------------------------------------------------- */
|
|
2414
|
+
|
|
2070
2415
|
.rstr-muted { color: var(--dsw-alias-label-secondary); margin: 0; }
|
|
2071
2416
|
.rstr-small { font-size: 12px; }
|
|
2072
2417
|
.rstr-mono, .rstr-code, code { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; }
|
|
2073
2418
|
.rstr-code { font-size: 12px; color: var(--dsw-alias-label-secondary); }
|
|
2074
2419
|
.rstr-code-strong { font-size: 13px; color: var(--dsw-alias-label-primary); font-weight: 600; }
|
|
2075
2420
|
.rstr-truncate { display: inline-block; max-width: 420px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; vertical-align: bottom; }
|
|
2076
|
-
.rstr-
|
|
2077
|
-
.rstr-
|
|
2078
|
-
.rstr-
|
|
2079
|
-
.rstr-
|
|
2080
|
-
.rstr-
|
|
2081
|
-
.rstr-
|
|
2082
|
-
.rstr-
|
|
2083
|
-
.rstr-
|
|
2084
|
-
|
|
2085
|
-
.rstr-btn {
|
|
2421
|
+
.rstr-ok { color: color-mix(in srgb, var(--dsw-alias-state-success-primary) 62%, var(--dsw-alias-label-primary)); }
|
|
2422
|
+
.rstr-bad { color: color-mix(in srgb, var(--dsw-alias-state-error-primary) 80%, var(--dsw-alias-label-primary)); }
|
|
2423
|
+
.rstr-label { font-size: 12px; font-weight: 600; color: var(--dsw-alias-label-secondary); }
|
|
2424
|
+
.rstr-hint { font-size: 12px; color: var(--dsw-alias-label-secondary); margin: 0; }
|
|
2425
|
+
.rstr-hint-warn { color: color-mix(in srgb, var(--dsw-alias-state-warn-label) 75%, var(--dsw-alias-label-primary)); }
|
|
2426
|
+
.rstr-section-title { font-size: 12px; font-weight: 600; color: var(--dsw-alias-label-secondary); }
|
|
2427
|
+
.rstr-mt { margin-top: 6px; }
|
|
2428
|
+
.rstr-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 10px; }
|
|
2429
|
+
|
|
2430
|
+
.rstr-btn {
|
|
2431
|
+
border: 1px solid var(--dsw-alias-border-l3);
|
|
2432
|
+
background: transparent;
|
|
2433
|
+
color: var(--dsw-alias-label-primary);
|
|
2434
|
+
border-radius: 6px;
|
|
2435
|
+
padding: 5px 11px;
|
|
2436
|
+
font-size: 12px;
|
|
2437
|
+
font-family: inherit;
|
|
2438
|
+
cursor: pointer;
|
|
2439
|
+
transition: background .12s ease, border-color .12s ease;
|
|
2440
|
+
}
|
|
2086
2441
|
.rstr-btn:hover:not(:disabled) { background: var(--dsw-alias-interactive-bg-hover); }
|
|
2087
2442
|
.rstr-btn:focus-visible { outline: 2px solid var(--dsw-alias-state-business-primary); outline-offset: 1px; }
|
|
2088
2443
|
.rstr-btn:disabled { opacity: .5; cursor: not-allowed; }
|
|
2089
2444
|
.rstr-btn-primary { background: var(--dsw-alias-button-primary-fill); border-color: var(--dsw-alias-button-primary-fill); color: var(--dsw-alias-label-primary-inverted); }
|
|
2090
2445
|
.rstr-btn-primary:hover:not(:disabled) { background: var(--dsw-alias-button-primary-hover); border-color: var(--dsw-alias-button-primary-hover); }
|
|
2091
|
-
.rstr-btn-danger { color: color-mix(in srgb, var(--dsw-alias-state-error-primary) 72%, var(--dsw-alias-label-primary));
|
|
2092
|
-
.rstr-btn-danger:hover:not(:disabled) { background: color-mix(in srgb, var(--dsw-alias-state-error-primary)
|
|
2093
|
-
.rstr-btn-
|
|
2094
|
-
.rstr-btn-
|
|
2446
|
+
.rstr-btn-danger { color: color-mix(in srgb, var(--dsw-alias-state-error-primary) 72%, var(--dsw-alias-label-primary)); }
|
|
2447
|
+
.rstr-btn-danger:hover:not(:disabled) { background: color-mix(in srgb, var(--dsw-alias-state-error-primary) 12%, transparent); border-color: color-mix(in srgb, var(--dsw-alias-state-error-primary) 45%, transparent); }
|
|
2448
|
+
.rstr-btn-quiet { border-color: transparent; color: var(--dsw-alias-label-secondary); }
|
|
2449
|
+
.rstr-btn-quiet:hover:not(:disabled) { color: var(--dsw-alias-label-primary); }
|
|
2450
|
+
.rstr-btn-sm { padding: 3px 9px; font-size: 11px; }
|
|
2095
2451
|
.rstr-btn-dashed { width: 100%; border-style: dashed; margin-top: 8px; }
|
|
2096
|
-
.rstr-
|
|
2452
|
+
.rstr-caret { display: inline-block; margin-left: 6px; font-size: 9px; opacity: .7; }
|
|
2453
|
+
.rstr-icon-btn { border: none; background: transparent; font-size: 18px; line-height: 1; cursor: pointer; color: var(--dsw-alias-label-secondary); padding: 4px 8px; border-radius: 4px; }
|
|
2097
2454
|
.rstr-icon-btn:hover { background: var(--dsw-alias-interactive-bg-hover); }
|
|
2098
|
-
|
|
2099
|
-
.rstr-
|
|
2455
|
+
.rstr-settings-btn { display: inline-flex; align-items: center; gap: 6px; }
|
|
2456
|
+
.rstr-settings-glyph { font-size: 13px; line-height: 1; }
|
|
2457
|
+
|
|
2458
|
+
.rstr-input {
|
|
2459
|
+
width: 100%;
|
|
2460
|
+
box-sizing: border-box;
|
|
2461
|
+
border: 1px solid var(--dsw-alias-border-l3);
|
|
2462
|
+
background: var(--dsw-alias-bg-layer-1);
|
|
2463
|
+
color: var(--dsw-alias-label-primary);
|
|
2464
|
+
border-radius: 6px;
|
|
2465
|
+
padding: 6px 10px;
|
|
2466
|
+
font-size: 12px;
|
|
2467
|
+
font-family: inherit;
|
|
2468
|
+
}
|
|
2100
2469
|
.rstr-input::placeholder { color: var(--dsw-alias-label-secondary); }
|
|
2101
2470
|
.rstr-input:focus-visible { outline: 2px solid var(--dsw-alias-state-business-primary); outline-offset: 1px; }
|
|
2102
2471
|
.rstr-textarea { resize: vertical; line-height: 1.5; }
|
|
2103
2472
|
.rstr-textarea.rstr-mono { font-size: 12px; }
|
|
2104
|
-
.rstr-
|
|
2105
|
-
|
|
2106
|
-
.rstr-
|
|
2107
|
-
|
|
2108
|
-
.rstr-
|
|
2109
|
-
.rstr-
|
|
2110
|
-
.rstr-
|
|
2111
|
-
.rstr-
|
|
2112
|
-
.rstr-
|
|
2113
|
-
|
|
2114
|
-
|
|
2115
|
-
|
|
2116
|
-
|
|
2117
|
-
.rstr-
|
|
2118
|
-
.rstr-
|
|
2119
|
-
.rstr-
|
|
2120
|
-
.rstr-
|
|
2121
|
-
.rstr-tag:focus-visible { outline: 2px solid var(--dsw-alias-state-business-primary); outline-offset: 1px; }
|
|
2122
|
-
.rstr-tag-on { background: var(--dsw-alias-button-ghost-active-fill); border-color: var(--dsw-alias-border-l3); color: var(--dsw-alias-label-primary); font-weight: 600; }
|
|
2123
|
-
.rstr-tag-name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
2124
|
-
.rstr-tag-count { font-size: 11px; color: var(--dsw-alias-label-secondary); font-variant-numeric: tabular-nums; }
|
|
2125
|
-
.rstr-tag-clear { align-self: flex-start; }
|
|
2126
|
-
.rstr-cards { display: grid; gap: 12px; grid-template-columns: repeat(auto-fill, minmax(min(380px, 100%), 1fr)); align-items: start; }
|
|
2127
|
-
.rstr-card { min-width: 0; border: 1px solid var(--dsw-alias-border-l2); border-radius: 12px; padding: 14px 16px; background: var(--dsw-alias-bg-layer-1); color: var(--dsw-alias-label-primary); display: flex; flex-direction: column; gap: 10px; }
|
|
2128
|
-
.rstr-card-bad { border-color: color-mix(in srgb, var(--dsw-alias-state-error-primary) 50%, transparent); }
|
|
2129
|
-
.rstr-card-id { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
|
|
2130
|
-
.rstr-card-title { margin: 4px 0 2px; font-size: 15px; font-weight: 600; color: var(--dsw-alias-label-primary); }
|
|
2131
|
-
.rstr-card-meta { display: flex; gap: 12px; flex-wrap: wrap; font-size: 12px; color: var(--dsw-alias-label-secondary); }
|
|
2132
|
-
.rstr-card-actions { display: flex; gap: 6px; flex-wrap: wrap; }
|
|
2133
|
-
.rstr-sources { display: flex; flex-direction: column; gap: 10px; }
|
|
2134
|
-
.rstr-source-detail { display: flex; flex-direction: column; gap: 6px; min-width: 0; max-height: 340px; overflow-y: auto; overflow-x: hidden; border-top: 1px dashed var(--dsw-alias-border-l1); padding-top: 8px; }
|
|
2135
|
-
.rstr-source-roster { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; min-width: 0; font-size: 12px; }
|
|
2136
|
-
.rstr-source-roster > .rstr-muted { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
2137
|
-
.rstr-ok { color: var(--dsw-alias-label-secondary); font-weight: 600; }
|
|
2138
|
-
|
|
2139
|
-
.rstr-chip { font-size: 11px; padding: 1px 7px; border-radius: 999px; background: var(--dsw-alias-button-ghost-active-fill); color: var(--dsw-alias-label-secondary); }
|
|
2140
|
-
.rstr-chip-policy { background: var(--dsw-alias-state-business-tertiary); color: var(--dsw-alias-label-primary); border: 1px solid color-mix(in srgb, var(--dsw-alias-state-business-primary) 40%, transparent); }
|
|
2141
|
-
.rstr-badge { font-size: 11px; padding: 1px 7px; border-radius: 6px; border: 1px solid transparent; color: var(--dsw-alias-label-primary); }
|
|
2142
|
-
.rstr-badge-error { background: color-mix(in srgb, var(--dsw-alias-state-error-primary) 16%, transparent); border-color: color-mix(in srgb, var(--dsw-alias-state-error-primary) 45%, transparent); }
|
|
2143
|
-
.rstr-badge-warn { background: var(--dsw-alias-state-warn-tertiary); border-color: color-mix(in srgb, var(--dsw-alias-state-warn-primary) 45%, transparent); }
|
|
2144
|
-
.rstr-badge-ok { background: var(--dsw-alias-state-success-tertiary); border-color: color-mix(in srgb, var(--dsw-alias-state-success-primary) 45%, transparent); }
|
|
2145
|
-
.rstr-badge-info, .rstr-badge-muted { background: var(--dsw-alias-button-ghost-active-fill); color: var(--dsw-alias-label-secondary); }
|
|
2146
|
-
|
|
2147
|
-
.rstr-members { display: flex; flex-direction: column; gap: 8px; border-top: 1px dashed var(--dsw-alias-border-l1); padding-top: 10px; }
|
|
2148
|
-
.rstr-member { padding: 8px 10px; border-radius: 8px; background: var(--dsw-alias-markdown-code-block); color: var(--dsw-alias-label-primary); }
|
|
2149
|
-
.rstr-member-head { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
|
|
2150
|
-
.rstr-member-meta { display: flex; gap: 10px; flex-wrap: wrap; font-size: 12px; color: var(--dsw-alias-label-secondary); margin-top: 4px; }
|
|
2151
|
-
.rstr-drift { margin: 4px 0 0; padding-left: 18px; font-size: 12px; color: color-mix(in srgb, var(--dsw-alias-state-warn-label) 72%, var(--dsw-alias-label-primary)); }
|
|
2152
|
-
|
|
2153
|
-
.rstr-empty { border: 1px dashed var(--dsw-alias-border-l3); border-radius: 12px; padding: 32px 24px; text-align: center; display: flex; flex-direction: column; gap: 8px; align-items: center; color: var(--dsw-alias-label-primary); }
|
|
2154
|
-
.rstr-empty-title { margin: 0; font-size: 15px; font-weight: 600; color: var(--dsw-alias-label-primary); }
|
|
2155
|
-
|
|
2156
|
-
.rstr-health { display: flex; flex-direction: column; gap: 14px; }
|
|
2157
|
-
.rstr-config { display: flex; flex-direction: column; gap: 6px; padding: 12px 14px; border-radius: 10px; background: var(--dsw-alias-markdown-code-block); color: var(--dsw-alias-label-primary); }
|
|
2473
|
+
.rstr-select { background: var(--dsw-alias-bg-layer-2); color: var(--dsw-alias-label-primary); border: 1px solid var(--dsw-alias-border-l3); border-radius: 6px; padding: 5px 8px; font-size: 12px; max-width: 320px; }
|
|
2474
|
+
|
|
2475
|
+
.rstr-chip { font-size: 11px; padding: 0 6px; border-radius: 4px; background: var(--dsw-alias-markdown-tag); color: var(--dsw-alias-label-secondary); font-variant-numeric: tabular-nums; }
|
|
2476
|
+
.rstr-chip-policy { color: var(--dsw-alias-label-secondary); background: color-mix(in srgb, var(--dsw-alias-state-business-primary) 9%, transparent); }
|
|
2477
|
+
.rstr-badge { font-size: 11px; padding: 0 6px; border-radius: 4px; font-weight: 600; }
|
|
2478
|
+
.rstr-badge-error { background: color-mix(in srgb, var(--dsw-alias-state-error-primary) 14%, transparent); color: color-mix(in srgb, var(--dsw-alias-state-error-primary) 80%, var(--dsw-alias-label-primary)); }
|
|
2479
|
+
.rstr-badge-warn { background: color-mix(in srgb, var(--dsw-alias-state-warn-primary) 16%, transparent); color: color-mix(in srgb, var(--dsw-alias-state-warn-label) 85%, var(--dsw-alias-label-primary)); }
|
|
2480
|
+
.rstr-badge-ok { background: color-mix(in srgb, var(--dsw-alias-state-success-primary) 14%, transparent); color: color-mix(in srgb, var(--dsw-alias-state-success-primary) 62%, var(--dsw-alias-label-primary)); }
|
|
2481
|
+
.rstr-badge-info, .rstr-badge-muted { background: var(--dsw-alias-markdown-tag); color: var(--dsw-alias-label-secondary); }
|
|
2482
|
+
.rstr-drift { margin: 4px 0 0; padding-left: 16px; font-size: 12px; color: color-mix(in srgb, var(--dsw-alias-state-warn-label) 72%, var(--dsw-alias-label-primary)); }
|
|
2483
|
+
|
|
2484
|
+
/* ---- 空态 / 健康 / 页脚 ------------------------------------------------ */
|
|
2485
|
+
|
|
2486
|
+
.rstr-empty { display: flex; flex-direction: column; gap: 6px; align-items: flex-start; padding: 40px 2px; color: var(--dsw-alias-label-primary); }
|
|
2487
|
+
.rstr-empty-title { margin: 0; font-size: 15px; font-weight: 600; }
|
|
2488
|
+
.rstr-health { display: flex; flex-direction: column; gap: 14px; padding: 16px 28px 28px; }
|
|
2489
|
+
.rstr-config { display: flex; flex-direction: column; gap: 4px; padding: 12px 14px; background: var(--dsw-alias-bg-layer-2); }
|
|
2158
2490
|
.rstr-config-row { display: flex; gap: 12px; align-items: baseline; }
|
|
2159
|
-
.rstr-config-row .rstr-label { min-width:
|
|
2160
|
-
.rstr-hint-cards { display: grid; gap:
|
|
2161
|
-
.rstr-hint-card {
|
|
2162
|
-
.rstr-hint-card-head { display: flex; gap: 8px; align-items: center; margin-bottom:
|
|
2491
|
+
.rstr-config-row .rstr-label { min-width: 150px; }
|
|
2492
|
+
.rstr-hint-cards { display: grid; gap: 0; border-top: 1px solid var(--dsw-alias-border-l2); }
|
|
2493
|
+
.rstr-hint-card { padding: 10px 2px; border-bottom: 1px solid var(--dsw-alias-border-l1); }
|
|
2494
|
+
.rstr-hint-card-head { display: flex; gap: 8px; align-items: center; margin-bottom: 2px; }
|
|
2495
|
+
.rstr-settings { display: flex; flex-direction: column; gap: 10px; }
|
|
2496
|
+
.rstr-settings-title { margin: 0; font-size: 13px; font-weight: 600; }
|
|
2497
|
+
.rstr-settings-row { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
|
|
2498
|
+
.rstr-settings-row .rstr-label { min-width: 110px; }
|
|
2499
|
+
.rstr-settings-field { display: flex; flex-direction: column; gap: 6px; }
|
|
2500
|
+
.rstr-settings-inline { display: flex; align-items: center; gap: 8px; }
|
|
2501
|
+
.rstr-settings-inline .rstr-input { flex: 1 1 auto; min-width: 0; }
|
|
2163
2502
|
|
|
2164
|
-
.rstr-
|
|
2165
|
-
|
|
2166
|
-
|
|
2503
|
+
.rstr-foot {
|
|
2504
|
+
display: flex;
|
|
2505
|
+
justify-content: space-between;
|
|
2506
|
+
gap: 12px;
|
|
2507
|
+
padding: 12px 28px 16px;
|
|
2508
|
+
margin-top: auto;
|
|
2509
|
+
border-top: 1px solid var(--dsw-alias-border-l1);
|
|
2510
|
+
color: var(--dsw-alias-label-secondary);
|
|
2511
|
+
font-size: 11px;
|
|
2512
|
+
font-variant-numeric: tabular-nums;
|
|
2513
|
+
}
|
|
2514
|
+
|
|
2515
|
+
/* ---- 弹窗 / 编辑器 ---------------------------------------------------- */
|
|
2167
2516
|
|
|
2168
2517
|
.rstr-overlay { position: fixed; inset: 0; background: var(--dsw-alias-bg-mask-3); display: flex; align-items: flex-start; justify-content: center; padding: 5vh 16px; z-index: 1000; overflow: auto; }
|
|
2169
|
-
.rstr-modal { background: var(--dsw-alias-bg-layer-1); color: var(--dsw-alias-label-primary); border: 1px solid var(--dsw-alias-border-l2); border-radius:
|
|
2518
|
+
.rstr-modal { background: var(--dsw-alias-bg-layer-1); color: var(--dsw-alias-label-primary); border: 1px solid var(--dsw-alias-border-l2); border-radius: 8px; width: 640px; max-width: 100%; box-shadow: 0 24px 64px var(--dsw-alias-bg-mask-1); display: flex; flex-direction: column; max-height: 90vh; }
|
|
2170
2519
|
.rstr-modal-head { display: flex; align-items: center; justify-content: space-between; padding: 14px 18px; border-bottom: 1px solid var(--dsw-alias-border-l1); }
|
|
2171
|
-
.rstr-modal-title { margin: 0; font-size:
|
|
2520
|
+
.rstr-modal-title { margin: 0; font-size: 14px; font-weight: 600; }
|
|
2172
2521
|
.rstr-modal-body { padding: 16px 18px; overflow: auto; display: flex; flex-direction: column; gap: 12px; }
|
|
2173
2522
|
.rstr-modal-foot { padding: 12px 18px; border-top: 1px solid var(--dsw-alias-border-l1); display: flex; justify-content: flex-end; gap: 8px; }
|
|
2174
2523
|
.rstr-modal-foot-actions { display: flex; gap: 8px; }
|
|
2175
|
-
|
|
2176
2524
|
.rstr-field { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
|
|
2177
|
-
.rstr-label { font-size: 12px; font-weight: 600; color: var(--dsw-alias-label-secondary); }
|
|
2178
|
-
.rstr-hint { font-size: 12px; color: var(--dsw-alias-label-secondary); margin: 0; }
|
|
2179
|
-
.rstr-hint-warn { color: color-mix(in srgb, var(--dsw-alias-state-warn-label) 70%, var(--dsw-alias-label-primary)); }
|
|
2180
|
-
.rstr-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 10px; }
|
|
2181
|
-
.rstr-section-title { font-size: 13px; font-weight: 600; color: var(--dsw-alias-label-primary); }
|
|
2182
|
-
.rstr-mt { margin-top: 6px; }
|
|
2183
|
-
|
|
2184
2525
|
.rstr-editor-toolbar { display: flex; align-items: center; justify-content: space-between; gap: 10px; }
|
|
2185
2526
|
.rstr-editor-toolbar .rstr-input { width: 110px; }
|
|
2186
|
-
.rstr-
|
|
2187
|
-
.rstr-meta-grid { display: grid; grid-template-columns: auto repeat(4, minmax(0, auto)); gap: 6px 12px; align-items: baseline; font-size: 12px; }
|
|
2188
|
-
.rstr-checks { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 4px; }
|
|
2189
|
-
.rstr-check { display: flex; justify-content: space-between; gap: 12px; font-size: 12px; border-bottom: 1px solid var(--dsw-alias-border-l1); padding-bottom: 3px; }
|
|
2190
|
-
.rstr-apply { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; }
|
|
2191
|
-
.rstr-select { background: var(--dsw-alias-bg-l2); color: var(--dsw-alias-label-primary); border: 1px solid var(--dsw-alias-border-l3); border-radius: 8px; padding: 5px 8px; font-size: 12px; max-width: 320px; }
|
|
2192
|
-
.rstr-bad { color: var(--dsw-alias-state-error-primary); }
|
|
2193
|
-
.rstr-segmented { display: inline-flex; border: 1px solid var(--dsw-alias-border-l3); border-radius: 8px; overflow: hidden; }
|
|
2194
|
-
.rstr-seg { border: none; background: transparent; padding: 5px 12px; font-size: 12px; cursor: pointer; color: var(--dsw-alias-label-secondary); }
|
|
2195
|
-
.rstr-seg:hover { background: var(--dsw-alias-interactive-bg-hover); }
|
|
2196
|
-
.rstr-seg-on { background: var(--dsw-alias-state-business-tertiary); color: var(--dsw-alias-label-primary); font-weight: 600; box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--dsw-alias-state-business-primary) 45%, transparent); }
|
|
2197
|
-
|
|
2198
|
-
.rstr-member-editor { border: 1px solid var(--dsw-alias-border-l2); border-radius: 10px; padding: 10px 12px; display: flex; flex-direction: column; gap: 8px; color: var(--dsw-alias-label-primary); }
|
|
2527
|
+
.rstr-member-editor { border: 1px solid var(--dsw-alias-border-l2); border-radius: 6px; padding: 10px 12px; display: flex; flex-direction: column; gap: 8px; }
|
|
2199
2528
|
.rstr-member-editor-head { display: flex; align-items: center; gap: 8px; }
|
|
2200
2529
|
.rstr-member-editor-head .rstr-input { width: 180px; }
|
|
2201
|
-
.rstr-step { width:
|
|
2202
|
-
|
|
2203
|
-
.rstr-error {
|
|
2204
|
-
.rstr-
|
|
2205
|
-
.rstr-
|
|
2206
|
-
|
|
2207
|
-
|
|
2208
|
-
|
|
2209
|
-
|
|
2210
|
-
|
|
2211
|
-
.rstr-
|
|
2212
|
-
.rstr-
|
|
2213
|
-
.rstr-
|
|
2214
|
-
|
|
2215
|
-
|
|
2530
|
+
.rstr-step { width: 18px; height: 18px; border: 1px solid var(--dsw-alias-border-l3); font-size: 10px; display: inline-flex; align-items: center; justify-content: center; color: var(--dsw-alias-label-secondary); font-variant-numeric: tabular-nums; }
|
|
2531
|
+
.rstr-error { border-left: 3px solid var(--dsw-alias-state-error-primary); background: color-mix(in srgb, var(--dsw-alias-state-error-primary) 8%, transparent); padding: 10px 12px; display: flex; flex-direction: column; gap: 6px; }
|
|
2532
|
+
.rstr-error-title { margin: 0; font-weight: 600; color: color-mix(in srgb, var(--dsw-alias-state-error-primary) 78%, var(--dsw-alias-label-primary)); }
|
|
2533
|
+
.rstr-confirm { border-left: 3px solid var(--dsw-alias-state-warn-primary); background: color-mix(in srgb, var(--dsw-alias-state-warn-primary) 8%, transparent); padding: 10px 12px; display: flex; flex-direction: column; gap: 8px; align-items: flex-start; }
|
|
2534
|
+
.rstr-toast { position: fixed; bottom: 24px; left: 50%; transform: translateX(-50%); background: var(--dsw-alias-toast-bg); color: var(--dsw-alias-toast-label); padding: 8px 16px; border-radius: 4px; font-size: 12px; z-index: 1100; }
|
|
2535
|
+
|
|
2536
|
+
/* ---- 窄面板 ----------------------------------------------------------- */
|
|
2537
|
+
|
|
2538
|
+
@media (max-width: 860px) {
|
|
2539
|
+
.rstr-head, .rstr-tabs, .rstr-rosters-main, .rstr-health, .rstr-foot { padding-left: 18px; padding-right: 18px; }
|
|
2540
|
+
.rstr-banner { margin-left: 18px; margin-right: 18px; }
|
|
2541
|
+
.rstr-rosters { grid-template-columns: minmax(0, 1fr); }
|
|
2542
|
+
.rstr-tagpool {
|
|
2543
|
+
position: static;
|
|
2544
|
+
flex-direction: row;
|
|
2545
|
+
flex-wrap: wrap;
|
|
2546
|
+
align-items: center;
|
|
2547
|
+
gap: 6px;
|
|
2548
|
+
padding: 10px 18px;
|
|
2549
|
+
border-right: none;
|
|
2550
|
+
border-bottom: 1px solid var(--dsw-alias-border-l1);
|
|
2551
|
+
}
|
|
2552
|
+
.rstr-tagpool-title { display: none; }
|
|
2553
|
+
.rstr-tagpool-list { flex-direction: row; flex-wrap: wrap; gap: 4px; min-width: 0; }
|
|
2554
|
+
.rstr-tag { border-left: none; border-bottom: 2px solid transparent; border-radius: 0; white-space: nowrap; }
|
|
2555
|
+
.rstr-tag-on { border-left: none; border-bottom-color: var(--dsw-alias-state-business-primary); background: transparent; }
|
|
2556
|
+
.rstr-tag-clear { margin-top: 0; flex: 0 0 auto; }
|
|
2557
|
+
.rstr-row-body { grid-template-columns: minmax(0, 1fr) auto; }
|
|
2558
|
+
.rstr-row-id { grid-column: 1; }
|
|
2559
|
+
.rstr-row-text { grid-column: 1; }
|
|
2560
|
+
.rstr-row-stats { grid-column: 1; }
|
|
2561
|
+
.rstr-row-actions { grid-column: 2; grid-row: 1; align-self: start; }
|
|
2562
|
+
.rstr-member { grid-template-columns: minmax(0, 1fr); gap: 2px; }
|
|
2563
|
+
.rstr-member-meta { justify-self: start; }
|
|
2564
|
+
}
|
|
2216
2565
|
`;
|
|
2217
2566
|
|
|
2218
2567
|
function ensureStyle() {
|
package/lib/library.js
CHANGED
|
@@ -58,6 +58,11 @@ export function collectLibrary(ctx, config, meta) {
|
|
|
58
58
|
missing: scan.missing === true,
|
|
59
59
|
stats: scan.stats,
|
|
60
60
|
rosters: scan.rosters.map((roster) => serializeRoster(roster, scan.diagnostics)),
|
|
61
|
+
// 面板抬头要显示"这份库属于哪个组织",只给 id 与标题,不带成员细节。
|
|
62
|
+
organization:
|
|
63
|
+
scan.organization === null || scan.organization === undefined
|
|
64
|
+
? null
|
|
65
|
+
: { id: scan.organization.organization, title: scan.organization.title ?? "" },
|
|
61
66
|
diagnostics: scan.diagnostics,
|
|
62
67
|
});
|
|
63
68
|
}
|
package/locale/en.json
CHANGED
|
@@ -60,7 +60,11 @@
|
|
|
60
60
|
"tagPool": "Tags",
|
|
61
61
|
"tagPoolEmpty": "No tags yet — add `tags:` to an archive.",
|
|
62
62
|
"tagClear": "Clear tags",
|
|
63
|
-
"settings": "Settings"
|
|
63
|
+
"settings": "Settings",
|
|
64
|
+
"metaRosters": "rosters",
|
|
65
|
+
"metaMembers": "members",
|
|
66
|
+
"metaTeams": "teams",
|
|
67
|
+
"metaOrganization": "Organization {name}"
|
|
64
68
|
},
|
|
65
69
|
"roster": {
|
|
66
70
|
"members": "{count} members",
|
|
@@ -79,7 +83,9 @@
|
|
|
79
83
|
"noMembers": "This roster has no members.",
|
|
80
84
|
"diagnostics": "{count} findings",
|
|
81
85
|
"showMembers": "Show members",
|
|
82
|
-
"hideMembers": "Hide members"
|
|
86
|
+
"hideMembers": "Hide members",
|
|
87
|
+
"warnings": "{count} warnings",
|
|
88
|
+
"deployedDrifted": "In {teams} ({count} drifted)"
|
|
83
89
|
},
|
|
84
90
|
"member": {
|
|
85
91
|
"prompt": "Prompt",
|
|
@@ -109,7 +115,10 @@
|
|
|
109
115
|
"faithful": "Matches the roster",
|
|
110
116
|
"drift": "Differs from the roster",
|
|
111
117
|
"promptChars": "{count} prompt characters",
|
|
112
|
-
"driftDetail": "{field}: roster {wanted}, runtime {actual}"
|
|
118
|
+
"driftDetail": "{field}: roster {wanted}, runtime {actual}",
|
|
119
|
+
"showMembers": "Show members",
|
|
120
|
+
"hideMembers": "Hide members",
|
|
121
|
+
"taskCount": "{count} tasks"
|
|
113
122
|
},
|
|
114
123
|
"editor": {
|
|
115
124
|
"createTitle": "New roster",
|
package/locale/zh.json
CHANGED
|
@@ -60,7 +60,11 @@
|
|
|
60
60
|
"tagPool": "标签",
|
|
61
61
|
"tagPoolEmpty": "还没有标签——给档案加 `tags:`。",
|
|
62
62
|
"tagClear": "清除标签",
|
|
63
|
-
"settings": "设置"
|
|
63
|
+
"settings": "设置",
|
|
64
|
+
"metaRosters": "份档案",
|
|
65
|
+
"metaMembers": "名成员",
|
|
66
|
+
"metaTeams": "支团队",
|
|
67
|
+
"metaOrganization": "组织 {name}"
|
|
64
68
|
},
|
|
65
69
|
"roster": {
|
|
66
70
|
"members": "{count} 名成员",
|
|
@@ -79,7 +83,9 @@
|
|
|
79
83
|
"noMembers": "这份档案没有成员。",
|
|
80
84
|
"diagnostics": "{count} 条发现",
|
|
81
85
|
"showMembers": "展开成员",
|
|
82
|
-
"hideMembers": "收起成员"
|
|
86
|
+
"hideMembers": "收起成员",
|
|
87
|
+
"warnings": "{count} 条提醒",
|
|
88
|
+
"deployedDrifted": "在 {teams}({count} 处不一致)"
|
|
83
89
|
},
|
|
84
90
|
"member": {
|
|
85
91
|
"prompt": "人设",
|
|
@@ -109,7 +115,10 @@
|
|
|
109
115
|
"faithful": "与档案一致",
|
|
110
116
|
"drift": "与档案不一致",
|
|
111
117
|
"promptChars": "{count} 字人设",
|
|
112
|
-
"driftDetail": "{field}:档案 {wanted},运行时 {actual}"
|
|
118
|
+
"driftDetail": "{field}:档案 {wanted},运行时 {actual}",
|
|
119
|
+
"showMembers": "展开成员",
|
|
120
|
+
"hideMembers": "收起成员",
|
|
121
|
+
"taskCount": "{count} 个任务"
|
|
113
122
|
},
|
|
114
123
|
"editor": {
|
|
115
124
|
"createTitle": "新建档案",
|
package/package.json
CHANGED