From dbd4cb82e85355f6359bdef521bfd86e6d78d997 Mon Sep 17 00:00:00 2001 From: FineCat Date: Fri, 23 Oct 2026 11:16:06 +0800 Subject: [PATCH 1/2] =?UTF-8?q?Add=20A/=E6=97=B6=E5=B7=AE=E4=BF=9D?= =?UTF-8?q?=E5=AE=89=20(timezone-guard):=20a=20two-clock=20verdict=20panel?= =?UTF-8?q?=20for=20the=20other=20time=20zone?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + README.zh-CN.md | 1 + .../.minimax-plugin/plugin.json | 17 + .../liuchen19960902/timezone-guard/LICENSE | 21 + .../liuchen19960902/timezone-guard/README.md | 136 ++ .../timezone-guard/README.zh-CN.md | 84 ++ .../timezone-guard/docs/preview-dark.png | Bin 0 -> 95826 bytes .../timezone-guard/docs/preview.png | Bin 0 -> 96420 bytes .../liuchen19960902/timezone-guard/icon.png | Bin 0 -> 4780 bytes .../timezone-guard/miniapp/client/app.js | 1156 +++++++++++++++++ .../timezone-guard/miniapp/client/cities.js | 506 ++++++++ .../timezone-guard/miniapp/client/index.html | 239 ++++ .../timezone-guard/miniapp/client/styles.css | 746 +++++++++++ .../timezone-guard/miniapp/miniapp.json | 27 + .../miniapp/node/miniapp-api.ts | 397 ++++++ .../timezone-guard/miniapp/node/server.mjs | 95 ++ .../timezone-guard/package.json | 6 + 17 files changed, 3432 insertions(+) create mode 100644 plugins/liuchen19960902/timezone-guard/.minimax-plugin/plugin.json create mode 100644 plugins/liuchen19960902/timezone-guard/LICENSE create mode 100644 plugins/liuchen19960902/timezone-guard/README.md create mode 100644 plugins/liuchen19960902/timezone-guard/README.zh-CN.md create mode 100644 plugins/liuchen19960902/timezone-guard/docs/preview-dark.png create mode 100644 plugins/liuchen19960902/timezone-guard/docs/preview.png create mode 100644 plugins/liuchen19960902/timezone-guard/icon.png create mode 100644 plugins/liuchen19960902/timezone-guard/miniapp/client/app.js create mode 100644 plugins/liuchen19960902/timezone-guard/miniapp/client/cities.js create mode 100644 plugins/liuchen19960902/timezone-guard/miniapp/client/index.html create mode 100644 plugins/liuchen19960902/timezone-guard/miniapp/client/styles.css create mode 100644 plugins/liuchen19960902/timezone-guard/miniapp/miniapp.json create mode 100644 plugins/liuchen19960902/timezone-guard/miniapp/node/miniapp-api.ts create mode 100644 plugins/liuchen19960902/timezone-guard/miniapp/node/server.mjs create mode 100644 plugins/liuchen19960902/timezone-guard/package.json diff --git a/README.md b/README.md index 9298aab0..9019458e 100644 --- a/README.md +++ b/README.md @@ -75,6 +75,7 @@ The MiniMax Code Agent communicates through the host MCP client. Business reques | [Anatomy Gallery](plugins/zch0227/anatomy-gallery/) | A gallery for interactive isometric figures made with the anatomy skill: hang them in rooms you organize, view light and dark editions full screen, keep every version, and have an Agent create or edit figures from the gallery with a per-run process log. The anatomy skill is bundled. Requires MiniMax Code 3.1.2 or later | [zch0227](https://github.com/zch0227) | | [仓库透视 / Repo X-Ray](plugins/yujiachen-y/repo-xray/) | Understand a codebase from its Git history: a code map you can drill into, hotspots and bug magnets, high-risk files, owners and knowledge loss, commit rhythm and firefighting, and the tech stack. Works with GitHub, GitLab, and local repositories; analysis runs on your machine | [yujiachen-y](https://github.com/yujiachen-y) | | [Disk Insight](plugins/zch0227/disk-insight/) | See where disk space went on macOS and Windows with a sunburst space map, find junk files sorted into three safety tiers, large and duplicate files, and how much code repositories and Git worktrees take; ask an Agent about any item, and permanently delete what you select after a confirmation that lists every item. Requires MiniMax Code 3.1.2 or later | [zch0227](https://github.com/zch0227) | +| [A/时差保安 / Timezone Guard](plugins/liuchen19960902/timezone-guard/) | Check the other side's local time before you message: the target city's clock turns into a green "now is fine", yellow "keep it short", or red "go to sleep" verdict. Requires MiniMax Code 3.1.2 or later | [FineCat](https://github.com/LiuChen19960902) |
Preview: Token Usage Board diff --git a/README.zh-CN.md b/README.zh-CN.md index 17946852..08b4ccd0 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -75,6 +75,7 @@ MiniMax Code Agent 通过宿主 MCP 客户端与 MiniApp 协作。业务请求 | [Anatomy 画廊](plugins/zch0227/anatomy-gallery/README.zh-CN.md) | 集中展示 anatomy 技能做出的交互式等距图解:按自建展区挂墙,全屏查看明暗两版,保留全部历史版本;在画廊里让 Agent 新建或修改作品,每次运行都有过程记录。自带 anatomy 技能。需要 MiniMax Code 3.1.2 或更高版本 | [zch0227](https://github.com/zch0227) | | [仓库透视](plugins/yujiachen-y/repo-xray/README.zh-CN.md) | 从 Git 历史看懂一个代码仓库:可逐层下钻的代码地图、热点与 Bug 磁铁、高风险文件、负责人与知识流失、提交节奏与救火记录、技术栈;支持 GitHub、GitLab 和本机仓库,全部在本机分析 | [yujiachen-y](https://github.com/yujiachen-y) | | [磁盘透视](plugins/zch0227/disk-insight/README.zh-CN.md) | 查看 macOS 和 Windows 的磁盘空间去向:旭日图空间地图,按三档风险分类的垃圾文件,大文件和重复文件,代码仓库和 Git worktree 的占用;任何条目都可以问 Agent,选中的条目在确认框里逐一列出,确认后直接永久删除。需要 MiniMax Code 3.1.2 或更高版本 | [zch0227](https://github.com/zch0227) | +| [A/时差保安](plugins/liuchen19960902/timezone-guard/README.zh-CN.md) | 发消息前先看对方那边几点:按对方城市当地时间给出「现在可以聊 / 短聊就好 / 先睡,别发」三档判定。需要 MiniMax Code 3.1.2 或更高版本 | [FineCat](https://github.com/LiuChen19960902) |
预览:Token 用量看板 diff --git a/plugins/liuchen19960902/timezone-guard/.minimax-plugin/plugin.json b/plugins/liuchen19960902/timezone-guard/.minimax-plugin/plugin.json new file mode 100644 index 00000000..98a7c6db --- /dev/null +++ b/plugins/liuchen19960902/timezone-guard/.minimax-plugin/plugin.json @@ -0,0 +1,17 @@ +{ + "schemaVersion": 1, + "name": "timezone-guard", + "displayName": "A/时差保安", + "version": "1.0.0", + "description": "别在对方睡着的时区跟 Claude 聊天。A/时差保安实时对照对方当地时间:绿了正常聊,黄了短聊,红了先睡。", + "author": "FineCat", + "icon": "icon.png", + "category": "Productivity", + "exampleQueries": [ + "打开A/时差保安,看看洛杉矶现在该不该开口", + "洛杉矶现在几点,对照上海" + ], + "apps": [], + "mcpServers": [], + "skills": [] +} diff --git a/plugins/liuchen19960902/timezone-guard/LICENSE b/plugins/liuchen19960902/timezone-guard/LICENSE new file mode 100644 index 00000000..7defdd89 --- /dev/null +++ b/plugins/liuchen19960902/timezone-guard/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 FineCat + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/plugins/liuchen19960902/timezone-guard/README.md b/plugins/liuchen19960902/timezone-guard/README.md new file mode 100644 index 00000000..c9c3a8ec --- /dev/null +++ b/plugins/liuchen19960902/timezone-guard/README.md @@ -0,0 +1,136 @@ +# A/时差保安 (Timezone Guard) + +[English](README.md) | [简体中文](README.zh-CN.md) + +One clock, one verdict: is it a reasonable time to message someone in another time zone? The verdict +follows the **other** city's local time, because what matters is whether *they* are awake. + +Author: [FineCat](https://github.com/LiuChen19960902) · Version: `1.0.0` + +![A/时差保安 showing the verdict, with the target city clock above the local one](docs/preview.png) + +*The page itself is in Chinese. This screenshot is the light theme, taken while Los Angeles was at +19:49 (the evening band); the dark theme is below.* + +![A/时差保安 in the dark theme](docs/preview-dark.png) + +## What it answers + +**Whether to speak up right now.** + +The verdict reads the **target city's local time**, not yours — it is their convenience that +matters. Your own city is shown for reference only. The thresholds are the same for every city, +regardless of hemisphere or local habits. + +| Target local time | Band | Verdict | +| --- | --- | --- | +| 09:00–18:00 | Day (green) | Now is fine | +| 18:00–22:00 | Evening (yellow) | Keep it short | +| 06:00–09:00 | Early morning (yellow) | Don't go deep | +| 22:00–06:00 | Night (red) | Go to sleep, don't send | + +## What is on the page + +- **One verdict** — a 24 px status-coloured headline, the single subject of the page. Colour is + never the only carrier of meaning; text and shape carry it too. +- **Two clocks** — the target city on top, your own below, each with its date and short time zone + name (PDT, GMT+8, and so on). 12-hour and 24-hour formats are both available. +- **A 24-cell strip** — one cell per hour of the target city's day, drawn as a sun, a half sun on + the horizon, or a moon. The current hour is filled with the verdict colour, and the four + thresholds land exactly on cell boundaries. +- **A one-line tip** — under the verdict, one line reads "their band + time range + one sentence + of advice", and below it an optional time-difference note appears when your own side is the + later one. No message templates, no copy button, and nothing is pushed into a chat box. +- **Every time zone** — all 418 time zones the runtime knows about are covered, and in the tables + shipped with this package each one has a Chinese name (the count follows the runtime's own time + zone database; a zone the runtime adds later and the shipped tables do not know yet falls back + to its English name). Country-level entries such as "China (default)" are there too. Either + city can be changed on its own, and the ⇄ in the title swaps the two in one click. + +Times and offsets are computed locally with the browser's `Intl` and the runtime's own time zone +database, so daylight saving time is handled for you. **No network, no account, no push, not a +calendar.** + +## Install + +Copy the whole directory, **including the hidden `.minimax-plugin` directory**, into the MiniMax +Code plugins directory: + +| System | Target path | +| --- | --- | +| Windows | `C:\Users\\.minimax\plugins\timezone-guard` | +| macOS | `/Users//.minimax/plugins/timezone-guard` | +| Linux | `/home//.minimax/plugins/timezone-guard` | + +`.minimax` is a hidden directory: on Windows enable "Hidden items" in File Explorer, on macOS press +`Cmd + Shift + .`. If your client uses a custom data directory, put the package in that +directory's `plugins/` folder instead. + +Then restart MiniMax Code, confirm the plugin is recognised and enabled, and ask the Agent to open +"A/时差保安" — or say "打开A/时差保安,看看洛杉矶现在该不该开口". + +To update, close the app and exit MiniMax Code first, then replace the whole plugin directory. + +## Tested environment + +MiniMax Code desktop **3.1.4** on Windows 11 Home (10.0.26300, x64). This package was developed +and tested against 3.1.4. + +Requires MiniMax Code **3.1.2** or later: the package declares `surface.window` (the size of the +popped-out window), so older clients cannot install it at all. + +Checked inside the client: install and open; the verdict switches correctly across its four time +bands (day, early morning, evening, night); either city can be changed on its own, and the ⇄ in +the title swaps the pair with one click (checked with a mouse click and with Enter / Space — both +clocks, the time difference, the hour strip, the verdict and the two city inputs all follow the +swap and persist); the city list +covers every time zone the runtime knows about (418 on the tested runtime), each with a Chinese +name and no dead entry; the 12/24-hour toggle persists; both the light and the dark theme render +correctly; the page renders at the panel's default width. + +Layout was additionally measured against this package's own client files in Chromium 155 at 400 / +460 / 560 / 680 / 1100 / 1440 CSS pixels wide: no horizontal overflow, no double scrollbar, no +stray whitespace under the card. + +**Not verified:** macOS and Linux; popping the page out into its own window (`surface.window`) was +never exercised — the page is a single responsive column either way. + +## Data & access + +- **Files read** — only the four static files inside its own package directory: + `miniapp/client/index.html`, `styles.css`, `cities.js`, `app.js`. Nothing outside the package is + read, and the disk is never scanned. +- **Files written** — none. `context.dataDir` is not used and nothing is written anywhere. +- **Browser storage** — interface preferences only, under the key `timezone-guard.prefs.v1`: the + selected pair of cities, the theme, and the 12/24-hour format. No session and no content data. +- **Network** — none. The page loads its assets from the plugin's own loopback server; there is no + telemetry, and no remote font, icon, or script. +- **Processes** — none spawned. +- **Agent turns** — none. The package declares no `agentAccess` and starts no Agent turn. +- **Credentials** — no API key, no account, no configuration of any kind. + +## Files + +```text +.minimax-plugin/plugin.json Plugin manifest +package.json Mini App declaration +miniapp/miniapp.json Payload roots, Node entry, page route +miniapp/client/index.html The page served at /dashboard, including the SVG sprite +miniapp/client/styles.css Visual layer +miniapp/client/app.js Time zone logic, verdict, city picker, 24-hour strip +miniapp/client/cities.js City list and Chinese names for every time zone +miniapp/node/server.mjs Node entry: start(context) → { dispose } +miniapp/node/miniapp-api.ts Type declarations for the runtime context +docs/preview.png Screenshot of the page, light theme +docs/preview-dark.png Screenshot of the page, dark theme +icon.png Plugin icon +``` + +The page is plain HTML, CSS, and JavaScript — no framework, no CDN, no build step, fully offline. +The Node entry only serves `/dashboard` and those four files on the port the Host assigns. There +are **no third-party runtime dependencies**: the Node side uses built-in modules only, and the +browser side uses native APIs only. + +## License + +[MIT](./LICENSE). diff --git a/plugins/liuchen19960902/timezone-guard/README.zh-CN.md b/plugins/liuchen19960902/timezone-guard/README.zh-CN.md new file mode 100644 index 00000000..bd74afa2 --- /dev/null +++ b/plugins/liuchen19960902/timezone-guard/README.zh-CN.md @@ -0,0 +1,84 @@ +# A/时差保安 + +[English](README.md) | 简体中文 + +发消息之前先看一眼对方那边几点。一个只有结论、没有废话的时差仪表:**该正常聊、该短聊、还是该先睡**,一律按对方城市的当地时间判定。 + +作者:[FineCat](https://github.com/LiuChen19960902) · 版本:`1.0.0` + +![A/时差保安:判定区给出「短聊就好」,下方是对方城市与自己的两个时钟](docs/preview.png) + +*浅色主题。截图拍摄时洛杉矶是 19:49,落在傍晚档;深色主题见下图。* + +![A/时差保安:深色主题](docs/preview-dark.png) + +## 它回答什么 + +**此刻该不该开口跟对方说话。** + +判定只看**对方城市的当地时间** —— 不方便的是对方,不是你;自己的城市只作对照。所以人在上海盯洛杉矶,和人在伦敦盯上海,是同一套标准。 + +| 对方当地时间 | 档位 | 结论 | +| --- | --- | --- | +| 09:00–18:00 | 白天(绿) | 现在可以聊 | +| 18:00–22:00 | 傍晚(黄) | 短聊就好 | +| 06:00–09:00 | 清晨(黄) | 先别展开 | +| 22:00–06:00 | 深夜(红) | 先睡,别发 | + +阈值对所有城市完全一致,不因东西半球或作息文化而变。 + +## 页面里有什么 + +- **一个判定** —— 24 px 状态色大字,页面的唯一主角。颜色之外始终有文字和形状,不靠颜色单独传意。 +- **两个时钟** —— 对方城市在上,自己的在下,各带日期和时区短名(PDT、GMT+8 这类)。12H / 24H 可切换。 +- **一条 24 格图标带** —— 对方城市一天里的每一小时占一格,画成太阳、贴地平线的半日或月亮;当前那一格铺上判定色。四个阈值正好落在格子边界上。 +- **一句话提醒** —— 判定下方一行写明「对方档位 + 时间段 + 一句话建议」,再往下是可选的时差提醒(只有你这边更晚时才出现)。不生成话术、不提供一键复制、不往聊天框里塞东西。 +- **所有时区都能选** —— 运行时认识的 418 个时区全部覆盖,在随包的这套表里每个都有中文名(数量随运行时 tzdata 版本增减;若运行时新增了表里还没有的时区,该条目会退回英文名)。另按国家给出「中国(默认)」这类国家级条目。两侧的城市都能单独切换,标题中间那个 ⇄ 还能一键对调。 + +时间与偏移全部由浏览器的 `Intl` 和运行时自带的时区数据库算出,夏令时自动处理。**不联网、无账号、无推送、不做日历。** + +## 安装与使用 + +把整个目录(**含隐藏的 `.minimax-plugin` 目录**)复制到用户主目录下的 `.minimax/plugins/`: + +| 系统 | 目标路径 | +| --- | --- | +| Windows | `C:\Users\<用户名>\.minimax\plugins\timezone-guard` | +| macOS | `/Users/<用户名>/.minimax/plugins/timezone-guard` | +| Linux | `/home/<用户名>/.minimax/plugins/timezone-guard` | + +`.minimax` 是隐藏目录:Windows 上需在文件资源管理器开启「显示隐藏的项目」,macOS 上按 `Cmd + Shift + .`。只要用过 MiniMax Code,这个目录通常已经存在。如果客户端使用了自定义数据目录,请放到那个目录下的 `plugins/` 里。 + +然后重启 MiniMax Code,确认插件已被识别并启用,让 Agent 帮你打开「A/时差保安」,或直接说「打开A/时差保安,看看洛杉矶现在该不该开口」。 + +更新时先关闭应用并退出 MiniMax Code,再整体替换插件目录。卸载同理,删除该目录即可。 + +## 已验证环境 + +MiniMax Code 桌面版 **3.1.4**,Windows 11 家庭版(10.0.26300,x64)。本插件在 3.1.4 上开发并测试。 + +需要 MiniMax Code **3.1.2** 或更高版本:包里声明了 `surface.window`(弹出独立窗口的尺寸),更早的版本装不上这个包。 + +在客户端里验证过:安装与打开;判定在白天 / 清晨 / 傍晚 / 深夜四个时段档各自正确切换;两个城市分别可切换,标题里的 ⇄ 点击后可一键对调(鼠标点击与键盘 Enter / Space 都试过,对调后两个时钟、时差、图标带、判定与两个城市输入框全部跟着翻转并持久化);城市库覆盖运行时全部时区(实测运行时为 418 个)、每个都有中文名、无失效条目;12H / 24H 切换并持久化;浅色与深色两套主题;面板默认宽度下渲染正常。 + +布局另在本包的 client 文件上用 Chromium 155 直接测过 400 / 460 / 560 / 680 / 1100 / 1440 px 六档宽度:无横向溢出、无双滚动条、卡片底部无多余留白。 + +**未验证:** macOS 与 Linux;把面板弹成独立窗口(`surface.window`)这条路径没有实测过 —— 页面本身仍是一列响应式布局。 + +## 数据与访问范围 + +- **读取的文件** —— 只有它自己包目录下的四个静态文件:`miniapp/client/index.html`、`styles.css`、`cities.js`、`app.js`。不读包目录以外的任何文件,也不扫描磁盘。 +- **写入的文件** —— 无。不写 `context.dataDir`,不写任何地方。 +- **浏览器存储** —— 只存界面偏好,键名 `timezone-guard.prefs.v1`:选中的两个城市、主题、12H/24H 制式。不存会话、不存任何内容数据。 +- **网络** —— 无。页面只从插件自己的回环服务加载静态资源,没有遥测,没有远程字体、图标或脚本。 +- **子进程** —— 无。 +- **Agent 轮次** —— 无。包没有声明 `agentAccess`,运行期不发起任何 Agent 调用。 +- **凭据** —— 不需要 API key、不需要账号、不需要任何配置。 + +## 源码与验证情况 + +页面是 `miniapp/client/index.html`(无框架、无 CDN、无构建步骤,离线可用),视觉层在 `styles.css`,逻辑在 `app.js`,城市库与全时区中文名在 `cities.js`;Node 入口是 `miniapp/node/server.mjs`,它只负责把 `/dashboard` 和这四个静态文件挂到宿主分配的端口上;供编辑器类型检查用的 Host API 类型定义在 `miniapp/node/miniapp-api.ts`。**没有任何第三方运行时依赖** —— Node 侧只用内置模块,浏览器侧只用原生 API。 + +## 许可 + +[MIT](LICENSE)。 diff --git a/plugins/liuchen19960902/timezone-guard/docs/preview-dark.png b/plugins/liuchen19960902/timezone-guard/docs/preview-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..25dfec80e102947d2e8e815b5a37e73edcd211e0 GIT binary patch literal 95826 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 QL{J;T=r2RMzSF(`0MCbY<^TWy literal 0 HcmV?d00001 diff --git a/plugins/liuchen19960902/timezone-guard/docs/preview.png b/plugins/liuchen19960902/timezone-guard/docs/preview.png new file mode 100644 index 0000000000000000000000000000000000000000..c5ee22c216b21464ca6fb228375bad47d0f1a6dc GIT binary patch literal 96420 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%0DuZz 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 literal 0 HcmV?d00001 diff --git a/plugins/liuchen19960902/timezone-guard/icon.png b/plugins/liuchen19960902/timezone-guard/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..fa611fe821ab0b1f0c2153ecbd61676fb3066c35 GIT binary patch literal 4780 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 ({ ...c, rawZone: c.zone, zone: resolveZone(c.zone) })).filter((c) => c.zone); + for (const c of usableCities) { + usedZones.add(c.zone); + // tokens 里额外带上时区原名,这样按 IANA 全名/别名也能搜到 + // (例如「Europe/Kyiv」在部分 ICU 里会被规范化成 Europe/Kiev)。 + const tokens = [c.zh, c.en, c.abbr, c.countryZh, c.countryEn, c.rawZone, ...(c.alias || '').split('|')] + .filter(Boolean) + .map((t) => t.toLowerCase()); + entries.push({ + zone: c.zone, + title: c.zh, + en: c.en, + countryZh: c.countryZh, + subtitle: `${c.en} · ${c.countryZh}`, + tokens, + zoneText: c.zone.toLowerCase(), + zoneDir: c.zone.split('/')[0].toLowerCase(), + baseExact: 0, + basePrefix: 0, + city: c, + }); + } + + // 2) 其余时区补中文名 —— 保证「全世界每个地方」都能用中文搜到。 + // 注意:与精选城市共用同一时区时**不能**整条跳过, + // 例如孟买与加尔各答同属 Asia/Calcutta,两个中文名都该能搜到; + // 这里按「中文名是否重复」来去重,而不是按时区。 + const zoneNames = window.TZ_ZONE_NAMES || {}; + /** @type {{zone: string, zh: string, en: string, countryZh: string}[]} */ + const extraCities = []; + const usedNames = new Set(usableCities.map((c) => c.zh)); + for (const [rawZone, info] of Object.entries(zoneNames)) { + const zone = resolveZone(rawZone); + if (!zone) continue; + usedZones.add(zone); + const zh = info[0]; + if (usedNames.has(zh)) continue; + usedNames.add(zh); + const countryZh = info[1] || ''; + // 第三项可选:现代英文名(IANA 遗留尾段有时是老拼写,如 Katmandu / Kiev)。 + const en = info[2] || zone.split('/').pop().replace(/_/g, ' '); + extraCities.push({ zone, zh, en, countryZh }); + entries.push({ + zone, + title: zh, + en, + countryZh, + subtitle: `${en} · ${countryZh}`, + tokens: [zh, en.toLowerCase(), countryZh.toLowerCase(), zone.toLowerCase()].filter(Boolean), + zoneText: zone.toLowerCase(), + zoneDir: zone.split('/')[0].toLowerCase(), + baseExact: 2, + basePrefix: 4, + city: null, + }); + } + + // 3) 国家级条目:仅当该国绝大多数城市落在同一个时区时才给出, + // 否则搜「美国」会直接列出纽约/芝加哥/洛杉矶等具体城市,避免误导。 + // 统计口径必须包含第 2 步的时区,否则俄罗斯会因只留莫斯科而被误判为单时区。 + const byCountry = new Map(); + const addToCountry = (countryZh, item) => { + if (!countryZh) return; + if (!byCountry.has(countryZh)) byCountry.set(countryZh, []); + byCountry.get(countryZh).push(item); + }; + for (const c of usableCities) addToCountry(c.countryZh, c); + for (const c of extraCities) addToCountry(c.countryZh, c); + + for (const [countryZh, list] of byCountry) { + const counts = new Map(); + for (const c of list) counts.set(c.zone, (counts.get(c.zone) || 0) + 1); + let best = null; + for (const [zone, n] of counts) if (!best || n > best.n) best = { zone, n }; + if (!best || best.n / list.length < 0.6) continue; + const rep = list.find((c) => c.zone === best.zone); + const repEn = rep.en || ''; + entries.push({ + zone: best.zone, + title: `${countryZh}(默认)`, + en: repEn, + countryZh, + subtitle: `${rep.zh} · ${countryZh}`, + tokens: [countryZh, repEn.toLowerCase(), best.zone.toLowerCase()].filter(Boolean), + zoneText: best.zone.toLowerCase(), + zoneDir: best.zone.split('/')[0].toLowerCase(), + // 完全匹配时排在该国具体城市之前(搜「中国」直接选中国); + // 前缀匹配时反而要靠后,否则「荷兰」会抢在「纽约」前面。 + baseExact: -2, + basePrefix: 3, + city: { + zone: best.zone, + zh: countryZh, + en: repEn, + abbr: '', + countryZh, + countryEn: '', + }, + }); + } + + // 4) 兜底:运行时新增、但两张表都没收录的时区,给英文名。 + for (const rawZone of zones) { + const zone = resolveZone(rawZone); + if (!zone || usedZones.has(zone)) continue; + usedZones.add(zone); + const tail = zone.split('/').pop().replace(/_/g, ' '); + entries.push({ + zone, + title: tail, + en: tail, + countryZh: '', + subtitle: zone, + tokens: [tail.toLowerCase()], + zoneText: zone.toLowerCase(), + zoneDir: zone.split('/')[0].toLowerCase(), + baseExact: 3, + basePrefix: 6, + city: null, + }); + } + + return entries; +} + +/** scoreEntry 的「无匹配」哨兵。必须与任何真实分数区分开: + * 国家默认项的完全匹配分是 -2,若拿 -1 当哨兵会被误判成未命中。 */ +const NO_MATCH = -1000; + +/** + * 模糊匹配。分级越小越靠前: + * 0 标题完全匹配 1 关键词完全匹配 + * 2 标题前缀 3 关键词前缀 + * 4 时区全名完全匹配 5 时区目录前缀 6 时区路径包含 7 全文包含 + * + * entry.baseExact / entry.basePrefix 按条目类型整体偏移: + * 精选城市 (0/0)、国家默认项 (-2/3)、IANA 兜底 (3/6)。 + */ +function scoreEntry(entry, query) { + const title = entry.title.toLowerCase(); + if (title === query) return entry.baseExact; + for (const token of entry.tokens) { + if (token === query) return entry.baseExact + 1; + } + if (query.includes('/')) { + if (entry.zoneText === query) return entry.basePrefix + 4; + if (entry.zoneText.startsWith(query)) return entry.basePrefix + 5; + if (entry.zoneText.includes(query)) return entry.basePrefix + 6; + } + if (title.startsWith(query)) return entry.basePrefix + 2; + for (const token of entry.tokens) { + if (token.startsWith(query)) return entry.basePrefix + 3; + } + if (query.length >= 3 && entry.zoneDir === query) return entry.basePrefix + 5; + if (query.length >= 3 && entry.tokens.some((t) => t.includes(query))) return entry.basePrefix + 7; + return NO_MATCH; +} + +// 候选上限。搜一个国家名可能命中几十个城市(美国 40+), +// 上限过低会把正确结果截掉,所以放宽到 60。 +function searchEntries(query, limit = 60) { + const q = query.trim().toLowerCase(); + if (!q) { + const popular = new Set(POPULAR); + return INDEX.filter((e) => popular.has(e.title)).slice(0, limit); + } + const scored = []; + for (const entry of INDEX) { + const score = scoreEntry(entry, q); + if (score > NO_MATCH) scored.push({ entry, score }); + } + scored.sort((a, b) => a.score - b.score || a.entry.title.length - b.entry.title.length); + return scored.slice(0, limit).map((s) => s.entry); +} + +/* ------------------------------------------------------------------ * + * 时区计算 + * ------------------------------------------------------------------ */ + +const FORMATTERS = new Map(); + +function getFormatters(timeZone) { + let f = FORMATTERS.get(timeZone); + if (!f) { + f = { + numeric: new Intl.DateTimeFormat('en-US', { + timeZone, + hourCycle: 'h23', + weekday: 'short', + year: 'numeric', + month: '2-digit', + day: '2-digit', + hour: '2-digit', + minute: '2-digit', + second: '2-digit', + timeZoneName: 'short', + }), + weekday: new Intl.DateTimeFormat('zh-CN', { timeZone, weekday: 'short' }), + offset: new Intl.DateTimeFormat('en-US', { timeZone, timeZoneName: 'longOffset' }), + }; + FORMATTERS.set(timeZone, f); + } + return f; +} + +/** 把 "GMT-07:00" / "GMT+05:30" / "GMT" 解析成分钟偏移。 */ +function parseOffset(text) { + if (!text || text === 'GMT' || text === 'UTC') return 0; + const m = /GMT([+-])(\d{1,2})(?::(\d{2}))?/.exec(text); + if (!m) return 0; + const sign = m[1] === '-' ? -1 : 1; + return sign * (Number(m[2]) * 60 + Number(m[3] || 0)); +} + +/** + * 取某个时区在给定时刻的完整信息。 + * 时区 ID 先做一次解析兜底,绝不因为一个非法时区让整页渲染抛错。 + */ +function zonedInfo(timeZone, date) { + const zone = resolveZone(timeZone) || 'UTC'; + const f = getFormatters(zone); + const parts = {}; + for (const part of f.numeric.formatToParts(date)) { + if (part.type !== 'literal') parts[part.type] = part.value; + } + const offsetPart = f.offset.formatToParts(date).find((p) => p.type === 'timeZoneName'); + + const hour = Number(parts.hour); + const minute = Number(parts.minute); + const second = Number(parts.second); + const pad = (n) => String(n).padStart(2, '0'); + + return { + time24: `${pad(hour)}:${pad(minute)}:${pad(second)}`, + time12: `${pad(hour % 12 === 0 ? 12 : hour % 12)}:${pad(minute)}:${pad(second)}`, + period: periodOf(hour), + date: `${Number(parts.month)}月${Number(parts.day)}日 ${f.weekday.format(date)}`, + zoneLabel: parts.timeZoneName || '', + offsetMinutes: parseOffset(offsetPart ? offsetPart.value : ''), + hour, + minute, + year: Number(parts.year), + month: Number(parts.month), + day: Number(parts.day), + }; +} + +/** 中文时段,替代 AM/PM:凌晨 / 上午 / 下午 / 晚上。 */ +function periodOf(hour) { + if (hour < 6) return '凌晨'; + if (hour < 12) return '上午'; + if (hour < 18) return '下午'; + return '晚上'; +} + +/** 固定阈值判定:绿 09–18、黄 18–22、红 22–06,清晨 06–09 归黄。 */ +function bandOf(hour, minute) { + const t = hour * 60 + minute; + if (t >= 22 * 60 || t < 6 * 60) return BAND_COPY.night; + if (t < 9 * 60) return BAND_COPY.dawn; + if (t < 18 * 60) return BAND_COPY.day; + return BAND_COPY.dusk; +} + +/** 绿 < 黄 < 红,用于比较两边的紧迫程度。 */ +const SEVERITY = { green: 0, yellow: 1, red: 2 }; + +/** + * 时差文案。 + * 整小时沿用「约 N 小时」;存在 45 分钟这类非整小时偏移时给出精确的 + * 小时 + 分钟,避免读者拿 5.8 小时去对旁边并排的两个时钟。 + */ +function formatDiff(diffMinutes) { + const abs = Math.abs(diffMinutes); + const hours = Math.floor(abs / 60); + const minutes = abs % 60; + if (minutes === 0) return `约 ${hours} 小时`; + // 非整小时时带一个前导空格,拼到「快/慢」后面才不会连成一团。 + return hours > 0 ? ` ${hours} 小时 ${minutes} 分钟` : ` ${minutes} 分钟`; +} + +/* ------------------------------------------------------------------ * + * 状态 + * ------------------------------------------------------------------ */ + +const STORAGE_KEY = 'timezone-guard.prefs.v1'; + +const DEFAULT_TARGET = { + zone: 'America/Los_Angeles', + title: '洛杉矶', + en: 'Los Angeles', + abbr: 'LA', + countryZh: '美国', + countryEn: 'United States', +}; +const DEFAULT_HOME = { + zone: 'Asia/Shanghai', + title: '上海', + en: 'Shanghai', + abbr: '', + countryZh: '中国', + countryEn: 'China', +}; + +let state = { + target: { ...DEFAULT_TARGET }, + home: { ...DEFAULT_HOME }, + theme: 'auto', + clockFormat: '12h', +}; + +/** + * 以 zone 为准重建展示字段。 + * + * 存档可能缺字段或字段类型不对(例如 title 为 null),直接展开合并会让 + * 页头显示「洛杉矶时间」而时钟其实是东京时间,同一屏自相矛盾。 + * 这里对每个展示字段做类型校验,并以 zone 反查补全。 + */ +function normalizeCity(raw, fallback) { + if (!raw || typeof raw !== 'object') return { ...fallback }; + const zone = resolveZone(raw.zone); + if (!zone) return { ...fallback }; + + const known = CITIES.find((c) => resolveZone(c.zone) === zone); + const fallbackTitle = known ? known.zh : zone.split('/').pop().replace(/_/g, ' '); + const text = (value, dflt) => (typeof value === 'string' && value.trim() ? value : dflt); + + return { + zone, + title: text(raw.title, fallbackTitle), + en: text(raw.en, known ? known.en : ''), + abbr: text(raw.abbr, known ? known.abbr || '' : ''), + countryZh: text(raw.countryZh, known ? known.countryZh : ''), + countryEn: text(raw.countryEn, known ? known.countryEn : ''), + }; +} + +function loadPrefs() { + let raw = null; + try { + raw = localStorage.getItem(STORAGE_KEY); + } catch { + return; + } + if (!raw) return; + try { + const saved = JSON.parse(raw); + if (saved && typeof saved === 'object') { + if (saved.target) state.target = normalizeCity(saved.target, DEFAULT_TARGET); + if (saved.home) state.home = normalizeCity(saved.home, DEFAULT_HOME); + if (saved.theme === 'light' || saved.theme === 'dark' || saved.theme === 'auto') state.theme = saved.theme; + if (saved.clockFormat === '12h' || saved.clockFormat === '24h') state.clockFormat = saved.clockFormat; + } + } catch { + /* 存档损坏时回落到默认值 */ + } +} + +function savePrefs() { + try { + localStorage.setItem( + STORAGE_KEY, + JSON.stringify({ + target: state.target, + home: state.home, + theme: state.theme, + clockFormat: state.clockFormat, + }), + ); + } catch { + /* 存储不可用不影响使用 */ + } +} + +/* ------------------------------------------------------------------ * + * DOM + * ------------------------------------------------------------------ */ + +const el = { + pageTitle: document.getElementById('page-title'), + pageTitleTarget: document.getElementById('page-title-target'), + pageTitleHome: document.getElementById('page-title-home'), + pageTitleSwap: document.getElementById('page-title-swap'), + verdict: document.getElementById('verdict'), + verdictTitle: document.getElementById('verdict-title'), + verdictDetail: document.getElementById('verdict-detail'), + targetHeading: document.getElementById('target-heading'), + targetMeta: document.getElementById('target-meta'), + targetClock: document.getElementById('target-clock'), + targetDate: document.getElementById('target-date'), + targetIconUse: document.getElementById('target-icon-use'), + homeHeading: document.getElementById('home-heading'), + homeMeta: document.getElementById('home-meta'), + homeClock: document.getElementById('home-clock'), + homeDate: document.getElementById('home-date'), + homeIconUse: document.getElementById('home-icon-use'), + comboTarget: document.getElementById('combo-target'), + comboHome: document.getElementById('combo-home'), + factDiff: document.getElementById('fact-diff'), + verdictExtra: document.getElementById('verdict-extra'), + targetPeriod: document.getElementById('target-period'), + homePeriod: document.getElementById('home-period'), + daylineLabel: document.getElementById('dayline-label'), + hourBar: document.getElementById('hour-bar'), + fmt12: document.getElementById('fmt-12h'), + fmt24: document.getElementById('fmt-24h'), + themeToggle: document.getElementById('theme-toggle'), + themeToggleLabel: document.getElementById('theme-toggle-label'), +}; + +function entryToCity(entry) { + const c = entry.city; + if (c) { + return { + zone: c.zone, + title: c.zh, + en: c.en, + abbr: c.abbr || '', + countryZh: c.countryZh, + countryEn: c.countryEn || '', + }; + } + // 非精选条目(其余时区的中文名):标题即中文名,英文名取 IANA 尾段。 + return { + zone: entry.zone, + title: entry.title, + en: entry.en || entry.title, + abbr: '', + countryZh: entry.countryZh || '', + countryEn: '', + }; +} + +/** + * 只在文本真的变化时写入 DOM。 + * render() 每秒跑一次,直接赋值会反复触发 aria-live 区域的无谓播报。 + */ +function setText(node, value) { + if (node.textContent !== value) node.textContent = value; +} + +/** + * 只在属性值真的变化时写入。 + * render() 每秒跑一次;Blink 不会把同值 setAttribute 短路掉, + * 每帧重写会触发样式失效与 MutationObserver 噪音, + * 所以和 setText 一样先比再写。 + */ +function setAttr(node, name, value) { + if (node.getAttribute(name) !== value) node.setAttribute(name, value); +} + +/** hidden 同理:避免每帧写同一个布尔属性。 */ +function setHidden(node, flag) { + if (node.hidden !== flag) node.hidden = flag; +} + +/* ------------------------------------------------------------------ * + * 一天的图标带 + * ------------------------------------------------------------------ */ + +/** 一天 24 格,一格一小时。 */ +const HOUR_COUNT = 24; +const SVG_NS = 'http://www.w3.org/2000/svg'; + +/** 图标带里 24 格的 DOM 节点(每格一小时)。 */ +let hourCells = []; +/** 当前所在的小时格下标,用于避免每秒重刷同一格。 */ +let hourNowIndex = -1; + +/** + * 图标带画的是「对方那一整天」:每小时一格,格里一枚昼夜图标。 + * 太阳 = 白天,半日 = 清晨/傍晚,月亮 = 深夜——靠形状说明对方在睡还是醒着, + * 不再靠灰阶深浅去暗示:灰阶在深色主题下必须反着设,语义容易读反。 + * 阈值固定,所以格子只建一次;每帧只移动当前格。 + */ +function buildHourBar() { + if (!el.hourBar) return; + el.hourBar.textContent = ''; + hourCells = []; + for (let h = 0; h < HOUR_COUNT; h++) { + const band = bandOf(h, 0); + const cell = document.createElement('span'); + cell.className = 'hour-cell'; + // 整点起步,四个阈值(06/09/18/22)都落在格边界上。 + cell.dataset.tone = band.tone; + + const icon = document.createElementNS(SVG_NS, 'svg'); + icon.setAttribute('class', 'hour-icon'); + icon.setAttribute('aria-hidden', 'true'); + icon.setAttribute('focusable', 'false'); + const use = document.createElementNS(SVG_NS, 'use'); + use.setAttribute('href', SKY_ICONS[band.sky]); + icon.appendChild(use); + cell.appendChild(icon); + + el.hourBar.appendChild(cell); + hourCells.push(cell); + } + hourNowIndex = -1; +} + +/** 把当前时刻对应的那一格标成状态色。 */ +function setHourNow(index) { + if (!hourCells.length) return; + if (hourNowIndex === index) return; + if (hourNowIndex >= 0 && hourCells[hourNowIndex]) { + hourCells[hourNowIndex].removeAttribute('data-now'); + } + if (hourCells[index]) hourCells[index].dataset.now = 'true'; + hourNowIndex = index; +} + +/** + * 图标带的文字替代:读屏用户拿不到图标,得靠这句话知道 + * 「对方那边一天里的哪一段是深夜、现在落在哪一段」。 + */ +function setHourBarLabel(cityTitle, band) { + if (!el.hourBar) return; + const label = `${cityTitle} 24 小时昼夜分布(每小时一格):深夜 22:00–06:00,清晨 06:00–09:00,白天 09:00–18:00,傍晚 18:00–22:00;当前在${band.label}段`; + // 值不变就不写:render() 每秒跑一次,无谓地改 aria-label 会让读屏反复重播。 + setAttr(el.hourBar, 'aria-label', label); +} + +/* ------------------------------------------------------------------ * + * 渲染 + * ------------------------------------------------------------------ */ + +function render() { + const now = new Date(); + const target = zonedInfo(state.target.zone, now); + const home = zonedInfo(state.home.zone, now); + + const band = bandOf(target.hour, target.minute); + const homeBand = bandOf(home.hour, home.minute); + + // 页头:两个城市并置。两侧是同一个城市时不重复显示,也不显示交换箭头。 + // 同城判定同时看中文名和时区 ID:只看名字的话, + // 将来出现两个同名不同区的城市时会误判成同城。 + const sameCity = + state.target.title === state.home.title && state.target.zone === state.home.zone; + setText(el.pageTitleTarget, state.target.title); + setText(el.pageTitleHome, sameCity ? '' : state.home.title); + // 隐藏而不是清空:清空会留下一个空的 flex 子项,尾部多出 7px 间隙。 + const pairDisplay = sameCity ? 'none' : ''; + if (el.pageTitleHome.style.display !== pairDisplay) { + el.pageTitleHome.style.display = pairDisplay; + } + if (el.pageTitleSwap.style.display !== pairDisplay) { + el.pageTitleSwap.style.display = pairDisplay; + } + // 标题的可访问名显式给:里面的对调按钮若参与 name-from-content, + // 标题会被读成「洛杉矶 对调两个城市 上海」。显式命名后标题只报两个城市名, + // 按钮本身仍是独立按钮,聚焦到它时会单独播报。 + setAttr(el.pageTitle, 'aria-label', sameCity ? state.target.title : `${state.target.title} ${state.home.title}`); + + // 判定区:整页唯一的状态色在这里,其余一律中性。 + // 「养号窗口」的内容并入这一块,不再单独占一行。 + // 状态色变量挂在 上,判定文字与色点共用同一套变量。 + // 每秒重写同一个属性会让样式每秒失效一次,所以先比再写。 + if (document.documentElement.dataset.band !== band.color) { + document.documentElement.dataset.band = band.color; + } + if (el.verdict.dataset.band !== band.color) el.verdict.dataset.band = band.color; + setText(el.verdictTitle, band.verdict); + setText(el.verdictDetail, `对方${band.label} ${band.range} · ${band.advice}`); + + // 只在「你这边比对方更晚」时补一句提醒——这是关于你自己而非对方的。 + const extra = extraNote(band, homeBand); + if (extra) { + setText(el.verdictExtra, extra); + setHidden(el.verdictExtra, false); + } else { + setHidden(el.verdictExtra, true); + setText(el.verdictExtra, ''); + } + + // 对方时钟 + setText(el.targetHeading, state.target.title); + setText(el.targetMeta, `${state.target.en || state.target.title} · ${target.zoneLabel}`); + setText(el.targetClock, state.clockFormat === '24h' ? target.time24 : target.time12); + setText(el.targetDate, target.date); + + // 我的时钟 + setText(el.homeHeading, state.home.title); + setText(el.homeMeta, `${state.home.en || state.home.title} · ${home.zoneLabel}`); + setText(el.homeClock, state.clockFormat === '24h' ? home.time24 : home.time12); + setText(el.homeDate, home.date); + + // 城市旁的昼夜图标:每城一个,太阳 / 半日 / 月亮。 + setAttr(el.targetIconUse, 'href', SKY_ICONS[band.sky]); + setAttr(el.homeIconUse, 'href', SKY_ICONS[homeBand.sky]); + + // 中文时段:12H 模式下它替代 AM/PM;24H 模式本身已含时段,故不重复显示。 + const showPeriod = state.clockFormat !== '24h'; + setHidden(el.targetPeriod, !showPeriod); + setHidden(el.homePeriod, !showPeriod); + if (showPeriod) { + setText(el.targetPeriod, target.period); + setText(el.homePeriod, home.period); + } + + // 一天的图标带:标出对方此刻所在的那一小时。 + setText(el.daylineLabel, `${state.target.title}的一天`); + setHourBarLabel(state.target.title, band); + setHourNow(target.hour); + + // 时差 + const diffMinutes = home.offsetMinutes - target.offsetMinutes; + if (state.target.zone === state.home.zone) { + setText(el.factDiff, '两边同一时区,时间完全一致'); + } else if (diffMinutes === 0) { + // 同一时刻偏移相同但并非同一时区(例如洛杉矶与凤凰城), + // 随夏令时切换会分开,此时不能声称「同一时区」。 + setText(el.factDiff, '当前时差 0 小时(此刻同步)'); + } else { + // ahead 永远是「时区靠前」的那一侧,所以动词恒为「快」。 + // 之前这里跟着 diff 的正负写「快/慢」,结果主语换了动词没换, + // 会出现「上海比洛杉矶慢约 15 小时」这种自相矛盾的说法。 + const homeAhead = diffMinutes > 0; + const ahead = homeAhead ? state.home.title : state.target.title; + const behind = homeAhead ? state.target.title : state.home.title; + const parts = [`${ahead}比${behind}快${formatDiff(diffMinutes)}`]; + const dayDiff = dayDelta(target, home); + if (dayDiff < 0) parts.push('对方还在昨天'); + else if (dayDiff > 0) parts.push('对方那边已是明天'); + setText(el.factDiff, parts.join(' · ')); + } +} + +/** 目标日期相对对照日期的日历天数差。 */ +function dayDelta(target, home) { + const t = Date.UTC(target.year, target.month - 1, target.day); + const h = Date.UTC(home.year, home.month - 1, home.day); + return Math.round((t - h) / 86400000); +} + +/** 当我方比对方更晚 / 都处于深夜时,补一条给用户自己的提醒。 */ +function extraNote(band, homeBand) { + if (SEVERITY[homeBand.color] > SEVERITY[band.color]) { + // 注意不能写「比对方更晚」:01:43 和 13:43 并排摆着, + // 说「更晚」会和上面的时钟自相矛盾。改成说「该休息」。 + return `你自己也是${homeBand.label},比对方更该休息,长对话先收着。`; + } + if (homeBand.color === 'red' && band.color === 'red') { + return '你俩都在深夜,同步作息反而最自然。'; + } + return ''; +} + +/* ------------------------------------------------------------------ * + * 城市选择器(combobox) + * ------------------------------------------------------------------ */ + +/** + * @param {object} options + * @param {HTMLInputElement} options.input + * @param {HTMLUListElement} options.list + * @param {HTMLElement} options.emptyEl 无结果时的提示(放在 listbox 之外) + * @param {() => object} options.getValue + * @param {(city: object) => void} options.onSelect + */ +function createCombo({ input, list, emptyEl, getValue, onSelect }) { + let options = []; + let activeIndex = -1; + let open = false; + // 当前候选列表是不是由输入框内容筛出来的。 + // 聚焦时展开的是「常用城市」列表,与输入框里的城市名对不上, + // 这时按 Enter 不能默认选首项,否则会把当前城市悄悄改掉。 + let listFromInput = false; + + function currentValue() { + return getValue(); + } + + function renderOptions() { + list.textContent = ''; + activeIndex = -1; + // 选项重建后旧的 aria-activedescendant 会指向已不存在的元素, + // 必须同步清掉,否则读屏拿到的是悬空引用。 + input.removeAttribute('aria-activedescendant'); + if (emptyEl) emptyEl.textContent = '没找到这个城市,换个关键词试试'; + + const current = currentValue(); + options.forEach((entry, index) => { + const item = document.createElement('li'); + item.className = 'combo-option'; + item.id = `${list.id}-opt-${index}`; + item.setAttribute('role', 'option'); + // 国家默认项在列表里叫「中国(默认)」,选中后落到城市名「中国」, + // 所以标题比较要去掉「(默认)」后缀,否则选中态永远不同步。 + const entryTitle = entry.title.replace('(默认)', ''); + const titleMatches = Boolean(current) && (current.title === entry.title || current.title === entryTitle); + const selected = Boolean(current) && current.zone === entry.zone && titleMatches; + item.setAttribute('aria-selected', String(selected)); + item.dataset.index = String(index); + + const title = document.createElement('span'); + title.className = 'combo-option-title'; + title.textContent = entry.title; + + const sub = document.createElement('span'); + sub.className = 'combo-option-sub'; + sub.textContent = entry.subtitle; + + item.append(title, sub); + list.appendChild(item); + }); + } + + function setOpen(next) { + open = next; + const hasOptions = options.length > 0; + // 没有候选时不要留一个空 listbox 盖在空态提示上。 + // 和 render() 一样先比再写:同值重写会白白触发一次属性变更与样式失效。 + setHidden(list, !next || !hasOptions); + if (emptyEl) setHidden(emptyEl, !next || hasOptions); + setAttr(input, 'aria-expanded', String(next && hasOptions)); + if (!next) { + activeIndex = -1; + input.removeAttribute('aria-activedescendant'); + } + } + + /** + * @param {string} [query] 覆盖输入框内容来筛选(聚焦时用空串展示常用城市) + */ + function refresh(query) { + const q = query === undefined ? input.value : query; + options = searchEntries(q); + // 只有「确实输入了非空关键词」时,候选才算来自输入。 + // 空查询得到的是常用城市列表,与输入框内容无关, + // 这时按 Enter 若回退选首项,会把当前城市悄悄改掉。 + listFromInput = q.trim() !== ''; + renderOptions(); + setOpen(true); + } + + function highlight(index) { + const items = list.querySelectorAll('.combo-option'); + items.forEach((item) => item.removeAttribute('data-active')); + if (items.length === 0) { + input.removeAttribute('aria-activedescendant'); + activeIndex = -1; + return; + } + // 越界回绕:列表只有一项时连按两次 ↓ 也不会把高亮清空导致 Enter 失效。 + const next = (((index % items.length) + items.length) % items.length); + activeIndex = next; + const item = items[next]; + item.setAttribute('data-active', 'true'); + input.setAttribute('aria-activedescendant', item.id); + item.scrollIntoView({ block: 'nearest' }); + } + + function commit(entry) { + if (!entry) return; + setOpen(false); + onSelect(entryToCity(entry)); + input.value = currentValue().title; + // 全选新值:用户接着打字时是替换,而不是在末尾追加。 + input.select(); + } + + function resetInput() { + input.value = currentValue().title; + } + + input.addEventListener('focus', () => { + // 全选当前城市名,直接输入即可替换。 + // 必须用 select() 而不是 setSelectionRange():前者会走一遍聚焦步骤, + // 能把 DOM 焦点真正落到输入框上,键盘操作才收得到事件。 + input.select(); + // 同时把候选展开成常用城市列表,方便不输入就直接浏览。 + refresh(''); + }); + + input.addEventListener('click', () => { + // 已经获得焦点时再点一下不会触发 focus,这里补一次展开。 + if (!open) { + refresh(''); + // 同样全选,让用户接着打字是替换当前城市名而不是追加。 + input.select(); + } + }); + + input.addEventListener('input', () => { + refresh(); + }); + + input.addEventListener('keydown', (event) => { + // 输入法组字过程中的按键不参与候选操作,否则选词回车会误选城市。 + if (event.isComposing || event.keyCode === 229) return; + + if (event.key === 'ArrowDown') { + event.preventDefault(); + if (!open) refresh(); + else highlight(activeIndex + 1); + return; + } + if (event.key === 'ArrowUp') { + event.preventDefault(); + if (!open) refresh(); + else highlight(activeIndex < 0 ? options.length - 1 : activeIndex - 1); + return; + } + if (event.key === 'Enter') { + if (!open) return; + // 有高亮项就用高亮项;没有高亮时,只有当候选确实是按输入内容筛出来的 + // 才回退选首项 —— 聚焦时的「常用城市」列表与输入内容无关, + // 直接回退会把当前城市悄悄改成列表首项。 + const pick = + activeIndex >= 0 && options[activeIndex] + ? options[activeIndex] + : listFromInput + ? options[0] + : null; + if (pick) { + event.preventDefault(); + commit(pick); + } + return; + } + if (event.key === 'Escape') { + if (open) { + event.preventDefault(); + setOpen(false); + resetInput(); + } + return; + } + if (event.key === 'Tab') { + setOpen(false); + resetInput(); + } + }); + + // mousedown 立刻提交:这是最早能拿到选择的时机,早于任何失焦。 + // 同时 preventDefault,避免输入框失焦导致列表收起。 + list.addEventListener('mousedown', (event) => { + const item = event.target.closest('.combo-option'); + if (!item) return; + event.preventDefault(); + commit(options[Number(item.dataset.index)]); + }); + + // 兜底:某些宿主只派发 click,那就走这里(列表已关说明上面已提交过)。 + list.addEventListener('click', (event) => { + if (!open) return; + const item = event.target.closest('.combo-option'); + if (!item) return; + commit(options[Number(item.dataset.index)]); + }); + + input.addEventListener('blur', () => { + // 延后一点再收起:部分宿主在点击候选之前会先让输入框失焦, + // 立刻收起会让用户点不中。 + // 这里用真实焦点判断而不是标志位——标志位会粘住(选中过一次之后 + // 再点空白就收不起来),真实焦点也不会在用户点回输入框时误收起。 + window.setTimeout(() => { + if (document.activeElement === input) return; + setOpen(false); + resetInput(); + }, 200); + }); + + return { + setValue(text) { + input.value = text; + }, + }; +} + +/* ------------------------------------------------------------------ * + * 主题 + * ------------------------------------------------------------------ */ + +const media = window.matchMedia('(prefers-color-scheme: dark)'); + +function resolvedTheme() { + if (state.theme === 'auto') return media.matches ? 'dark' : 'light'; + return state.theme; +} + +/** + * URL 参数 ?theme=light|dark 覆盖初始主题。 + * 用途:把同一个页面并排放两份(浅色 / 深色)做视觉对照, + * 预览页直接复用这份 index.html,不再维护一份手工同步的副本。 + */ +function themeFromUrl() { + try { + const t = new URLSearchParams(window.location.search).get('theme'); + return t === 'light' || t === 'dark' ? t : null; + } catch { + return null; + } +} + +function applyTheme() { + const theme = resolvedTheme(); + document.documentElement.dataset.theme = theme; + const isDark = theme === 'dark'; + // 主题按钮用固定的半填充圆图标,不跟昼夜图标混用: + // 太阳/月亮已经被"对方现在是白天还是夜里"占用了,页面上只应出现两枚。 + // 主题语义由 aria-pressed + 无障碍文本承担。 + el.themeToggle.setAttribute('aria-pressed', String(isDark)); + el.themeToggleLabel.textContent = isDark ? '切换到浅色主题' : '切换到深色主题'; +} + +function toggleTheme() { + state.theme = resolvedTheme() === 'dark' ? 'light' : 'dark'; + applyTheme(); + savePrefs(); +} + +/* ------------------------------------------------------------------ * + * 时间制式 + * ------------------------------------------------------------------ */ + +function applyClockFormat() { + const is24 = state.clockFormat === '24h'; + // data-fmt 是首帧可见的视觉依据(由 head 内联脚本预先写好), + // aria-pressed 负责无障碍语义,两者保持同步。 + document.documentElement.dataset.fmt = state.clockFormat; + el.fmt12.setAttribute('aria-pressed', String(!is24)); + el.fmt24.setAttribute('aria-pressed', String(is24)); +} + +function setClockFormat(format) { + if (format !== '12h' && format !== '24h') return; + state.clockFormat = format; + applyClockFormat(); + savePrefs(); + render(); +} + +/* ------------------------------------------------------------------ * + * 城市对调 + * ------------------------------------------------------------------ */ + +/** + * 一键对调两个城市。 + * + * 判定始终跟着「对方城市」走,所以对调等于换了一个提问视角: + * 原本在问「现在能不能找他聊」,对调之后变成「他那边的人想找我聊」。 + * 两个时钟、时差、图标带、判定全部由 render() 按新的 state 重算,不用额外处理。 + */ +function swapCities() { + const target = state.target; + state.target = state.home; + state.home = target; + savePrefs(); + render(); + // 两个城市输入框也要跟着翻。否则标题写「上海 ⇄ 洛杉矶」, + // 而标注「对方城市」的框里还是「洛杉矶」——判定会用错人, + // 同一个控件内部还自相矛盾(框里的文字与下拉列表里选中项对不上)。 + // 只能在这里写:render() 每秒跑一次,在那里回写会抹掉用户正在输入的城市名。 + el.comboTarget.value = state.target.title; + el.comboHome.value = state.home.title; +} + +/* ------------------------------------------------------------------ * + * 启动 + * ------------------------------------------------------------------ */ + +function init() { + INDEX = buildIndex(); + loadPrefs(); + // URL 里的 ?theme= 优先于存档(用于并排预览同一个页面的两种主题)。 + const urlTheme = themeFromUrl(); + if (urlTheme) state.theme = urlTheme; + applyTheme(); + applyClockFormat(); + buildHourBar(); + + el.themeToggle.addEventListener('click', toggleTheme); + el.fmt12.addEventListener('click', () => setClockFormat('12h')); + el.fmt24.addEventListener('click', () => setClockFormat('24h')); + // ⇄ 是真正的 + 上海 + +

实时对照 · 现在该不该开口

+ +
+
+ + +
+ +
+ + +
+
+ +
+ + + + +
+
+
+ +
+ + + + +
+
+
+ +
+ +
+ +
+

正在读取时间…

+

+ +
+
+ +
+ +
+
+

对方

+

+ + 洛杉矶 +

+

+ --:--:-- + +

+

+

+
+
+

我的

+

+ + 上海 +

+

+ --:--:-- + +

+

+

+
+
+ +
+ +
+

对方的一天

+ + +
+ +
+ +
+
+
时差
+
+
+
+ + + + + + + diff --git a/plugins/liuchen19960902/timezone-guard/miniapp/client/styles.css b/plugins/liuchen19960902/timezone-guard/miniapp/client/styles.css new file mode 100644 index 00000000..e48b938d --- /dev/null +++ b/plugins/liuchen19960902/timezone-guard/miniapp/client/styles.css @@ -0,0 +1,746 @@ +/* A/时差保安 — 独立 Client 视觉层。 + 语义色全部收敛在变量声明里,组件样式只引用变量。 + 设计取向:一页一个主角(判定),整页只保留一个状态色(判定区), + 太阳/月亮只出现在城市旁。 */ + +:root { + --mcode-bg-secondary: #eef0f2; + --mcode-surface: #ffffff; + --mcode-surface-muted: #f0f1f3; + /* 卡片外壳外的底色:卡片浮在它上面,层次才分得开。 */ + --mcode-canvas: #e8eaec; + --mcode-text: #17191c; + --mcode-text-muted: #5c6268; + --mcode-text-subtle: #6b7178; + --mcode-border: #17191c21; + --mcode-border-strong: #17191c47; + --mcode-focus: #0077d9; + --mcode-success: #0f7a3c; + --mcode-warning: #a95b08; + --mcode-danger: #b42318; + --mcode-primary-action-bg: #17191c; + --mcode-primary-action-text: #ffffff; + + /* 状态色:fg 用于文字,dot 用于色点。 */ + --band-ok-fg: var(--mcode-success); + --band-ok-dot: var(--mcode-success); + --band-warn-fg: var(--mcode-warning); + --band-warn-dot: var(--mcode-warning); + --band-bad-fg: var(--mcode-danger); + --band-bad-dot: var(--mcode-danger); + + /* 窗口宽度默认 560,可拉宽到任意尺寸。 + 上限给到 680:窄窗口下它就是 100%(贴合), + 宽窗口下也不会让两列时钟被扯得太散。 */ + --page-max: 680px; + --radius-card: 12px; + --radius-control: 8px; + + --sans: ui-sans-serif, -apple-system, system-ui, "Segoe UI", "PingFang SC", + "Microsoft YaHei", Helvetica, Arial, sans-serif; + --mono: ui-monospace, "SF Mono", SFMono-Regular, "JetBrains Mono", Menlo, + Consolas, monospace; +} + +:root[data-theme="dark"] { + --mcode-bg-secondary: #191c1f; + --mcode-surface: #1a1d20; + --mcode-surface-muted: #1f2225; + --mcode-text: #edeff1; + --mcode-text-muted: #9ba1a7; + --mcode-text-subtle: #838a90; + --mcode-border: #ffffff21; + --mcode-border-strong: #ffffff47; + /* 焦点色要同时压得住三种相邻底色:深色页面底、控件容器面, + 以及选中态分段按钮的浅色药丸(#edeff1)。 + 更亮的蓝在浅色药丸上只有 2.53:1,这档更暗的蓝对三处都在 3.9:1 以上。 */ + --mcode-focus: #0077d9; + --mcode-success: #5bd98a; + --mcode-warning: #f0a94a; + --mcode-danger: #f87171; + --mcode-primary-action-bg: #edeff1; + --mcode-primary-action-text: #101214; + --mcode-canvas: #0b0d0e; +} + +/* 状态色挂在 上,全页继承:判定文字与色点共用同一套变量。 */ +[data-band="green"] { + --band-fg: var(--band-ok-fg); + --band-dot: var(--band-ok-dot); +} + +[data-band="yellow"] { + --band-fg: var(--band-warn-fg); + --band-dot: var(--band-warn-dot); +} + +[data-band="red"] { + --band-fg: var(--band-bad-fg); + --band-dot: var(--band-bad-dot); +} + +/* 首帧占位:脚本还没跑时不该显示任何状态色, + 否则会出现「黄色图标配红色文案」这种自相矛盾的第一帧。 */ +[data-band="neutral"] { + --band-fg: var(--mcode-text); + --band-dot: var(--mcode-border-strong); +} + +* { + box-sizing: border-box; +} + +html, +body { + margin: 0; + padding: 0; +} + +body { + /* 卡片浮在这层底色上,靠一道灰差建立前后关系,不用投影堆层次。 */ + background: var(--mcode-canvas); + color: var(--mcode-text); + font-family: var(--sans); + font-size: 14px; + line-height: 1.6; + -webkit-font-smoothing: antialiased; + padding: 16px; +} + +.icon-sprite { + position: absolute; + width: 0; + height: 0; + overflow: hidden; +} + +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0 0 0 0); + white-space: nowrap; + border: 0; +} + +.page { + max-width: var(--page-max); + /* 铺满一屏:内容不满时,把多出来的空间平均分给各分区之间的间隙, + 整张卡片从页头到时差行撑到底,而不是在底部堆一块死白。 */ + min-height: calc(100vh - 32px); + margin: 0 auto; + padding: 22px 24px 26px; + background: var(--mcode-surface); + border: 1px solid var(--mcode-border); + border-radius: var(--radius-card); + /* 投影只用来表达「这张卡片浮在画布上」,不做装饰。 */ + box-shadow: 0 1px 2px rgb(10 10 10 / 6%); + display: flex; + flex-direction: column; + /* 分区之间的最小间距交给 row-gap;条件允许时再多分一点空气, + 这样每一段间距都一致,发丝线正好落在每段间距的中间。 */ + row-gap: 20px; + justify-content: space-between; +} + +/* ---------- 页头 ---------- */ + +.page-head { + display: flex; + align-items: flex-start; + justify-content: space-between; + gap: 16px; +} + +.page-head-text { + min-width: 0; +} + +.page-title { + margin: 0; + display: flex; + align-items: center; + gap: 7px; + font-size: 17px; + line-height: 24px; + font-weight: 600; + letter-spacing: -0.01em; +} + +/* 城市对中间的 ⇄:真正可点的一键对调。 + 按钮撑出来的 3px 内边距用 -3px 外边距抵消,所以视觉间距和改之前一模一样, + 但多了一个 21×21 的点击区。 */ +.page-title .swap-btn { + flex: none; + display: inline-flex; + align-items: center; + justify-content: center; + margin: -3px; + padding: 3px; + border: 0; + border-radius: 4px; + background: none; + color: var(--mcode-text-muted); + cursor: pointer; +} + +/* 悬停时把图标提到正文色:浅色主题是变深,深色主题是变亮, + 两个主题都是"更强调"的方向。 */ +.page-title .swap-btn:hover { + color: var(--mcode-text); +} + +/* 焦点语言与全页统一:2px 实色 --mcode-focus 环。 + offset 2px 时整道环正好落在标题 7px 的间隙里,不会压到城市名上。 */ +.page-title .swap-btn:focus-visible { + outline: 2px solid var(--mcode-focus); + outline-offset: 2px; +} + +.page-title .swap { + width: 15px; + height: 15px; +} + +.lede { + margin: 3px 0 0; + color: var(--mcode-text-muted); + font-size: 12px; + line-height: 18px; +} + +.head-tools { + flex: none; + display: flex; + align-items: center; + gap: 8px; +} + +/* 12H / 24H 分段控件:选中段是实心药丸,靠底色差即可分辨。 */ +.segmented { + display: inline-flex; + gap: 2px; + padding: 2px; + border: 1px solid var(--mcode-border); + border-radius: var(--radius-control); + background: var(--mcode-surface); +} + +.seg { + border: 0; + border-radius: 6px; + padding: 4px 9px; + background: transparent; + color: var(--mcode-text-muted); + font-family: var(--mono); + font-size: 11px; + line-height: 15px; + letter-spacing: 0.02em; + cursor: pointer; + transition: background 150ms ease-out, color 150ms ease-out; +} + +.seg:hover { + color: var(--mcode-text); +} + +/* 选中态由 驱动:首帧就能显示正确的制式, + 不会出现「先按 12H 画一帧再翻转」的闪烁。 */ +:root[data-fmt="12h"] #fmt-12h, +:root[data-fmt="24h"] #fmt-24h { + background: var(--mcode-primary-action-bg); + color: var(--mcode-primary-action-text); + font-weight: 600; +} + +.icon-button { + flex: none; + display: inline-flex; + align-items: center; + justify-content: center; + width: 30px; + height: 30px; + padding: 0; + border: 0; + border-radius: var(--radius-control); + background: transparent; + color: var(--mcode-text-muted); + cursor: pointer; + transition: background 150ms ease-out, color 150ms ease-out; +} + +.icon-button:hover { + background: var(--mcode-surface-muted); + color: var(--mcode-text); +} + +.icon { + width: 15px; + height: 15px; +} + +/* ---------- 城市切换 ---------- */ + +.switcher { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 14px; +} + +.field { + min-width: 0; +} + +.field-label { + display: block; + margin-bottom: 6px; + color: var(--mcode-text-muted); + font-size: 11px; + line-height: 15px; +} + +.combo { + position: relative; +} + +.combo-input { + width: 100%; + height: 36px; + padding: 0 30px 0 12px; + border: 1px solid var(--mcode-border); + border-radius: var(--radius-control); + background: var(--mcode-surface); + color: var(--mcode-text); + font: inherit; + font-size: 14px; + line-height: 20px; +} + +.combo-input::placeholder { + color: var(--mcode-text-subtle); +} + +.combo-input:hover { + border-color: var(--mcode-text-subtle); +} + +.combo-input:focus, +.combo-input:focus-visible { + /* offset 0:实色 outline 紧贴同色 border,合成一道 3px 的实边, + 不会出现「两条蓝线夹一道缝」的双线。 */ + outline: 2px solid var(--mcode-focus); + outline-offset: 0; + border-color: var(--mcode-focus); +} + +/* 焦点语言全页统一:一道 2px 实色 --mcode-focus 环。 + 之前用的是 25% 透明度的软环,合成到浅底上只有 1.4:1,达不到 3:1; + 而 .seg 与 .icon-button 没有边框变化,这道环是它们唯一的焦点提示。 */ +.seg:focus-visible { + outline: 2px solid var(--mcode-focus); + outline-offset: -2px; +} + +.icon-button:focus-visible { + outline: 2px solid var(--mcode-focus); + outline-offset: 2px; +} + +.combo-chevron { + position: absolute; + top: 50%; + right: 10px; + width: 14px; + height: 14px; + color: var(--mcode-text-subtle); + pointer-events: none; + transform: translateY(-50%); +} + +.combo-list { + position: absolute; + z-index: 20; + top: calc(100% + 4px); + left: 0; + right: 0; + max-height: 264px; + margin: 0; + padding: 4px; + overflow-y: auto; + list-style: none; + border: 1px solid var(--mcode-border); + border-radius: var(--radius-card); + background: var(--mcode-surface); + box-shadow: 0 0 20px rgb(10 10 10 / 8%); +} + +.combo-list[hidden] { + display: none; +} + +.combo-option { + display: flex; + flex-direction: column; + gap: 1px; + padding: 6px 10px; + border-radius: var(--radius-control); + cursor: pointer; +} + +.combo-option:hover, +.combo-option[data-active="true"] { + background: var(--mcode-surface-muted); +} + +.combo-option[aria-selected="true"] { + background: var(--mcode-bg-secondary); +} + +.combo-option-title { + font-size: 14px; + line-height: 20px; + color: var(--mcode-text); +} + +.combo-option-sub { + font-size: 12px; + line-height: 16px; + color: var(--mcode-text-muted); +} + +/* 空态提示放在 listbox 之外,避免 listbox 里混入非 option 子元素 */ +.combo-empty { + position: absolute; + top: calc(100% + 4px); + left: 0; + right: 0; + margin: 0; + padding: 10px; + border: 1px solid var(--mcode-border); + border-radius: var(--radius-card); + background: var(--mcode-surface); + color: var(--mcode-text-muted); + font-size: 13px; + line-height: 20px; +} + +.combo-empty[hidden] { + display: none; +} + +/* ---------- 分区线:靠留白和发丝线组织版面,不用卡片框 ---------- */ + +/* 间距由 .page 的 row-gap 统一给,分区线自己不再带外边距, + 否则「固定 20px 外边距 + 均分空气」两套间距会互相打架。 */ +.rule { + height: 0; + margin: 0; + border: 0; + border-top: 1px solid var(--mcode-border); +} + +/* ---------- 判定区:整页唯一的状态色,也是唯一的焦点 ---------- */ + +.verdict { + display: flex; + align-items: flex-start; + gap: 11px; +} + +.verdict-dot { + flex: none; + width: 11px; + height: 11px; + margin-top: 9px; + border-radius: 50%; + background: var(--band-dot); +} + +.verdict-title { + margin: 0; + font-size: 24px; + line-height: 30px; + font-weight: 600; + letter-spacing: -0.01em; + color: var(--band-fg); +} + +.verdict-detail { + margin: 5px 0 0; + color: var(--mcode-text-muted); + font-size: 13px; + line-height: 20px; +} + +.verdict-extra { + margin: 2px 0 0; + color: var(--mcode-text-subtle); + font-size: 12px; + line-height: 18px; +} + +/* ---------- 双方时钟:并排对照,中间一条竖线 ---------- */ + +.clocks { + display: grid; + grid-template-columns: 1fr 1fr; +} + +.clock { + min-width: 0; + padding: 0 20px; +} + +.clock:first-child { + padding-left: 0; +} + +.clock:last-child { + padding-right: 0; + border-left: 1px solid var(--mcode-border); +} + +.clock-role { + margin: 0 0 4px; + color: var(--mcode-text-subtle); + font-size: 11px; + line-height: 15px; +} + +/* 太阳/月亮只在这里出现:每个城市一个,说明那边现在是白昼还是夜里。 */ +.clock-city { + margin: 0 0 10px; + display: flex; + align-items: center; + gap: 7px; + min-width: 0; +} + +.clock-city .sky { + flex: none; + width: 20px; + height: 20px; + color: var(--mcode-text); +} + +.clock-city .name { + font-size: 15px; + line-height: 22px; + font-weight: 600; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.clock-time { + margin: 0; + display: flex; + align-items: baseline; + gap: 6px; + font-family: var(--mono); + font-size: 28px; + line-height: 34px; + font-weight: 400; + letter-spacing: -0.02em; + font-variant-numeric: tabular-nums; +} + +.clock-period { + color: var(--mcode-text-muted); + font-family: var(--sans); + font-size: 12px; + line-height: 18px; + letter-spacing: 0; +} + +.clock-date { + margin: 4px 0 0; + color: var(--mcode-text-muted); + font-size: 12px; + line-height: 18px; +} + +.clock-zone { + margin: 1px 0 0; + color: var(--mcode-text-subtle); + font-size: 11px; + line-height: 16px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +/* ---------- 一天的图标带:对方那一整天 ---------- */ + +/* 格子间隙由变量给出:刻度要按它算偏移,窄断点改间隙时两处一起变。 */ +.dayline { + --hour-gap: 2px; +} + +.dayline-label { + margin: 0 0 12px; + color: var(--mcode-text-muted); + font-size: 11px; + line-height: 15px; +} + +.hour-bar { + display: grid; + grid-template-columns: repeat(24, 1fr); + gap: var(--hour-gap); +} + +/* 一小时一格,格里一枚昼夜图标:太阳 / 半日 / 月亮。 + 形状本身就在说「那边是白天还是夜里」,不再靠灰阶深浅去暗示。 */ +.hour-cell { + aspect-ratio: 1; + display: grid; + place-items: center; + border-radius: 4px; +} + +.hour-icon { + width: 80%; + height: 80%; + color: var(--mcode-text-subtle); +} + +/* 深夜那几格的墨色再重一档:不靠颜色,只靠一点点重量让「对方在睡」那一段先跳出来。 */ +.hour-cell[data-tone="night"] .hour-icon { + color: var(--mcode-text-muted); +} + +/* 当前所在的那一小时:唯一带状态色的一格。 + 图标反白是为了在状态块上还看得清形状,不是给图标上状态色。 */ +.hour-cell[data-now="true"] { + background: var(--band-dot); +} + +.hour-cell[data-now="true"] .hour-icon { + color: var(--mcode-primary-action-text); +} + +.hour-ticks { + position: relative; + height: 16px; + margin-top: 11px; +} + +/* 刻度必须落在格子的左边缘上。网格的间隙会把每一格整体右推, + 第 i 格左边缘 = i/24 × 100% + i/24 × 间隙,所以这三档要补上间隙的相应份额, + 否则 6/12/18 会固定偏左 0.5/1.0/1.5px。 */ +.hour-ticks span { + position: absolute; + top: 0; + transform: translateX(-50%); + color: var(--mcode-text-subtle); + font-family: var(--mono); + font-size: 11px; + line-height: 14px; +} + +.hour-ticks span:nth-child(1) { + left: 0; + transform: none; +} + +.hour-ticks span:nth-child(2) { + left: calc(25% + var(--hour-gap) * 0.25); +} + +.hour-ticks span:nth-child(3) { + left: calc(50% + var(--hour-gap) * 0.5); +} + +.hour-ticks span:nth-child(4) { + left: calc(75% + var(--hour-gap) * 0.75); +} + +.hour-ticks span:nth-child(5) { + left: 100%; + transform: translateX(-100%); +} + +/* ---------- 信息行 ---------- */ + +.facts { + margin: 0; + display: flex; + flex-direction: column; + gap: 8px; +} + +.fact { + display: flex; + align-items: baseline; + gap: 14px; +} + +.fact dt { + flex: none; + width: 34px; + color: var(--mcode-text-subtle); + font-size: 11px; + line-height: 18px; +} + +.fact dd { + margin: 0; + min-width: 0; + color: var(--mcode-text); + font-size: 13px; + line-height: 18px; +} + +/* ---------- 响应式 ---------- */ + +@media (max-width: 460px) { + body { + padding: 8px; + } + + .page { + padding: 16px 16px 20px; + min-height: calc(100vh - 16px); + } + + .switcher { + grid-template-columns: 1fr; + } + + /* 24 格摊在 ~350px 里时单格只有 12.7px:把间隙收窄、图标吃满格子。 + 否则半日图标的地平线会被抗锯齿吃掉,又读成一个小山包。 */ + .dayline { + --hour-gap: 1px; + } + + .hour-icon { + width: 100%; + height: 100%; + } + + .clocks { + grid-template-columns: 1fr; + } + + .clock { + padding: 0; + } + + .clock:last-child { + border-left: 0; + border-top: 1px solid var(--mcode-border); + padding-top: 16px; + margin-top: 16px; + } +} + +@media (prefers-reduced-motion: reduce) { + * { + transition-duration: 0.01ms !important; + animation-duration: 0.01ms !important; + } +} diff --git a/plugins/liuchen19960902/timezone-guard/miniapp/miniapp.json b/plugins/liuchen19960902/timezone-guard/miniapp/miniapp.json new file mode 100644 index 00000000..f9415e52 --- /dev/null +++ b/plugins/liuchen19960902/timezone-guard/miniapp/miniapp.json @@ -0,0 +1,27 @@ +{ + "schemaVersion": 1, + "artifacts": { + "client": [ + "./miniapp/client" + ], + "node": [ + "./miniapp/node" + ] + }, + "runtime": { + "kind": "process", + "entry": "./miniapp/node/server.mjs", + "lifecycle": "on-demand" + }, + "surface": { + "path": "/dashboard", + "window": { + "width": 560, + "height": 860, + "minWidth": 400, + "minHeight": 420, + "resizable": true + } + }, + "mcpEndpoints": [] +} diff --git a/plugins/liuchen19960902/timezone-guard/miniapp/node/miniapp-api.ts b/plugins/liuchen19960902/timezone-guard/miniapp/node/miniapp-api.ts new file mode 100644 index 00000000..f5d8b7a4 --- /dev/null +++ b/plugins/liuchen19960902/timezone-guard/miniapp/node/miniapp-api.ts @@ -0,0 +1,397 @@ +/** + * Agent-facing Mini App runtime authoring declarations. + * + * Copy this file into a generated plugin for type checking. It contains no Host implementation; + * the Host injects runtime values through start(context). + * Keep the .ts filename: Electron packaging excludes .d.ts files from dependency assets. + */ +export type JsonPrimitive = null | boolean | number | string; +export type JsonValue = JsonPrimitive | JsonObject | readonly JsonValue[]; +export type JsonObject = { readonly [key: string]: JsonValue }; + +declare const HOST_CONNECTOR_TOOL_REF: unique symbol; +export type HostConnectorToolRef = string & { + readonly [HOST_CONNECTOR_TOOL_REF]: 'HostConnectorToolRef'; +}; + +export interface HostConnectorTool { + readonly toolRef: HostConnectorToolRef; + readonly provider: string; + readonly name: string; + readonly description?: string; + readonly inputSchema: JsonValue; + readonly outputSchema?: JsonValue; +} + +export interface HostConnectorListResult { + readonly tools: readonly HostConnectorTool[]; + readonly partial: boolean; +} + +export interface HostConnectorCallOptions { + readonly signal?: AbortSignal; +} + +export interface HostConnectorCallResult { + readonly invocationId: string; + /** + * Raw provider result; it is not normalized by the Host and may be an object, array, or primitive. + * A single text-block array is one provider shape, not a global Host transport contract. + * Decode only a probe-observed envelope; preserve every other value, including direct strings. + */ + readonly value: JsonValue; +} + +export interface HostConnectorClient { + /** Candidate-safe inventory only; available before and after activation. */ + list(options?: HostConnectorCallOptions): Promise; + /** Activation-only business dispatch; call from request handling, never start(context). */ + call( + toolRef: HostConnectorToolRef, + arguments_: JsonObject, + options?: HostConnectorCallOptions, + ): Promise; +} + +export type HostConnectorErrorDisposition = + | 'not_dispatched' + | 'provider_reported' + | 'unknown_after_dispatch'; + +export type HostConnectorErrorCode = + | 'TOOL_REF_STALE' + | 'SERVICE_RESTARTED' + | 'REQUEST_CANCELLED' + | 'CONNECTOR_TIMEOUT' + | 'INVALID_ARGUMENTS' + | 'CONNECTOR_PROVIDER_ERROR' + | 'CONNECTOR_UNAVAILABLE' + | 'CONNECTOR_OUTCOME_UNKNOWN'; + +export interface HostConnectorError extends Error { + readonly code: HostConnectorErrorCode; + readonly disposition: HostConnectorErrorDisposition; + readonly retryable: boolean; + readonly invocationId?: string; + readonly diagnostic?: { + readonly issues: readonly { + readonly path: string; + readonly constraint: string; + readonly limit?: number; + }[]; + }; +} + +export interface MiniAppLogger { + debug(message: string, fields?: JsonObject): void; + info(message: string, fields?: JsonObject): void; + warn(message: string, fields?: JsonObject): void; + error(message: string, fields?: JsonObject): void; +} + +export type MiniAppAgentRunStatus = 'finished' | 'error' | 'aborted'; + +export type MiniAppAgentQuestionMode = 'questionnaire' | 'feature-enable' | 'plan'; + +export interface MiniAppAgentQuestionOption { + readonly id: string; + readonly label: string; + readonly description?: string; +} + +export interface MiniAppAgentQuestionStep { + readonly id: string; + readonly header?: string; + readonly question: string; + readonly description?: string; + readonly selectionMode: 'single' | 'multiple'; + readonly options: readonly MiniAppAgentQuestionOption[]; + /** Free-text "other" is always accepted; see `MiniAppAgentQuestionAnswer.otherText`. */ + readonly allowOther: true; +} + +/** Same questionnaire the Host chat renders; render every step and answer each one. */ +export interface MiniAppAgentQuestionnaire { + readonly schemaVersion: 2; + readonly id: string; + readonly title?: string; + readonly steps: readonly MiniAppAgentQuestionStep[]; + readonly mode?: MiniAppAgentQuestionMode; + /** Plan review Markdown and other mode-specific data. */ + readonly modePayload?: JsonObject; + /** Unix ms; the request is withdrawn after this. */ + readonly expiresAt?: number; +} + +export interface MiniAppAgentQuestionAnswer { + readonly stepId: string; + readonly selectedOptionIds: readonly string[]; + readonly selectedOther: boolean; + readonly otherText?: string; + readonly skipped?: boolean; +} + +/** A model as the Host's composer selects it; take the values from `models()`. */ +export interface MiniAppAgentModelSelection { + readonly providerId: string; + readonly modelId: string; + /** `''` means thinking is off; it is preserved, distinct from an absent `variant`. */ + readonly variant?: string; + readonly thinking?: { readonly effort: string }; +} + +/** One model this user can use. */ +export interface MiniAppAgentModelOption { + readonly providerId: string; + readonly modelId: string; + readonly displayName: string; + readonly variants?: readonly string[]; + readonly thinking?: { readonly efforts: readonly string[]; readonly default?: string }; +} + +export interface MiniAppAgentModels { + readonly models: readonly MiniAppAgentModelOption[]; + /** What a Node-created session starts with. */ + readonly default: MiniAppAgentModelSelection; +} + +export interface MiniAppAgentAgentOption { + /** Canonical name; what `agent` takes. */ + readonly name: string; + readonly displayName: string; + /** The default agent. */ + readonly primary: boolean; +} + +export interface MiniAppAgentAgents { + readonly agents: readonly MiniAppAgentAgentOption[]; +} + +export interface MiniAppAgentRunResult { + /** Pass back in `run({ sessionId })` to continue the same conversation. */ + readonly sessionId: string; + /** Absent when no turn ran: an `answer` accepted without starting a continuation. */ + readonly turnId?: string; + /** The model the turn was dispatched with; absent when no turn ran. */ + readonly model?: MiniAppAgentModelSelection; + /** `aborted` only when the Host confirmed the abort; an unconfirmed one rejects with `AGENT_OUTCOME_UNKNOWN`. */ + readonly status: MiniAppAgentRunStatus; + /** Final assistant reply; absent when the turn produced none or did not finish. */ + readonly text?: string; + readonly error?: { readonly code: string; readonly message: string }; + /** Set when the turn ended waiting on a questionnaire; render `request` and continue with `agent.answer`. */ + readonly pendingQuestion?: { + readonly requestId: string; + readonly mode: MiniAppAgentQuestionMode; + readonly request: MiniAppAgentQuestionnaire; + }; +} + +/** + * Progress of one run. `turnId` matches the result's, except that a `permission.requested` raised + * by a delegated child session carries that child's own `sessionId` and `turnId`; `reply` with + * those, and do not filter events by the root turn. Ignore unknown `type` values: new event + * types may be added without notice. + * - `run.queued`: all run slots are taken and the call waits at 1-based `position`; sent once, + * before the turn starts, so it has no `turnId` and names a session only when continuing one. + * - `turn.started`: the Agent began the turn; `model` is the model it was dispatched with. + * - `text.delta`: a piece of the reply as it streams. + * - `message.committed`: one complete assistant message (a turn can have several). + * - `tool.started` / `tool.finished`: a tool call by name; `ok` is false when it failed. + * - `turn.finished`: always last; same `status`, `text`, and `error` as the run result. + */ +/** + * Every event except `run.queued` names its session, so `reply` can be called from `onEvent` even + * before the `run` that created the session has returned. `answer` cannot: the paused `run` still holds the + * session's single-run slot while `question.requested` is delivered, so call `answer` only after + * that `run` resolves (an earlier call rejects with `BUSY`). Ignore event types you do not know. + */ +export type MiniAppAgentRunEvent = + | { readonly type: 'run.queued'; readonly sessionId?: string; readonly position: number } + | { + readonly type: 'turn.started'; + readonly sessionId: string; + readonly turnId: string; + readonly model: MiniAppAgentModelSelection; + } + | { + readonly type: 'text.delta'; + readonly sessionId: string; + readonly turnId: string; + readonly text: string; + } + | { + readonly type: 'message.committed'; + readonly sessionId: string; + readonly turnId: string; + readonly text: string; + } + | { + readonly type: 'tool.started'; + readonly sessionId: string; + readonly turnId: string; + readonly name: string; + } + | { + readonly type: 'tool.finished'; + readonly sessionId: string; + readonly turnId: string; + readonly name: string; + readonly ok: boolean; + } + /** A tool call is waiting for approval; decide it with `agent.reply`. */ + | { + readonly type: 'permission.requested'; + readonly sessionId: string; + /** Absent when the runtime did not attribute the ask to a turn. */ + readonly turnId?: string; + readonly requestId: string; + readonly toolName: string; + readonly toolInput?: string; + readonly reason: string; + } + /** The turn paused on a questionnaire; continue with `agent.answer`. */ + | { + readonly type: 'question.requested'; + readonly sessionId: string; + readonly turnId?: string; + readonly requestId: string; + readonly mode: MiniAppAgentQuestionMode; + readonly request: MiniAppAgentQuestionnaire; + } + | { + readonly type: 'turn.finished'; + readonly sessionId: string; + readonly turnId: string; + readonly status: MiniAppAgentRunStatus; + readonly text?: string; + readonly error?: { readonly code: string; readonly message: string }; + }; + +export interface MiniAppAgentRunOptions { + readonly signal?: AbortSignal; + readonly onEvent?: (event: MiniAppAgentRunEvent) => void; +} + +export type MiniAppAgentErrorCode = + | 'NOT_PERMITTED' + | 'BUSY' + | 'SESSION_NOT_FOUND' + | 'INVALID_ARGUMENTS' + | 'AGENT_UNAVAILABLE' + | 'REQUEST_CANCELLED' + | 'AGENT_OUTCOME_UNKNOWN' + | 'REQUEST_NOT_FOUND'; + +export interface MiniAppAgentError extends Error { + readonly code: MiniAppAgentErrorCode; + /** + * True when nothing was started and the same call may be retried later. + * `AGENT_OUTCOME_UNKNOWN` is never retryable: the turn may have run. + */ + readonly retryable: boolean; + /** Set on every `BUSY`: the session already has a run in flight, or the wait queue is full. */ + readonly reason?: 'session_busy' | 'queue_full'; +} + +/** + * Present only when the manifest declares `agentAccess: ["session.run"]`. + * A new Node session uses the primary Agent unless `agent` names one from `agents()`, and works in + * this Mini App's own Agent directory and on the runtime default model; + * continuing a session keeps its Agent, directory and model (unless `model` switches it), including + * one a page created using its host chat's Agent, project directory and model; a session never + * changes its Agent. Runs one turn with that Agent's full capabilities + * (files, shell, Skills, MCP including this Mini App's own), and resolves when the turn ends. + * + * Interaction is yours to render: pass `onEvent` and handle `permission.requested` with + * `reply` and `question.requested` with `answer`. A permission request waits only while + * someone can answer it: this run passed `onEvent`, or a page of this Mini App currently has + * the session open in a chat side panel via `open`. Otherwise it is denied (the model is told + * why), and a questionnaire ends the turn with `result.pendingQuestion`. A run waiting on a + * permission is released by `cancel`/abort, process exit or republish. Up to `agentConcurrency` + * runs (default 4) per Mini App run at once; further `run` / `answer` calls wait in order (up to + * four times that many, see `run.queued`), and aborting a waiting call rejects it with + * `REQUEST_CANCELLED`. + */ +export interface MiniAppAgentClient { + run( + input: { + readonly text: string; + readonly sessionId?: string; + /** + * Switch the session to this model before the turn (validated like the composer validates a + * new session's model: it must be one `models()` lists; unusable is `INVALID_ARGUMENTS`, + * missing BYOK credentials end the turn with `status: 'error'`); the session keeps it. Omit to use the session's current model. + */ + readonly model?: MiniAppAgentModelSelection; + /** + * Only when starting a session (no `sessionId`): an agent `name` from `agents()`. Passing it + * with `sessionId` is `INVALID_ARGUMENTS`. + */ + readonly agent?: string; + }, + options?: MiniAppAgentRunOptions, + ): Promise; + /** + * Decide a pending permission request. Never writes the user's global rules. Node replies + * have 16 separate pending slots; `run` / `answer` / `models` / `agents` / `create` and Connector + * requests share another 16. Filling that ordinary budget still permits replies. A full reply + * budget rejects with retryable `AGENT_UNAVAILABLE`. + */ + reply(input: { + readonly sessionId: string; + readonly requestId: string; + readonly decision: 'allowOnce' | 'deny'; + }): Promise; + /** + * Answer a questionnaire; the continuation turn is observed like `run`. Rejects with + * `AGENT_OUTCOME_UNKNOWN` when the answer was recorded but the continuation turn was not observed. + */ + answer( + input: { + readonly sessionId: string; + readonly requestId: string; + readonly answers: readonly MiniAppAgentQuestionAnswer[]; + /** Same as `run`'s `model`, applied before the continuation turn. */ + readonly model?: MiniAppAgentModelSelection; + }, + options?: MiniAppAgentRunOptions, + ): Promise; + /** + * Returns the model catalog and runtime `default`. Pass `default` directly as `model` to + * `run` / `answer`. For a catalog entry, extract `providerId` / `modelId`, add a selected `variant` + * if needed and preserve `variant: ''`. If thinking is supported, select an effort from + * `thinking.efforts` and pass `thinking: { effort }`. + */ + models(): Promise; + /** The agents the user has configured; `agent` of `create` / a first `run` must be one of them. */ + agents(): Promise; + /** + * Create a session (agent, this Mini App's Agent directory, the runtime default model) without + * running a turn, and return its `sessionId`; continue it with `run({ sessionId })`. A page's + * `create` binds the session to its chat instead, and its `sessionId` can be continued here. + * Takes no Host run slot but uses the ordinary Node request budget. `agent` picks the session's + * agent from `agents()`; a session never changes it. + */ + create(input?: { readonly agent?: string }): Promise<{ readonly sessionId: string }>; +} + +export interface MiniAppLifecycle { + dispose(): void | Promise; +} + +export interface MiniAppContext { + readonly pluginId: string; + readonly pluginRoot: string; + readonly dataDir: string; + readonly listen: Readonly<{ readonly host: '127.0.0.1'; readonly port: number }>; + readonly signal: AbortSignal; + readonly logger: MiniAppLogger; + readonly hostConnector?: HostConnectorClient; + readonly agent?: MiniAppAgentClient; +} + +export interface MiniAppModule { + /** Resolve only after the listener accepts connections and every route is installed. */ + start(context: MiniAppContext): Promise; +} diff --git a/plugins/liuchen19960902/timezone-guard/miniapp/node/server.mjs b/plugins/liuchen19960902/timezone-guard/miniapp/node/server.mjs new file mode 100644 index 00000000..268e99cd --- /dev/null +++ b/plugins/liuchen19960902/timezone-guard/miniapp/node/server.mjs @@ -0,0 +1,95 @@ +// @ts-check + +import { readFile } from 'node:fs/promises'; +import { createServer } from 'node:http'; +import { join } from 'node:path'; + +/** @typedef {import('./miniapp-api.js').MiniAppContext} MiniAppContext */ +/** @typedef {import('./miniapp-api.js').MiniAppLifecycle} MiniAppLifecycle */ + +/** 允许被访问的静态资源白名单。 */ +const ASSETS = { + 'index.html': 'text/html; charset=utf-8', + 'styles.css': 'text/css; charset=utf-8', + 'cities.js': 'text/javascript; charset=utf-8', + 'app.js': 'text/javascript; charset=utf-8', +}; + +/** + * 启动 Mini App 的 Node 入口。 + * + * 页面本身是纯静态 Client:所有时区计算都在浏览器里用 Intl 完成, + * 这里只负责把 surface.path 和它的静态资源挂到 Host 分配的端口上。 + * + * @param {MiniAppContext} context + * @returns {Promise} + */ +export async function start(context) { + const clientDir = join(context.pluginRoot, 'miniapp/client'); + + const server = createServer((request, response) => { + const url = new URL(request.url ?? '/', 'http://miniapp.local'); + + if (request.method !== 'GET' && request.method !== 'HEAD') { + response.writeHead(405, { + 'content-type': 'application/json; charset=utf-8', + allow: 'GET, HEAD', + }); + response.end(JSON.stringify({ error: 'method_not_allowed' })); + return; + } + + // surface.path 与静态资源共用同一份 Client 目录。 + // 去掉尾部斜杠,宿主用 /dashboard 或 /dashboard/ 请求都能命中。 + const pathname = url.pathname.replace(/\/+$/, '') || '/'; + const name = pathname === '/' || pathname === '/dashboard' + ? 'index.html' + : pathname.split('/').filter(Boolean).pop() || ''; + + const contentType = ASSETS[name]; + if (!contentType) { + response.writeHead(404, { 'content-type': 'application/json; charset=utf-8' }); + response.end(JSON.stringify({ error: 'not_found' })); + return; + } + + readFile(join(clientDir, name)).then( + (body) => { + response.writeHead(200, { 'content-type': contentType, 'cache-control': 'no-store' }); + response.end(request.method === 'HEAD' ? undefined : body); + }, + () => { + response.writeHead(500, { 'content-type': 'application/json; charset=utf-8' }); + response.end(JSON.stringify({ error: 'asset_unreadable' })); + }, + ); + }); + + await new Promise((resolve, reject) => { + const onError = (error) => reject(error); + server.once('error', onError); + server.listen(context.listen.port, context.listen.host, () => { + server.off('error', onError); + resolve(); + }); + }); + + context.logger.info('miniapp.runtime.listening'); + + let disposal; + const dispose = () => { + if (disposal) return disposal; + context.signal.removeEventListener('abort', onAbort); + disposal = new Promise((resolve, reject) => { + server.close((error) => (error ? reject(error) : resolve())); + }); + return disposal; + }; + const onAbort = () => { + void dispose().catch(() => undefined); + }; + context.signal.addEventListener('abort', onAbort, { once: true }); + if (context.signal.aborted) await dispose(); + + return { dispose }; +} diff --git a/plugins/liuchen19960902/timezone-guard/package.json b/plugins/liuchen19960902/timezone-guard/package.json new file mode 100644 index 00000000..aab6b8dc --- /dev/null +++ b/plugins/liuchen19960902/timezone-guard/package.json @@ -0,0 +1,6 @@ +{ + "mcode": { + "schemaVersion": 2, + "miniApp": "./miniapp/miniapp.json" + } +} From a9061a25de9c5a9a9621d1eb2a2d84056a067af7 Mon Sep 17 00:00:00 2001 From: FineCat Date: Fri, 23 Oct 2026 14:03:28 +0800 Subject: [PATCH 2/2] README: correct the preview timestamp, bump to 1.0.1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The preview captions claimed the target clock read 19:49, but the screenshot actually shows 20:23 (08:23 晚上 in the 12-hour Chinese format). Both READMEs now say 20:23. Version 1.0.0 -> 1.0.1, because the package content changed after the pull request was opened. --- .../timezone-guard/.minimax-plugin/plugin.json | 2 +- plugins/liuchen19960902/timezone-guard/README.md | 4 ++-- plugins/liuchen19960902/timezone-guard/README.zh-CN.md | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/plugins/liuchen19960902/timezone-guard/.minimax-plugin/plugin.json b/plugins/liuchen19960902/timezone-guard/.minimax-plugin/plugin.json index 98a7c6db..e87d85d5 100644 --- a/plugins/liuchen19960902/timezone-guard/.minimax-plugin/plugin.json +++ b/plugins/liuchen19960902/timezone-guard/.minimax-plugin/plugin.json @@ -2,7 +2,7 @@ "schemaVersion": 1, "name": "timezone-guard", "displayName": "A/时差保安", - "version": "1.0.0", + "version": "1.0.1", "description": "别在对方睡着的时区跟 Claude 聊天。A/时差保安实时对照对方当地时间:绿了正常聊,黄了短聊,红了先睡。", "author": "FineCat", "icon": "icon.png", diff --git a/plugins/liuchen19960902/timezone-guard/README.md b/plugins/liuchen19960902/timezone-guard/README.md index c9c3a8ec..66879f0f 100644 --- a/plugins/liuchen19960902/timezone-guard/README.md +++ b/plugins/liuchen19960902/timezone-guard/README.md @@ -5,12 +5,12 @@ One clock, one verdict: is it a reasonable time to message someone in another time zone? The verdict follows the **other** city's local time, because what matters is whether *they* are awake. -Author: [FineCat](https://github.com/LiuChen19960902) · Version: `1.0.0` +Author: [FineCat](https://github.com/LiuChen19960902) · Version: `1.0.1` ![A/时差保安 showing the verdict, with the target city clock above the local one](docs/preview.png) *The page itself is in Chinese. This screenshot is the light theme, taken while Los Angeles was at -19:49 (the evening band); the dark theme is below.* +20:23 (the evening band); the dark theme is below.* ![A/时差保安 in the dark theme](docs/preview-dark.png) diff --git a/plugins/liuchen19960902/timezone-guard/README.zh-CN.md b/plugins/liuchen19960902/timezone-guard/README.zh-CN.md index bd74afa2..cba106e5 100644 --- a/plugins/liuchen19960902/timezone-guard/README.zh-CN.md +++ b/plugins/liuchen19960902/timezone-guard/README.zh-CN.md @@ -4,11 +4,11 @@ 发消息之前先看一眼对方那边几点。一个只有结论、没有废话的时差仪表:**该正常聊、该短聊、还是该先睡**,一律按对方城市的当地时间判定。 -作者:[FineCat](https://github.com/LiuChen19960902) · 版本:`1.0.0` +作者:[FineCat](https://github.com/LiuChen19960902) · 版本:`1.0.1` ![A/时差保安:判定区给出「短聊就好」,下方是对方城市与自己的两个时钟](docs/preview.png) -*浅色主题。截图拍摄时洛杉矶是 19:49,落在傍晚档;深色主题见下图。* +*浅色主题。截图拍摄时洛杉矶是 20:23,落在傍晚档;深色主题见下图。* ![A/时差保安:深色主题](docs/preview-dark.png)