koishi-plugin-wordle-game 4.1.2 → 4.2.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 ADDED
@@ -0,0 +1,5 @@
1
+ # 4.2.0 · 2026-09-26
2
+
3
+ M3 明暗棋盘与非颜色状态符号;棋盘文字替代;多轮输入可延长;修复模式编号越界及并发锁被错误释放,渲染失败不阻断对局。
4
+
5
+ 共享设计与交互规范见 [DESIGN_SYSTEM.md](./DESIGN_SYSTEM.md)。
@@ -0,0 +1,61 @@
1
+ # Koishi 插件设计系统
2
+
3
+ 适用范围:araea 维护的 16 个 external 插件。Koishi 主框架、控制台与聊天客户端不在修改范围内。
4
+
5
+ ## 规范与实现
6
+
7
+ - 视觉、组件、形状、排版与语义颜色以 [Material 3 / Expressive](https://m3.material.io/) 为准。
8
+ - [Apple HIG](https://developer.apple.com/design/human-interface-guidelines/accessibility) 用于操作反馈、平台惯例、可恢复性与可访问性,不引入 Apple 视觉组件。
9
+ - [WCAG 2.2 AA](https://www.w3.org/TR/WCAG22/) 用于非文本内容、颜色与对比度、时间限制、输入错误和破坏性操作审查。
10
+ - 色彩使用 Google Material Color Utilities 0.4.0 的 HCT 与 Tonal Spot 动态角色,明确使用 2025 色彩规范。历史 `lch` API 名仅用于源码兼容,计算已经统一为 HCT。
11
+ - `m3.ts` 是角色颜色、字阶、间距、圆角、层级和基础组件的唯一源文件。`material-color*.ts` 是固定版本的官方算法生成物,授权见 `THIRD_PARTY_NOTICES.md`。
12
+ - 不额外添加静态截图无法表达的动画;基础 CSS 禁用减少动态效果偏好下的动画和过渡。
13
+
14
+ ## 输出、交互与内容
15
+
16
+ 1. 图片是信息的增强形式。信息卡、榜单、棋盘在图文模式中附带文字;文字模式保留信息,减少对截图的依赖。
17
+ 2. `插件主指令.显示 文字` / `插件主指令.显示 图文` 切换个人显示偏好;同一机器人中的这些插件共享选择。设置保存在内存,重启恢复图文。文本回复不能把后续条目无提示地压掉;较长管理列表分页。
18
+ 3. 裸输入必须符合词法、对局状态及参与条件。多个插件匹配时不执行,要求明确完整指令;完整指令继续可用。
19
+ 4. 回复说明当前结果、未完成原因和可执行的下一步,不用管理员日志替代用户可用的反馈。退款、赔付与渲染失败不能伪装成功。
20
+ 5. 破坏性清空需展示范围、不可撤销性和限时确认码。确认码限制到同一机器人、平台、用户与频道,使用后立即失效。
21
+ 6. 多轮输入允许 5 分钟等待,发送「延长」重新计时,发送「取消」退出。斗牛、21 点提供延长等待入口。文字模式不主动撤回已发出的说明。
22
+ 7. 货币发放先写入核对记录,入账结果不明确时保留待核对状态,不自动重发。管理员核对实际流水并按需人工补发后标记确认;确认操作自身不转账。
23
+
24
+ ## 内容边界
25
+
26
+ - message-counter 的昵称测量与省略号策略保留。图片中合理截断昵称,文字榜单提供完整名称与完整请求范围。
27
+ - P5 / PJSK 输出是用户请求的作品素材,其作品风格保留;选择、参数、提示和文字替代遵循统一交互规则。
28
+ - 象棋棋盘与棋子是游戏内容,配套容器遵循 M3,并附带棋子位置与轮次的文字说明。
29
+ - see-color 是以颜色辨认为目的的感官测试;说明标明题目目的和坐标规则,不在文字替代中泄露答案。词影的笔画图形线索属于字形辨认内容,文字说明给出字与位置状态及相似笔画数量。不能宣称这些感官测试变成了完全等价的无视觉玩法。
30
+ - 聊天客户端的焦点、缩放、读屏与消息合并行为必须在相应客户端验收,不能由服务端截图测试替代。当前测试不是整个平台的 WCAG 合规认证。
31
+
32
+ ## 维护与验证
33
+
34
+ 源仓库:`koishi-plugin-markdown-to-image-service`。每个消费者随包携带本地副本,不通过相邻目录做运行时导入。
35
+
36
+ 在包含这 16 个仓库的 external 目录中:
37
+
38
+ ```sh
39
+ node markdown-to-image-service/scripts/sync-design-system.mjs
40
+ node markdown-to-image-service/scripts/sync-design-system.mjs --check
41
+ ```
42
+
43
+ 单个消费者仓库也带有 `scripts/check-design-system.mjs`,校验共享文件哈希;升级时重新运行同步器,不要单独修改生成副本。该检查会拒绝未同步的本地修改。
44
+
45
+ 官方色彩算法可在源仓库安装开发依赖后通过 `node scripts/build-material-colors.mjs` 重建,再同步消费者。
46
+
47
+ 回归检查覆盖:24 个源色相的明暗角色对比度、奖牌前景、图表填充/轨道差异、浏览器/服务端 HCT 一致性、文字输出与身份隔离、输入冲突、可延长输入、入账异常、清空确认和 Wordle 并发/渲染失败。工作区截图脚本为 `scripts/verify-rendering.ts`,需 Puppeteer Core 和可用 Chromium。
48
+
49
+ ## 本轮改动对应关系
50
+
51
+ | 范围 | 实现 |
52
+ | --- | --- |
53
+ | 共享设计规范 | 官方 HCT、2025 动态颜色角色、共享字阶与间距、同步与哈希校验 |
54
+ | Markdown | M3 明暗主题;旧主题名按明暗迁移;代码高亮与 Mermaid 使用 M3 角色;长代码可换行 |
55
+ | message-counter / monetary-rank | M3 角色与共享图表字阶、HCT 头像配色、完整文字榜单;保留昵称截断 |
56
+ | Wordle | 替换复制的 NYT 外观;状态符号与图例;明暗角色;文字棋盘;异常释放并发锁;安全解析模式编号 |
57
+ | MCDLE | 历史猜测完整文字属性;两列属性卡减少超宽表格 |
58
+ | 2048 / ciyi | 数字与奖牌前景按实际对比度选色 |
59
+ | 斗牛 / 21 点 | 付款核对记录、如实反馈退款失败、明确下注金额、延长操作窗口 |
60
+ | sentinel | 完整封印列表按每页 10 位展示 |
61
+ | 其余插件 | 图文双通道、个人文字模式、可取消/延长输入与上下文反馈 |
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
- # koishi-plugin-wordle-game
1
+ # 猜单词
2
2
 
3
- 猜单词 · 多词库多模式
3
+ Koishi 猜词插件,包含多种词库和游戏模式。
4
4
 
5
5
  ## 安装
6
6
 
@@ -8,28 +8,32 @@
8
8
  yarn add koishi-plugin-wordle-game
9
9
  ```
10
10
 
11
- 在 Koishi 配置中启用,并提供 database 与 puppeteer 服务。
11
+ 在 Koishi 中启用,并安装 `database` 与 `puppeteer` 服务。
12
12
 
13
13
  ## 指令
14
14
 
15
15
  | 指令 | 说明 |
16
16
  | --- | --- |
17
- | `wordle.开始 [长度]` | 开始引导 |
17
+ | `wordle.开始 [长度]` | 开始模式选择 |
18
18
  | `wordle.开始.<模式> [长度]` | 指定模式开局 |
19
19
  | `wordle.猜 <内容>` | 提交猜测 |
20
- | `wordle.查询进度` | 查询当前游戏进度 |
20
+ | `wordle.查询进度` | 查看当前进度 |
21
21
  | `wordle.结束` | 结束游戏 |
22
22
  | `wordle.排行榜 [人数]` | 查看排行榜 |
23
23
  | `wordle.战绩 [@某人]` | 查询玩家记录 |
24
- | `wordle.查单词 <词>` | 查单词引导 |
25
- | `wordle.查成语 <成语>` | 查询成语的拼音与解释(汉典) |
24
+ | `wordle.查单词 <词>` | 查询单词并开始引导 |
25
+ | `wordle.查成语 <成语>` | 查询拼音和释义(汉典) |
26
26
  | `wordle.拼音速查表` | 查看拼音速查表 |
27
- | `wordle.玩法介绍` | 游戏玩法介绍 |
27
+ | `wordle.玩法介绍` | 查看玩法 |
28
28
 
29
- 模式包括经典、汉兜、词影、Numberle、Math、Lewdle 及其他词库。
30
-
31
- 可用选项:`--hard`、`--uhard`、`--absurd`、`--challenge`、`--wordles`、`--free`、`--all`。
29
+ 模式包括经典、汉兜、词影、Numberle、Math 和 Lewdle 等。部分模式支持 `--hard`、`--uhard`、`--absurd`、`--challenge`、`--wordles`、`--free` 和 `--all` 选项。
32
30
 
33
31
  ## 许可证
34
32
 
35
33
  可按 [Apache-2.0](LICENSE-APACHE) 或 [MIT](LICENSE-MIT) 使用。
34
+
35
+ ## 显示与交互
36
+
37
+ 发送 `wordle.显示 文字` 或 `wordle.显示 图文` 切换个人显示偏好。同一机器人中的配套插件共享选择,重启后恢复图文。图文模式中的信息图片附带文字说明;作品素材与感官测试的适用边界见 [设计系统](./DESIGN_SYSTEM.md)。
38
+
39
+ 本次更新:M3 明暗棋盘与非颜色状态符号;棋盘文字替代;多轮输入可延长;修复模式编号越界及并发锁被错误释放,渲染失败不阻断对局。
@@ -0,0 +1,195 @@
1
+ # Material Color Utilities
2
+
3
+ Vendored from @material/material-color-utilities 0.4.0, Copyright Google LLC.
4
+
5
+
6
+ Apache License
7
+ Version 2.0, January 2004
8
+ http://www.apache.org/licenses/
9
+
10
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
11
+
12
+ 1. Definitions.
13
+
14
+ "License" shall mean the terms and conditions for use, reproduction,
15
+ and distribution as defined by Sections 1 through 9 of this document.
16
+
17
+ "Licensor" shall mean the copyright owner or entity authorized by
18
+ the copyright owner that is granting the License.
19
+
20
+ "Legal Entity" shall mean the union of the acting entity and all
21
+ other entities that control, are controlled by, or are under common
22
+ control with that entity. For the purposes of this definition,
23
+ "control" means (i) the power, direct or indirect, to cause the
24
+ direction or management of such entity, whether by contract or
25
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
26
+ outstanding shares, or (iii) beneficial ownership of such entity.
27
+
28
+ "You" (or "Your") shall mean an individual or Legal Entity
29
+ exercising permissions granted by this License.
30
+
31
+ "Source" form shall mean the preferred form for making modifications,
32
+ including but not limited to software source code, documentation
33
+ source, and configuration files.
34
+
35
+ "Object" form shall mean any form resulting from mechanical
36
+ transformation or translation of a Source form, including but
37
+ not limited to compiled object code, generated documentation,
38
+ and conversions to other media types.
39
+
40
+ "Work" shall mean the work of authorship, whether in Source or
41
+ Object form, made available under the License, as indicated by a
42
+ copyright notice that is included in or attached to the work
43
+ (an example is provided in the Appendix below).
44
+
45
+ "Derivative Works" shall mean any work, whether in Source or Object
46
+ form, that is based on (or derived from) the Work and for which the
47
+ editorial revisions, annotations, elaborations, or other modifications
48
+ represent, as a whole, an original work of authorship. For the purposes
49
+ of this License, Derivative Works shall not include works that remain
50
+ separable from, or merely link (or bind by name) to the interfaces of,
51
+ the Work and Derivative Works thereof.
52
+
53
+ "Contribution" shall mean any work of authorship, including
54
+ the original version of the Work and any modifications or additions
55
+ to that Work or Derivative Works thereof, that is intentionally
56
+ submitted to Licensor for inclusion in the Work by the copyright owner
57
+ or by an individual or Legal Entity authorized to submit on behalf of
58
+ the copyright owner. For the purposes of this definition, "submitted"
59
+ means any form of electronic, verbal, or written communication sent
60
+ to the Licensor or its representatives, including but not limited to
61
+ communication on electronic mailing lists, source code control systems,
62
+ and issue tracking systems that are managed by, or on behalf of, the
63
+ Licensor for the purpose of discussing and improving the Work, but
64
+ excluding communication that is conspicuously marked or otherwise
65
+ designated in writing by the copyright owner as "Not a Contribution."
66
+
67
+ "Contributor" shall mean Licensor and any individual or Legal Entity
68
+ on behalf of whom a Contribution has been received by Licensor and
69
+ subsequently incorporated within the Work.
70
+
71
+ 2. Grant of Copyright License. Subject to the terms and conditions of
72
+ this License, each Contributor hereby grants to You a perpetual,
73
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
74
+ copyright license to reproduce, prepare Derivative Works of,
75
+ publicly display, publicly perform, sublicense, and distribute the
76
+ Work and such Derivative Works in Source or Object form.
77
+
78
+ 3. Grant of Patent License. Subject to the terms and conditions of
79
+ this License, each Contributor hereby grants to You a perpetual,
80
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
81
+ (except as stated in this section) patent license to make, have made,
82
+ use, offer to sell, sell, import, and otherwise transfer the Work,
83
+ where such license applies only to those patent claims licensable
84
+ by such Contributor that are necessarily infringed by their
85
+ Contribution(s) alone or by combination of their Contribution(s)
86
+ with the Work to which such Contribution(s) was submitted. If You
87
+ institute patent litigation against any entity (including a
88
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
89
+ or a Contribution incorporated within the Work constitutes direct
90
+ or contributory patent infringement, then any patent licenses
91
+ granted to You under this License for that Work shall terminate
92
+ as of the date such litigation is filed.
93
+
94
+ 4. Redistribution. You may reproduce and distribute copies of the
95
+ Work or Derivative Works thereof in any medium, with or without
96
+ modifications, and in Source or Object form, provided that You
97
+ meet the following conditions:
98
+
99
+ (a) You must give any other recipients of the Work or
100
+ Derivative Works a copy of this License; and
101
+
102
+ (b) You must cause any modified files to carry prominent notices
103
+ stating that You changed the files; and
104
+
105
+ (c) You must retain, in the Source form of any Derivative Works
106
+ that You distribute, all copyright, patent, trademark, and
107
+ attribution notices from the Source form of the Work,
108
+ excluding those notices that do not pertain to any part of
109
+ the Derivative Works; and
110
+
111
+ (d) If the Work includes a "NOTICE" text file as part of its
112
+ distribution, then any Derivative Works that You distribute must
113
+ include a readable copy of the attribution notices contained
114
+ within such NOTICE file, excluding those notices that do not
115
+ pertain to any part of the Derivative Works, in at least one
116
+ of the following places: within a NOTICE text file distributed
117
+ as part of the Derivative Works; within the Source form or
118
+ documentation, if provided along with the Derivative Works; or,
119
+ within a display generated by the Derivative Works, if and
120
+ wherever such third-party notices normally appear. The contents
121
+ of the NOTICE file are for informational purposes only and
122
+ do not modify the License. You may add Your own attribution
123
+ notices within Derivative Works that You distribute, alongside
124
+ or as an addendum to the NOTICE text from the Work, provided
125
+ that such additional attribution notices cannot be construed
126
+ as modifying the License.
127
+
128
+ You may add Your own copyright statement to Your modifications and
129
+ may provide additional or different license terms and conditions
130
+ for use, reproduction, or distribution of Your modifications, or
131
+ for any such Derivative Works as a whole, provided Your use,
132
+ reproduction, and distribution of the Work otherwise complies with
133
+ the conditions stated in this License.
134
+
135
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
136
+ any Contribution intentionally submitted for inclusion in the Work
137
+ by You to the Licensor shall be under the terms and conditions of
138
+ this License, without any additional terms or conditions.
139
+ Notwithstanding the above, nothing herein shall supersede or modify
140
+ the terms of any separate license agreement you may have executed
141
+ with Licensor regarding such Contributions.
142
+
143
+ 6. Trademarks. This License does not grant permission to use the trade
144
+ names, trademarks, service marks, or product names of the Licensor,
145
+ except as required for reasonable and customary use in describing the
146
+ origin of the Work and reproducing the content of the NOTICE file.
147
+
148
+ 7. Disclaimer of Warranty. Unless required by applicable law or
149
+ agreed to in writing, Licensor provides the Work (and each
150
+ Contributor provides its Contributions) on an "AS IS" BASIS,
151
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
152
+ implied, including, without limitation, any warranties or conditions
153
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
154
+ PARTICULAR PURPOSE. You are solely responsible for determining the
155
+ appropriateness of using or redistributing the Work and assume any
156
+ risks associated with Your exercise of permissions under this License.
157
+
158
+ 8. Limitation of Liability. In no event and under no legal theory,
159
+ whether in tort (including negligence), contract, or otherwise,
160
+ unless required by applicable law (such as deliberate and grossly
161
+ negligent acts) or agreed to in writing, shall any Contributor be
162
+ liable to You for damages, including any direct, indirect, special,
163
+ incidental, or consequential damages of any character arising as a
164
+ result of this License or out of the use or inability to use the
165
+ Work (including but not limited to damages for loss of goodwill,
166
+ work stoppage, computer failure or malfunction, or any and all
167
+ other commercial damages or losses), even if such Contributor
168
+ has been advised of the possibility of such damages.
169
+
170
+ 9. Accepting Warranty or Additional Liability. While redistributing
171
+ the Work or Derivative Works thereof, You may choose to offer,
172
+ and charge a fee for, acceptance of support, warranty, indemnity,
173
+ or other liability obligations and/or rights consistent with this
174
+ License. However, in accepting such obligations, You may act only
175
+ on Your own behalf and on Your sole responsibility, not on behalf
176
+ of any other Contributor, and only if You agree to indemnify,
177
+ defend, and hold each Contributor harmless for any liability
178
+ incurred by, or claims asserted against, such Contributor by reason
179
+ of your accepting any such warranty or additional liability.
180
+
181
+ END OF TERMS AND CONDITIONS
182
+
183
+ Copyright 2021 Google LLC
184
+
185
+ Licensed under the Apache License, Version 2.0 (the "License");
186
+ you may not use this file except in compliance with the License.
187
+ You may obtain a copy of the License at
188
+
189
+ http://www.apache.org/licenses/LICENSE-2.0
190
+
191
+ Unless required by applicable law or agreed to in writing, software
192
+ distributed under the License is distributed on an "AS IS" BASIS,
193
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
194
+ See the License for the specific language governing permissions and
195
+ limitations under the License.
@@ -1,5 +1,5 @@
1
- import type { Config } from "../config";
2
- export declare const htmlSuffix = "</div>\n </main>\n </div>\n </div>\n</div>\n</body>\n</html>\n";
3
- export declare const htmlPrefix = "<html lang=\"en\">\n<head>\n <meta charset=\"UTF-8\">\n <title>Wordle</title>\n\n <style>\n\n .pz-error__message h1 {\n font-style: normal;\n font-size: 2em;\n font-size: min(2em, 90px);\n line-height: 1.15;\n font-weight: 700;\n margin-bottom: 25px\n }\n\n .pz-error__message p {\n font-size: 1.125em;\n line-height: 1.39;\n margin-bottom: 30px;\n max-width: 510px\n }\n\n\n .pz-error__stack-trace pre {\n white-space: normal\n }\n\n button, input, optgroup, select, textarea {\n font-family: inherit;\n font-size: 100%;\n line-height: 1.15;\n margin: 0\n }\n\n button, input {\n overflow: visible\n }\n\n button, select {\n text-transform: none\n }\n\n button, [type=button], [type=reset], [type=submit] {\n -webkit-appearance: button\n }\n\n html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video {\n margin: 0;\n padding: 0;\n border: 0;\n font-size: 100%;\n font: inherit;\n vertical-align: baseline\n }\n\n article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section {\n display: block\n }\n\n body {\n line-height: 1\n }\n\n ol, ul {\n list-style: none\n }\n\n blockquote, q {\n quotes: none\n }\n\n blockquote:before, blockquote:after, q:before, q:after {\n content: \"\";\n content: none\n }\n\n table {\n border-collapse: collapse;\n border-spacing: 0\n }\n\n @font-face {\n font-family: \"nyt-franklin\";\n src: url(\"./assets/Wordle/franklin-normal-700.woff2\") format(\"woff2\");\n font-weight: 700;\n font-style: normal\n }\n\n :root {\n --green: #6aaa64;\n --green-4: #538d4e;\n --wordle-high-contrast-green: #58a351;\n --spellingBeeYellow: #f7da21;\n --miniCrosswordBlue: #95befa;\n --connectionsPeriwinkle: #b4a8ff;\n --sudoku-orange: #fb9b00;\n --tiles-green: #b5e352;\n --dailyCrosswordBlue: #6493e6;\n --yellow-3: #c9b458;\n --yellow-4: #b59f3b;\n --newsGray-10: #dfdfdf;\n --newsGray-100: #121212;\n --newsGray-85: #363636;\n --gray-3: #ccc;\n --gray-4: #dcdcdc;\n --gray-6: #f4f4f4;\n --gray-13: #d3d6da;\n --gray-18: #787c7e;\n --gray-19: #878a8c;\n --gray-20: #edeff1;\n --gray-21: #f6f7f8;\n --gray-22: #e3e3e1;\n --gray-23: #a6a6a6;\n --gray-24: #818384;\n --gray-25: #565758;\n --gray-26: #3a3a3c;\n --gray-27: #424242;\n --gray-28: #59595a;\n --gray-29: #afafaf;\n --black: #000;\n --white: #fff;\n --newsDarkContentPrimary: #f8f8f8;\n --wordleBlack: #212121;\n --wordleBlack-2: #272729;\n --wordleBlack-3: #1a1a1b;\n --wordleBlack-4: #121213;\n --wordleBlack-5: #2f2f31;\n --linkBlue: #346eb7;\n --linkDarkBlue: #6ba1dd;\n --orange: #f5793a;\n --blue: #85c0f9;\n --outlineBlue: #2671dc;\n --svg-arrow-fill: var(--white);\n --svg-arrow-stroke: var(--black);\n --svg-arrow-fill-hover: var(--black);\n --svg-arrow-stroke-hover: var(--white)\n }\n\n :root {\n --color-tone-1: var(--black);\n --color-tone-2: var(--gray-18);\n --color-tone-3: var(--gray-19);\n --color-tone-4: var(--gray-13);\n --color-tone-5: var(--gray-20);\n --color-tone-6: var(--gray-21);\n --color-tone-7: var(--white);\n --color-tone-8: var(--newsGray-100);\n --color-tone-9: var(--newsGray-10);\n --color-tone-10: var(--black);\n --color-tone-11: var(--gray-18);\n --color-tone-12: var(--newsGray-85);\n --color-nav-hover: var(--gray-6);\n --opacity-50: rgba(255, 255, 255, 0.5);\n --error-background: var(--gray-22);\n --icon-disabled: var(--gray-23);\n --background-gray: var(--gray-29);\n --inline-links: var(--linkBlue);\n --warning-red: #d0021b\n }\n\n .dark {\n --color-tone-1: var(--newsDarkContentPrimary);\n --color-tone-2: var(--gray-24);\n --color-tone-3: var(--gray-25);\n --color-tone-4: var(--gray-26);\n --color-tone-5: var(--wordleBlack-2);\n --color-tone-6: var(--wordleBlack-3);\n --color-tone-7: var(--wordleBlack-4);\n --color-tone-8: var(--newsDarkContentPrimary);\n --color-tone-9: var(--gray-27);\n --color-tone-10: var(--newsGray-10);\n --color-tone-11: var(--newsGray-10);\n --color-tone-12: var(--newsGray-10);\n --color-nav-hover: var(--wordleBlack-5);\n --opacity-50: rgba(0, 0, 0, 0.5);\n --error-background: var(--color-tone-7);\n --icon-disabled: var(--gray-28);\n --svg-arrow-fill: var(--black);\n --svg-arrow-stroke: var(--white);\n --svg-arrow-fill-hover: var(--white);\n --svg-arrow-stroke-hover: var(--black);\n --inline-links: var(--linkDarkBlue);\n --warning-red: #ea7980\n }\n\n :root, .dark {\n --color-background: var(--color-tone-7)\n }\n\n :root {\n --color-present: var(--yellow-3);\n --color-correct: var(--green);\n --color-absent: var(--color-tone-2);\n --tile-text-color: var(--color-tone-7);\n --key-text-color: var(--color-tone-1);\n --key-evaluated-text-color: var(--color-tone-7);\n --key-bg: var(--color-tone-4);\n --key-bg-present: var(--color-present);\n --key-bg-correct: var(--color-correct);\n --key-bg-absent: var(--color-absent);\n --key-evaluated-text-color: var(--color-tone-7);\n --key-evaluated-text-color-absent: var(--white);\n --modal-content-bg: var(--color-tone-7);\n --outline-focus: var(--outlineBlue);\n --color-correct-high-contrast: var(--wordle-high-contrast-green)\n }\n\n @font-face {\n font-family: \"nyt-franklin\";\n src: url(\"./assets/Wordle/franklin-normal-700.woff2\") format(\"woff2\");\n font-weight: 700;\n font-style: normal\n }\n\n html {\n height: 100%\n }\n\n body {\n height: 100%;\n background-color: var(--color-background);\n margin: 0;\n padding: 0;\n overflow-y: hidden\n }\n\n html, body {\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale\n }\n\n button:focus-visible, a:focus-visible {\n outline: 2px solid var(--outline-focus)\n }\n\n @media (min-width: 415px) {\n :root {\n --header-height: 65px\n }\n }\n\n @media (min-width: 1024px) {\n :root {\n --header-padding-x: 24px\n }\n }\n\n @media (min-width: 768px) {\n :root {\n --header-padding-x: 20px\n }\n }\n\n /*# sourceMappingURL=wordle.e3c9f95c41d06668a615.css.map*/\n\n </style>\n <style>\n .MomentSystem-module_moment__G9hyw {\n position: absolute;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0\n }\n\n\n .LandscapeWarning-module_landscapeWarning__MFIwn i {\n height: 30%;\n width: 20%;\n margin: 2rem\n }\n\n .LandscapeWarning-module_landscapeWarning__MFIwn p {\n font-family: \"nyt-franklin\";\n font-weight: 500;\n margin: 0;\n font-size: 16px;\n font-size: 1rem;\n line-height: 20.8px;\n line-height: 1.3rem\n }\n\n .LandscapeWarning-module_landscapeWarning__MFIwn span {\n font-family: \"nyt-franklin\";\n font-weight: 700\n }\n\n\n .dark before {\n background: var(--hybrid-back-dark-mode) center no-repeat;\n background-position-x: 0px\n }\n\n .NonDismissalBanner-module_banner__CqPDp .NonDismissalBanner-module_bannerInformation__hwApG i {\n min-height: 35px;\n min-width: 35px\n }\n\n .NonDismissalBanner-module_banner__CqPDp .NonDismissalBanner-module_bannerInformation__hwApG.NonDismissalBanner-module_bannerMessageIcon__xCwfD i {\n min-height: 20px;\n min-width: 20px\n }\n\n .NonDismissalBanner-module_banner__CqPDp .NonDismissalBanner-module_bannerBody__ZtWzl h3 {\n font-size: 14px;\n font-size: 0.875rem;\n line-height: 18.2px;\n line-height: 1.1375rem;\n font-weight: 700;\n margin: 0\n }\n\n\n\n .NonDismissalBanner-module_banner__CqPDp .NonDismissalBanner-module_bannerBody__ZtWzl p {\n font-size: 16px;\n font-size: 1rem;\n line-height: 20.8px;\n line-height: 1.3rem\n }\n\n .NonDismissalBanner-module_banner__CqPDp a {\n color: inherit;\n text-decoration: none\n }\n\n\n\n\n .NonDismissalBanner-module_multiIconBannerTest__t8tvf button.NonDismissalBanner-module_iconButtonTest__oaGgl i {\n margin-right: 0\n }\n\n\n\n .NonDismissalBanner-module_multiIconBannerTest__t8tvf .NonDismissalBanner-module_bannerInformationTest__Q0Dqp i {\n min-height: 25px;\n min-width: 25px\n }\n\n\n .NonDismissalBanner-module_multiIconBannerTest__t8tvf .NonDismissalBanner-module_bannerBodyTest__UrtZZ h3 {\n font-size: .85rem;\n font-weight: 700;\n margin: 0\n }\n\n .NonDismissalBanner-module_multiIconBannerTest__t8tvf a {\n color: inherit;\n text-decoration: none\n }\n\n\n .LargeCTABanner-module_playButton__if85L i {\n width: 27px;\n height: 27px;\n border-radius: 7px\n }\n\n .LargeCTABanner-module_iconTextWrapper__goI7a + i {\n position: absolute;\n right: 10px\n }\n\n\n\n .Skip-module_skipButton__m8KJ8 svg {\n margin-left: .5rem\n }\n\n\n :root {\n --inter-ad-skip-button-height: 52px;\n --inter-ad-top-bar-height: 34px;\n --inter-ad-bottom-bar-height: 24px\n }\n\n .AdInterstitial-module_adSlug__lH065 h3 {\n font-family: \"nyt-franklin\";\n font-weight: 500;\n font-size: 12px;\n line-height: 12px;\n margin: 12px auto 10px;\n letter-spacing: .08em;\n text-transform: uppercase;\n color: #5a5a5a;\n font-style: normal\n }\n\n .Welcome-module_buttonContainer__K4GEw a {\n all: inherit\n }\n\n .Welcome-module_back__cUvW3 button::before {\n background: var(--hybrid-back) center no-repeat !important;\n background-position-x: 0px !important\n }\n\n .Tile-module_tile__UWEHN {\n font-family: \"nyt-franklin\";\n width: 100%;\n display: inline-flex;\n justify-content: center;\n align-items: center;\n font-size: 3rem;\n line-height: 1;\n font-weight: bold;\n vertical-align: middle;\n box-sizing: border-box;\n color: var(--tile-text-color);\n text-transform: uppercase;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none\n }\n\n .Tile-module_tile__UWEHN::before {\n content: \"\";\n display: inline-block;\n padding-bottom: 100%\n }\n\n @media (max-height: 600px) {\n .Tile-module_tile__UWEHN {\n font-size: 1em\n }\n }\n\n .Tile-module_tile__UWEHN[data-state=empty] {\n border: 2px solid var(--color-tone-4)\n }\n\n .Tile-module_tile__UWEHN[data-state=tbd] {\n background-color: var(--color-tone-7);\n border: 2px solid var(--color-tone-3);\n color: var(--color-tone-1)\n }\n\n .Tile-module_tile__UWEHN[data-state=correct] {\n background-color: var(--color-correct);\n color: var(--key-evaluated-text-color)\n }\n\n .Tile-module_tile__UWEHN[data-state=present] {\n background-color: var(--color-present);\n color: var(--key-evaluated-text-color)\n }\n\n .Tile-module_tile__UWEHN[data-state=absent] {\n background-color: var(--color-absent);\n color: var(--key-evaluated-text-color-absent)\n }\n\n .Tile-module_tile__UWEHN[data-animation=pop] {\n animation-name: Tile-module_PopIn__CmX51;\n animation-duration: 100ms\n }\n\n .Tile-module_tile__UWEHN[data-animation=flip-in] {\n animation-name: Tile-module_FlipIn__PCdh1;\n animation-duration: 250ms;\n animation-timing-function: ease-in\n }\n\n .Tile-module_tile__UWEHN[data-animation=flip-out] {\n animation-name: Tile-module_FlipOut__xeJcb;\n animation-duration: 250ms;\n animation-timing-function: ease-in\n }\n\n\n .Board-module_boardContainer__TBHNL {\n display: flex;\n justify-content: center;\n align-items: center;\n flex-grow: 1;\n overflow: hidden\n }\n\n .Help-module_instructions__uXsG6 li {\n margin-bottom: 4px\n }\n\n .Help-module_instructions__uXsG6 li::marker {\n font-size: 18px\n }\n\n\n .Help-module_examples__W3VXL strong {\n font-weight: bold\n }\n\n .Help-module_examples__W3VXL p {\n margin: 0;\n font-size: 16px;\n line-height: 20px\n }\n\n\n .Help-module_example__gldBI p {\n font-size: 16px;\n line-height: 20px;\n margin-top: 8px\n }\n\n\n .Help-module_reminderSignUp__oQ42D a {\n color: var(--inline-links);\n -webkit-text-decoration: underline var(--inline-links);\n text-decoration: underline var(--inline-links)\n }\n\n\n\n .Help-module_statsLogin__HkQec button {\n border: none;\n background-color: rgba(0, 0, 0, 0);\n font-family: \"nyt-franklin\";\n font-size: 16px;\n line-height: 20px;\n text-align: left;\n padding: 0px 0px 3px\n }\n\n .Help-module_statsLogin__HkQec a, .Help-module_statsLogin__HkQec button {\n color: var(--inline-links);\n -webkit-text-decoration: underline var(--inline-links);\n text-decoration: underline var(--inline-links)\n }\n\n\n .MiniAuthCTA-module_buttonsContainer__IoQWk .MiniAuthCTA-module_loginButton__x7_fR > a {\n color: inherit\n }\n\n\n .Stats-module_statsBtnLeft__IyDkc h1 {\n display: inline-block\n }\n\n .Stats-module_statsBtnLeft__IyDkc button {\n margin-left: 10px\n }\n\n .Footer-module_textContainer__LWkeW > p {\n margin: 5px\n }\n\n\n .Footer-module_buttonsContainer__YNxCQ .Footer-module_loginButton__abKD3 > a {\n color: inherit;\n text-decoration: none\n }\n\n\n .Footer-module_sbButtonFooter__X3LsB .Footer-module_nextWordle__Bzpb0 span {\n margin-right: 4px\n }\n\n\n .Footer-module_sbButtonFooter__X3LsB .Footer-module_sbPlayButton__kNigc span {\n color: #121212;\n letter-spacing: normal\n }\n\n .BotLink-module_botLink__uRdNy .BotLink-module_botLinkContent__RR4ri p {\n font: 700 14px/17.5px \"nyt-franklin\";\n margin: 0\n }\n\n .BotLink-module_botLink__uRdNy .BotLink-module_botLinkContent__RR4ri p span {\n font-weight: 400;\n text-decoration: underline\n }\n\n @media (max-height: 548px) {\n .driveToMore .BotLink-module_botLink__uRdNy .BotLink-module_botLinkContent__RR4ri p {\n font-size: 13px\n }\n }\n\n\n\n .HardModeAwareness-module_settingsButton__DGkRg svg {\n width: 12px;\n height: 12px;\n margin: 1px 0 0 5px;\n display: inline-block\n }\n\n #hardModeAwareness-dialog > div:first-child {\n padding: 0;\n max-width: 440px\n }\n\n @media (max-width: 500px) {\n #hardModeAwareness-dialog > div:first-child {\n width: 90%;\n height: auto;\n min-height: unset;\n align-self: center\n }\n }\n\n\n .ActivationRegiModal-module_loginLink__qqJOJ > a {\n color: inherit;\n text-decoration: none\n }\n\n\n .driveToMore h4 {\n font: 700 0.6875rem/0.859375rem \"nyt-franklin\";\n letter-spacing: .05em;\n border-top: solid 2px var(--color-tone-1);\n padding-top: 10px;\n margin: 0 auto 18px;\n width: calc(100% - 50px);\n display: none\n }\n\n @media (min-height: 548px) {\n .driveToMore h4 {\n display: block\n }\n }\n\n @media (min-width: 768px) {\n .driveToMore h4 {\n width: calc(100% - 100px)\n }\n }\n\n\n @media (min-width: 768px) {\n\n .driveToMore .DriveToMoreContent-module_fitContent__h6S25 h4 {\n width: 100%\n }\n }\n\n .driveToMore .DriveToMoreContent-module_fitContentGrid__TDzaq h4 {\n width: auto\n }\n\n .driveToMore .DriveToMoreContent-module_carouselGameItem__ypawW p, .driveToMore .DriveToMoreContent-module_gamesGridItem__hJIku p {\n font: 700 0.875rem/1.1875rem \"nyt-karnakcondensed\";\n margin: 5px 0 2px\n }\n\n @media (min-height: 548px) {\n .driveToMore .DriveToMoreContent-module_carouselGameItem__ypawW p, .driveToMore .DriveToMoreContent-module_gamesGridItem__hJIku p {\n font-size: 1rem\n }\n }\n\n @media (min-width: 768px) {\n .driveToMore .DriveToMoreContent-module_carouselGameItem__ypawW p, .driveToMore .DriveToMoreContent-module_gamesGridItem__hJIku p {\n font-size: 1rem\n }\n }\n\n .driveToMore .DriveToMoreContent-module_carouselGameItem__ypawW span, .driveToMore .DriveToMoreContent-module_gamesGridItem__hJIku span {\n font: 500 0.75rem/1rem \"nyt-franklin\"\n }\n\n @media (min-height: 548px) {\n .driveToMore .DriveToMoreContent-module_carouselGameItem__ypawW span, .driveToMore .DriveToMoreContent-module_gamesGridItem__hJIku span {\n font-size: 0.875rem;\n line-height: 1.125rem\n }\n }\n\n @media (min-width: 992px) {\n .driveToMore .DriveToMoreContent-module_carouselGameItem__ypawW span, .driveToMore .DriveToMoreContent-module_gamesGridItem__hJIku span {\n font-size: 0.75rem\n }\n }\n\n\n .NewsCarousel-module_carouselNewsItem__iTjNZ p {\n font: 500 0.875rem/1.09375rem nyt-cheltenham, Georgia;\n color: var(--color-tone-1);\n margin-top: 8px\n }\n\n img {\n width: 100%;\n animation: NewsCarousel-module_fadeIn__XJI1h 500ms\n }\n\n\n .NewsCarousel-module_desktopCarouselNewsItem__pjK2M p {\n font: 500 1rem/1.25rem nyt-cheltenham, Georgia;\n color: var(--color-tone-1);\n margin-top: 8px\n }\n\n\n .NewsCarousel-module_carouselControl__P2VRs svg {\n width: 100%;\n height: 100%\n }\n\n .NewsCarousel-module_carouselControl__P2VRs:hover svg {\n fill: #dfdfdf\n }\n\n .Settings-module_setting__EaMz6 a, .Settings-module_setting__EaMz6 a:visited {\n color: var(--color-tone-8);\n text-decoration: underline\n }\n\n\n .Modal-module_fullscreenStatsExit__DpWAs .Modal-module_buttonContainer__aEMIr .Modal-module_closeIconButton__y9b6c svg {\n width: 100%;\n height: auto\n }\n\n .Modal-module_closeIcon__TcEKb svg {\n width: 100%;\n height: auto\n }\n\n\n .AppHeader-module_menuRight__Noasd button svg {\n vertical-align: middle\n }\n\n @media (max-width: 499px) {\n .pz-web .AppHeader-module_menuRight__Noasd.AppHeader-module_longTextVariant__guJaD svg {\n width: 20px\n }\n }\n\n .Explainer-module_containerLink__Eahjg p:last-child {\n font-weight: 700\n }\n\n\n .Explainer-module_text__DosQz > a {\n color: var(--inline-links);\n -webkit-text-decoration: underline var(--inline-links);\n text-decoration: underline var(--inline-links)\n }\n\n\n\n .Explainer-module_headerNew__y8y2y > p {\n text-align: center;\n margin: 10px 0px\n }\n\n\n\n .Page-module_page__Py6Ys header {\n display: flex;\n justify-content: center;\n align-items: center;\n position: relative\n }\n\n .Page-module_page__Py6Ys h1 {\n font-weight: 700;\n font-size: 16px;\n letter-spacing: .5px;\n text-transform: uppercase;\n text-align: center;\n margin-bottom: 10px\n }\n\n\n\n .Page-module_headerNew__FQAkL > p {\n text-align: center;\n margin: 10px 0px\n }\n\n\n\n\n .Error-module_errorBannerContainer__pfK75 p {\n font-weight: 400;\n margin: 5px 5px 5px 10px\n }\n\n .Ad-module_adContainer__ZAFEc > *:first-child {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%)\n }\n\n .App-module_gameContainer__K_CBh {\n position: relative\n }\n\n .App-module_game__yruqo {\n width: 100%;\n max-width: var(--game-max-width);\n margin: 0 auto;\n height: calc(100% - var(--header-height));\n display: flex;\n flex-direction: column\n }\n\n .pz-offline-ticker svg path {\n fill: var(--white)\n }\n\n .StatsSelectionTool-module_form__eOT7F fieldset {\n margin-bottom: 40px\n }\n\n .dark.colorblind {\n --color-absent: var(--color-tone-4);\n --key-bg-absent: var(--color-tone-4)\n }\n\n .colorblind {\n --color-correct: var(--orange);\n --color-present: var(--blue);\n --color-absent: var(--color-tone-2);\n --tile-text-color: var(--white);\n --key-bg-present: var(--color-present);\n --key-bg-correct: var(--color-correct);\n --key-bg-absent: var(--color-tone-2);\n --key-evaluated-text-color: var(--black);\n --key-evaluated-text-color-absent: var(--white);\n --color-correct-high-contrast: var(--orange);\n --modal-content-bg: var(--color-tone-7)\n }\n\n /*# sourceMappingURL=62.9d339ad0d09ddf80c92e.css.map*/\n\n </style>";
1
+ import type { Config } from '../config';
2
+ export declare const htmlPrefix = "<!DOCTYPE html><html lang=\"zh-CN\"><head><meta charset=\"UTF-8\"><title>Wordle</title></head><body>";
3
+ export declare const htmlSuffix = "</body></html>";
4
4
  export declare function htmlAfterStyle(config: Config): string;
5
5
  export declare const defaultPinyinsHtml = " <div grid=\"~ cols-2 gap-3\" h-min=\"\">\n <div class=\"\">b</div>\n <div class=\"\">p</div>\n <div class=\"\">m</div>\n <div class=\"\">f</div>\n <div class=\"\">d</div>\n <div class=\"\">t</div>\n <div class=\"\">n</div>\n <div class=\"\">l</div>\n <div class=\"\">g</div>\n <div class=\"\">k</div>\n <div class=\"\">h</div>\n <div class=\"\">j</div>\n <div class=\"\">q</div>\n <div class=\"\">r</div>\n <div class=\"\">x</div>\n <div class=\"\">w</div>\n <div class=\"\">y</div>\n <div class=\"\">zh</div>\n <div class=\"\">ch</div>\n <div class=\"\">sh</div>\n <div class=\"\">z</div>\n <div class=\"\">c</div>\n <div class=\"\">s</div>\n </div>\n <div grid=\"~ cols-3 gap-3\" h-min=\"\">\n <div class=\"\">a</div>\n <div class=\"\">ai</div>\n <div class=\"\">an</div>\n <div class=\"\">ang</div>\n <div class=\"\">ao</div>\n <div class=\"\">e</div>\n <div class=\"\">ei</div>\n <div class=\"\">en</div>\n <div class=\"\">eng</div>\n <div class=\"\">er</div>\n <div class=\"\">i</div>\n <div class=\"\">ia</div>\n <div class=\"\">ian</div>\n <div class=\"\">iang</div>\n <div class=\"\">iao</div>\n <div class=\"\">ie</div>\n <div class=\"\">in</div>\n <div class=\"\">ing</div>\n <div class=\"\">io</div>\n <div class=\"\">iong</div>\n <div class=\"\">iu</div>\n <div class=\"\">o</div>\n <div class=\"\">ong</div>\n <div class=\"\">ou</div>\n <div class=\"\">u</div>\n <div class=\"\">ua</div>\n <div class=\"\">uai</div>\n <div class=\"\">uan</div>\n <div class=\"\">uang</div>\n <div class=\"\">ui</div>\n <div class=\"\">un</div>\n <div class=\"\">uo</div>\n <div class=\"\">\u00FC</div>\n <div class=\"\">\u00FCan</div>\n <div class=\"\">\u00FCe</div>\n <div class=\"\">\u00FCn</div>\n </div>";