diff --git a/AGENTS.md b/AGENTS.md index bfd327a..1bff11f 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -55,7 +55,8 @@ Windows 上的 Dota 2 **天梯选将识别**工具:用 GSI 感知选将阶段 | `data/hero_fear_overrides.json` | 英雄→害怕装备手工加减(合并进 item_fears) | | `data/hero_abilities.json` | 英雄技能与机制汇总(由 `fetch_hero_abilities.py` 生成) | | `data/hero_item_fears.json` | 英雄怕的装备(规则推导;预览「怕」行) | -| `web/relations/` | 关系只读预览页静态资源 | +| `web/relations/` | 关系只读预览页静态资源(`index.html` / `app.js` / `style.css` / `router.js`) | +| `web/relations/router.js` | Hash 路由:`parseHash` / `serializeHash` / `installRouter` / `syncStateToUrl`;状态↔URL 双向同步(顶层标签 / 英雄 + 子标签 / 物品 / 版本 / 标签筛选 / 搜索) | | `templates/cdn/` | 全英雄 CDN 模板(需提交或由脚本生成) | | `templates/roles/` / `templates/modes/` | 位置 / 模式辅助模板 | | `assets/role_icons/` | Valve 选人筛选角色图标(`filter_*`,品红 chroma 去黑边) | @@ -131,6 +132,7 @@ python evaluate.py - 代码标识符、日志、错误信息、注释用**英文**;用户可见摘要可用中文。 - 改匹配阈值或裁切时,用 `evaluate.py` / 标注帧验证,并更新 `CHANGELOG.md` 与必要时的 `DESIGN.md`。 - 改 GSI cfg 时同步核对 `gsi_setup.py` 与 Dota `gamestate_integration` 目录。 +- 改预览路由形态(URL 段 / query 参数 / 默认值)时同步 `web/relations/router.js`(`parseHash` / `serializeHash`)与 `app.js` 的 `applyPatch` 校验;新增可路由状态维度时在两处都加,并在 `syncStateToUrl` 调用点(含搜索 debounce)接好。Hash 路由不命中后端,`serve_relations.py` 无需改;`export_relations_site.py` 的导出文件列表须含 `router.js`。 - 改 `data/heroes.json` 结构时同步 `grid.py`(依赖 `attr` / `name_loc`);`roles` 供 `overlay.py` 使用;`aliases` 为中文口语/俗称(勿与 `name_loc` 重复),重跑 `fetch_cdn_templates.py` 会按 `key` 合并保留;`tags` 为中文定位(核心/辅助/…/幻象,由 `roles`+幻想系推导),仅关系预览筛选用;基础属性/血蓝等数值字段供关系预览详情条,勿塞机制文案。 - 不要重新引入 real 模板双层库、`cdn_penalty`、`build_library.py`。 diff --git a/CHANGELOG.md b/CHANGELOG.md index 06dffc8..9a3665f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -45,6 +45,21 @@ 不再被牵连出滚轮;压缩参数行距使典型技能在高屏零滚轮(无头 Chrome + CDP 实测 `scrollHeight == clientHeight` 验证)。整块宽度上限 1000→1320px、视频 700→820px、 详情列 720→760px。 +- 关系预览顶栏左上角新增 Dota 2 logo +「上分帝」标题(`assets/ui_icons/dota2_logo.png` + 透明 emblem),经 `/ui-icon/` 路由与静态导出统一分发;窄屏自动隐藏标题或整组标识, + 不影响居中分页布局。 +- 关系预览新增 **Hash 路由**:顶层标签(英雄 / 物品 / 版本)、选中英雄 + 详情子标签 + (技能 / 核心装备 / 被克装备 / 版本变更)、物品页选中物品、版本页选中版本均同步进 + URL;英雄页的定位标签筛选与搜索框文本以 query 参数(`?tags=核心,辅助&q=axe`)进 + URL。形态如 `#/heroes/axe/core`、`#/items/black_king_bar`、`#/patches/7.41` + (`#/patches` = 最新版,序列化时省略与最新同名的版本号)。刷新保状态、可分享 / + 深度链接、浏览器前进后退还原;搜索框 300ms debounce + `replaceState`(不刷历史栈), + 标签筛选用 `replaceState`,其余离散选择用 `pushState`。坏链接(未知英雄 / 物品 / + 版本)优雅降级为丢弃该项。新增 `web/relations/router.js`(`parseHash` / + `serializeHash` / `installRouter`),`app.js` 在 `main()` 装载并首屏 `applyUrlToState`; + `export_relations_site.py` 静态导出列表补入 `router.js`,静态站点深度链接同样可用 + (可部署 GitHub Pages,无需 rewrite)。Hash 路由不命中后端路径,`serve_relations.py` + 零改动。 ### Fixed diff --git a/DESIGN.md b/DESIGN.md index 5a594dc..3c8880e 100644 --- a/DESIGN.md +++ b/DESIGN.md @@ -229,6 +229,14 @@ Dota 2 (-gamestateintegration) - **展示**:网格左上角青色方标 + 名次 1/2/3(区别于 Plus 右上三角)。 - **预览**:`serve_relations.py` 仿选将网格只读查看;数据手改 `data/relations.json` 或从 xlsx 导入。 另有顶级 **物品** 页(基础/升级,网格↔竖式布局),目录见 `data/item_shop.json`。 +- **预览 Hash 路由**:状态(顶层标签 / 选中英雄 + 详情子标签 / 选中物品 / 选中版本 / + 标签筛选 / 搜索)双向同步进 URL(`#/heroes/axe/core?tags=核心&q=axe` 等)。选 Hash + 而非 Path 路由:静态导出(GitHub Pages)无需 rewrite、`serve_relations.py` 零改动、 + 相对路径子站亦可用。写 URL 用 `history.pushState`/`replaceState`(静默,不触发 + `hashchange`,无回环);前进/后退靠 `hashchange` 监听重 parse + 校验 + render。 + 搜索 debounce 300ms + `replaceState` 防刷历史栈;坏链接丢弃该项不崩。路由逻辑集中在 + `web/relations/router.js`,`app.js` 只在 `main()` 装 `installRouter` + 各 state 变更点 + 调 `syncStateToUrl`。 - **不做**:避用标、Steam 登录页、爬 Dotabuff;关系**不**写入 `data/heroes.json`。 --- diff --git a/README.md b/README.md index 21a6481..fd78d08 100644 --- a/README.md +++ b/README.md @@ -41,6 +41,8 @@ python fetch_patches.py # 近一年版本日志 + 详情 → data/patches python serve_relations.py # 只读预览 http://127.0.0.1:8765(改 JSON 后刷新) ``` +预览页带 **Hash 路由**:`#/heroes/axe/core`、`#/items/black_king_bar`、`#/patches/7.41`(`#/patches` = 最新);英雄页的定位标签筛选与搜索框也进 URL(`?tags=核心&q=axe`)。刷新保状态、可分享 / 深度链接、浏览器前进后退还原。`python export_relations_site.py` 导出的静态站点同样支持深度链接(可部署 GitHub Pages)。 + 仿局内选将四列网格(图标来自 [dota2.com/heroes](https://www.dota2.com/heroes) 竖版裁切):点英雄高亮克制 / 被克制 / 搭档,下方显示定位,并以标签页切换 **技能**(可点选魔晶/神杖升级与天赋树)、**核心装备**、**被克装备**、**版本变更**(该英雄近一年各版本改动)。 英雄页上方网格固定高度;点选技能 / 核心装备 / 被克装备后,详情显示在下方(装备含合成,非弹窗)。 diff --git a/assets/ui_icons/dota2_logo.png b/assets/ui_icons/dota2_logo.png new file mode 100644 index 0000000..01a06f8 Binary files /dev/null and b/assets/ui_icons/dota2_logo.png differ diff --git a/docs/climperor-web.pen b/docs/climperor-web.pen index 4820569..b558da6 100644 --- a/docs/climperor-web.pen +++ b/docs/climperor-web.pen @@ -3,16 +3,9912 @@ "children": [ { "type": "frame", - "id": "bi8Au", + "id": "Mhuag", "x": 0, "y": 0, - "name": "Frame", + "name": "Heroes · 技能", "clip": true, - "width": 800, - "height": 600, - "fill": "#FFFFFF", - "layout": "none" + "width": 1440, + "height": 960, + "fill": "$bg0", + "layout": "vertical", + "children": [ + { + "type": "frame", + "id": "TjlJr", + "name": "Topbar", + "width": "fill_container", + "fill": "#080C14CC", + "stroke": "$line", + "strokeWidth": { + "bottom": 1 + }, + "layout": "vertical", + "gap": 12, + "padding": [ + 14, + 24 + ], + "children": [ + { + "type": "frame", + "id": "pCwiB", + "name": "MainTabs", + "justifyContent": "center", + "children": [ + { + "type": "frame", + "id": "ZMcJR", + "name": "TabHeroes", + "fill": "#FFFFFF14", + "cornerRadius": [ + 6, + 0, + 0, + 6 + ], + "stroke": "$line", + "strokeWidth": 1, + "padding": [ + 10, + 28 + ], + "children": [ + { + "type": "text", + "id": "X5SNP", + "name": "TabHeroesLabel", + "fill": "$text", + "content": "英雄", + "fontFamily": "Geist", + "fontSize": 15, + "fontWeight": "600", + "letterSpacing": 1 + } + ] + }, + { + "type": "frame", + "id": "wEtGa", + "name": "TabItems", + "fill": "#FFFFFF08", + "cornerRadius": [ + 0, + 6, + 6, + 0 + ], + "stroke": "$line", + "strokeWidth": 1, + "padding": [ + 10, + 28 + ], + "children": [ + { + "type": "text", + "id": "HnSxF", + "name": "TabItemsLabel", + "fill": "$muted", + "content": "物品", + "fontFamily": "Geist", + "fontSize": 15, + "fontWeight": "500", + "letterSpacing": 1 + } + ] + } + ] + }, + { + "type": "frame", + "id": "NfNuS", + "name": "HeroToolbar", + "width": "fill_container", + "gap": 10, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "tYaCd", + "name": "Filter 全部", + "fill": "#5EC8FF24", + "cornerRadius": 999, + "stroke": "#5EC8FF8C", + "strokeWidth": 1, + "padding": [ + 8, + 16 + ], + "children": [ + { + "type": "text", + "id": "UUjlk", + "name": "FilterLabel 全部", + "fill": "$text", + "content": "全部", + "fontFamily": "Geist", + "fontSize": 13, + "fontWeight": "600" + } + ] + }, + { + "type": "frame", + "id": "Zxhmo", + "name": "Filter 核心", + "fill": "#FFFFFF0A", + "cornerRadius": 999, + "stroke": "$line", + "strokeWidth": 1, + "padding": [ + 8, + 16 + ], + "children": [ + { + "type": "text", + "id": "zfdx0", + "name": "FilterLabel 核心", + "fill": "$muted", + "content": "核心", + "fontFamily": "Geist", + "fontSize": 13, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "HNkKt", + "name": "Filter 辅助", + "fill": "#FFFFFF0A", + "cornerRadius": 999, + "stroke": "$line", + "strokeWidth": 1, + "padding": [ + 8, + 16 + ], + "children": [ + { + "type": "text", + "id": "f6u8y", + "name": "FilterLabel 辅助", + "fill": "$muted", + "content": "辅助", + "fontFamily": "Geist", + "fontSize": 13, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "Frixg", + "name": "Filter 爆发", + "fill": "#FFFFFF0A", + "cornerRadius": 999, + "stroke": "$line", + "strokeWidth": 1, + "padding": [ + 8, + 16 + ], + "children": [ + { + "type": "text", + "id": "gM6kn", + "name": "FilterLabel 爆发", + "fill": "$muted", + "content": "爆发", + "fontFamily": "Geist", + "fontSize": 13, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "lSO6Z", + "name": "Filter 逃生", + "fill": "#FFFFFF0A", + "cornerRadius": 999, + "stroke": "$line", + "strokeWidth": 1, + "padding": [ + 8, + 16 + ], + "children": [ + { + "type": "text", + "id": "HrFIN", + "name": "FilterLabel 逃生", + "fill": "$muted", + "content": "逃生", + "fontFamily": "Geist", + "fontSize": 13, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "asixx", + "name": "Filter 推进", + "fill": "#FFFFFF0A", + "cornerRadius": 999, + "stroke": "$line", + "strokeWidth": 1, + "padding": [ + 8, + 16 + ], + "children": [ + { + "type": "text", + "id": "fqxdA", + "name": "FilterLabel 推进", + "fill": "$muted", + "content": "推进", + "fontFamily": "Geist", + "fontSize": 13, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "B75zNd", + "name": "Filter 先手", + "fill": "#FFFFFF0A", + "cornerRadius": 999, + "stroke": "$line", + "strokeWidth": 1, + "padding": [ + 8, + 16 + ], + "children": [ + { + "type": "text", + "id": "tnYWG", + "name": "FilterLabel 先手", + "fill": "$muted", + "content": "先手", + "fontFamily": "Geist", + "fontSize": 13, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "peD9U", + "name": "Filter 控制", + "fill": "#FFFFFF0A", + "cornerRadius": 999, + "stroke": "$line", + "strokeWidth": 1, + "padding": [ + 8, + 16 + ], + "children": [ + { + "type": "text", + "id": "Du8ao", + "name": "FilterLabel 控制", + "fill": "$muted", + "content": "控制", + "fontFamily": "Geist", + "fontSize": 13, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "exgWE", + "name": "Filter 耐久", + "fill": "#FFFFFF0A", + "cornerRadius": 999, + "stroke": "$line", + "strokeWidth": 1, + "padding": [ + 8, + 16 + ], + "children": [ + { + "type": "text", + "id": "w6C9Cy", + "name": "FilterLabel 耐久", + "fill": "$muted", + "content": "耐久", + "fontFamily": "Geist", + "fontSize": 13, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "x8Jkxp", + "name": "Filter 幻象", + "fill": "#FFFFFF0A", + "cornerRadius": 999, + "stroke": "$line", + "strokeWidth": 1, + "padding": [ + 8, + 16 + ], + "children": [ + { + "type": "text", + "id": "HRZjD", + "name": "FilterLabel 幻象", + "fill": "$muted", + "content": "幻象", + "fontFamily": "Geist", + "fontSize": 13, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "N1PKbb", + "name": "Search", + "width": 200, + "fill": "#00000073", + "cornerRadius": 8, + "stroke": "#8CAAD261", + "strokeWidth": 1, + "gap": 8, + "padding": [ + 9, + 12 + ], + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "LMKGn", + "name": "SearchIcon", + "width": 15, + "height": 15, + "icon": "search", + "library": "lucide", + "fill": "$muted" + }, + { + "type": "text", + "id": "sy1Qa", + "name": "SearchPlaceholder", + "fill": "$muted", + "content": "搜索英雄或简称", + "fontFamily": "Geist", + "fontSize": 13, + "fontWeight": "normal" + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "j7IY3", + "name": "HeroBoard", + "width": "fill_container", + "height": "fill_container", + "gap": 18, + "padding": [ + 10, + 16, + 8, + 16 + ], + "children": [ + { + "type": "frame", + "id": "v28fjF", + "name": "Col 力量", + "width": "fill_container", + "layout": "vertical", + "gap": 8, + "children": [ + { + "type": "frame", + "id": "XuPqa", + "name": "Head 力量", + "gap": 8, + "alignItems": "center", + "children": [ + { + "type": "ellipse", + "id": "HtYBe", + "name": "AttrDot 力量", + "fill": "#E07A7A", + "width": 14, + "height": 14 + }, + { + "type": "text", + "id": "lz8Bf", + "name": "AttrLabel 力量", + "fill": "$text", + "content": "力量", + "fontFamily": "Geist", + "fontSize": 14, + "fontWeight": "600", + "letterSpacing": 1 + } + ] + }, + { + "type": "frame", + "id": "wVvnb", + "name": "Row 力量 0", + "width": "fill_container", + "gap": 3, + "children": [ + { + "type": "frame", + "id": "A4qQ3W", + "name": "HeroCell 力量 0-0", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "gXh6a", + "name": "HeroCell 力量 0-1", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "ZIWqY", + "name": "HeroCell 力量 0-2", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "f3qIz", + "name": "HeroCell 力量 0-3", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "p2KG0", + "name": "HeroCell 力量 0-4", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + } + ] + }, + { + "type": "frame", + "id": "Nkoxd", + "name": "Row 力量 1", + "width": "fill_container", + "gap": 3, + "children": [ + { + "type": "frame", + "id": "HNtAd", + "name": "HeroCell 力量 1-0", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "jXiIB", + "name": "HeroCell 力量 1-1", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "LQsck", + "name": "HeroCell 力量 1-2", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "nZFY6", + "name": "HeroCell 力量 1-3", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "aAk61", + "name": "HeroCell 力量 1-4", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + } + ] + }, + { + "type": "frame", + "id": "bN2t2", + "name": "Row 力量 2", + "width": "fill_container", + "gap": 3, + "children": [ + { + "type": "frame", + "id": "TdcTQ", + "name": "HeroCell 力量 2-0", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "A1Rav", + "name": "HeroCell 力量 2-1", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "hlpDW", + "name": "HeroCell 力量 2-2", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "c3gl28", + "name": "HeroCell 力量 2-3", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "Xwztk", + "name": "HeroCell 力量 2-4", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + } + ] + }, + { + "type": "frame", + "id": "f0D6j", + "name": "Row 力量 3", + "width": "fill_container", + "gap": 3, + "children": [ + { + "type": "frame", + "id": "egmHp", + "name": "HeroCell 力量 3-0", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "AOM0G", + "name": "HeroCell 力量 3-1", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "CWsLi", + "name": "HeroCell 力量 3-2", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "TepAR", + "name": "HeroCell 力量 3-3", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "OjMkM", + "name": "HeroCell 力量 3-4", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + } + ] + } + ] + }, + { + "type": "frame", + "id": "azeAF", + "name": "Col 敏捷", + "width": "fill_container", + "layout": "vertical", + "gap": 8, + "children": [ + { + "type": "frame", + "id": "nQYDl", + "name": "Head 敏捷", + "gap": 8, + "alignItems": "center", + "children": [ + { + "type": "ellipse", + "id": "gy7UV", + "name": "AttrDot 敏捷", + "fill": "#5EC87A", + "width": 14, + "height": 14 + }, + { + "type": "text", + "id": "a3HopP", + "name": "AttrLabel 敏捷", + "fill": "$text", + "content": "敏捷", + "fontFamily": "Geist", + "fontSize": 14, + "fontWeight": "600", + "letterSpacing": 1 + } + ] + }, + { + "type": "frame", + "id": "YwOQB", + "name": "Row 敏捷 0", + "width": "fill_container", + "gap": 3, + "children": [ + { + "type": "frame", + "id": "JkiYF", + "name": "HeroCell 敏捷 0-0", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "M0olPv", + "name": "HeroCell 敏捷 0-1", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "CXoL2", + "name": "HeroCell 敏捷 0-2", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "p0j8yf", + "name": "HeroCell 敏捷 0-3", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "V4FGEP", + "name": "HeroCell 敏捷 0-4", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + } + ] + }, + { + "type": "frame", + "id": "pvker", + "name": "Row 敏捷 1", + "width": "fill_container", + "gap": 3, + "children": [ + { + "type": "frame", + "id": "rvlEy", + "name": "HeroCell 敏捷 1-0", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "Ji2zc", + "name": "HeroCell 敏捷 1-1", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "YISW7", + "name": "HeroCell 敏捷 1-2", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "ZeWDt", + "name": "HeroCell 敏捷 1-3", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "x4xrgr", + "name": "HeroCell 敏捷 1-4", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + } + ] + }, + { + "type": "frame", + "id": "ofYxX", + "name": "Row 敏捷 2", + "width": "fill_container", + "gap": 3, + "children": [ + { + "type": "frame", + "id": "JuVjl", + "name": "HeroCell 敏捷 2-0", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "KwyMY", + "name": "HeroCell 敏捷 2-1", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "H2yLXD", + "name": "HeroCell 敏捷 2-2", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "Emhyb", + "name": "HeroCell 敏捷 2-3", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "U7DVb", + "name": "HeroCell 敏捷 2-4", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + } + ] + }, + { + "type": "frame", + "id": "iuydE", + "name": "Row 敏捷 3", + "width": "fill_container", + "gap": 3, + "children": [ + { + "type": "frame", + "id": "lj3VZ", + "name": "HeroCell 敏捷 3-0", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "srOj2", + "name": "HeroCell 敏捷 3-1", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "ohSsJ", + "name": "HeroCell 敏捷 3-2", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "BsfaM", + "name": "HeroCell 敏捷 3-3", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "MrDY6", + "name": "HeroCell 敏捷 3-4", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + } + ] + } + ] + }, + { + "type": "frame", + "id": "z5eVy", + "name": "Col 智力", + "width": "fill_container", + "layout": "vertical", + "gap": 8, + "children": [ + { + "type": "frame", + "id": "Y1Ihc", + "name": "Head 智力", + "gap": 8, + "alignItems": "center", + "children": [ + { + "type": "ellipse", + "id": "UZBOw", + "name": "AttrDot 智力", + "fill": "#6EB6FF", + "width": 14, + "height": 14 + }, + { + "type": "text", + "id": "Ca6nm", + "name": "AttrLabel 智力", + "fill": "$text", + "content": "智力", + "fontFamily": "Geist", + "fontSize": 14, + "fontWeight": "600", + "letterSpacing": 1 + } + ] + }, + { + "type": "frame", + "id": "D943OU", + "name": "Row 智力 0", + "width": "fill_container", + "gap": 3, + "children": [ + { + "type": "frame", + "id": "b3Lr2", + "name": "HeroCell 智力 0-0", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "U0hEN3", + "name": "HeroCell 智力 0-1", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "yijjC", + "name": "HeroCell 智力 0-2", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "Z6s6I8", + "name": "HeroCell 智力 0-3", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + } + ] + }, + { + "type": "frame", + "id": "eemVl", + "name": "Row 智力 1", + "width": "fill_container", + "gap": 3, + "children": [ + { + "type": "frame", + "id": "czodG", + "name": "HeroCell 智力 1-0", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "O5TbO", + "name": "HeroCell 智力 1-1", + "width": "fill_container", + "height": 48, + "fill": "#1A3048", + "cornerRadius": 2, + "stroke": "$accent", + "strokeWidth": 2 + }, + { + "type": "frame", + "id": "El1jW", + "name": "HeroCell 智力 1-2", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "hguK8", + "name": "HeroCell 智力 1-3", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + } + ] + }, + { + "type": "frame", + "id": "Euaif", + "name": "Row 智力 2", + "width": "fill_container", + "gap": 3, + "children": [ + { + "type": "frame", + "id": "ltQV2", + "name": "HeroCell 智力 2-0", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "SI0DJ", + "name": "HeroCell 智力 2-1", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "VjwB9", + "name": "HeroCell 智力 2-2", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "o6ZFYV", + "name": "HeroCell 智力 2-3", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + } + ] + }, + { + "type": "frame", + "id": "ctt8D", + "name": "Row 智力 3", + "width": "fill_container", + "gap": 3, + "children": [ + { + "type": "frame", + "id": "hLZOJ", + "name": "HeroCell 智力 3-0", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "JOEIh", + "name": "HeroCell 智力 3-1", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "t2qdY", + "name": "HeroCell 智力 3-2", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "BdQb0", + "name": "HeroCell 智力 3-3", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + } + ] + } + ] + }, + { + "type": "frame", + "id": "Trwxf", + "name": "Col 全才", + "width": "fill_container", + "layout": "vertical", + "gap": 8, + "children": [ + { + "type": "frame", + "id": "SpkFp", + "name": "Head 全才", + "gap": 8, + "alignItems": "center", + "children": [ + { + "type": "ellipse", + "id": "r8rWh", + "name": "AttrDot 全才", + "fill": "#7EC8FF", + "width": 14, + "height": 14 + }, + { + "type": "text", + "id": "oE6py", + "name": "AttrLabel 全才", + "fill": "$text", + "content": "全才", + "fontFamily": "Geist", + "fontSize": 14, + "fontWeight": "600", + "letterSpacing": 1 + } + ] + }, + { + "type": "frame", + "id": "ij5HU", + "name": "Row 全才 0", + "width": "fill_container", + "gap": 3, + "children": [ + { + "type": "frame", + "id": "f7XxYn", + "name": "HeroCell 全才 0-0", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "c8gDm5", + "name": "HeroCell 全才 0-1", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "EPn7K", + "name": "HeroCell 全才 0-2", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + } + ] + }, + { + "type": "frame", + "id": "h92eZ", + "name": "Row 全才 1", + "width": "fill_container", + "gap": 3, + "children": [ + { + "type": "frame", + "id": "FltSX", + "name": "HeroCell 全才 1-0", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "yJvIk", + "name": "HeroCell 全才 1-1", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "RnWsY", + "name": "HeroCell 全才 1-2", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + } + ] + }, + { + "type": "frame", + "id": "mVzAJ", + "name": "Row 全才 2", + "width": "fill_container", + "gap": 3, + "children": [ + { + "type": "frame", + "id": "TkOHe", + "name": "HeroCell 全才 2-0", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "ZjF2Q", + "name": "HeroCell 全才 2-1", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "TfiC1", + "name": "HeroCell 全才 2-2", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + } + ] + }, + { + "type": "frame", + "id": "k70LV", + "name": "Row 全才 3", + "width": "fill_container", + "gap": 3, + "children": [ + { + "type": "frame", + "id": "I150sf", + "name": "HeroCell 全才 3-0", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "tAVs0", + "name": "HeroCell 全才 3-1", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "XLKHO", + "name": "HeroCell 全才 3-2", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "EiHzl", + "name": "DetailPanel", + "width": "fill_container", + "height": 320, + "fill": "#080C148C", + "cornerRadius": 10, + "stroke": "$line", + "strokeWidth": 1, + "layout": "vertical", + "gap": 12, + "padding": [ + 14, + 16, + 16, + 16 + ], + "children": [ + { + "type": "frame", + "id": "h9m2Mv", + "name": "DetailHead", + "width": "fill_container", + "gap": 12, + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "yxXOl", + "name": "HeroName", + "fill": "$text", + "content": "宙斯", + "fontFamily": "Geist", + "fontSize": 18, + "fontWeight": "650", + "letterSpacing": 0.5 + }, + { + "type": "frame", + "id": "i2mde", + "name": "RoleChips", + "gap": 6, + "children": [ + { + "type": "frame", + "id": "Y16zv", + "name": "Chip 核心", + "fill": "#5EC8FF1A", + "cornerRadius": 999, + "stroke": "#5EC8FF59", + "strokeWidth": 1, + "padding": [ + 3, + 10 + ], + "children": [ + { + "type": "text", + "id": "U7cf9", + "name": "ChipLabel 核心", + "fill": "$text", + "content": "核心", + "fontFamily": "Geist", + "fontSize": 12, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "vVeWg", + "name": "Chip 爆发", + "fill": "#5EC8FF1A", + "cornerRadius": 999, + "stroke": "#5EC8FF59", + "strokeWidth": 1, + "padding": [ + 3, + 10 + ], + "children": [ + { + "type": "text", + "id": "hpt50", + "name": "ChipLabel 爆发", + "fill": "$text", + "content": "爆发", + "fontFamily": "Geist", + "fontSize": 12, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "Aixyu", + "name": "Chip 控制", + "fill": "#5EC8FF1A", + "cornerRadius": 999, + "stroke": "#5EC8FF59", + "strokeWidth": 1, + "padding": [ + 3, + 10 + ], + "children": [ + { + "type": "text", + "id": "wfBPm", + "name": "ChipLabel 控制", + "fill": "$text", + "content": "控制", + "fontFamily": "Geist", + "fontSize": 12, + "fontWeight": "normal" + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "xpN22", + "name": "DetailTabs", + "width": "fill_container", + "stroke": "$line", + "strokeWidth": { + "bottom": 1 + }, + "children": [ + { + "type": "frame", + "id": "jpI2Y", + "name": "DTab 技能", + "stroke": "$accent", + "strokeWidth": { + "bottom": 2 + }, + "padding": [ + 8, + 18 + ], + "children": [ + { + "type": "text", + "id": "NEUt2", + "name": "DTabLabel 技能", + "fill": "$text", + "content": "技能", + "fontFamily": "Geist", + "fontSize": 14, + "fontWeight": "600", + "letterSpacing": 0.5 + } + ] + }, + { + "type": "frame", + "id": "X9qM4l", + "name": "DTab 核心装备", + "stroke": "#00000000", + "strokeWidth": { + "bottom": 2 + }, + "padding": [ + 8, + 18 + ], + "children": [ + { + "type": "text", + "id": "DisCZ", + "name": "DTabLabel 核心装备", + "fill": "$muted", + "content": "核心装备", + "fontFamily": "Geist", + "fontSize": 14, + "fontWeight": "500", + "letterSpacing": 0.5 + } + ] + }, + { + "type": "frame", + "id": "e0uu59", + "name": "DTab 被克装备", + "stroke": "#00000000", + "strokeWidth": { + "bottom": 2 + }, + "padding": [ + 8, + 18 + ], + "children": [ + { + "type": "text", + "id": "Q2A2Y", + "name": "DTabLabel 被克装备", + "fill": "$muted", + "content": "被克装备", + "fontFamily": "Geist", + "fontSize": 14, + "fontWeight": "500", + "letterSpacing": 0.5 + } + ] + } + ] + }, + { + "type": "frame", + "id": "XeRe5", + "name": "SkillsBody", + "width": "fill_container", + "height": "fill_container", + "gap": 18, + "children": [ + { + "type": "frame", + "id": "Lk9is", + "name": "SkillSide", + "width": 280, + "layout": "vertical", + "gap": 12, + "children": [ + { + "type": "frame", + "id": "SAcOn", + "name": "SkillIcons", + "gap": 8, + "children": [ + { + "type": "frame", + "id": "gsOEj", + "name": "SkillIcon 0", + "width": 48, + "height": 48, + "fill": "#00000059", + "cornerRadius": 6, + "stroke": "#E8EEF7", + "strokeWidth": 1, + "layout": "none", + "children": [ + { + "type": "rectangle", + "id": "p2W6q1", + "x": 0, + "y": 0, + "name": "SkillFill 0", + "fill": "#2A3A52", + "width": 48, + "height": 48 + } + ] + }, + { + "type": "frame", + "id": "xkpiH", + "name": "SkillIcon 1", + "width": 48, + "height": 48, + "fill": "#00000059", + "cornerRadius": 6, + "stroke": "#8CAAD247", + "strokeWidth": 1, + "layout": "none", + "children": [ + { + "type": "rectangle", + "id": "EVXSk", + "x": 0, + "y": 0, + "name": "SkillFill 1", + "fill": "#2A3A52", + "width": 48, + "height": 48 + } + ] + }, + { + "type": "frame", + "id": "rHYBa", + "name": "SkillIcon 2", + "width": 48, + "height": 48, + "fill": "#00000059", + "cornerRadius": 6, + "stroke": "#8CAAD247", + "strokeWidth": 1, + "layout": "none", + "children": [ + { + "type": "rectangle", + "id": "t2tpy", + "x": 0, + "y": 0, + "name": "SkillFill 2", + "fill": "#2A3A52", + "width": 48, + "height": 48 + } + ] + }, + { + "type": "frame", + "id": "u5jnY7", + "name": "SkillIcon 3", + "width": 48, + "height": 48, + "fill": "#00000059", + "cornerRadius": 6, + "stroke": "#8CAAD247", + "strokeWidth": 1, + "layout": "none", + "children": [ + { + "type": "rectangle", + "id": "DX3J9", + "x": 0, + "y": 0, + "name": "SkillFill 3", + "fill": "#2A3A52", + "width": 48, + "height": 48 + } + ] + }, + { + "type": "frame", + "id": "HffNx", + "name": "SkillIcon 4", + "width": 48, + "height": 48, + "fill": "#00000059", + "cornerRadius": 6, + "stroke": "#8CAAD247", + "strokeWidth": 1, + "layout": "none", + "children": [ + { + "type": "rectangle", + "id": "Snq5c", + "x": 0, + "y": 0, + "name": "SkillFill 4", + "fill": "#1E3A5C", + "width": 48, + "height": 48 + }, + { + "type": "frame", + "id": "BO3ce", + "x": 28, + "y": 30, + "name": "Aghs 4", + "width": 18, + "height": 14, + "fill": "#3C8CE6", + "cornerRadius": 3, + "justifyContent": "center", + "alignItems": "center" + } + ] + }, + { + "type": "frame", + "id": "h9Kfv", + "name": "SkillIcon 5", + "width": 48, + "height": 48, + "fill": "#00000059", + "cornerRadius": 6, + "stroke": "#8CAAD247", + "strokeWidth": 1, + "layout": "none", + "children": [ + { + "type": "rectangle", + "id": "uf3SO", + "x": 0, + "y": 0, + "name": "SkillFill 5", + "fill": "#1E3A5C", + "width": 48, + "height": 48 + }, + { + "type": "frame", + "id": "GWwQS", + "x": 28, + "y": 30, + "name": "Aghs 5", + "width": 18, + "height": 14, + "fill": "#5AB4E6", + "cornerRadius": 3, + "justifyContent": "center", + "alignItems": "center" + } + ] + } + ] + }, + { + "type": "frame", + "id": "Txcd4", + "name": "SkillInfo", + "width": "fill_container", + "fill": "#00000047", + "cornerRadius": 8, + "stroke": "$line", + "strokeWidth": 1, + "layout": "vertical", + "gap": 8, + "padding": 12, + "children": [ + { + "type": "frame", + "id": "SkjlU", + "name": "SkillInfoHead", + "width": "fill_container", + "gap": 12, + "children": [ + { + "type": "frame", + "id": "c6XJKZ", + "name": "BigSkillIcon", + "width": 56, + "height": 56, + "fill": "#2A3A52", + "cornerRadius": 6, + "stroke": "#8CAAD247", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "GdU7K", + "name": "SkillTitles", + "width": 180, + "layout": "vertical", + "gap": 3, + "children": [ + { + "type": "text", + "id": "w0LR1", + "name": "SkillName", + "fill": "$text", + "content": "弧形闪电", + "fontFamily": "Geist", + "fontSize": 16, + "fontWeight": "650" + }, + { + "type": "text", + "id": "lp94E", + "name": "SkillDispel", + "fill": "$bad", + "content": "可被驱散:可驱散", + "fontFamily": "Geist", + "fontSize": 12, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "text", + "id": "mahZt", + "name": "SkillDesc", + "fill": "#E8EEF7E0", + "textGrowth": "fixed-width", + "width": "fill_container", + "content": "释放一道弧形闪电,弹射攻击附近的敌人,造成魔法伤害。", + "lineHeight": 1.5, + "fontFamily": "Geist", + "fontSize": 13, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "P5hpdU", + "name": "TalentTree", + "width": "fill_container", + "height": "fill_container", + "stroke": "$line", + "strokeWidth": { + "top": 1 + }, + "layout": "vertical", + "gap": 8, + "padding": [ + 10, + 0, + 0, + 0 + ], + "children": [ + { + "type": "text", + "id": "TS1RA", + "name": "TalentLabel", + "fill": "$muted", + "content": "天赋", + "fontFamily": "Geist", + "fontSize": 13, + "fontWeight": "normal", + "letterSpacing": 1 + }, + { + "type": "frame", + "id": "hdrgc", + "name": "Talent 25", + "width": "fill_container", + "gap": 8, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "F4cpKN", + "name": "TalentL 25", + "width": "fill_container", + "fill": "#00000038", + "cornerRadius": 6, + "stroke": "#8CAAD229", + "strokeWidth": 1, + "padding": [ + 6, + 10 + ], + "children": [ + { + "type": "text", + "id": "dhQ22", + "name": "TalentLT 25", + "fill": "#E8EEF7DB", + "content": "+40 智力", + "fontFamily": "Geist", + "fontSize": 12, + "fontWeight": "normal" + } + ] + }, + { + "type": "text", + "id": "oLPcB", + "name": "TalentLv 25", + "fill": "$accent", + "content": "25", + "fontFamily": "Geist", + "fontSize": 12, + "fontWeight": "650" + }, + { + "type": "frame", + "id": "kLVCP", + "name": "TalentR 25", + "width": "fill_container", + "fill": "#00000038", + "cornerRadius": 6, + "stroke": "#8CAAD229", + "strokeWidth": 1, + "padding": [ + 6, + 10 + ], + "children": [ + { + "type": "text", + "id": "BDYcC", + "name": "TalentRT 25", + "fill": "#E8EEF7DB", + "content": "+1.5% 施法距离", + "fontFamily": "Geist", + "fontSize": 12, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "sqcnw", + "name": "Talent 20", + "width": "fill_container", + "gap": 8, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "LwRsG", + "name": "TalentL 20", + "width": "fill_container", + "fill": "#00000038", + "cornerRadius": 6, + "stroke": "#8CAAD229", + "strokeWidth": 1, + "padding": [ + 6, + 10 + ], + "children": [ + { + "type": "text", + "id": "h6imQU", + "name": "TalentLT 20", + "fill": "#E8EEF7DB", + "content": "天赋加成 A", + "fontFamily": "Geist", + "fontSize": 12, + "fontWeight": "normal" + } + ] + }, + { + "type": "text", + "id": "z8YNrN", + "name": "TalentLv 20", + "fill": "$accent", + "content": "20", + "fontFamily": "Geist", + "fontSize": 12, + "fontWeight": "650" + }, + { + "type": "frame", + "id": "NBBxa", + "name": "TalentR 20", + "width": "fill_container", + "fill": "#00000038", + "cornerRadius": 6, + "stroke": "#8CAAD229", + "strokeWidth": 1, + "padding": [ + 6, + 10 + ], + "children": [ + { + "type": "text", + "id": "yhiE4", + "name": "TalentRT 20", + "fill": "#E8EEF7DB", + "content": "天赋加成 B", + "fontFamily": "Geist", + "fontSize": 12, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "D9Czk", + "name": "Talent 15", + "width": "fill_container", + "gap": 8, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "qUcEG", + "name": "TalentL 15", + "width": "fill_container", + "fill": "#00000038", + "cornerRadius": 6, + "stroke": "#8CAAD229", + "strokeWidth": 1, + "padding": [ + 6, + 10 + ], + "children": [ + { + "type": "text", + "id": "XUTBg", + "name": "TalentLT 15", + "fill": "#E8EEF7DB", + "content": "天赋加成 A", + "fontFamily": "Geist", + "fontSize": 12, + "fontWeight": "normal" + } + ] + }, + { + "type": "text", + "id": "alB0x", + "name": "TalentLv 15", + "fill": "$accent", + "content": "15", + "fontFamily": "Geist", + "fontSize": 12, + "fontWeight": "650" + }, + { + "type": "frame", + "id": "g1ukbb", + "name": "TalentR 15", + "width": "fill_container", + "fill": "#00000038", + "cornerRadius": 6, + "stroke": "#8CAAD229", + "strokeWidth": 1, + "padding": [ + 6, + 10 + ], + "children": [ + { + "type": "text", + "id": "BjUQC", + "name": "TalentRT 15", + "fill": "#E8EEF7DB", + "content": "天赋加成 B", + "fontFamily": "Geist", + "fontSize": 12, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "GVMPn", + "name": "Talent 10", + "width": "fill_container", + "gap": 8, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "YU9sV", + "name": "TalentL 10", + "width": "fill_container", + "fill": "#00000038", + "cornerRadius": 6, + "stroke": "#8CAAD229", + "strokeWidth": 1, + "padding": [ + 6, + 10 + ], + "children": [ + { + "type": "text", + "id": "Tx2mm", + "name": "TalentLT 10", + "fill": "#E8EEF7DB", + "content": "天赋加成 A", + "fontFamily": "Geist", + "fontSize": 12, + "fontWeight": "normal" + } + ] + }, + { + "type": "text", + "id": "tb5Ja", + "name": "TalentLv 10", + "fill": "$accent", + "content": "10", + "fontFamily": "Geist", + "fontSize": 12, + "fontWeight": "650" + }, + { + "type": "frame", + "id": "esEDs", + "name": "TalentR 10", + "width": "fill_container", + "fill": "#00000038", + "cornerRadius": 6, + "stroke": "#8CAAD229", + "strokeWidth": 1, + "padding": [ + 6, + 10 + ], + "children": [ + { + "type": "text", + "id": "puBvH", + "name": "TalentRT 10", + "fill": "#E8EEF7DB", + "content": "天赋加成 B", + "fontFamily": "Geist", + "fontSize": 12, + "fontWeight": "normal" + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "iybbI", + "x": 1520, + "y": 0, + "name": "Heroes · 核心装备", + "clip": true, + "width": 1440, + "height": 960, + "fill": "$bg0", + "layout": "vertical", + "children": [ + { + "type": "frame", + "id": "C02Jf", + "name": "Topbar", + "width": "fill_container", + "fill": "#080C14CC", + "stroke": "$line", + "strokeWidth": { + "bottom": 1 + }, + "layout": "vertical", + "gap": 12, + "padding": [ + 14, + 24 + ], + "children": [ + { + "type": "frame", + "id": "flZDI", + "name": "MainTabs", + "justifyContent": "center", + "children": [ + { + "type": "frame", + "id": "wBbZI", + "name": "TabHeroes", + "fill": "#FFFFFF14", + "cornerRadius": [ + 6, + 0, + 0, + 6 + ], + "stroke": "$line", + "strokeWidth": 1, + "padding": [ + 10, + 28 + ], + "children": [ + { + "type": "text", + "id": "TIFRq", + "name": "TabHeroesLabel", + "fill": "$text", + "content": "英雄", + "fontFamily": "Geist", + "fontSize": 15, + "fontWeight": "600", + "letterSpacing": 1 + } + ] + }, + { + "type": "frame", + "id": "V3YJzt", + "name": "TabItems", + "fill": "#FFFFFF08", + "cornerRadius": [ + 0, + 6, + 6, + 0 + ], + "stroke": "$line", + "strokeWidth": 1, + "padding": [ + 10, + 28 + ], + "children": [ + { + "type": "text", + "id": "SF9kP", + "name": "TabItemsLabel", + "fill": "$muted", + "content": "物品", + "fontFamily": "Geist", + "fontSize": 15, + "fontWeight": "500", + "letterSpacing": 1 + } + ] + } + ] + }, + { + "type": "frame", + "id": "E0iXw", + "name": "HeroToolbar", + "width": "fill_container", + "gap": 10, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "zGtvz", + "name": "Filter 全部", + "fill": "#5EC8FF24", + "cornerRadius": 999, + "stroke": "#5EC8FF8C", + "strokeWidth": 1, + "padding": [ + 8, + 16 + ], + "children": [ + { + "type": "text", + "id": "GApxC", + "name": "FilterLabel 全部", + "fill": "$text", + "content": "全部", + "fontFamily": "Geist", + "fontSize": 13, + "fontWeight": "600" + } + ] + }, + { + "type": "frame", + "id": "gfvQ5", + "name": "Filter 核心", + "fill": "#FFFFFF0A", + "cornerRadius": 999, + "stroke": "$line", + "strokeWidth": 1, + "padding": [ + 8, + 16 + ], + "children": [ + { + "type": "text", + "id": "m0u2X", + "name": "FilterLabel 核心", + "fill": "$muted", + "content": "核心", + "fontFamily": "Geist", + "fontSize": 13, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "ngErC", + "name": "Filter 辅助", + "fill": "#FFFFFF0A", + "cornerRadius": 999, + "stroke": "$line", + "strokeWidth": 1, + "padding": [ + 8, + 16 + ], + "children": [ + { + "type": "text", + "id": "n5bcD2", + "name": "FilterLabel 辅助", + "fill": "$muted", + "content": "辅助", + "fontFamily": "Geist", + "fontSize": 13, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "h9NJrY", + "name": "Filter 爆发", + "fill": "#FFFFFF0A", + "cornerRadius": 999, + "stroke": "$line", + "strokeWidth": 1, + "padding": [ + 8, + 16 + ], + "children": [ + { + "type": "text", + "id": "SEZ2T", + "name": "FilterLabel 爆发", + "fill": "$muted", + "content": "爆发", + "fontFamily": "Geist", + "fontSize": 13, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "oPSGd", + "name": "Filter 逃生", + "fill": "#FFFFFF0A", + "cornerRadius": 999, + "stroke": "$line", + "strokeWidth": 1, + "padding": [ + 8, + 16 + ], + "children": [ + { + "type": "text", + "id": "v5lun", + "name": "FilterLabel 逃生", + "fill": "$muted", + "content": "逃生", + "fontFamily": "Geist", + "fontSize": 13, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "PCWDN", + "name": "Filter 推进", + "fill": "#FFFFFF0A", + "cornerRadius": 999, + "stroke": "$line", + "strokeWidth": 1, + "padding": [ + 8, + 16 + ], + "children": [ + { + "type": "text", + "id": "Q1Yux", + "name": "FilterLabel 推进", + "fill": "$muted", + "content": "推进", + "fontFamily": "Geist", + "fontSize": 13, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "KwvRW", + "name": "Filter 先手", + "fill": "#FFFFFF0A", + "cornerRadius": 999, + "stroke": "$line", + "strokeWidth": 1, + "padding": [ + 8, + 16 + ], + "children": [ + { + "type": "text", + "id": "E3G7ia", + "name": "FilterLabel 先手", + "fill": "$muted", + "content": "先手", + "fontFamily": "Geist", + "fontSize": 13, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "IF7rJ", + "name": "Filter 控制", + "fill": "#FFFFFF0A", + "cornerRadius": 999, + "stroke": "$line", + "strokeWidth": 1, + "padding": [ + 8, + 16 + ], + "children": [ + { + "type": "text", + "id": "AYQXi", + "name": "FilterLabel 控制", + "fill": "$muted", + "content": "控制", + "fontFamily": "Geist", + "fontSize": 13, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "lisYb", + "name": "Filter 耐久", + "fill": "#FFFFFF0A", + "cornerRadius": 999, + "stroke": "$line", + "strokeWidth": 1, + "padding": [ + 8, + 16 + ], + "children": [ + { + "type": "text", + "id": "NZlFt", + "name": "FilterLabel 耐久", + "fill": "$muted", + "content": "耐久", + "fontFamily": "Geist", + "fontSize": 13, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "Izu33", + "name": "Filter 幻象", + "fill": "#FFFFFF0A", + "cornerRadius": 999, + "stroke": "$line", + "strokeWidth": 1, + "padding": [ + 8, + 16 + ], + "children": [ + { + "type": "text", + "id": "v0fzC", + "name": "FilterLabel 幻象", + "fill": "$muted", + "content": "幻象", + "fontFamily": "Geist", + "fontSize": 13, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "UBg16", + "name": "Search", + "width": 200, + "fill": "#00000073", + "cornerRadius": 8, + "stroke": "#8CAAD261", + "strokeWidth": 1, + "gap": 8, + "padding": [ + 9, + 12 + ], + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "x4ys4g", + "name": "SearchIcon", + "width": 15, + "height": 15, + "icon": "search", + "library": "lucide", + "fill": "$muted" + }, + { + "type": "text", + "id": "m7KYE", + "name": "SearchPlaceholder", + "fill": "$muted", + "content": "搜索英雄或简称", + "fontFamily": "Geist", + "fontSize": 13, + "fontWeight": "normal" + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "uDikC", + "name": "HeroBoard", + "width": "fill_container", + "height": "fill_container", + "gap": 18, + "padding": [ + 10, + 16, + 8, + 16 + ], + "children": [ + { + "type": "frame", + "id": "onZ0O", + "name": "Col 力量", + "width": "fill_container", + "layout": "vertical", + "gap": 8, + "children": [ + { + "type": "frame", + "id": "TUaJa", + "name": "Head 力量", + "gap": 8, + "alignItems": "center", + "children": [ + { + "type": "ellipse", + "id": "U8SxdV", + "name": "AttrDot 力量", + "fill": "#E07A7A", + "width": 14, + "height": 14 + }, + { + "type": "text", + "id": "jTUAI", + "name": "AttrLabel 力量", + "fill": "$text", + "content": "力量", + "fontFamily": "Geist", + "fontSize": 14, + "fontWeight": "600", + "letterSpacing": 1 + } + ] + }, + { + "type": "frame", + "id": "ifHm1", + "name": "Row 力量 0", + "width": "fill_container", + "gap": 3, + "children": [ + { + "type": "frame", + "id": "MtTGs", + "name": "HeroCell 力量 0-0", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "pebnh", + "name": "HeroCell 力量 0-1", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "F0f94u", + "name": "HeroCell 力量 0-2", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "GjLD5", + "name": "HeroCell 力量 0-3", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "qxswQ", + "name": "HeroCell 力量 0-4", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + } + ] + }, + { + "type": "frame", + "id": "XVKBB", + "name": "Row 力量 1", + "width": "fill_container", + "gap": 3, + "children": [ + { + "type": "frame", + "id": "zNDuf", + "name": "HeroCell 力量 1-0", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "Cz1Aw", + "name": "HeroCell 力量 1-1", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "J0Nqf", + "name": "HeroCell 力量 1-2", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "NCEza", + "name": "HeroCell 力量 1-3", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "CILe5", + "name": "HeroCell 力量 1-4", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + } + ] + }, + { + "type": "frame", + "id": "ezfnM", + "name": "Row 力量 2", + "width": "fill_container", + "gap": 3, + "children": [ + { + "type": "frame", + "id": "o8u4MQ", + "name": "HeroCell 力量 2-0", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "A3Hw6", + "name": "HeroCell 力量 2-1", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "BHNf0", + "name": "HeroCell 力量 2-2", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "EOKTd", + "name": "HeroCell 力量 2-3", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "LhRL0", + "name": "HeroCell 力量 2-4", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + } + ] + }, + { + "type": "frame", + "id": "e6VeS", + "name": "Row 力量 3", + "width": "fill_container", + "gap": 3, + "children": [ + { + "type": "frame", + "id": "HOyv9", + "name": "HeroCell 力量 3-0", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "FPQiL", + "name": "HeroCell 力量 3-1", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "byRKI", + "name": "HeroCell 力量 3-2", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "OBeh3", + "name": "HeroCell 力量 3-3", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "XxoNY", + "name": "HeroCell 力量 3-4", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + } + ] + } + ] + }, + { + "type": "frame", + "id": "dbIcb", + "name": "Col 敏捷", + "width": "fill_container", + "layout": "vertical", + "gap": 8, + "children": [ + { + "type": "frame", + "id": "i2kWLh", + "name": "Head 敏捷", + "gap": 8, + "alignItems": "center", + "children": [ + { + "type": "ellipse", + "id": "xKjFV", + "name": "AttrDot 敏捷", + "fill": "#5EC87A", + "width": 14, + "height": 14 + }, + { + "type": "text", + "id": "OhpRR", + "name": "AttrLabel 敏捷", + "fill": "$text", + "content": "敏捷", + "fontFamily": "Geist", + "fontSize": 14, + "fontWeight": "600", + "letterSpacing": 1 + } + ] + }, + { + "type": "frame", + "id": "RCS1b", + "name": "Row 敏捷 0", + "width": "fill_container", + "gap": 3, + "children": [ + { + "type": "frame", + "id": "kRcrQ", + "name": "HeroCell 敏捷 0-0", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "SodA2", + "name": "HeroCell 敏捷 0-1", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "qRslg", + "name": "HeroCell 敏捷 0-2", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "MpX7L", + "name": "HeroCell 敏捷 0-3", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "wMuCv", + "name": "HeroCell 敏捷 0-4", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + } + ] + }, + { + "type": "frame", + "id": "DQO1Y", + "name": "Row 敏捷 1", + "width": "fill_container", + "gap": 3, + "children": [ + { + "type": "frame", + "id": "Kfzxi", + "name": "HeroCell 敏捷 1-0", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "RU4Sd", + "name": "HeroCell 敏捷 1-1", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "o9YtIi", + "name": "HeroCell 敏捷 1-2", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "Voc4i", + "name": "HeroCell 敏捷 1-3", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "F8hoT", + "name": "HeroCell 敏捷 1-4", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + } + ] + }, + { + "type": "frame", + "id": "k75QUB", + "name": "Row 敏捷 2", + "width": "fill_container", + "gap": 3, + "children": [ + { + "type": "frame", + "id": "VXokR", + "name": "HeroCell 敏捷 2-0", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "gm42v", + "name": "HeroCell 敏捷 2-1", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "vhQ2Y", + "name": "HeroCell 敏捷 2-2", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "aOdRO", + "name": "HeroCell 敏捷 2-3", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "MXrrM", + "name": "HeroCell 敏捷 2-4", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + } + ] + }, + { + "type": "frame", + "id": "mYYTa", + "name": "Row 敏捷 3", + "width": "fill_container", + "gap": 3, + "children": [ + { + "type": "frame", + "id": "EbVZh", + "name": "HeroCell 敏捷 3-0", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "ZxzTk", + "name": "HeroCell 敏捷 3-1", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "A7BEQu", + "name": "HeroCell 敏捷 3-2", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "Js7cw", + "name": "HeroCell 敏捷 3-3", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "AsHAx", + "name": "HeroCell 敏捷 3-4", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + } + ] + } + ] + }, + { + "type": "frame", + "id": "qqLyE", + "name": "Col 智力", + "width": "fill_container", + "layout": "vertical", + "gap": 8, + "children": [ + { + "type": "frame", + "id": "Rq3vq", + "name": "Head 智力", + "gap": 8, + "alignItems": "center", + "children": [ + { + "type": "ellipse", + "id": "pxD7t", + "name": "AttrDot 智力", + "fill": "#6EB6FF", + "width": 14, + "height": 14 + }, + { + "type": "text", + "id": "LQoEd", + "name": "AttrLabel 智力", + "fill": "$text", + "content": "智力", + "fontFamily": "Geist", + "fontSize": 14, + "fontWeight": "600", + "letterSpacing": 1 + } + ] + }, + { + "type": "frame", + "id": "n4zbl", + "name": "Row 智力 0", + "width": "fill_container", + "gap": 3, + "children": [ + { + "type": "frame", + "id": "XDL8z", + "name": "HeroCell 智力 0-0", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "E5akV", + "name": "HeroCell 智力 0-1", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "LnF9B", + "name": "HeroCell 智力 0-2", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "ibj9f", + "name": "HeroCell 智力 0-3", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + } + ] + }, + { + "type": "frame", + "id": "fsARc", + "name": "Row 智力 1", + "width": "fill_container", + "gap": 3, + "children": [ + { + "type": "frame", + "id": "AQbmN", + "name": "HeroCell 智力 1-0", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "n7340", + "name": "HeroCell 智力 1-1", + "width": "fill_container", + "height": 48, + "fill": "#1A3048", + "cornerRadius": 2, + "stroke": "$accent", + "strokeWidth": 2 + }, + { + "type": "frame", + "id": "kjSd2", + "name": "HeroCell 智力 1-2", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "Jjcib", + "name": "HeroCell 智力 1-3", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + } + ] + }, + { + "type": "frame", + "id": "o5oNIs", + "name": "Row 智力 2", + "width": "fill_container", + "gap": 3, + "children": [ + { + "type": "frame", + "id": "ZboDt", + "name": "HeroCell 智力 2-0", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "E6xDag", + "name": "HeroCell 智力 2-1", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "PpvoI", + "name": "HeroCell 智力 2-2", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "KMF4S", + "name": "HeroCell 智力 2-3", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + } + ] + }, + { + "type": "frame", + "id": "zYrC1", + "name": "Row 智力 3", + "width": "fill_container", + "gap": 3, + "children": [ + { + "type": "frame", + "id": "baNGE", + "name": "HeroCell 智力 3-0", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "MeZ8V", + "name": "HeroCell 智力 3-1", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "sAOOs", + "name": "HeroCell 智力 3-2", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "cAuZ6", + "name": "HeroCell 智力 3-3", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + } + ] + } + ] + }, + { + "type": "frame", + "id": "gRZPy", + "name": "Col 全才", + "width": "fill_container", + "layout": "vertical", + "gap": 8, + "children": [ + { + "type": "frame", + "id": "bJobg", + "name": "Head 全才", + "gap": 8, + "alignItems": "center", + "children": [ + { + "type": "ellipse", + "id": "VS1Z1", + "name": "AttrDot 全才", + "fill": "#7EC8FF", + "width": 14, + "height": 14 + }, + { + "type": "text", + "id": "yNHpt", + "name": "AttrLabel 全才", + "fill": "$text", + "content": "全才", + "fontFamily": "Geist", + "fontSize": 14, + "fontWeight": "600", + "letterSpacing": 1 + } + ] + }, + { + "type": "frame", + "id": "ThdGI", + "name": "Row 全才 0", + "width": "fill_container", + "gap": 3, + "children": [ + { + "type": "frame", + "id": "HgaPf", + "name": "HeroCell 全才 0-0", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "akI6w", + "name": "HeroCell 全才 0-1", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "zwZtg", + "name": "HeroCell 全才 0-2", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + } + ] + }, + { + "type": "frame", + "id": "R4dde", + "name": "Row 全才 1", + "width": "fill_container", + "gap": 3, + "children": [ + { + "type": "frame", + "id": "nsmLZ", + "name": "HeroCell 全才 1-0", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "r6smIw", + "name": "HeroCell 全才 1-1", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "tqS13", + "name": "HeroCell 全才 1-2", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + } + ] + }, + { + "type": "frame", + "id": "wkBo4", + "name": "Row 全才 2", + "width": "fill_container", + "gap": 3, + "children": [ + { + "type": "frame", + "id": "L2k0OX", + "name": "HeroCell 全才 2-0", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "kVHVl", + "name": "HeroCell 全才 2-1", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "DeGSX", + "name": "HeroCell 全才 2-2", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + } + ] + }, + { + "type": "frame", + "id": "LjoBn", + "name": "Row 全才 3", + "width": "fill_container", + "gap": 3, + "children": [ + { + "type": "frame", + "id": "Ettll", + "name": "HeroCell 全才 3-0", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "E6e5y0", + "name": "HeroCell 全才 3-1", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "sjulu", + "name": "HeroCell 全才 3-2", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "fnAqs", + "name": "DetailPanel", + "width": "fill_container", + "height": 320, + "fill": "#080C148C", + "cornerRadius": 10, + "stroke": "$line", + "strokeWidth": 1, + "layout": "vertical", + "gap": 12, + "padding": [ + 14, + 16, + 16, + 16 + ], + "children": [ + { + "type": "frame", + "id": "PFAFs", + "name": "DetailHead", + "width": "fill_container", + "gap": 12, + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "KLOPf", + "name": "HeroName", + "fill": "$text", + "content": "宙斯", + "fontFamily": "Geist", + "fontSize": 18, + "fontWeight": "650", + "letterSpacing": 0.5 + }, + { + "type": "frame", + "id": "D23uu", + "name": "RoleChips", + "gap": 6, + "children": [ + { + "type": "frame", + "id": "M8QWt", + "name": "Chip 核心", + "fill": "#5EC8FF1A", + "cornerRadius": 999, + "stroke": "#5EC8FF59", + "strokeWidth": 1, + "padding": [ + 3, + 10 + ], + "children": [ + { + "type": "text", + "id": "wd4rQ", + "name": "ChipLabel 核心", + "fill": "$text", + "content": "核心", + "fontFamily": "Geist", + "fontSize": 12, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "uHtbQ", + "name": "Chip 爆发", + "fill": "#5EC8FF1A", + "cornerRadius": 999, + "stroke": "#5EC8FF59", + "strokeWidth": 1, + "padding": [ + 3, + 10 + ], + "children": [ + { + "type": "text", + "id": "yaY3T", + "name": "ChipLabel 爆发", + "fill": "$text", + "content": "爆发", + "fontFamily": "Geist", + "fontSize": 12, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "NXY9d", + "name": "Chip 控制", + "fill": "#5EC8FF1A", + "cornerRadius": 999, + "stroke": "#5EC8FF59", + "strokeWidth": 1, + "padding": [ + 3, + 10 + ], + "children": [ + { + "type": "text", + "id": "pF92U", + "name": "ChipLabel 控制", + "fill": "$text", + "content": "控制", + "fontFamily": "Geist", + "fontSize": 12, + "fontWeight": "normal" + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "SoZOY", + "name": "DetailTabs", + "width": "fill_container", + "stroke": "$line", + "strokeWidth": { + "bottom": 1 + }, + "children": [ + { + "type": "frame", + "id": "qNcaQ", + "name": "DTab 技能", + "stroke": "#00000000", + "strokeWidth": { + "bottom": 2 + }, + "padding": [ + 8, + 18 + ], + "children": [ + { + "type": "text", + "id": "b4Be2g", + "name": "DTabLabel 技能", + "fill": "$muted", + "content": "技能", + "fontFamily": "Geist", + "fontSize": 14, + "fontWeight": "500", + "letterSpacing": 0.5 + } + ] + }, + { + "type": "frame", + "id": "ltsLo", + "name": "DTab 核心装备", + "stroke": "$accent", + "strokeWidth": { + "bottom": 2 + }, + "padding": [ + 8, + 18 + ], + "children": [ + { + "type": "text", + "id": "l2hpr", + "name": "DTabLabel 核心装备", + "fill": "$text", + "content": "核心装备", + "fontFamily": "Geist", + "fontSize": 14, + "fontWeight": "600", + "letterSpacing": 0.5 + } + ] + }, + { + "type": "frame", + "id": "vnHKn", + "name": "DTab 被克装备", + "stroke": "#00000000", + "strokeWidth": { + "bottom": 2 + }, + "padding": [ + 8, + 18 + ], + "children": [ + { + "type": "text", + "id": "tRDSm", + "name": "DTabLabel 被克装备", + "fill": "$muted", + "content": "被克装备", + "fontFamily": "Geist", + "fontSize": 14, + "fontWeight": "500", + "letterSpacing": 0.5 + } + ] + } + ] + }, + { + "type": "frame", + "id": "xZYR5", + "name": "CoreBody", + "width": "fill_container", + "height": "fill_container", + "layout": "vertical", + "gap": 12, + "children": [ + { + "type": "text", + "id": "RopPO", + "name": "CoreHint", + "fill": "$muted", + "content": "该英雄常用核心成品(OpenDota 热度)", + "fontFamily": "Geist", + "fontSize": 13, + "fontWeight": "normal" + }, + { + "type": "frame", + "id": "ilPma", + "name": "CoreIcons", + "gap": 8, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "GBB2k", + "name": "CoreItem 黑皇杖", + "width": 64, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "dTVaM", + "name": "CoreIcon 黑皇杖", + "width": 56, + "height": 42, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "text", + "id": "jNVfR", + "name": "CoreName 黑皇杖", + "fill": "$muted", + "textGrowth": "fixed-width", + "width": 64, + "content": "黑皇杖", + "textAlign": "center", + "fontFamily": "Geist", + "fontSize": 11, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "MednQ", + "name": "CoreItem 阿哈利姆神杖", + "width": 64, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "R4ubN", + "name": "CoreIcon 阿哈利姆神杖", + "width": 56, + "height": 42, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "text", + "id": "LKHS7", + "name": "CoreName 阿哈利姆神杖", + "fill": "$muted", + "textGrowth": "fixed-width", + "width": 64, + "content": "阿哈利姆神杖", + "textAlign": "center", + "fontFamily": "Geist", + "fontSize": 11, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "h5prw", + "name": "CoreItem 闪烁匕首", + "width": 64, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "BnkTL", + "name": "CoreIcon 闪烁匕首", + "width": 56, + "height": 42, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "text", + "id": "vw8kO", + "name": "CoreName 闪烁匕首", + "fill": "$muted", + "textGrowth": "fixed-width", + "width": 64, + "content": "闪烁匕首", + "textAlign": "center", + "fontFamily": "Geist", + "fontSize": 11, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "o1snP", + "name": "CoreItem 原力法杖", + "width": 64, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "Z0gLNd", + "name": "CoreIcon 原力法杖", + "width": 56, + "height": 42, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "text", + "id": "pkp0U", + "name": "CoreName 原力法杖", + "fill": "$muted", + "textGrowth": "fixed-width", + "width": 64, + "content": "原力法杖", + "textAlign": "center", + "fontFamily": "Geist", + "fontSize": 11, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "ec2jE", + "name": "CoreItem 以太透镜", + "width": 64, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "K96nl", + "name": "CoreIcon 以太透镜", + "width": 56, + "height": 42, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "text", + "id": "TB5yx", + "name": "CoreName 以太透镜", + "fill": "$muted", + "textGrowth": "fixed-width", + "width": 64, + "content": "以太透镜", + "textAlign": "center", + "fontFamily": "Geist", + "fontSize": 11, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "tSUcI", + "name": "CoreItem 玲珑心", + "width": 64, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "A9NTe", + "name": "CoreIcon 玲珑心", + "width": 56, + "height": 42, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "text", + "id": "WMHKO", + "name": "CoreName 玲珑心", + "fill": "$muted", + "textGrowth": "fixed-width", + "width": 64, + "content": "玲珑心", + "textAlign": "center", + "fontFamily": "Geist", + "fontSize": 11, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "l8C7v1", + "name": "CoreItem 刷新球", + "width": 64, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "z445MT", + "name": "CoreIcon 刷新球", + "width": 56, + "height": 42, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "text", + "id": "Jb221", + "name": "CoreName 刷新球", + "fill": "$muted", + "textGrowth": "fixed-width", + "width": 64, + "content": "刷新球", + "textAlign": "center", + "fontFamily": "Geist", + "fontSize": 11, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "iPAdY", + "name": "CoreItem 紫怨", + "width": 64, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "kSlAq", + "name": "CoreIcon 紫怨", + "width": 56, + "height": 42, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "text", + "id": "OM7vW", + "name": "CoreName 紫怨", + "fill": "$muted", + "textGrowth": "fixed-width", + "width": 64, + "content": "紫怨", + "textAlign": "center", + "fontFamily": "Geist", + "fontSize": 11, + "fontWeight": "normal" + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "wIDWk", + "x": 3040, + "y": 0, + "name": "Heroes · 被克装备", + "clip": true, + "width": 1440, + "height": 960, + "fill": "$bg0", + "layout": "vertical", + "children": [ + { + "type": "frame", + "id": "rDxct", + "name": "Topbar", + "width": "fill_container", + "fill": "#080C14CC", + "stroke": "$line", + "strokeWidth": { + "bottom": 1 + }, + "layout": "vertical", + "gap": 12, + "padding": [ + 14, + 24 + ], + "children": [ + { + "type": "frame", + "id": "gesVU", + "name": "MainTabs", + "justifyContent": "center", + "children": [ + { + "type": "frame", + "id": "Auk8k", + "name": "TabHeroes", + "fill": "#FFFFFF14", + "cornerRadius": [ + 6, + 0, + 0, + 6 + ], + "stroke": "$line", + "strokeWidth": 1, + "padding": [ + 10, + 28 + ], + "children": [ + { + "type": "text", + "id": "dAW8N", + "name": "TabHeroesLabel", + "fill": "$text", + "content": "英雄", + "fontFamily": "Geist", + "fontSize": 15, + "fontWeight": "600", + "letterSpacing": 1 + } + ] + }, + { + "type": "frame", + "id": "OBb4s", + "name": "TabItems", + "fill": "#FFFFFF08", + "cornerRadius": [ + 0, + 6, + 6, + 0 + ], + "stroke": "$line", + "strokeWidth": 1, + "padding": [ + 10, + 28 + ], + "children": [ + { + "type": "text", + "id": "t1V5M", + "name": "TabItemsLabel", + "fill": "$muted", + "content": "物品", + "fontFamily": "Geist", + "fontSize": 15, + "fontWeight": "500", + "letterSpacing": 1 + } + ] + } + ] + }, + { + "type": "frame", + "id": "aV7jH", + "name": "HeroToolbar", + "width": "fill_container", + "gap": 10, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "R14pR", + "name": "Filter 全部", + "fill": "#5EC8FF24", + "cornerRadius": 999, + "stroke": "#5EC8FF8C", + "strokeWidth": 1, + "padding": [ + 8, + 16 + ], + "children": [ + { + "type": "text", + "id": "Vzaue", + "name": "FilterLabel 全部", + "fill": "$text", + "content": "全部", + "fontFamily": "Geist", + "fontSize": 13, + "fontWeight": "600" + } + ] + }, + { + "type": "frame", + "id": "F1KH9", + "name": "Filter 核心", + "fill": "#FFFFFF0A", + "cornerRadius": 999, + "stroke": "$line", + "strokeWidth": 1, + "padding": [ + 8, + 16 + ], + "children": [ + { + "type": "text", + "id": "pXoyB", + "name": "FilterLabel 核心", + "fill": "$muted", + "content": "核心", + "fontFamily": "Geist", + "fontSize": 13, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "euveM", + "name": "Filter 辅助", + "fill": "#FFFFFF0A", + "cornerRadius": 999, + "stroke": "$line", + "strokeWidth": 1, + "padding": [ + 8, + 16 + ], + "children": [ + { + "type": "text", + "id": "sT2xK", + "name": "FilterLabel 辅助", + "fill": "$muted", + "content": "辅助", + "fontFamily": "Geist", + "fontSize": 13, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "i2FPl", + "name": "Filter 爆发", + "fill": "#FFFFFF0A", + "cornerRadius": 999, + "stroke": "$line", + "strokeWidth": 1, + "padding": [ + 8, + 16 + ], + "children": [ + { + "type": "text", + "id": "wT8AM", + "name": "FilterLabel 爆发", + "fill": "$muted", + "content": "爆发", + "fontFamily": "Geist", + "fontSize": 13, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "Hketl", + "name": "Filter 逃生", + "fill": "#FFFFFF0A", + "cornerRadius": 999, + "stroke": "$line", + "strokeWidth": 1, + "padding": [ + 8, + 16 + ], + "children": [ + { + "type": "text", + "id": "tI2Up", + "name": "FilterLabel 逃生", + "fill": "$muted", + "content": "逃生", + "fontFamily": "Geist", + "fontSize": 13, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "t9UeNB", + "name": "Filter 推进", + "fill": "#FFFFFF0A", + "cornerRadius": 999, + "stroke": "$line", + "strokeWidth": 1, + "padding": [ + 8, + 16 + ], + "children": [ + { + "type": "text", + "id": "zr0Qr", + "name": "FilterLabel 推进", + "fill": "$muted", + "content": "推进", + "fontFamily": "Geist", + "fontSize": 13, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "RDDOQ", + "name": "Filter 先手", + "fill": "#FFFFFF0A", + "cornerRadius": 999, + "stroke": "$line", + "strokeWidth": 1, + "padding": [ + 8, + 16 + ], + "children": [ + { + "type": "text", + "id": "kiwZd", + "name": "FilterLabel 先手", + "fill": "$muted", + "content": "先手", + "fontFamily": "Geist", + "fontSize": 13, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "Mu17u", + "name": "Filter 控制", + "fill": "#FFFFFF0A", + "cornerRadius": 999, + "stroke": "$line", + "strokeWidth": 1, + "padding": [ + 8, + 16 + ], + "children": [ + { + "type": "text", + "id": "v2AQG", + "name": "FilterLabel 控制", + "fill": "$muted", + "content": "控制", + "fontFamily": "Geist", + "fontSize": 13, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "gRlbf", + "name": "Filter 耐久", + "fill": "#FFFFFF0A", + "cornerRadius": 999, + "stroke": "$line", + "strokeWidth": 1, + "padding": [ + 8, + 16 + ], + "children": [ + { + "type": "text", + "id": "QHCRU", + "name": "FilterLabel 耐久", + "fill": "$muted", + "content": "耐久", + "fontFamily": "Geist", + "fontSize": 13, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "GZ8fO", + "name": "Filter 幻象", + "fill": "#FFFFFF0A", + "cornerRadius": 999, + "stroke": "$line", + "strokeWidth": 1, + "padding": [ + 8, + 16 + ], + "children": [ + { + "type": "text", + "id": "Z5AWg", + "name": "FilterLabel 幻象", + "fill": "$muted", + "content": "幻象", + "fontFamily": "Geist", + "fontSize": 13, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "n6yF7", + "name": "Search", + "width": 200, + "fill": "#00000073", + "cornerRadius": 8, + "stroke": "#8CAAD261", + "strokeWidth": 1, + "gap": 8, + "padding": [ + 9, + 12 + ], + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "pbPmt", + "name": "SearchIcon", + "width": 15, + "height": 15, + "icon": "search", + "library": "lucide", + "fill": "$muted" + }, + { + "type": "text", + "id": "Sve6G", + "name": "SearchPlaceholder", + "fill": "$muted", + "content": "搜索英雄或简称", + "fontFamily": "Geist", + "fontSize": 13, + "fontWeight": "normal" + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "UFd7B", + "name": "HeroBoard", + "width": "fill_container", + "height": "fill_container", + "gap": 18, + "padding": [ + 10, + 16, + 8, + 16 + ], + "children": [ + { + "type": "frame", + "id": "AJ5mX", + "name": "Col 力量", + "width": "fill_container", + "layout": "vertical", + "gap": 8, + "children": [ + { + "type": "frame", + "id": "o6yzLj", + "name": "Head 力量", + "gap": 8, + "alignItems": "center", + "children": [ + { + "type": "ellipse", + "id": "YtrYh", + "name": "AttrDot 力量", + "fill": "#E07A7A", + "width": 14, + "height": 14 + }, + { + "type": "text", + "id": "b3mme2", + "name": "AttrLabel 力量", + "fill": "$text", + "content": "力量", + "fontFamily": "Geist", + "fontSize": 14, + "fontWeight": "600", + "letterSpacing": 1 + } + ] + }, + { + "type": "frame", + "id": "KOlS0", + "name": "Row 力量 0", + "width": "fill_container", + "gap": 3, + "children": [ + { + "type": "frame", + "id": "EJG4s", + "name": "HeroCell 力量 0-0", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "xojQf", + "name": "HeroCell 力量 0-1", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "fjIBM", + "name": "HeroCell 力量 0-2", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "NfSHd", + "name": "HeroCell 力量 0-3", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "k1fZL", + "name": "HeroCell 力量 0-4", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + } + ] + }, + { + "type": "frame", + "id": "EQ2tP", + "name": "Row 力量 1", + "width": "fill_container", + "gap": 3, + "children": [ + { + "type": "frame", + "id": "A1SmYh", + "name": "HeroCell 力量 1-0", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "JgAAD", + "name": "HeroCell 力量 1-1", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "O8Z9pw", + "name": "HeroCell 力量 1-2", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "Nbkpa", + "name": "HeroCell 力量 1-3", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "Ey0o2", + "name": "HeroCell 力量 1-4", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + } + ] + }, + { + "type": "frame", + "id": "iIl2J", + "name": "Row 力量 2", + "width": "fill_container", + "gap": 3, + "children": [ + { + "type": "frame", + "id": "puBmN", + "name": "HeroCell 力量 2-0", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "A3OqCl", + "name": "HeroCell 力量 2-1", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "p7Q31F", + "name": "HeroCell 力量 2-2", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "H9KrUZ", + "name": "HeroCell 力量 2-3", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "vb3Ig", + "name": "HeroCell 力量 2-4", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + } + ] + }, + { + "type": "frame", + "id": "bJnr6", + "name": "Row 力量 3", + "width": "fill_container", + "gap": 3, + "children": [ + { + "type": "frame", + "id": "WAAFG", + "name": "HeroCell 力量 3-0", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "J4amD", + "name": "HeroCell 力量 3-1", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "CizQL", + "name": "HeroCell 力量 3-2", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "UcSvO", + "name": "HeroCell 力量 3-3", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "PGd3O", + "name": "HeroCell 力量 3-4", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + } + ] + } + ] + }, + { + "type": "frame", + "id": "Tqcbh", + "name": "Col 敏捷", + "width": "fill_container", + "layout": "vertical", + "gap": 8, + "children": [ + { + "type": "frame", + "id": "FSIu5", + "name": "Head 敏捷", + "gap": 8, + "alignItems": "center", + "children": [ + { + "type": "ellipse", + "id": "b2aG7", + "name": "AttrDot 敏捷", + "fill": "#5EC87A", + "width": 14, + "height": 14 + }, + { + "type": "text", + "id": "r5Itb", + "name": "AttrLabel 敏捷", + "fill": "$text", + "content": "敏捷", + "fontFamily": "Geist", + "fontSize": 14, + "fontWeight": "600", + "letterSpacing": 1 + } + ] + }, + { + "type": "frame", + "id": "m7hvI", + "name": "Row 敏捷 0", + "width": "fill_container", + "gap": 3, + "children": [ + { + "type": "frame", + "id": "Vmt5v", + "name": "HeroCell 敏捷 0-0", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "Uvq1i", + "name": "HeroCell 敏捷 0-1", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "SU9ge", + "name": "HeroCell 敏捷 0-2", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "nQYA6", + "name": "HeroCell 敏捷 0-3", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "W0CUH", + "name": "HeroCell 敏捷 0-4", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + } + ] + }, + { + "type": "frame", + "id": "kLfSg", + "name": "Row 敏捷 1", + "width": "fill_container", + "gap": 3, + "children": [ + { + "type": "frame", + "id": "AMmZH", + "name": "HeroCell 敏捷 1-0", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "gdaB1", + "name": "HeroCell 敏捷 1-1", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "ooOc0", + "name": "HeroCell 敏捷 1-2", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "gduS9", + "name": "HeroCell 敏捷 1-3", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "GFDVY", + "name": "HeroCell 敏捷 1-4", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + } + ] + }, + { + "type": "frame", + "id": "CWk9I", + "name": "Row 敏捷 2", + "width": "fill_container", + "gap": 3, + "children": [ + { + "type": "frame", + "id": "x8tPVQ", + "name": "HeroCell 敏捷 2-0", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "p1S27", + "name": "HeroCell 敏捷 2-1", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "nDZVR", + "name": "HeroCell 敏捷 2-2", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "TTv4m", + "name": "HeroCell 敏捷 2-3", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "N3r8DO", + "name": "HeroCell 敏捷 2-4", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + } + ] + }, + { + "type": "frame", + "id": "XxUtn", + "name": "Row 敏捷 3", + "width": "fill_container", + "gap": 3, + "children": [ + { + "type": "frame", + "id": "sgJGS", + "name": "HeroCell 敏捷 3-0", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "LgeLR", + "name": "HeroCell 敏捷 3-1", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "mi7Ap", + "name": "HeroCell 敏捷 3-2", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "lQIjq", + "name": "HeroCell 敏捷 3-3", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "r9Mtk", + "name": "HeroCell 敏捷 3-4", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + } + ] + } + ] + }, + { + "type": "frame", + "id": "qLPoN", + "name": "Col 智力", + "width": "fill_container", + "layout": "vertical", + "gap": 8, + "children": [ + { + "type": "frame", + "id": "qJ9lI", + "name": "Head 智力", + "gap": 8, + "alignItems": "center", + "children": [ + { + "type": "ellipse", + "id": "yAqBi", + "name": "AttrDot 智力", + "fill": "#6EB6FF", + "width": 14, + "height": 14 + }, + { + "type": "text", + "id": "j3ytq", + "name": "AttrLabel 智力", + "fill": "$text", + "content": "智力", + "fontFamily": "Geist", + "fontSize": 14, + "fontWeight": "600", + "letterSpacing": 1 + } + ] + }, + { + "type": "frame", + "id": "sOtFH", + "name": "Row 智力 0", + "width": "fill_container", + "gap": 3, + "children": [ + { + "type": "frame", + "id": "thHQY", + "name": "HeroCell 智力 0-0", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "jI1kO", + "name": "HeroCell 智力 0-1", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "Y6DFN", + "name": "HeroCell 智力 0-2", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "qowwH", + "name": "HeroCell 智力 0-3", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + } + ] + }, + { + "type": "frame", + "id": "STidN", + "name": "Row 智力 1", + "width": "fill_container", + "gap": 3, + "children": [ + { + "type": "frame", + "id": "gXM79", + "name": "HeroCell 智力 1-0", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "VhKyk", + "name": "HeroCell 智力 1-1", + "width": "fill_container", + "height": 48, + "fill": "#1A3048", + "cornerRadius": 2, + "stroke": "$accent", + "strokeWidth": 2 + }, + { + "type": "frame", + "id": "z6iea", + "name": "HeroCell 智力 1-2", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "Z60Vsk", + "name": "HeroCell 智力 1-3", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + } + ] + }, + { + "type": "frame", + "id": "djJHz", + "name": "Row 智力 2", + "width": "fill_container", + "gap": 3, + "children": [ + { + "type": "frame", + "id": "DnUgw", + "name": "HeroCell 智力 2-0", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "eQK4W", + "name": "HeroCell 智力 2-1", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "BEdUO", + "name": "HeroCell 智力 2-2", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "W5gJl", + "name": "HeroCell 智力 2-3", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + } + ] + }, + { + "type": "frame", + "id": "Pg0BI", + "name": "Row 智力 3", + "width": "fill_container", + "gap": 3, + "children": [ + { + "type": "frame", + "id": "xOnp0", + "name": "HeroCell 智力 3-0", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "aanD9", + "name": "HeroCell 智力 3-1", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "O38RR", + "name": "HeroCell 智力 3-2", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "CNQGZ", + "name": "HeroCell 智力 3-3", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + } + ] + } + ] + }, + { + "type": "frame", + "id": "gmJpT", + "name": "Col 全才", + "width": "fill_container", + "layout": "vertical", + "gap": 8, + "children": [ + { + "type": "frame", + "id": "jySCm", + "name": "Head 全才", + "gap": 8, + "alignItems": "center", + "children": [ + { + "type": "ellipse", + "id": "oe4RB", + "name": "AttrDot 全才", + "fill": "#7EC8FF", + "width": 14, + "height": 14 + }, + { + "type": "text", + "id": "L1Yykp", + "name": "AttrLabel 全才", + "fill": "$text", + "content": "全才", + "fontFamily": "Geist", + "fontSize": 14, + "fontWeight": "600", + "letterSpacing": 1 + } + ] + }, + { + "type": "frame", + "id": "p1sxn", + "name": "Row 全才 0", + "width": "fill_container", + "gap": 3, + "children": [ + { + "type": "frame", + "id": "Mebnf", + "name": "HeroCell 全才 0-0", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "G3MBS", + "name": "HeroCell 全才 0-1", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "XAgua", + "name": "HeroCell 全才 0-2", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + } + ] + }, + { + "type": "frame", + "id": "VKTWy", + "name": "Row 全才 1", + "width": "fill_container", + "gap": 3, + "children": [ + { + "type": "frame", + "id": "NhAQU", + "name": "HeroCell 全才 1-0", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "UzSDP", + "name": "HeroCell 全才 1-1", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "nKRZv", + "name": "HeroCell 全才 1-2", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + } + ] + }, + { + "type": "frame", + "id": "fiKfk", + "name": "Row 全才 2", + "width": "fill_container", + "gap": 3, + "children": [ + { + "type": "frame", + "id": "nlzPR", + "name": "HeroCell 全才 2-0", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "FwZ9N", + "name": "HeroCell 全才 2-1", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "fpZqO", + "name": "HeroCell 全才 2-2", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + } + ] + }, + { + "type": "frame", + "id": "gGwOo", + "name": "Row 全才 3", + "width": "fill_container", + "gap": 3, + "children": [ + { + "type": "frame", + "id": "o12VD1", + "name": "HeroCell 全才 3-0", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "DAtqU", + "name": "HeroCell 全才 3-1", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "DTKl1", + "name": "HeroCell 全才 3-2", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "XQezc", + "name": "DetailPanel", + "width": "fill_container", + "height": 320, + "fill": "#080C148C", + "cornerRadius": 10, + "stroke": "$line", + "strokeWidth": 1, + "layout": "vertical", + "gap": 12, + "padding": [ + 14, + 16, + 16, + 16 + ], + "children": [ + { + "type": "frame", + "id": "aPHJk", + "name": "DetailHead", + "width": "fill_container", + "gap": 12, + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "vHe18", + "name": "HeroName", + "fill": "$text", + "content": "宙斯", + "fontFamily": "Geist", + "fontSize": 18, + "fontWeight": "650", + "letterSpacing": 0.5 + }, + { + "type": "frame", + "id": "k51haB", + "name": "RoleChips", + "gap": 6, + "children": [ + { + "type": "frame", + "id": "jI191", + "name": "Chip 核心", + "fill": "#5EC8FF1A", + "cornerRadius": 999, + "stroke": "#5EC8FF59", + "strokeWidth": 1, + "padding": [ + 3, + 10 + ], + "children": [ + { + "type": "text", + "id": "TmDCb", + "name": "ChipLabel 核心", + "fill": "$text", + "content": "核心", + "fontFamily": "Geist", + "fontSize": 12, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "Ur0N9", + "name": "Chip 爆发", + "fill": "#5EC8FF1A", + "cornerRadius": 999, + "stroke": "#5EC8FF59", + "strokeWidth": 1, + "padding": [ + 3, + 10 + ], + "children": [ + { + "type": "text", + "id": "p5iUyX", + "name": "ChipLabel 爆发", + "fill": "$text", + "content": "爆发", + "fontFamily": "Geist", + "fontSize": 12, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "AcmNv", + "name": "Chip 控制", + "fill": "#5EC8FF1A", + "cornerRadius": 999, + "stroke": "#5EC8FF59", + "strokeWidth": 1, + "padding": [ + 3, + 10 + ], + "children": [ + { + "type": "text", + "id": "E0Tbmc", + "name": "ChipLabel 控制", + "fill": "$text", + "content": "控制", + "fontFamily": "Geist", + "fontSize": 12, + "fontWeight": "normal" + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "hG7fc", + "name": "DetailTabs", + "width": "fill_container", + "stroke": "$line", + "strokeWidth": { + "bottom": 1 + }, + "children": [ + { + "type": "frame", + "id": "dMzRE", + "name": "DTab 技能", + "stroke": "#00000000", + "strokeWidth": { + "bottom": 2 + }, + "padding": [ + 8, + 18 + ], + "children": [ + { + "type": "text", + "id": "sn3nn", + "name": "DTabLabel 技能", + "fill": "$muted", + "content": "技能", + "fontFamily": "Geist", + "fontSize": 14, + "fontWeight": "500", + "letterSpacing": 0.5 + } + ] + }, + { + "type": "frame", + "id": "NA4Nz", + "name": "DTab 核心装备", + "stroke": "#00000000", + "strokeWidth": { + "bottom": 2 + }, + "padding": [ + 8, + 18 + ], + "children": [ + { + "type": "text", + "id": "M21WIN", + "name": "DTabLabel 核心装备", + "fill": "$muted", + "content": "核心装备", + "fontFamily": "Geist", + "fontSize": 14, + "fontWeight": "500", + "letterSpacing": 0.5 + } + ] + }, + { + "type": "frame", + "id": "aY73o", + "name": "DTab 被克装备", + "stroke": "$accent", + "strokeWidth": { + "bottom": 2 + }, + "padding": [ + 8, + 18 + ], + "children": [ + { + "type": "text", + "id": "FkhKe", + "name": "DTabLabel 被克装备", + "fill": "$text", + "content": "被克装备", + "fontFamily": "Geist", + "fontSize": 14, + "fontWeight": "600", + "letterSpacing": 0.5 + } + ] + } + ] + }, + { + "type": "frame", + "id": "HrlcR", + "name": "FearsBody", + "width": "fill_container", + "height": "fill_container", + "layout": "vertical", + "gap": 12, + "children": [ + { + "type": "text", + "id": "qmEl0", + "name": "FearsHint", + "fill": "$muted", + "content": "对局中需重点防范的克制装备", + "fontFamily": "Geist", + "fontSize": 13, + "fontWeight": "normal" + }, + { + "type": "frame", + "id": "qvMDu", + "name": "FearList", + "gap": 10, + "children": [ + { + "type": "frame", + "id": "QWTM8", + "name": "Fear 黑皇杖", + "width": 96, + "layout": "vertical", + "gap": 6, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "m1RZCN", + "name": "FearIcon 黑皇杖", + "width": 56, + "height": 42, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#E07A2F99", + "strokeWidth": 1 + }, + { + "type": "text", + "id": "sXHth", + "name": "FearName 黑皇杖", + "fill": "$text", + "textGrowth": "fixed-width", + "width": 96, + "content": "黑皇杖", + "textAlign": "center", + "fontFamily": "Geist", + "fontSize": 12, + "fontWeight": "600" + }, + { + "type": "text", + "id": "IaHPe", + "name": "FearReason 黑皇杖", + "fill": "$bad", + "textGrowth": "fixed-width", + "width": 96, + "content": "减益免疫", + "textAlign": "center", + "fontFamily": "Geist Mono", + "fontSize": 11, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "n87JR", + "name": "Fear 林肯法球", + "width": 96, + "layout": "vertical", + "gap": 6, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "DXiy5", + "name": "FearIcon 林肯法球", + "width": 56, + "height": 42, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#E07A2F99", + "strokeWidth": 1 + }, + { + "type": "text", + "id": "MmNj6", + "name": "FearName 林肯法球", + "fill": "$text", + "textGrowth": "fixed-width", + "width": 96, + "content": "林肯法球", + "textAlign": "center", + "fontFamily": "Geist", + "fontSize": 12, + "fontWeight": "600" + }, + { + "type": "text", + "id": "dpD86", + "name": "FearReason 林肯法球", + "fill": "$bad", + "textGrowth": "fixed-width", + "width": 96, + "content": "格挡指向技能", + "textAlign": "center", + "fontFamily": "Geist Mono", + "fontSize": 11, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "LReod", + "name": "Fear 莲花罩", + "width": 96, + "layout": "vertical", + "gap": 6, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "zkdJ7", + "name": "FearIcon 莲花罩", + "width": 56, + "height": 42, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#E07A2F99", + "strokeWidth": 1 + }, + { + "type": "text", + "id": "v6adwV", + "name": "FearName 莲花罩", + "fill": "$text", + "textGrowth": "fixed-width", + "width": 96, + "content": "莲花罩", + "textAlign": "center", + "fontFamily": "Geist", + "fontSize": 12, + "fontWeight": "600" + }, + { + "type": "text", + "id": "yYmUt", + "name": "FearReason 莲花罩", + "fill": "$bad", + "textGrowth": "fixed-width", + "width": 96, + "content": "反弹技能", + "textAlign": "center", + "fontFamily": "Geist Mono", + "fontSize": 11, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "nNsZX", + "name": "Fear 净魂之刃", + "width": 96, + "layout": "vertical", + "gap": 6, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "eTJTG", + "name": "FearIcon 净魂之刃", + "width": 56, + "height": 42, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#E07A2F99", + "strokeWidth": 1 + }, + { + "type": "text", + "id": "DfDn9", + "name": "FearName 净魂之刃", + "fill": "$text", + "textGrowth": "fixed-width", + "width": 96, + "content": "净魂之刃", + "textAlign": "center", + "fontFamily": "Geist", + "fontSize": 12, + "fontWeight": "600" + }, + { + "type": "text", + "id": "S2qGwl", + "name": "FearReason 净魂之刃", + "fill": "$bad", + "textGrowth": "fixed-width", + "width": 96, + "content": "驱散增益", + "textAlign": "center", + "fontFamily": "Geist Mono", + "fontSize": 11, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "Turoq", + "name": "Fear 散华", + "width": 96, + "layout": "vertical", + "gap": 6, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "U5yrZ", + "name": "FearIcon 散华", + "width": 56, + "height": 42, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#E07A2F99", + "strokeWidth": 1 + }, + { + "type": "text", + "id": "B5ASdT", + "name": "FearName 散华", + "fill": "$text", + "textGrowth": "fixed-width", + "width": 96, + "content": "散华", + "textAlign": "center", + "fontFamily": "Geist", + "fontSize": 12, + "fontWeight": "600" + }, + { + "type": "text", + "id": "gwhIv", + "name": "FearReason 散华", + "fill": "$bad", + "textGrowth": "fixed-width", + "width": 96, + "content": "状态抗性", + "textAlign": "center", + "fontFamily": "Geist Mono", + "fontSize": 11, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "WZQVC", + "name": "Fear 幻影斧", + "width": 96, + "layout": "vertical", + "gap": 6, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "N6BoWM", + "name": "FearIcon 幻影斧", + "width": 56, + "height": 42, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#E07A2F99", + "strokeWidth": 1 + }, + { + "type": "text", + "id": "JBWRf", + "name": "FearName 幻影斧", + "fill": "$text", + "textGrowth": "fixed-width", + "width": 96, + "content": "幻影斧", + "textAlign": "center", + "fontFamily": "Geist", + "fontSize": 12, + "fontWeight": "600" + }, + { + "type": "text", + "id": "QkXj3", + "name": "FearReason 幻影斧", + "fill": "$bad", + "textGrowth": "fixed-width", + "width": 96, + "content": "规避单体", + "textAlign": "center", + "fontFamily": "Geist Mono", + "fontSize": 11, + "fontWeight": "normal" + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "ONn5f", + "x": 0, + "y": 1040, + "name": "Heroes · 未选中", + "clip": true, + "width": 1440, + "height": 960, + "fill": "$bg0", + "layout": "vertical", + "children": [ + { + "type": "frame", + "id": "zwQFg", + "name": "Topbar", + "width": "fill_container", + "fill": "#080C14CC", + "stroke": "$line", + "strokeWidth": { + "bottom": 1 + }, + "layout": "vertical", + "gap": 12, + "padding": [ + 14, + 24 + ], + "children": [ + { + "type": "frame", + "id": "vN8yF", + "name": "MainTabs", + "justifyContent": "center", + "children": [ + { + "type": "frame", + "id": "hwoYb", + "name": "TabHeroes", + "fill": "#FFFFFF14", + "cornerRadius": [ + 6, + 0, + 0, + 6 + ], + "stroke": "$line", + "strokeWidth": 1, + "padding": [ + 10, + 28 + ], + "children": [ + { + "type": "text", + "id": "cYDtd", + "name": "TabHeroesLabel", + "fill": "$text", + "content": "英雄", + "fontFamily": "Geist", + "fontSize": 15, + "fontWeight": "600", + "letterSpacing": 1 + } + ] + }, + { + "type": "frame", + "id": "apyhR", + "name": "TabItems", + "fill": "#FFFFFF08", + "cornerRadius": [ + 0, + 6, + 6, + 0 + ], + "stroke": "$line", + "strokeWidth": 1, + "padding": [ + 10, + 28 + ], + "children": [ + { + "type": "text", + "id": "iQS5C", + "name": "TabItemsLabel", + "fill": "$muted", + "content": "物品", + "fontFamily": "Geist", + "fontSize": 15, + "fontWeight": "500", + "letterSpacing": 1 + } + ] + } + ] + }, + { + "type": "frame", + "id": "niCx8", + "name": "HeroToolbar", + "width": "fill_container", + "gap": 10, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "WjL7p", + "name": "Filter 全部", + "fill": "#5EC8FF24", + "cornerRadius": 999, + "stroke": "#5EC8FF8C", + "strokeWidth": 1, + "padding": [ + 8, + 16 + ], + "children": [ + { + "type": "text", + "id": "SfUBS", + "name": "FilterLabel 全部", + "fill": "$text", + "content": "全部", + "fontFamily": "Geist", + "fontSize": 13, + "fontWeight": "600" + } + ] + }, + { + "type": "frame", + "id": "V6og6p", + "name": "Filter 核心", + "fill": "#FFFFFF0A", + "cornerRadius": 999, + "stroke": "$line", + "strokeWidth": 1, + "padding": [ + 8, + 16 + ], + "children": [ + { + "type": "text", + "id": "RApKI", + "name": "FilterLabel 核心", + "fill": "$muted", + "content": "核心", + "fontFamily": "Geist", + "fontSize": 13, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "JwslN", + "name": "Filter 辅助", + "fill": "#FFFFFF0A", + "cornerRadius": 999, + "stroke": "$line", + "strokeWidth": 1, + "padding": [ + 8, + 16 + ], + "children": [ + { + "type": "text", + "id": "PSAP0", + "name": "FilterLabel 辅助", + "fill": "$muted", + "content": "辅助", + "fontFamily": "Geist", + "fontSize": 13, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "g9x0F", + "name": "Filter 爆发", + "fill": "#FFFFFF0A", + "cornerRadius": 999, + "stroke": "$line", + "strokeWidth": 1, + "padding": [ + 8, + 16 + ], + "children": [ + { + "type": "text", + "id": "G723nJ", + "name": "FilterLabel 爆发", + "fill": "$muted", + "content": "爆发", + "fontFamily": "Geist", + "fontSize": 13, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "FyrYX", + "name": "Filter 逃生", + "fill": "#FFFFFF0A", + "cornerRadius": 999, + "stroke": "$line", + "strokeWidth": 1, + "padding": [ + 8, + 16 + ], + "children": [ + { + "type": "text", + "id": "y4RJ6y", + "name": "FilterLabel 逃生", + "fill": "$muted", + "content": "逃生", + "fontFamily": "Geist", + "fontSize": 13, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "vvkFw", + "name": "Filter 推进", + "fill": "#FFFFFF0A", + "cornerRadius": 999, + "stroke": "$line", + "strokeWidth": 1, + "padding": [ + 8, + 16 + ], + "children": [ + { + "type": "text", + "id": "patW4", + "name": "FilterLabel 推进", + "fill": "$muted", + "content": "推进", + "fontFamily": "Geist", + "fontSize": 13, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "lcvaY", + "name": "Filter 先手", + "fill": "#FFFFFF0A", + "cornerRadius": 999, + "stroke": "$line", + "strokeWidth": 1, + "padding": [ + 8, + 16 + ], + "children": [ + { + "type": "text", + "id": "jBTWm", + "name": "FilterLabel 先手", + "fill": "$muted", + "content": "先手", + "fontFamily": "Geist", + "fontSize": 13, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "T0MDe", + "name": "Filter 控制", + "fill": "#FFFFFF0A", + "cornerRadius": 999, + "stroke": "$line", + "strokeWidth": 1, + "padding": [ + 8, + 16 + ], + "children": [ + { + "type": "text", + "id": "GfXHu", + "name": "FilterLabel 控制", + "fill": "$muted", + "content": "控制", + "fontFamily": "Geist", + "fontSize": 13, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "Ep3js", + "name": "Filter 耐久", + "fill": "#FFFFFF0A", + "cornerRadius": 999, + "stroke": "$line", + "strokeWidth": 1, + "padding": [ + 8, + 16 + ], + "children": [ + { + "type": "text", + "id": "ei6kp", + "name": "FilterLabel 耐久", + "fill": "$muted", + "content": "耐久", + "fontFamily": "Geist", + "fontSize": 13, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "rql2n", + "name": "Filter 幻象", + "fill": "#FFFFFF0A", + "cornerRadius": 999, + "stroke": "$line", + "strokeWidth": 1, + "padding": [ + 8, + 16 + ], + "children": [ + { + "type": "text", + "id": "iCgmc", + "name": "FilterLabel 幻象", + "fill": "$muted", + "content": "幻象", + "fontFamily": "Geist", + "fontSize": 13, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "SgKnz", + "name": "Search", + "width": 200, + "fill": "#00000073", + "cornerRadius": 8, + "stroke": "#8CAAD261", + "strokeWidth": 1, + "gap": 8, + "padding": [ + 9, + 12 + ], + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "l4YmWm", + "name": "SearchIcon", + "width": 15, + "height": 15, + "icon": "search", + "library": "lucide", + "fill": "$muted" + }, + { + "type": "text", + "id": "K0bcSr", + "name": "SearchPlaceholder", + "fill": "$muted", + "content": "搜索英雄或简称", + "fontFamily": "Geist", + "fontSize": 13, + "fontWeight": "normal" + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "gQKqJ", + "name": "HeroBoard", + "width": "fill_container", + "height": "fill_container", + "gap": 18, + "padding": [ + 10, + 16, + 8, + 16 + ], + "children": [ + { + "type": "frame", + "id": "H4H2cf", + "name": "Col 力量", + "width": "fill_container", + "layout": "vertical", + "gap": 8, + "children": [ + { + "type": "frame", + "id": "USRDP", + "name": "Head 力量", + "gap": 8, + "alignItems": "center", + "children": [ + { + "type": "ellipse", + "id": "X1vub", + "name": "AttrDot 力量", + "fill": "#E07A7A", + "width": 14, + "height": 14 + }, + { + "type": "text", + "id": "j92uOc", + "name": "AttrLabel 力量", + "fill": "$text", + "content": "力量", + "fontFamily": "Geist", + "fontSize": 14, + "fontWeight": "600", + "letterSpacing": 1 + } + ] + }, + { + "type": "frame", + "id": "xIIqP", + "name": "Row 力量 0", + "width": "fill_container", + "gap": 3, + "children": [ + { + "type": "frame", + "id": "wF1o2", + "name": "HeroCell 力量 0-0", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "mSnC3", + "name": "HeroCell 力量 0-1", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "y1dnXO", + "name": "HeroCell 力量 0-2", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "FjSGo", + "name": "HeroCell 力量 0-3", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "JYrp0", + "name": "HeroCell 力量 0-4", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + } + ] + }, + { + "type": "frame", + "id": "fTqn8", + "name": "Row 力量 1", + "width": "fill_container", + "gap": 3, + "children": [ + { + "type": "frame", + "id": "wniNK", + "name": "HeroCell 力量 1-0", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "Qov8k", + "name": "HeroCell 力量 1-1", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "LK4yF", + "name": "HeroCell 力量 1-2", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "Uphha", + "name": "HeroCell 力量 1-3", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "Vk46z", + "name": "HeroCell 力量 1-4", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + } + ] + }, + { + "type": "frame", + "id": "X5Wyn1", + "name": "Row 力量 2", + "width": "fill_container", + "gap": 3, + "children": [ + { + "type": "frame", + "id": "PLtTD", + "name": "HeroCell 力量 2-0", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "Y6CaYr", + "name": "HeroCell 力量 2-1", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "QEGjp", + "name": "HeroCell 力量 2-2", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "mM26d", + "name": "HeroCell 力量 2-3", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "igwKJ", + "name": "HeroCell 力量 2-4", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + } + ] + }, + { + "type": "frame", + "id": "etfFu", + "name": "Row 力量 3", + "width": "fill_container", + "gap": 3, + "children": [ + { + "type": "frame", + "id": "k2a9E7", + "name": "HeroCell 力量 3-0", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "HNiJ9", + "name": "HeroCell 力量 3-1", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "XZppd", + "name": "HeroCell 力量 3-2", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "hLGQz", + "name": "HeroCell 力量 3-3", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "M0pJk5", + "name": "HeroCell 力量 3-4", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + } + ] + } + ] + }, + { + "type": "frame", + "id": "g363a", + "name": "Col 敏捷", + "width": "fill_container", + "layout": "vertical", + "gap": 8, + "children": [ + { + "type": "frame", + "id": "mvQ00", + "name": "Head 敏捷", + "gap": 8, + "alignItems": "center", + "children": [ + { + "type": "ellipse", + "id": "yw42H", + "name": "AttrDot 敏捷", + "fill": "#5EC87A", + "width": 14, + "height": 14 + }, + { + "type": "text", + "id": "IsDQ0", + "name": "AttrLabel 敏捷", + "fill": "$text", + "content": "敏捷", + "fontFamily": "Geist", + "fontSize": 14, + "fontWeight": "600", + "letterSpacing": 1 + } + ] + }, + { + "type": "frame", + "id": "R3ZICX", + "name": "Row 敏捷 0", + "width": "fill_container", + "gap": 3, + "children": [ + { + "type": "frame", + "id": "UktyC", + "name": "HeroCell 敏捷 0-0", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "q7SO1", + "name": "HeroCell 敏捷 0-1", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "aedSu", + "name": "HeroCell 敏捷 0-2", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "QCQZr", + "name": "HeroCell 敏捷 0-3", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "PCKzs", + "name": "HeroCell 敏捷 0-4", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + } + ] + }, + { + "type": "frame", + "id": "Z9cArK", + "name": "Row 敏捷 1", + "width": "fill_container", + "gap": 3, + "children": [ + { + "type": "frame", + "id": "fGNZe", + "name": "HeroCell 敏捷 1-0", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "YJfwc", + "name": "HeroCell 敏捷 1-1", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "k40eU9", + "name": "HeroCell 敏捷 1-2", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "A4CGu", + "name": "HeroCell 敏捷 1-3", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "t8f20", + "name": "HeroCell 敏捷 1-4", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + } + ] + }, + { + "type": "frame", + "id": "AjodG", + "name": "Row 敏捷 2", + "width": "fill_container", + "gap": 3, + "children": [ + { + "type": "frame", + "id": "F4kS8", + "name": "HeroCell 敏捷 2-0", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "rDH5t", + "name": "HeroCell 敏捷 2-1", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "LnuCC", + "name": "HeroCell 敏捷 2-2", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "K6n9Es", + "name": "HeroCell 敏捷 2-3", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "bg55B", + "name": "HeroCell 敏捷 2-4", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + } + ] + }, + { + "type": "frame", + "id": "dyMFx", + "name": "Row 敏捷 3", + "width": "fill_container", + "gap": 3, + "children": [ + { + "type": "frame", + "id": "WWWjb", + "name": "HeroCell 敏捷 3-0", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "Ec9Tb", + "name": "HeroCell 敏捷 3-1", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "En3iY", + "name": "HeroCell 敏捷 3-2", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "Wtsl5", + "name": "HeroCell 敏捷 3-3", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "jmRMr", + "name": "HeroCell 敏捷 3-4", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + } + ] + } + ] + }, + { + "type": "frame", + "id": "Zsiei", + "name": "Col 智力", + "width": "fill_container", + "layout": "vertical", + "gap": 8, + "children": [ + { + "type": "frame", + "id": "knBEQ", + "name": "Head 智力", + "gap": 8, + "alignItems": "center", + "children": [ + { + "type": "ellipse", + "id": "azjz2", + "name": "AttrDot 智力", + "fill": "#6EB6FF", + "width": 14, + "height": 14 + }, + { + "type": "text", + "id": "f3BvB", + "name": "AttrLabel 智力", + "fill": "$text", + "content": "智力", + "fontFamily": "Geist", + "fontSize": 14, + "fontWeight": "600", + "letterSpacing": 1 + } + ] + }, + { + "type": "frame", + "id": "HZSqM", + "name": "Row 智力 0", + "width": "fill_container", + "gap": 3, + "children": [ + { + "type": "frame", + "id": "J6CnuA", + "name": "HeroCell 智力 0-0", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "i9tg5l", + "name": "HeroCell 智力 0-1", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "QaWD7", + "name": "HeroCell 智力 0-2", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "fqifF", + "name": "HeroCell 智力 0-3", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + } + ] + }, + { + "type": "frame", + "id": "cYOwg", + "name": "Row 智力 1", + "width": "fill_container", + "gap": 3, + "children": [ + { + "type": "frame", + "id": "bdnk7", + "name": "HeroCell 智力 1-0", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "rXmKk", + "name": "HeroCell 智力 1-1", + "width": "fill_container", + "height": 48, + "fill": "#1A3048", + "cornerRadius": 2, + "stroke": "$accent", + "strokeWidth": 2 + }, + { + "type": "frame", + "id": "OllY7", + "name": "HeroCell 智力 1-2", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "YDORd", + "name": "HeroCell 智力 1-3", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + } + ] + }, + { + "type": "frame", + "id": "E59OXn", + "name": "Row 智力 2", + "width": "fill_container", + "gap": 3, + "children": [ + { + "type": "frame", + "id": "Xm9WM", + "name": "HeroCell 智力 2-0", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "LWnCS", + "name": "HeroCell 智力 2-1", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "L27hs", + "name": "HeroCell 智力 2-2", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "PNH7I", + "name": "HeroCell 智力 2-3", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + } + ] + }, + { + "type": "frame", + "id": "ORV0B", + "name": "Row 智力 3", + "width": "fill_container", + "gap": 3, + "children": [ + { + "type": "frame", + "id": "E0tab", + "name": "HeroCell 智力 3-0", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "u5GvN", + "name": "HeroCell 智力 3-1", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "eXutg", + "name": "HeroCell 智力 3-2", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "garJY", + "name": "HeroCell 智力 3-3", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + } + ] + } + ] + }, + { + "type": "frame", + "id": "nyLms", + "name": "Col 全才", + "width": "fill_container", + "layout": "vertical", + "gap": 8, + "children": [ + { + "type": "frame", + "id": "d00d0A", + "name": "Head 全才", + "gap": 8, + "alignItems": "center", + "children": [ + { + "type": "ellipse", + "id": "l8TGAF", + "name": "AttrDot 全才", + "fill": "#7EC8FF", + "width": 14, + "height": 14 + }, + { + "type": "text", + "id": "QHZBV", + "name": "AttrLabel 全才", + "fill": "$text", + "content": "全才", + "fontFamily": "Geist", + "fontSize": 14, + "fontWeight": "600", + "letterSpacing": 1 + } + ] + }, + { + "type": "frame", + "id": "SIDqS", + "name": "Row 全才 0", + "width": "fill_container", + "gap": 3, + "children": [ + { + "type": "frame", + "id": "rJYQr", + "name": "HeroCell 全才 0-0", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "Grs7A", + "name": "HeroCell 全才 0-1", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "qCzoi", + "name": "HeroCell 全才 0-2", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + } + ] + }, + { + "type": "frame", + "id": "BOLEP", + "name": "Row 全才 1", + "width": "fill_container", + "gap": 3, + "children": [ + { + "type": "frame", + "id": "uzeEB", + "name": "HeroCell 全才 1-0", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "ceBld", + "name": "HeroCell 全才 1-1", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "qysZx", + "name": "HeroCell 全才 1-2", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + } + ] + }, + { + "type": "frame", + "id": "S0QZHZ", + "name": "Row 全才 2", + "width": "fill_container", + "gap": 3, + "children": [ + { + "type": "frame", + "id": "tmGPd", + "name": "HeroCell 全才 2-0", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "MrvDy", + "name": "HeroCell 全才 2-1", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "O3DmZS", + "name": "HeroCell 全才 2-2", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + } + ] + }, + { + "type": "frame", + "id": "lzTUE", + "name": "Row 全才 3", + "width": "fill_container", + "gap": 3, + "children": [ + { + "type": "frame", + "id": "E2p4n", + "name": "HeroCell 全才 3-0", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "UtQPw", + "name": "HeroCell 全才 3-1", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + }, + { + "type": "frame", + "id": "gfJ5F", + "name": "HeroCell 全才 3-2", + "width": "fill_container", + "height": 48, + "fill": "#0A0E14", + "cornerRadius": 2, + "stroke": "#00000000" + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "RvRLx", + "name": "DetailPanel", + "width": "fill_container", + "height": 120, + "fill": "#080C148C", + "cornerRadius": 10, + "stroke": "$line", + "strokeWidth": 1, + "layout": "vertical", + "padding": [ + 20, + 16 + ], + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "JAi0Q", + "name": "EmptyHint", + "fill": "$muted", + "content": "点击英雄查看定位、技能、核心装备与被克装备", + "fontFamily": "Geist", + "fontSize": 14, + "fontWeight": "normal", + "letterSpacing": 0.5 + } + ] + } + ] + }, + { + "type": "frame", + "id": "QkC0T", + "x": -500, + "y": 0, + "name": "设计说明", + "width": 420, + "height": 280, + "fill": "#111822", + "cornerRadius": 10, + "stroke": "$line", + "strokeWidth": 1, + "layout": "vertical", + "gap": 10, + "padding": 20, + "children": [ + { + "type": "text", + "id": "ebEBq", + "name": "NoteTitle", + "fill": "$text", + "content": "上分帝 · Web 预览稿", + "fontFamily": "Geist", + "fontSize": 18, + "fontWeight": "650" + }, + { + "type": "text", + "id": "rPiNh", + "name": "NoteBody", + "fill": "$muted", + "textGrowth": "fixed-width", + "width": 380, + "content": "屏幕清单:\n1) Heroes·技能 / 核心装备 / 被克装备 — 底部分页\n2) Heroes·未选中 — 空状态骨架\n3) Items·网格 / 竖式 — 布局 toggle\n\n底部详情:名称+定位固定;内容区三标签切换。\n被克装备展示图标+名称+短理由。\n确认后按此稿改 web/relations 实现。", + "lineHeight": 1.55, + "fontFamily": "Geist", + "fontSize": 13, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "CCijS", + "x": 1520, + "y": 2080, + "name": "Items · 竖式", + "clip": true, + "width": 1440, + "height": 960, + "fill": "$bg0", + "layout": "vertical", + "children": [ + { + "type": "frame", + "id": "yD3s3", + "name": "Topbar", + "width": "fill_container", + "fill": "#080C14CC", + "layout": "vertical", + "gap": 12, + "padding": [ + 14, + 24 + ], + "children": [ + { + "type": "frame", + "id": "EPme0", + "name": "MainTabs", + "justifyContent": "center", + "children": [ + { + "type": "frame", + "id": "Y2PB8v", + "name": "TabHeroes", + "fill": "#FFFFFF08", + "cornerRadius": [ + 6, + 0, + 0, + 6 + ], + "stroke": "$line", + "strokeWidth": 1, + "padding": [ + 10, + 28 + ], + "children": [ + { + "type": "text", + "id": "oNGIe", + "name": "LHeroes", + "fill": "$muted", + "content": "英雄", + "fontFamily": "Geist", + "fontSize": 15, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "S1IDm", + "name": "TabItems", + "fill": "#FFFFFF14", + "cornerRadius": [ + 0, + 6, + 6, + 0 + ], + "stroke": "$line", + "strokeWidth": 1, + "padding": [ + 10, + 28 + ], + "children": [ + { + "type": "text", + "id": "SIvRR", + "name": "LItems", + "fill": "$text", + "content": "物品", + "fontFamily": "Geist", + "fontSize": 15, + "fontWeight": "600" + } + ] + } + ] + }, + { + "type": "frame", + "id": "TdaP0", + "name": "ItemToolbar", + "width": "fill_container", + "gap": 16, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "HzNeQ", + "name": "ShopSubs", + "children": [ + { + "type": "frame", + "id": "qGqOd", + "name": "SubBasic", + "fill": "#FFFFFF14", + "cornerRadius": [ + 6, + 0, + 0, + 6 + ], + "stroke": "$line", + "strokeWidth": 1, + "padding": [ + 8, + 20 + ], + "children": [ + { + "type": "text", + "id": "lK9AY", + "name": "LBasic", + "fill": "$text", + "content": "基础物品", + "fontFamily": "Geist", + "fontSize": 14, + "fontWeight": "600" + } + ] + }, + { + "type": "frame", + "id": "lP5r3", + "name": "SubUp", + "fill": "#FFFFFF08", + "cornerRadius": [ + 0, + 6, + 6, + 0 + ], + "stroke": "$line", + "strokeWidth": 1, + "padding": [ + 8, + 20 + ], + "children": [ + { + "type": "text", + "id": "m2vAk0", + "name": "LUp", + "fill": "$muted", + "content": "升级物品", + "fontFamily": "Geist", + "fontSize": 14, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "CpwuP", + "name": "LayoutToggle", + "width": 58, + "height": 34, + "fill": "#5EC8FF1A", + "cornerRadius": 6, + "stroke": "#5EC8FF73", + "strokeWidth": 1, + "gap": 6, + "padding": [ + 0, + 6 + ], + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "v8wp6l", + "name": "IconGrid", + "width": 16, + "height": 16, + "icon": "layout-grid", + "library": "lucide", + "fill": "#8FA3BC59" + }, + { + "type": "icon", + "id": "gGwKV", + "name": "IconCols", + "width": 16, + "height": 16, + "icon": "columns-3", + "library": "lucide", + "fill": "$text" + } + ] + }, + { + "type": "frame", + "id": "MHciZ", + "name": "Search", + "width": 180, + "height": 36, + "fill": "#00000073", + "cornerRadius": 8, + "stroke": "#8CAAD261", + "strokeWidth": 1, + "gap": 8, + "padding": [ + 0, + 12 + ], + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "R5Zep", + "name": "SearchIcon", + "width": 15, + "height": 15, + "icon": "search", + "library": "lucide", + "fill": "$muted" + }, + { + "type": "text", + "id": "L4FU6", + "name": "SearchPh", + "fill": "$muted", + "content": "搜索物品", + "fontFamily": "Geist", + "fontSize": 13, + "fontWeight": "normal" + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "WOxfm", + "name": "ShopBoardCols", + "width": "fill_container", + "height": "fill_container", + "gap": 12, + "padding": [ + 16, + 24 + ], + "justifyContent": "center", + "children": [ + { + "type": "frame", + "id": "AwjUh", + "name": "Col 消耗品", + "width": 52, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "fkrdG", + "name": "ColHead 消耗品", + "fill": "$muted", + "textGrowth": "fixed-width", + "width": 52, + "content": "消耗品", + "textAlign": "center", + "fontFamily": "Geist", + "fontSize": 11, + "fontWeight": "normal" + }, + { + "type": "frame", + "id": "QrW6F", + "name": "VItem 消耗品 0", + "width": 48, + "height": 36, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "Sb7B5", + "name": "VItem 消耗品 1", + "width": 48, + "height": 36, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "FSRoq", + "name": "VItem 消耗品 2", + "width": 48, + "height": 36, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "jyAiT", + "name": "VItem 消耗品 3", + "width": 48, + "height": 36, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "GUTbO", + "name": "VItem 消耗品 4", + "width": 48, + "height": 36, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "yCiJw", + "name": "VItem 消耗品 5", + "width": 48, + "height": 36, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "Y6wJZj", + "name": "VItem 消耗品 6", + "width": 48, + "height": 36, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "Enr0U", + "name": "VItem 消耗品 7", + "width": 48, + "height": 36, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "UqaKZ", + "name": "VItem 消耗品 8", + "width": 48, + "height": 36, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "L3RjWu", + "name": "VItem 消耗品 9", + "width": 48, + "height": 36, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + } + ] + }, + { + "type": "frame", + "id": "e46JD", + "name": "Col 属性", + "width": 52, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "aMSv9", + "name": "ColHead 属性", + "fill": "$muted", + "textGrowth": "fixed-width", + "width": 52, + "content": "属性", + "textAlign": "center", + "fontFamily": "Geist", + "fontSize": 11, + "fontWeight": "normal" + }, + { + "type": "frame", + "id": "WkZpe", + "name": "VItem 属性 0", + "width": 48, + "height": 36, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "GFS5p", + "name": "VItem 属性 1", + "width": 48, + "height": 36, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "eaAPH", + "name": "VItem 属性 2", + "width": 48, + "height": 36, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "vTwse", + "name": "VItem 属性 3", + "width": 48, + "height": 36, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "UXNsa", + "name": "VItem 属性 4", + "width": 48, + "height": 36, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "YhcIM", + "name": "VItem 属性 5", + "width": 48, + "height": 36, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "UoOur", + "name": "VItem 属性 6", + "width": 48, + "height": 36, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "P4rHLA", + "name": "VItem 属性 7", + "width": 48, + "height": 36, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "WHmpn", + "name": "VItem 属性 8", + "width": 48, + "height": 36, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "G0u6wf", + "name": "VItem 属性 9", + "width": 48, + "height": 36, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "LFHPn", + "name": "VItem 属性 10", + "width": 48, + "height": 36, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + } + ] + }, + { + "type": "frame", + "id": "thg0J", + "name": "Col 装备", + "width": 52, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "zqwSM", + "name": "ColHead 装备", + "fill": "$muted", + "textGrowth": "fixed-width", + "width": 52, + "content": "装备", + "textAlign": "center", + "fontFamily": "Geist", + "fontSize": 11, + "fontWeight": "normal" + }, + { + "type": "frame", + "id": "epobG", + "name": "VItem 装备 0", + "width": 48, + "height": 36, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "qTVMZ", + "name": "VItem 装备 1", + "width": 48, + "height": 36, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "H7Vzlz", + "name": "VItem 装备 2", + "width": 48, + "height": 36, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "fZDsd", + "name": "VItem 装备 3", + "width": 48, + "height": 36, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "e0coO", + "name": "VItem 装备 4", + "width": 48, + "height": 36, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "K3at8E", + "name": "VItem 装备 5", + "width": 48, + "height": 36, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "PKUZO", + "name": "VItem 装备 6", + "width": 48, + "height": 36, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "oaPZf", + "name": "VItem 装备 7", + "width": 48, + "height": 36, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "TlaqE", + "name": "VItem 装备 8", + "width": 48, + "height": 36, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "wKtdA", + "name": "VItem 装备 9", + "width": 48, + "height": 36, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "cQQXY", + "name": "VItem 装备 10", + "width": 48, + "height": 36, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "SFULM", + "name": "VItem 装备 11", + "width": 48, + "height": 36, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + } + ] + }, + { + "type": "frame", + "id": "Ej1Oj", + "name": "Col 其他", + "width": 52, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "CZWzy", + "name": "ColHead 其他", + "fill": "$muted", + "textGrowth": "fixed-width", + "width": 52, + "content": "其他", + "textAlign": "center", + "fontFamily": "Geist", + "fontSize": 11, + "fontWeight": "normal" + }, + { + "type": "frame", + "id": "s88rUu", + "name": "VItem 其他 0", + "width": 48, + "height": 36, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "EjqhD", + "name": "VItem 其他 1", + "width": 48, + "height": 36, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "X04P8t", + "name": "VItem 其他 2", + "width": 48, + "height": 36, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "mKthY", + "name": "VItem 其他 3", + "width": 48, + "height": 36, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "R9pNz", + "name": "VItem 其他 4", + "width": 48, + "height": 36, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "X01UC", + "name": "VItem 其他 5", + "width": 48, + "height": 36, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "vKClT", + "name": "VItem 其他 6", + "width": 48, + "height": 36, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "EEiYW", + "name": "VItem 其他 7", + "width": 48, + "height": 36, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "Zshjy", + "name": "VItem 其他 8", + "width": 48, + "height": 36, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "e3wi6x", + "name": "VItem 其他 9", + "width": 48, + "height": 36, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "cN02B", + "name": "VItem 其他 10", + "width": 48, + "height": 36, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + } + ] + }, + { + "type": "frame", + "id": "zvTZH", + "name": "Col 神秘商店", + "width": 52, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "T8BEv", + "name": "ColHead 神秘商店", + "fill": "$muted", + "textGrowth": "fixed-width", + "width": 52, + "content": "神秘商店", + "textAlign": "center", + "fontFamily": "Geist", + "fontSize": 11, + "fontWeight": "normal" + }, + { + "type": "frame", + "id": "vKcAE", + "name": "VItem 神秘商店 0", + "width": 48, + "height": 36, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "ANJXR", + "name": "VItem 神秘商店 1", + "width": 48, + "height": 36, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "gdKfq", + "name": "VItem 神秘商店 2", + "width": 48, + "height": 36, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "s5Z9YX", + "name": "VItem 神秘商店 3", + "width": 48, + "height": 36, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "OniAt", + "name": "VItem 神秘商店 4", + "width": 48, + "height": 36, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "l8sZ6", + "name": "VItem 神秘商店 5", + "width": 48, + "height": 36, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "yZCGp", + "name": "VItem 神秘商店 6", + "width": 48, + "height": 36, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "pbURX", + "name": "VItem 神秘商店 7", + "width": 48, + "height": 36, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "vgV0v", + "name": "VItem 神秘商店 8", + "width": 48, + "height": 36, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "NCy8V", + "name": "VItem 神秘商店 9", + "width": 48, + "height": 36, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "nzV8g", + "name": "VItem 神秘商店 10", + "width": 48, + "height": 36, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "ziDf6", + "name": "VItem 神秘商店 11", + "width": 48, + "height": 36, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + } + ] + } + ] + }, + { + "type": "frame", + "id": "kb1kp", + "name": "ItemDetail", + "width": "fill_container", + "height": 110, + "fill": "#080C148C", + "cornerRadius": 10, + "stroke": "$line", + "strokeWidth": 1, + "gap": 14, + "padding": [ + 16, + 20 + ], + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "qRduF", + "name": "SelIcon", + "width": 64, + "height": 48, + "fill": "#1A2434", + "cornerRadius": 4, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "mN91D", + "name": "SelMeta", + "width": "fill_container", + "layout": "vertical", + "gap": 6, + "children": [ + { + "type": "frame", + "id": "R4l9x", + "name": "SelTitleRow", + "gap": 12, + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "JlF5b", + "name": "SelName", + "fill": "$text", + "content": "闪烁匕首", + "fontFamily": "Geist", + "fontSize": 18, + "fontWeight": "650" + }, + { + "type": "text", + "id": "mqThs", + "name": "SelCost", + "fill": "$gold", + "content": "2250", + "fontFamily": "Geist", + "fontSize": 15, + "fontWeight": "650" + } + ] + }, + { + "type": "text", + "id": "iCCn2", + "name": "SelDesc", + "fill": "#E8EEF7E0", + "textGrowth": "fixed-width", + "width": "fill_container", + "content": "主动:闪烁 — 传送到最远距离的位置。受到敌方英雄攻击后短暂无法使用。", + "lineHeight": 1.45, + "fontFamily": "Geist", + "fontSize": 13, + "fontWeight": "normal" + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "k89g4", + "x": 0, + "y": 2080, + "name": "Items · 网格", + "clip": true, + "width": 1440, + "height": 960, + "fill": "$bg0", + "layout": "vertical", + "children": [ + { + "type": "frame", + "id": "BJsaq", + "name": "Topbar", + "width": "fill_container", + "fill": "#080C14CC", + "layout": "vertical", + "gap": 12, + "padding": [ + 14, + 24 + ], + "children": [ + { + "type": "frame", + "id": "oCO2b", + "name": "MainTabs", + "justifyContent": "center", + "children": [ + { + "type": "frame", + "id": "VVchC", + "name": "TabHeroes", + "fill": "#FFFFFF08", + "cornerRadius": [ + 6, + 0, + 0, + 6 + ], + "stroke": "$line", + "strokeWidth": 1, + "padding": [ + 10, + 28 + ], + "children": [ + { + "type": "text", + "id": "G90ly8", + "name": "LHeroes", + "fill": "$muted", + "content": "英雄", + "fontFamily": "Geist", + "fontSize": 15, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "hW0Z7", + "name": "TabItems", + "fill": "#FFFFFF14", + "cornerRadius": [ + 0, + 6, + 6, + 0 + ], + "stroke": "$line", + "strokeWidth": 1, + "padding": [ + 10, + 28 + ], + "children": [ + { + "type": "text", + "id": "HRiFi", + "name": "LItems", + "fill": "$text", + "content": "物品", + "fontFamily": "Geist", + "fontSize": 15, + "fontWeight": "600" + } + ] + } + ] + }, + { + "type": "frame", + "id": "p4ixFH", + "name": "ItemToolbar", + "width": "fill_container", + "gap": 16, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "bdUmP", + "name": "ShopSubs", + "children": [ + { + "type": "frame", + "id": "UlsEt", + "name": "SubBasic", + "fill": "#FFFFFF14", + "cornerRadius": [ + 6, + 0, + 0, + 6 + ], + "stroke": "$line", + "strokeWidth": 1, + "padding": [ + 8, + 20 + ], + "children": [ + { + "type": "text", + "id": "xAGxT", + "name": "LBasic", + "fill": "$text", + "content": "基础物品", + "fontFamily": "Geist", + "fontSize": 14, + "fontWeight": "600" + } + ] + }, + { + "type": "frame", + "id": "KXfIp", + "name": "SubUp", + "fill": "#FFFFFF08", + "cornerRadius": [ + 0, + 6, + 6, + 0 + ], + "stroke": "$line", + "strokeWidth": 1, + "padding": [ + 8, + 20 + ], + "children": [ + { + "type": "text", + "id": "c8JR6", + "name": "LUp", + "fill": "$muted", + "content": "升级物品", + "fontFamily": "Geist", + "fontSize": 14, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "mvIV5", + "name": "LayoutToggle", + "width": 58, + "height": 34, + "fill": "#5EC8FF1A", + "cornerRadius": 6, + "stroke": "#5EC8FF73", + "strokeWidth": 1, + "gap": 6, + "padding": [ + 0, + 6 + ], + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "r1OFJr", + "name": "IconGrid", + "width": 16, + "height": 16, + "icon": "layout-grid", + "library": "lucide", + "fill": "$text" + }, + { + "type": "icon", + "id": "X7LB7", + "name": "IconCols", + "width": 16, + "height": 16, + "icon": "columns-3", + "library": "lucide", + "fill": "#8FA3BC59" + } + ] + }, + { + "type": "frame", + "id": "s2jd9t", + "name": "Search", + "width": 180, + "height": 36, + "fill": "#00000073", + "cornerRadius": 8, + "stroke": "#8CAAD261", + "strokeWidth": 1, + "gap": 8, + "padding": [ + 0, + 12 + ], + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "fFPH5", + "name": "SearchIcon", + "width": 15, + "height": 15, + "icon": "search", + "library": "lucide", + "fill": "$muted" + }, + { + "type": "text", + "id": "xg0Cd", + "name": "SearchPh", + "fill": "$muted", + "content": "搜索物品", + "fontFamily": "Geist", + "fontSize": 13, + "fontWeight": "normal" + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "C9bKj", + "name": "ShopBoard", + "width": "fill_container", + "height": "fill_container", + "gap": 28, + "padding": [ + 20, + 40 + ], + "justifyContent": "center", + "children": [ + { + "type": "frame", + "id": "o5Ar8", + "name": "ShopLeft", + "width": 260, + "layout": "vertical", + "gap": 16, + "children": [ + { + "type": "frame", + "id": "nXRjS", + "name": "Sec 消耗品", + "layout": "vertical", + "gap": 8, + "children": [ + { + "type": "text", + "id": "lkCQz", + "name": "H 消耗品", + "fill": "$muted", + "content": "消耗品", + "fontFamily": "Geist", + "fontSize": 13, + "fontWeight": "normal", + "letterSpacing": 1 + }, + { + "type": "frame", + "id": "qHObT", + "name": "R 消耗品 0", + "gap": 4, + "children": [ + { + "type": "frame", + "id": "fBdFN", + "name": "I 消耗品 0-0", + "width": 56, + "height": 42, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "w1Pb81", + "name": "I 消耗品 0-1", + "width": 56, + "height": 42, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "swAg3", + "name": "I 消耗品 0-2", + "width": 56, + "height": 42, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "tajqJ", + "name": "I 消耗品 0-3", + "width": 56, + "height": 42, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + } + ] + }, + { + "type": "frame", + "id": "AtfZB", + "name": "R 消耗品 1", + "gap": 4, + "children": [ + { + "type": "frame", + "id": "KrPVy", + "name": "I 消耗品 1-0", + "width": 56, + "height": 42, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "yYQqW", + "name": "I 消耗品 1-1", + "width": 56, + "height": 42, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "gZwhg", + "name": "I 消耗品 1-2", + "width": 56, + "height": 42, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "F0k9M", + "name": "I 消耗品 1-3", + "width": 56, + "height": 42, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + } + ] + }, + { + "type": "frame", + "id": "Wggxh", + "name": "R 消耗品 2", + "gap": 4, + "children": [ + { + "type": "frame", + "id": "THox1", + "name": "I 消耗品 2-0", + "width": 56, + "height": 42, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "gV97d", + "name": "I 消耗品 2-1", + "width": 56, + "height": 42, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "yhGOn", + "name": "I 消耗品 2-2", + "width": 56, + "height": 42, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "AXWpj", + "name": "I 消耗品 2-3", + "width": 56, + "height": 42, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + } + ] + } + ] + }, + { + "type": "frame", + "id": "E7rAC", + "name": "Sec 装备", + "layout": "vertical", + "gap": 8, + "children": [ + { + "type": "text", + "id": "fXewk", + "name": "H 装备", + "fill": "$muted", + "content": "装备", + "fontFamily": "Geist", + "fontSize": 13, + "fontWeight": "normal", + "letterSpacing": 1 + }, + { + "type": "frame", + "id": "DXwVA", + "name": "R 装备 0", + "gap": 4, + "children": [ + { + "type": "frame", + "id": "T6chPE", + "name": "I 装备 0-0", + "width": 56, + "height": 42, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "ghL9B", + "name": "I 装备 0-1", + "width": 56, + "height": 42, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "SEXHm", + "name": "I 装备 0-2", + "width": 56, + "height": 42, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "Rgu7j", + "name": "I 装备 0-3", + "width": 56, + "height": 42, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + } + ] + }, + { + "type": "frame", + "id": "NYXF4", + "name": "R 装备 1", + "gap": 4, + "children": [ + { + "type": "frame", + "id": "vnGIp", + "name": "I 装备 1-0", + "width": 56, + "height": 42, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "wQmed", + "name": "I 装备 1-1", + "width": 56, + "height": 42, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "z9CYq", + "name": "I 装备 1-2", + "width": 56, + "height": 42, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "D96aPl", + "name": "I 装备 1-3", + "width": 56, + "height": 42, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + } + ] + }, + { + "type": "frame", + "id": "FEpoN", + "name": "R 装备 2", + "gap": 4, + "children": [ + { + "type": "frame", + "id": "EJ5PT", + "name": "I 装备 2-0", + "width": 56, + "height": 42, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "F5H0h", + "name": "I 装备 2-1", + "width": 56, + "height": 42, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "Gx8eH", + "name": "I 装备 2-2", + "width": 56, + "height": 42, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "KIfEv", + "name": "I 装备 2-3", + "width": 56, + "height": 42, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + } + ] + } + ] + }, + { + "type": "frame", + "id": "IjmZk", + "name": "Sec 神秘商店", + "layout": "vertical", + "gap": 8, + "children": [ + { + "type": "text", + "id": "RVSDh", + "name": "H 神秘商店", + "fill": "$muted", + "content": "神秘商店", + "fontFamily": "Geist", + "fontSize": 13, + "fontWeight": "normal", + "letterSpacing": 1 + }, + { + "type": "frame", + "id": "vpXAa", + "name": "R 神秘商店 0", + "gap": 4, + "children": [ + { + "type": "frame", + "id": "acEbc", + "name": "I 神秘商店 0-0", + "width": 56, + "height": 42, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "sZcsO", + "name": "I 神秘商店 0-1", + "width": 56, + "height": 42, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "AqfBt", + "name": "I 神秘商店 0-2", + "width": 56, + "height": 42, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "OwcCE", + "name": "I 神秘商店 0-3", + "width": 56, + "height": 42, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + } + ] + }, + { + "type": "frame", + "id": "vz63d", + "name": "R 神秘商店 1", + "gap": 4, + "children": [ + { + "type": "frame", + "id": "ioD5J", + "name": "I 神秘商店 1-0", + "width": 56, + "height": 42, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "ijmFd", + "name": "I 神秘商店 1-1", + "width": 56, + "height": 42, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "Ik5h4", + "name": "I 神秘商店 1-2", + "width": 56, + "height": 42, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "EcxBw", + "name": "I 神秘商店 1-3", + "width": 56, + "height": 42, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + } + ] + }, + { + "type": "frame", + "id": "Z63rk", + "name": "R 神秘商店 2", + "gap": 4, + "children": [ + { + "type": "frame", + "id": "sa6uy", + "name": "I 神秘商店 2-0", + "width": 56, + "height": 42, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "CElsQ", + "name": "I 神秘商店 2-1", + "width": 56, + "height": 42, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "Wb1r5", + "name": "I 神秘商店 2-2", + "width": 56, + "height": 42, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "p4Peap", + "name": "I 神秘商店 2-3", + "width": 56, + "height": 42, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "jjIWN", + "name": "ShopRight", + "width": 260, + "layout": "vertical", + "gap": 16, + "children": [ + { + "type": "frame", + "id": "msOt6", + "name": "Sec 属性", + "layout": "vertical", + "gap": 8, + "children": [ + { + "type": "text", + "id": "CWppw", + "name": "H 属性", + "fill": "$muted", + "content": "属性", + "fontFamily": "Geist", + "fontSize": 13, + "fontWeight": "normal", + "letterSpacing": 1 + }, + { + "type": "frame", + "id": "KI4EG", + "name": "R 属性 0", + "gap": 4, + "children": [ + { + "type": "frame", + "id": "Ww6LM", + "name": "I 属性 0-0", + "width": 56, + "height": 42, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "KPFeC", + "name": "I 属性 0-1", + "width": 56, + "height": 42, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "a7EF3", + "name": "I 属性 0-2", + "width": 56, + "height": 42, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "NZunr", + "name": "I 属性 0-3", + "width": 56, + "height": 42, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + } + ] + }, + { + "type": "frame", + "id": "zb655", + "name": "R 属性 1", + "gap": 4, + "children": [ + { + "type": "frame", + "id": "hgUJC", + "name": "I 属性 1-0", + "width": 56, + "height": 42, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "J8EHYl", + "name": "I 属性 1-1", + "width": 56, + "height": 42, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "V61EXL", + "name": "I 属性 1-2", + "width": 56, + "height": 42, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "y13dIy", + "name": "I 属性 1-3", + "width": 56, + "height": 42, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + } + ] + }, + { + "type": "frame", + "id": "ryrjR", + "name": "R 属性 2", + "gap": 4, + "children": [ + { + "type": "frame", + "id": "S8xvOK", + "name": "I 属性 2-0", + "width": 56, + "height": 42, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "J59CM", + "name": "I 属性 2-1", + "width": 56, + "height": 42, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "vVxfF", + "name": "I 属性 2-2", + "width": 56, + "height": 42, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "PGHe1", + "name": "I 属性 2-3", + "width": 56, + "height": 42, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + } + ] + } + ] + }, + { + "type": "frame", + "id": "WHG7p", + "name": "Sec 其他", + "layout": "vertical", + "gap": 8, + "children": [ + { + "type": "text", + "id": "BYKN1", + "name": "H 其他", + "fill": "$muted", + "content": "其他", + "fontFamily": "Geist", + "fontSize": 13, + "fontWeight": "normal", + "letterSpacing": 1 + }, + { + "type": "frame", + "id": "hGoNO", + "name": "R 其他 0", + "gap": 4, + "children": [ + { + "type": "frame", + "id": "kmZE9", + "name": "I 其他 0-0", + "width": 56, + "height": 42, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "f7I85s", + "name": "I 其他 0-1", + "width": 56, + "height": 42, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "p26MZ", + "name": "I 其他 0-2", + "width": 56, + "height": 42, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "g8DUX1", + "name": "I 其他 0-3", + "width": 56, + "height": 42, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + } + ] + }, + { + "type": "frame", + "id": "a6PQDv", + "name": "R 其他 1", + "gap": 4, + "children": [ + { + "type": "frame", + "id": "J7P6em", + "name": "I 其他 1-0", + "width": 56, + "height": 42, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "ZEMVr", + "name": "I 其他 1-1", + "width": 56, + "height": 42, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "XjngP", + "name": "I 其他 1-2", + "width": 56, + "height": 42, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "Y5NOl3", + "name": "I 其他 1-3", + "width": 56, + "height": 42, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + } + ] + }, + { + "type": "frame", + "id": "R0M2jy", + "name": "R 其他 2", + "gap": 4, + "children": [ + { + "type": "frame", + "id": "ywrBG", + "name": "I 其他 2-0", + "width": 56, + "height": 42, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "N8J8Ou", + "name": "I 其他 2-1", + "width": 56, + "height": 42, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "S3PtU", + "name": "I 其他 2-2", + "width": 56, + "height": 42, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "SLg9T", + "name": "I 其他 2-3", + "width": 56, + "height": 42, + "fill": "#1A2434", + "cornerRadius": 3, + "stroke": "#C8A0468C", + "strokeWidth": 1 + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "t7Muf0", + "name": "ItemDetail", + "width": "fill_container", + "height": 110, + "fill": "#080C148C", + "cornerRadius": 10, + "stroke": "$line", + "strokeWidth": 1, + "gap": 14, + "padding": [ + 16, + 20 + ], + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "ouzkT", + "name": "SelIcon", + "width": 64, + "height": 48, + "fill": "#1A2434", + "cornerRadius": 4, + "stroke": "#C8A0468C", + "strokeWidth": 1 + }, + { + "type": "frame", + "id": "Q4QOLP", + "name": "SelMeta", + "width": "fill_container", + "layout": "vertical", + "gap": 6, + "children": [ + { + "type": "frame", + "id": "EeDRp", + "name": "SelTitleRow", + "gap": 12, + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "s5lpWY", + "name": "SelName", + "fill": "$text", + "content": "闪烁匕首", + "fontFamily": "Geist", + "fontSize": 18, + "fontWeight": "650" + }, + { + "type": "text", + "id": "kOMRz", + "name": "SelCost", + "fill": "$gold", + "content": "2250", + "fontFamily": "Geist", + "fontSize": 15, + "fontWeight": "650" + } + ] + }, + { + "type": "text", + "id": "aRGrB", + "name": "SelDesc", + "fill": "#E8EEF7E0", + "textGrowth": "fixed-width", + "width": "fill_container", + "content": "主动:闪烁 — 传送到最远距离的位置。受到敌方英雄攻击后短暂无法使用。", + "lineHeight": 1.45, + "fontFamily": "Geist", + "fontSize": 13, + "fontWeight": "normal" + } + ] + } + ] + } + ] } ], + "variables": { + "bg0": { + "type": "color", + "value": "#0B1018" + }, + "bg1": { + "type": "color", + "value": "#152033" + }, + "panel": { + "type": "color", + "value": "#0E1622" + }, + "line": { + "type": "color", + "value": "#8CAAD22E" + }, + "text": { + "type": "color", + "value": "#E8EEF7" + }, + "muted": { + "type": "color", + "value": "#8FA3BC" + }, + "accent": { + "type": "color", + "value": "#5EC8FF" + }, + "good": { + "type": "color", + "value": "#3DCE7A" + }, + "bad": { + "type": "color", + "value": "#E07A2F" + }, + "gold": { + "type": "color", + "value": "#E8C878" + }, + "radiusSm": { + "type": "number", + "value": 4 + }, + "radiusMd": { + "type": "number", + "value": 8 + } + }, "fileToken": "9ee8cb48-01d0-49e3-8fab-391005f1e905" } \ No newline at end of file diff --git a/export_relations_site.py b/export_relations_site.py index 0aa8f47..921922d 100644 --- a/export_relations_site.py +++ b/export_relations_site.py @@ -69,7 +69,7 @@ def main() -> None: out.mkdir(parents=True) # Frontend (uses relative paths — works from any sub-path). - for name in ("index.html", "app.js", "style.css"): + for name in ("index.html", "router.js", "app.js", "style.css"): shutil.copy2(WEB_DIR / name, out / name) # Data snapshot (same payload as serve_relations /api/data). diff --git a/fetch_dota2_logo.py b/fetch_dota2_logo.py new file mode 100644 index 0000000..0e34af6 --- /dev/null +++ b/fetch_dota2_logo.py @@ -0,0 +1,77 @@ +"""Fetch the official Dota 2 emblem icon (no wordmark) for the preview header. + +Source (discovered, not guessed) from the dota2.com.cn site HTML: + + +That .ico is a multi-frame container whose largest frames are 256x256 PNGs of +the red Dota 2 map-marker emblem with a transparent background — i.e. the +brand icon alone, no "DOTA 2" text. We extract the first 256x256 PNG frame, +decode with OpenCV, and write it to assets/ui_icons/dota2_logo.png so it rides +the existing /ui-icon/ route + static-export glob pipeline. +""" +import struct +import sys + +import cv2 +import numpy as np + +from common import UI_ICONS +from http_utils import http_bytes + +FAVICON_URL = "https://www.dota2.com.cn/favicon.ico" +OUT = UI_ICONS / "dota2_logo.png" +TARGET_SIZE = 256 + + +def _extract_largest_png_frame(data: bytes) -> bytes | None: + """Return the bytes of the largest PNG-embedded frame in an ICO blob.""" + if len(data) < 6 or data[:4] != b"\x00\x00\x01\x00": + return None + count = struct.unpack(" len(data): + break + w = data[off] + size = struct.unpack(" best[0]: + best = (width * width, blob) + return best[1] if best else None + + +def main() -> int: + if OUT.is_file() and OUT.stat().st_size >= 512: + print(f"exists: {OUT} ({OUT.stat().st_size} bytes)") + return 0 + data = http_bytes(FAVICON_URL, timeout=30) + if not data or len(data) < 16: + print("empty favicon download", file=sys.stderr) + return 1 + png = _extract_largest_png_frame(data) + if png is None: + print("no PNG frame in .ico", file=sys.stderr) + return 1 + arr = cv2.imdecode(np.frombuffer(png, dtype=np.uint8), cv2.IMREAD_UNCHANGED) + if arr is None: + print("decode failed", file=sys.stderr) + return 1 + UI_ICONS.mkdir(parents=True, exist_ok=True) + ok = cv2.imwrite(str(OUT), arr) + if not ok: + print("write failed", file=sys.stderr) + return 1 + h, w = arr.shape[:2] + channels = arr.shape[2] if arr.ndim == 3 else 1 + transparent = int(np.count_nonzero(arr[:, :, 3] == 0)) if channels == 4 else 0 + print(f"saved {OUT} ({w}x{h}, {OUT.stat().st_size} bytes, {transparent} px transparent)") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/serve_relations.py b/serve_relations.py index 76b577f..cb9e454 100644 --- a/serve_relations.py +++ b/serve_relations.py @@ -448,7 +448,7 @@ class Handler(BaseHTTPRequestHandler): return if path.startswith("/ui-icon/"): key = path[len("/ui-icon/") :] - if key not in ("cooldown.png",): + if key not in ("cooldown.png", "dota2_logo.png"): self._json(400, {"error": "bad ui icon"}) return fpath = UI_ICONS / key diff --git a/web/relations/app.js b/web/relations/app.js index 785c206..7fc8254 100644 --- a/web/relations/app.js +++ b/web/relations/app.js @@ -147,6 +147,7 @@ function renderBoard() { function onHeroClick(key) { state.selectedKey = state.selectedKey === key ? null : key; state.inspect = null; + syncStateToUrl(); render(); } @@ -161,6 +162,7 @@ function renderTagbar() { allBtn.className = state.tagFilters.size ? "" : "active"; allBtn.addEventListener("click", () => { state.tagFilters.clear(); + syncStateToUrl({ replace: true }); render(); }); bar.appendChild(allBtn); @@ -172,6 +174,7 @@ function renderTagbar() { btn.addEventListener("click", () => { if (state.tagFilters.has(tag)) state.tagFilters.delete(tag); else state.tagFilters.add(tag); + syncStateToUrl({ replace: true }); render(); }); bar.appendChild(btn); @@ -1286,6 +1289,7 @@ function renderDetail() { // Reset inspect to the tab default (first skill / first item). state.inspect = null; ensureHeroInspectDefault(state.selectedKey); + syncStateToUrl(); renderDetail(); }); tabbar.appendChild(btn); @@ -1368,6 +1372,7 @@ function matchesItemQuery(key, meta) { function onShopItemClick(key) { state.selectedItemKey = state.selectedItemKey === key ? null : key; state.selectedKey = null; + syncStateToUrl(); render(); } @@ -1522,6 +1527,7 @@ function renderItemDetail() { mountItemInspect(root, meta, { onPickItem: (key) => { state.selectedItemKey = key; + syncStateToUrl(); render(); }, }); @@ -1718,6 +1724,7 @@ function renderPatches() { .join(""); select.onchange = () => { state.selectedPatch = select.value; + syncStateToUrl(); renderPatches(); const board = $("#patches-view"); if (board) board.scrollTo(0, 0); @@ -1780,6 +1787,7 @@ function setPage(page) { state.selectedKey = null; state.inspect = null; } + syncStateToUrl(); render(); } @@ -1815,6 +1823,71 @@ function render() { } } +// Search-box URL sync timer (debounced replace so typing does not spam history). +let searchSyncTimer = 0; +const SEARCH_SYNC_DEBOUNCE_MS = 300; + +/** + * Apply a router-produced state patch (from a parsed URL) to state, then render. + * Validates every field against loaded data so bad deep-links degrade gracefully + * (unknown hero/item/version is dropped rather than crashing the UI). + */ +function applyPatch(patch) { + if (!state.data) { + render(); + return; + } + // Page (default heroes on bad/missing). + if (patch.page && ["heroes", "items", "patches"].includes(patch.page)) { + state.page = patch.page; + } else { + state.page = "heroes"; + } + // Hero + detail sub-tab. + if (patch.heroKey && heroByKey(patch.heroKey)) { + state.selectedKey = patch.heroKey; + if ( + patch.detailTab && + ["skills", "core", "fears", "patches"].includes(patch.detailTab) + ) { + state.detailTab = patch.detailTab; + } else { + state.detailTab = "skills"; + } + } else { + state.selectedKey = null; + state.detailTab = "skills"; + } + // Reset inspect so ensureHeroInspectDefault re-picks per tab (inspect is URL-less). + state.inspect = null; + // Item (items page) — must exist in the shop catalog. + if (patch.itemKey && shopItem(patch.itemKey)) { + state.selectedItemKey = patch.itemKey; + } else { + state.selectedItemKey = null; + } + // Patch version (patches page; null means latest). + if ( + patch.patchVersion && + (state.data.patches || []).some((p) => p.version === patch.patchVersion) + ) { + state.selectedPatch = patch.patchVersion; + } else { + state.selectedPatch = null; + } + // Tag filters (heroes page only) — drop unknown tag names. + if (patch.tags instanceof Set) { + const valid = new Set(state.data.tag_order || []); + state.tagFilters = new Set([...patch.tags].filter((t) => valid.has(t))); + } + if (typeof patch.query === "string") { + state.query = patch.query; + const inp = $("#q"); + if (inp && inp.value !== state.query) inp.value = state.query; + } + render(); +} + function bindSearch() { const input = $("#q"); if (input) { @@ -1822,6 +1895,12 @@ function bindSearch() { input.addEventListener("input", () => { state.query = input.value; if (state.page === "heroes") renderBoard(); + // Debounced replace so each keystroke does not push a history entry. + if (searchSyncTimer) clearTimeout(searchSyncTimer); + searchSyncTimer = setTimeout(() => { + searchSyncTimer = 0; + syncStateToUrl({ replace: true }); + }, SEARCH_SYNC_DEBOUNCE_MS); }); } const itemInput = $("#q-item"); @@ -1830,6 +1909,11 @@ function bindSearch() { itemInput.addEventListener("input", () => { state.itemQuery = itemInput.value; if (state.page === "items") renderItemShop(); + if (searchSyncTimer) clearTimeout(searchSyncTimer); + searchSyncTimer = setTimeout(() => { + searchSyncTimer = 0; + syncStateToUrl({ replace: true }); + }, SEARCH_SYNC_DEBOUNCE_MS); }); } } @@ -1851,12 +1935,14 @@ async function main() { if (state.query && document.activeElement === $("#q")) { state.query = ""; $("#q").value = ""; + syncStateToUrl({ replace: true }); renderBoard(); return; } if (state.selectedKey) { state.selectedKey = null; state.inspect = null; + syncStateToUrl(); render(); } return; @@ -1864,11 +1950,13 @@ async function main() { if (state.itemQuery && document.activeElement === $("#q-item")) { state.itemQuery = ""; $("#q-item").value = ""; + syncStateToUrl({ replace: true }); renderItemShop(); return; } if (state.selectedItemKey) { state.selectedItemKey = null; + syncStateToUrl(); render(); } }); @@ -1909,7 +1997,10 @@ async function main() { state.data.patches = state.data.patches || []; state.data.patch_lookup = state.data.patch_lookup || { items: {}, abilities: {}, heroes: {} }; state.data.patch_details = state.data.patch_details || {}; - render(); + // Install hash router now that state.data is loaded (validation needs it), + // then apply the initial URL (deep-link support) which also renders. + installRouter({ getState: () => state, applyPatch }); + applyUrlToState(); } main().catch((err) => { diff --git a/web/relations/index.html b/web/relations/index.html index 5b1cfe0..e24d815 100644 --- a/web/relations/index.html +++ b/web/relations/index.html @@ -8,6 +8,10 @@
+
+ + 上分帝 +