koishi-plugin-rocom 1.0.6 → 1.0.7
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/lib/client.d.ts +4 -0
- package/lib/client.js +56 -1
- package/lib/commands/merchant.js +1 -1
- package/lib/commands/query.js +649 -13
- package/lib/render-templates/pet-panel/index.html +61 -0
- package/lib/render-templates/pet-panel/style.css +183 -0
- package/lib/render-templates/pet-panel-detail/index.html +123 -0
- package/lib/render-templates/pet-panel-detail/style.css +258 -0
- package/lib/render.d.ts +3 -3
- package/lib/render.js +33 -14
- package/package.json +1 -1
- package/readme.md +50 -518
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="zh-CN">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8">
|
|
5
|
+
<meta name="viewport" content="width=1240, initial-scale=1">
|
|
6
|
+
<link rel="stylesheet" href="{{_res_path}}render/pet-panel/style.css">
|
|
7
|
+
<title>{{title}}</title>
|
|
8
|
+
</head>
|
|
9
|
+
<body>
|
|
10
|
+
<div class="pet-panel-page">
|
|
11
|
+
<header class="panel-header">
|
|
12
|
+
<div>
|
|
13
|
+
<h1>{{title}}</h1>
|
|
14
|
+
<p class="subtitle">{{subtitle}}</p>
|
|
15
|
+
</div>
|
|
16
|
+
<div class="meta-box">
|
|
17
|
+
<div class="meta-label">最近刷新</div>
|
|
18
|
+
<div class="meta-value">{{updatedAtText}}</div>
|
|
19
|
+
</div>
|
|
20
|
+
</header>
|
|
21
|
+
|
|
22
|
+
<section class="pet-grid {{if !cards || cards.length === 0}}is-empty{{/if}}">
|
|
23
|
+
{{if cards && cards.length > 0}}
|
|
24
|
+
{{each cards card}}
|
|
25
|
+
<article class="pet-card">
|
|
26
|
+
<div class="card-top">
|
|
27
|
+
<div class="type-icons">
|
|
28
|
+
{{if card.elementIcons && card.elementIcons.length > 0}}
|
|
29
|
+
{{each card.elementIcons icon}}
|
|
30
|
+
<img class="type-icon" src="{{icon}}" alt="" onerror="this.style.display='none'">
|
|
31
|
+
{{/each}}
|
|
32
|
+
{{/if}}
|
|
33
|
+
</div>
|
|
34
|
+
<span class="mutation">{{card.mutationLabel}}</span>
|
|
35
|
+
</div>
|
|
36
|
+
<div class="pet-avatar-wrap">
|
|
37
|
+
<img class="pet-avatar" src="{{card.iconUrl}}" alt="{{card.name}}" onerror="this.style.display='none'">
|
|
38
|
+
</div>
|
|
39
|
+
<div class="pet-name">{{card.name}}</div>
|
|
40
|
+
<div class="pet-meta">GID {{card.gid}} · Lv.{{card.level}}</div>
|
|
41
|
+
<div class="pet-meta light">{{card.bloodlineLabel}}</div>
|
|
42
|
+
<div class="type-row">
|
|
43
|
+
{{if card.elementLabels && card.elementLabels.length > 0}}
|
|
44
|
+
{{each card.elementLabels label}}
|
|
45
|
+
<span class="type-tag">{{label}}</span>
|
|
46
|
+
{{/each}}
|
|
47
|
+
{{else}}
|
|
48
|
+
<span class="type-tag">未知属性</span>
|
|
49
|
+
{{/if}}
|
|
50
|
+
</div>
|
|
51
|
+
</article>
|
|
52
|
+
{{/each}}
|
|
53
|
+
{{else}}
|
|
54
|
+
<div class="empty-text">当前没有可展示的精灵数据,请先执行刷新面板。</div>
|
|
55
|
+
{{/if}}
|
|
56
|
+
</section>
|
|
57
|
+
|
|
58
|
+
<footer class="footer-hint">{{commandHint}}</footer>
|
|
59
|
+
</div>
|
|
60
|
+
</body>
|
|
61
|
+
</html>
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
@font-face {
|
|
2
|
+
font-family: "pet-panel-font";
|
|
3
|
+
src: url("../../ttf/HYWenHei-85W-1.ttf") format("truetype");
|
|
4
|
+
font-display: swap;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
* {
|
|
8
|
+
box-sizing: border-box;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
html,
|
|
12
|
+
body {
|
|
13
|
+
margin: 0;
|
|
14
|
+
padding: 24px;
|
|
15
|
+
display: inline-block;
|
|
16
|
+
background: #f4ecdf;
|
|
17
|
+
color: #2f2318;
|
|
18
|
+
font-family: "pet-panel-font", "Microsoft YaHei", "PingFang SC", sans-serif;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.pet-panel-page {
|
|
22
|
+
width: 1240px;
|
|
23
|
+
border-radius: 24px;
|
|
24
|
+
padding: 28px;
|
|
25
|
+
background:
|
|
26
|
+
radial-gradient(circle at 10% 8%, rgba(255, 221, 150, 0.42), transparent 38%),
|
|
27
|
+
radial-gradient(circle at 94% 12%, rgba(255, 169, 99, 0.28), transparent 34%),
|
|
28
|
+
url("../../img/ercode-bg.D1ccSQKH.png") center/cover no-repeat;
|
|
29
|
+
border: 1px solid rgba(120, 84, 43, 0.16);
|
|
30
|
+
box-shadow: 0 20px 52px rgba(76, 55, 32, 0.16);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.panel-header {
|
|
34
|
+
display: flex;
|
|
35
|
+
align-items: flex-start;
|
|
36
|
+
justify-content: space-between;
|
|
37
|
+
gap: 20px;
|
|
38
|
+
margin-bottom: 22px;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
h1 {
|
|
42
|
+
margin: 0;
|
|
43
|
+
font-size: 44px;
|
|
44
|
+
line-height: 1.05;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
.subtitle {
|
|
48
|
+
margin: 8px 0 0;
|
|
49
|
+
color: #7b664c;
|
|
50
|
+
font-size: 20px;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.meta-box {
|
|
54
|
+
padding: 10px 14px;
|
|
55
|
+
border-radius: 14px;
|
|
56
|
+
background: rgba(255, 255, 255, 0.56);
|
|
57
|
+
border: 1px solid rgba(120, 84, 43, 0.16);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
.meta-label {
|
|
61
|
+
color: #8a745a;
|
|
62
|
+
font-size: 14px;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
.meta-value {
|
|
66
|
+
margin-top: 4px;
|
|
67
|
+
color: #2f2318;
|
|
68
|
+
font-size: 17px;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
.pet-grid {
|
|
72
|
+
display: grid;
|
|
73
|
+
grid-template-columns: repeat(5, minmax(0, 1fr));
|
|
74
|
+
gap: 14px;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
.pet-card {
|
|
78
|
+
border-radius: 18px;
|
|
79
|
+
padding: 12px;
|
|
80
|
+
min-height: 232px;
|
|
81
|
+
background: rgba(255, 255, 255, 0.68);
|
|
82
|
+
border: 1px solid rgba(120, 84, 43, 0.14);
|
|
83
|
+
box-shadow: 0 10px 20px rgba(96, 66, 30, 0.08);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
.card-top {
|
|
87
|
+
display: flex;
|
|
88
|
+
align-items: center;
|
|
89
|
+
justify-content: space-between;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
.type-icons {
|
|
93
|
+
display: flex;
|
|
94
|
+
gap: 4px;
|
|
95
|
+
min-height: 28px;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
.type-icon {
|
|
99
|
+
width: 28px;
|
|
100
|
+
height: 28px;
|
|
101
|
+
object-fit: contain;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
.mutation {
|
|
105
|
+
padding: 3px 9px;
|
|
106
|
+
border-radius: 999px;
|
|
107
|
+
background: rgba(255, 198, 95, 0.24);
|
|
108
|
+
color: #8f5f1f;
|
|
109
|
+
font-size: 13px;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
.pet-avatar-wrap {
|
|
113
|
+
margin-top: 8px;
|
|
114
|
+
height: 102px;
|
|
115
|
+
border-radius: 14px;
|
|
116
|
+
border: 1px dashed rgba(120, 84, 43, 0.2);
|
|
117
|
+
background: rgba(255, 244, 223, 0.6);
|
|
118
|
+
display: grid;
|
|
119
|
+
place-items: center;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
.pet-avatar {
|
|
123
|
+
width: 90px;
|
|
124
|
+
height: 90px;
|
|
125
|
+
object-fit: contain;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
.pet-name {
|
|
129
|
+
margin-top: 10px;
|
|
130
|
+
overflow: hidden;
|
|
131
|
+
text-overflow: ellipsis;
|
|
132
|
+
white-space: nowrap;
|
|
133
|
+
font-size: 24px;
|
|
134
|
+
color: #2f2318;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
.pet-meta {
|
|
138
|
+
margin-top: 4px;
|
|
139
|
+
color: #6f5c46;
|
|
140
|
+
font-size: 15px;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
.pet-meta.light {
|
|
144
|
+
color: #8d7a62;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
.type-row {
|
|
148
|
+
margin-top: 8px;
|
|
149
|
+
display: flex;
|
|
150
|
+
flex-wrap: wrap;
|
|
151
|
+
gap: 5px;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
.type-tag {
|
|
155
|
+
padding: 2px 8px;
|
|
156
|
+
border-radius: 999px;
|
|
157
|
+
background: rgba(255, 198, 95, 0.22);
|
|
158
|
+
color: #805f36;
|
|
159
|
+
font-size: 13px;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
.pet-grid.is-empty {
|
|
163
|
+
grid-template-columns: 1fr;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
.empty-text {
|
|
167
|
+
min-height: 200px;
|
|
168
|
+
border-radius: 18px;
|
|
169
|
+
border: 1px dashed rgba(120, 84, 43, 0.22);
|
|
170
|
+
background: rgba(255, 255, 255, 0.44);
|
|
171
|
+
display: grid;
|
|
172
|
+
place-items: center;
|
|
173
|
+
color: #7f6d57;
|
|
174
|
+
font-size: 22px;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
.footer-hint {
|
|
178
|
+
margin-top: 18px;
|
|
179
|
+
padding-top: 14px;
|
|
180
|
+
border-top: 1px solid rgba(120, 84, 43, 0.14);
|
|
181
|
+
color: #7d6a53;
|
|
182
|
+
font-size: 17px;
|
|
183
|
+
}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="zh-CN">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8">
|
|
5
|
+
<meta name="viewport" content="width=1280, initial-scale=1">
|
|
6
|
+
<link rel="stylesheet" href="{{_res_path}}render/pet-panel-detail/style.css">
|
|
7
|
+
<title>{{title}}</title>
|
|
8
|
+
</head>
|
|
9
|
+
<body>
|
|
10
|
+
<div class="pet-detail-page">
|
|
11
|
+
<header class="detail-header">
|
|
12
|
+
<div>
|
|
13
|
+
<h1>{{pet.name}}</h1>
|
|
14
|
+
<p class="subtitle">{{subtitle}}</p>
|
|
15
|
+
</div>
|
|
16
|
+
<div class="meta-right">
|
|
17
|
+
<span class="meta-pill">{{pet.mutationLabel}}</span>
|
|
18
|
+
<span class="meta-pill">{{pet.bloodlineLabel}}</span>
|
|
19
|
+
</div>
|
|
20
|
+
</header>
|
|
21
|
+
|
|
22
|
+
<section class="top-grid">
|
|
23
|
+
<article class="left-card">
|
|
24
|
+
<div class="image-box">
|
|
25
|
+
<img src="{{pet.imageUrl}}" alt="{{pet.name}}" onerror="this.style.display='none'">
|
|
26
|
+
</div>
|
|
27
|
+
<div class="id-row">GID {{pet.gid}} · PetID {{pet.petId}}</div>
|
|
28
|
+
<div class="small-row">Lv.{{pet.level}} · {{pet.gender}} · 能量 {{pet.energy}}</div>
|
|
29
|
+
<div class="type-row">
|
|
30
|
+
{{if pet.elementLabels && pet.elementLabels.length > 0}}
|
|
31
|
+
{{each pet.elementLabels label}}
|
|
32
|
+
<span class="type-tag">{{label}}</span>
|
|
33
|
+
{{/each}}
|
|
34
|
+
{{else}}
|
|
35
|
+
<span class="type-tag">未知属性</span>
|
|
36
|
+
{{/if}}
|
|
37
|
+
</div>
|
|
38
|
+
</article>
|
|
39
|
+
|
|
40
|
+
<article class="right-card">
|
|
41
|
+
<h2>属性面板</h2>
|
|
42
|
+
<table>
|
|
43
|
+
<thead>
|
|
44
|
+
<tr>
|
|
45
|
+
<th>属性</th>
|
|
46
|
+
<th>数值</th>
|
|
47
|
+
<th>个体</th>
|
|
48
|
+
<th>成长</th>
|
|
49
|
+
</tr>
|
|
50
|
+
</thead>
|
|
51
|
+
<tbody>
|
|
52
|
+
{{each pet.attributes item}}
|
|
53
|
+
<tr>
|
|
54
|
+
<td>{{item.label}}</td>
|
|
55
|
+
<td>{{item.value}}</td>
|
|
56
|
+
<td>{{item.talent}}</td>
|
|
57
|
+
<td>{{item.effortAdd}}</td>
|
|
58
|
+
</tr>
|
|
59
|
+
{{/each}}
|
|
60
|
+
</tbody>
|
|
61
|
+
</table>
|
|
62
|
+
</article>
|
|
63
|
+
</section>
|
|
64
|
+
|
|
65
|
+
<section class="feature-card">
|
|
66
|
+
<h2>特性</h2>
|
|
67
|
+
<div class="feature-name">{{pet.feature.name}}</div>
|
|
68
|
+
<p class="feature-desc">{{pet.feature.desc || '当前接口未返回特性描述。'}}</p>
|
|
69
|
+
</section>
|
|
70
|
+
|
|
71
|
+
<section class="skills-card">
|
|
72
|
+
<div class="skills-title-row">
|
|
73
|
+
<h2>已装备技能</h2>
|
|
74
|
+
<span>{{pet.equipSkills.length}} 项</span>
|
|
75
|
+
</div>
|
|
76
|
+
{{if hasEquipSkills}}
|
|
77
|
+
<div class="skills-grid">
|
|
78
|
+
{{each pet.equipSkills skill}}
|
|
79
|
+
<article class="skill-item">
|
|
80
|
+
<img class="skill-icon" src="{{skill.iconUrl}}" alt="{{skill.name}}" onerror="this.style.display='none'">
|
|
81
|
+
<div class="skill-main">
|
|
82
|
+
<div class="skill-name">{{skill.name}}</div>
|
|
83
|
+
<div class="skill-meta">{{skill.typeLabel}} · 能耗 {{skill.cost}} · 威力 {{skill.power}}</div>
|
|
84
|
+
<div class="skill-desc">{{skill.description || ''}}</div>
|
|
85
|
+
</div>
|
|
86
|
+
</article>
|
|
87
|
+
{{/each}}
|
|
88
|
+
</div>
|
|
89
|
+
{{else}}
|
|
90
|
+
<div class="empty-skill">{{emptySkillHint}}</div>
|
|
91
|
+
{{/if}}
|
|
92
|
+
</section>
|
|
93
|
+
|
|
94
|
+
<section class="skills-card">
|
|
95
|
+
<div class="skills-title-row">
|
|
96
|
+
<h2>全部技能</h2>
|
|
97
|
+
<span>{{pet.skills.length}} 项</span>
|
|
98
|
+
</div>
|
|
99
|
+
{{if hasSkills}}
|
|
100
|
+
<div class="skills-grid">
|
|
101
|
+
{{each pet.skills skill}}
|
|
102
|
+
<article class="skill-item">
|
|
103
|
+
<img class="skill-icon" src="{{skill.iconUrl}}" alt="{{skill.name}}" onerror="this.style.display='none'">
|
|
104
|
+
<div class="skill-main">
|
|
105
|
+
<div class="skill-name">{{skill.name}}</div>
|
|
106
|
+
<div class="skill-meta">{{skill.typeLabel}} · 能耗 {{skill.cost}} · 威力 {{skill.power}}</div>
|
|
107
|
+
<div class="skill-desc">{{skill.description || ''}}</div>
|
|
108
|
+
</div>
|
|
109
|
+
</article>
|
|
110
|
+
{{/each}}
|
|
111
|
+
</div>
|
|
112
|
+
{{else}}
|
|
113
|
+
<div class="empty-skill">{{emptySkillHint}}</div>
|
|
114
|
+
{{/if}}
|
|
115
|
+
</section>
|
|
116
|
+
|
|
117
|
+
<footer class="footer-row">
|
|
118
|
+
<span>最近刷新:{{updatedAtText}}</span>
|
|
119
|
+
<span>{{commandHint}}</span>
|
|
120
|
+
</footer>
|
|
121
|
+
</div>
|
|
122
|
+
</body>
|
|
123
|
+
</html>
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
@font-face {
|
|
2
|
+
font-family: "pet-detail-font";
|
|
3
|
+
src: url("../../ttf/HYWenHei-85W-1.ttf") format("truetype");
|
|
4
|
+
font-display: swap;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
* {
|
|
8
|
+
box-sizing: border-box;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
html,
|
|
12
|
+
body {
|
|
13
|
+
margin: 0;
|
|
14
|
+
padding: 24px;
|
|
15
|
+
display: inline-block;
|
|
16
|
+
background: #f4ecdf;
|
|
17
|
+
color: #2f2318;
|
|
18
|
+
font-family: "pet-detail-font", "Microsoft YaHei", "PingFang SC", sans-serif;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.pet-detail-page {
|
|
22
|
+
width: 1280px;
|
|
23
|
+
border-radius: 24px;
|
|
24
|
+
padding: 26px;
|
|
25
|
+
background:
|
|
26
|
+
radial-gradient(circle at 9% 6%, rgba(255, 216, 136, 0.44), transparent 34%),
|
|
27
|
+
radial-gradient(circle at 94% 10%, rgba(255, 170, 115, 0.28), transparent 32%),
|
|
28
|
+
url("../../img/ercode-bg.D1ccSQKH.png") top center / 100% auto no-repeat;
|
|
29
|
+
border: 1px solid rgba(120, 84, 43, 0.16);
|
|
30
|
+
box-shadow: 0 20px 52px rgba(76, 55, 32, 0.16);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.detail-header {
|
|
34
|
+
display: flex;
|
|
35
|
+
justify-content: space-between;
|
|
36
|
+
align-items: flex-start;
|
|
37
|
+
gap: 18px;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
h1 {
|
|
41
|
+
margin: 0;
|
|
42
|
+
font-size: 46px;
|
|
43
|
+
line-height: 1.05;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.subtitle {
|
|
47
|
+
margin: 8px 0 0;
|
|
48
|
+
font-size: 20px;
|
|
49
|
+
color: #7a664c;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
.meta-right {
|
|
53
|
+
display: flex;
|
|
54
|
+
flex-wrap: wrap;
|
|
55
|
+
gap: 8px;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
.meta-pill {
|
|
59
|
+
padding: 6px 12px;
|
|
60
|
+
border-radius: 999px;
|
|
61
|
+
background: rgba(255, 198, 95, 0.24);
|
|
62
|
+
color: #8e5f1f;
|
|
63
|
+
font-size: 15px;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
.top-grid {
|
|
67
|
+
margin-top: 18px;
|
|
68
|
+
display: grid;
|
|
69
|
+
grid-template-columns: 360px 1fr;
|
|
70
|
+
gap: 14px;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
.left-card,
|
|
74
|
+
.right-card,
|
|
75
|
+
.feature-card,
|
|
76
|
+
.skills-card {
|
|
77
|
+
border-radius: 18px;
|
|
78
|
+
border: 1px solid rgba(120, 84, 43, 0.14);
|
|
79
|
+
background: rgba(255, 255, 255, 0.68);
|
|
80
|
+
box-shadow: 0 10px 20px rgba(96, 66, 30, 0.08);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
.left-card {
|
|
84
|
+
padding: 14px;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
.image-box {
|
|
88
|
+
height: 220px;
|
|
89
|
+
border-radius: 14px;
|
|
90
|
+
background: rgba(255, 242, 213, 0.66);
|
|
91
|
+
border: 1px dashed rgba(120, 84, 43, 0.22);
|
|
92
|
+
display: grid;
|
|
93
|
+
place-items: center;
|
|
94
|
+
overflow: hidden;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
.image-box img {
|
|
98
|
+
width: 200px;
|
|
99
|
+
height: 200px;
|
|
100
|
+
object-fit: contain;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
.id-row,
|
|
104
|
+
.small-row {
|
|
105
|
+
margin-top: 10px;
|
|
106
|
+
font-size: 17px;
|
|
107
|
+
color: #5f4b36;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
.type-row {
|
|
111
|
+
margin-top: 8px;
|
|
112
|
+
display: flex;
|
|
113
|
+
flex-wrap: wrap;
|
|
114
|
+
gap: 6px;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
.type-tag {
|
|
118
|
+
padding: 3px 10px;
|
|
119
|
+
border-radius: 999px;
|
|
120
|
+
background: rgba(255, 198, 95, 0.22);
|
|
121
|
+
color: #805f36;
|
|
122
|
+
font-size: 14px;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
.right-card {
|
|
126
|
+
padding: 14px;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
h2 {
|
|
130
|
+
margin: 0;
|
|
131
|
+
font-size: 30px;
|
|
132
|
+
color: #2f2318;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
table {
|
|
136
|
+
margin-top: 10px;
|
|
137
|
+
width: 100%;
|
|
138
|
+
border-collapse: collapse;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
th,
|
|
142
|
+
td {
|
|
143
|
+
border-bottom: 1px solid rgba(120, 84, 43, 0.16);
|
|
144
|
+
text-align: left;
|
|
145
|
+
padding: 8px 6px;
|
|
146
|
+
font-size: 16px;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
th {
|
|
150
|
+
color: #6f5940;
|
|
151
|
+
font-weight: 700;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
.feature-card {
|
|
155
|
+
margin-top: 14px;
|
|
156
|
+
padding: 14px;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
.feature-name {
|
|
160
|
+
margin-top: 8px;
|
|
161
|
+
font-size: 24px;
|
|
162
|
+
color: #3f2e1f;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
.feature-desc {
|
|
166
|
+
margin: 8px 0 0;
|
|
167
|
+
color: #6f5a42;
|
|
168
|
+
font-size: 16px;
|
|
169
|
+
line-height: 1.45;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
.skills-card {
|
|
173
|
+
margin-top: 14px;
|
|
174
|
+
padding: 14px;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
.skills-title-row {
|
|
178
|
+
display: flex;
|
|
179
|
+
justify-content: space-between;
|
|
180
|
+
align-items: center;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
.skills-title-row span {
|
|
184
|
+
color: #7f6a52;
|
|
185
|
+
font-size: 16px;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
.skills-grid {
|
|
189
|
+
margin-top: 10px;
|
|
190
|
+
display: grid;
|
|
191
|
+
grid-template-columns: 1fr 1fr;
|
|
192
|
+
gap: 10px;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
.skill-item {
|
|
196
|
+
display: flex;
|
|
197
|
+
gap: 10px;
|
|
198
|
+
padding: 10px;
|
|
199
|
+
border-radius: 12px;
|
|
200
|
+
border: 1px solid rgba(120, 84, 43, 0.12);
|
|
201
|
+
background: rgba(255, 255, 255, 0.62);
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
.skill-icon {
|
|
205
|
+
width: 52px;
|
|
206
|
+
height: 52px;
|
|
207
|
+
object-fit: contain;
|
|
208
|
+
border-radius: 10px;
|
|
209
|
+
background: rgba(255, 243, 214, 0.8);
|
|
210
|
+
border: 1px solid rgba(120, 84, 43, 0.14);
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
.skill-main {
|
|
214
|
+
min-width: 0;
|
|
215
|
+
flex: 1;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
.skill-name {
|
|
219
|
+
overflow: hidden;
|
|
220
|
+
text-overflow: ellipsis;
|
|
221
|
+
white-space: nowrap;
|
|
222
|
+
font-size: 20px;
|
|
223
|
+
color: #3a2a1b;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
.skill-meta {
|
|
227
|
+
margin-top: 2px;
|
|
228
|
+
font-size: 14px;
|
|
229
|
+
color: #786247;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
.skill-desc {
|
|
233
|
+
margin-top: 4px;
|
|
234
|
+
font-size: 14px;
|
|
235
|
+
line-height: 1.35;
|
|
236
|
+
color: #7b6954;
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
.empty-skill {
|
|
240
|
+
margin-top: 10px;
|
|
241
|
+
padding: 14px;
|
|
242
|
+
border-radius: 12px;
|
|
243
|
+
border: 1px dashed rgba(120, 84, 43, 0.24);
|
|
244
|
+
background: rgba(255, 255, 255, 0.44);
|
|
245
|
+
color: #7f6d57;
|
|
246
|
+
font-size: 18px;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
.footer-row {
|
|
250
|
+
margin-top: 16px;
|
|
251
|
+
padding-top: 12px;
|
|
252
|
+
border-top: 1px solid rgba(120, 84, 43, 0.14);
|
|
253
|
+
display: flex;
|
|
254
|
+
justify-content: space-between;
|
|
255
|
+
gap: 12px;
|
|
256
|
+
color: #7d6a53;
|
|
257
|
+
font-size: 16px;
|
|
258
|
+
}
|
package/lib/render.d.ts
CHANGED
|
@@ -3,9 +3,9 @@ export declare class Renderer {
|
|
|
3
3
|
private resPath;
|
|
4
4
|
constructor(resPath: string);
|
|
5
5
|
resourceUrl(relativePath: string): string;
|
|
6
|
-
private
|
|
7
|
-
private
|
|
8
|
-
private
|
|
6
|
+
private getPreferredResourceRoot;
|
|
7
|
+
private getTemplateCandidateRoots;
|
|
8
|
+
private resolveTemplatePath;
|
|
9
9
|
private getStylePath;
|
|
10
10
|
renderHtml(ctx: Context, templateName: string, data: any): Promise<Buffer | null>;
|
|
11
11
|
}
|