Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
74 commits
Select commit Hold shift + click to select a range
fc1fe73
feat: 更新 taskbar 和 traymenu 原生模块
Matsuko97 Mar 14, 2026
facd802
Merge pull request #360 from Matsuko97/master
maotoumao Mar 14, 2026
912e167
feat: complete rewrite
maotoumao Mar 14, 2026
adec9be
feat: 更新 taskbar 和 traymenu 原生模块
Matsuko97 Mar 14, 2026
c4cb220
chore: 修改兜底语言
maotoumao Mar 14, 2026
bca2ad4
fix: 0.5px
maotoumao Mar 14, 2026
d05eb7c
fix: 播放队列
maotoumao Mar 14, 2026
fdeba66
chore: 更新文档
maotoumao Mar 14, 2026
c5c6546
chore: 更新build脚本
maotoumao Mar 14, 2026
f49951a
chore: 更新build脚本
maotoumao Mar 14, 2026
c8bba18
chore: 修复macos build
maotoumao Mar 14, 2026
18bc304
chore: 修复macos build
maotoumao Mar 14, 2026
cd9c651
chore: 修复macos build
maotoumao Mar 14, 2026
2001df2
Merge branch 'master' into dev
maotoumao Mar 14, 2026
35e5d2c
update skills
maotoumao Mar 16, 2026
23b5946
fix: 修复允许出现多个实例的问题
maotoumao Mar 16, 2026
337b22c
fix: 统一本地音乐支持的扩展名
maotoumao Mar 16, 2026
f2be5fa
fix: 本地歌曲没有歌词(#370)
maotoumao Mar 16, 2026
6e4201e
Merge branch 'dev' of https://github.com/maotoumao/MusicFreeDesktop i…
maotoumao Mar 16, 2026
aa44794
feat: 更新issue模板
maotoumao Mar 16, 2026
9d62a91
chore: 更新skill
maotoumao Mar 16, 2026
6f40362
chore: 调整底色
maotoumao Mar 16, 2026
e26e09a
fix: 修复播放列表颜色错误(#371)
maotoumao Mar 16, 2026
982cc37
fix: 修复 traymenu 相关问题(#369)
Matsuko97 Mar 16, 2026
87f6b05
fix: 修复 traymenu 相关问题(#369) (#372)
maotoumao Mar 16, 2026
18f55e1
fix: 迁移时正在播放的歌曲被清空
maotoumao Mar 16, 2026
b5733a1
chore: 更新版本号
maotoumao Mar 16, 2026
9dd985a
fix: #373
maotoumao Mar 17, 2026
2b6d1e4
fix: #376
maotoumao Mar 17, 2026
0b50dbe
fix: chromium默认播放键无效
maotoumao Mar 17, 2026
7f62d41
feat: 本地歌单支持多选
maotoumao Mar 19, 2026
9314cb2
fix: 无法导入歌单
maotoumao Mar 19, 2026
6d4446c
feat: 支持批量删除本地歌曲
maotoumao Mar 21, 2026
3959dd3
feat: 支持输入框右键菜单
maotoumao Mar 21, 2026
4b3e06a
chore: 更新版本号
maotoumao Mar 22, 2026
9e97620
chore: 修改格式化工具
maotoumao Mar 22, 2026
0440dff
chore: 修改vscode配置
maotoumao Mar 22, 2026
cbf9339
fix: #382
maotoumao Mar 22, 2026
3e4f5ee
chore: 更新版本号
maotoumao Mar 22, 2026
c4d7240
fix: 音源加载失败时,歌曲信息没有正常更新
maotoumao Mar 24, 2026
33f246d
feat: 支持禁用搜索记录面板(#384)
maotoumao Mar 24, 2026
3f7fc1b
fix: 搜索面板出现红色下划线
maotoumao Mar 24, 2026
12874a5
feat: 双击歌词跳转到指定位置
maotoumao Mar 24, 2026
bae8700
feat: 支持选择歌词 (#383)
maotoumao Mar 24, 2026
d001056
fix: 移除多余的文案
maotoumao Mar 24, 2026
938f27c
fix: restore legacy download metadata during migration
Mo-guan Mar 26, 2026
c987e31
fix: 音量i18n
maotoumao Mar 26, 2026
4f36960
feat: 搜索框支持关闭按钮
maotoumao Mar 26, 2026
b19ddb4
fix: 切换音质
maotoumao Mar 26, 2026
abf8654
fix: #391
maotoumao Mar 26, 2026
a285917
fix: restore legacy download metadata during migration (#389)
maotoumao Mar 30, 2026
7c9ab48
fix(migration): improve error handling and resource cleanup in legacy…
maotoumao Mar 30, 2026
636f6f9
feat: 支持点击表头排序
maotoumao Apr 7, 2026
cc1105e
fix(windowManager): avoid white screen when restoring from tray on Wi…
maotoumao May 13, 2026
906d2b2
feat: 新增编辑本地歌曲元数据功能(含文件标签写入)
LinYanZhi Jun 3, 2026
9776866
feat: 新增编辑本地歌曲元数据功能(含文件标签写入)
LinYanZhi Jun 3, 2026
a995faf
fix: 修复右键菜单重复出现「删除本地文件」的问题
LinYanZhi Jun 3, 2026
9cc5b2e
fix: 修复右键菜单重复出现「删除本地文件」的问题 (#427)
maotoumao Jun 9, 2026
8a13dbc
chore(deps): upgrade runtime dependencies
maotoumao Jun 9, 2026
2610dea
build: migrate to bundler module resolution
maotoumao Jun 9, 2026
aa2c53e
Merge branch 'dev' into feat/edit-local-music-metadata
maotoumao Jun 20, 2026
efabbc1
feat: 新增编辑本地歌曲元数据功能(含文件标签写入) (#426)
maotoumao Jun 20, 2026
ffce674
chore: remove conflict
maotoumao Jun 20, 2026
76f2efe
chore(deps): upgrade runtime deps round 2
maotoumao Jun 20, 2026
5e4e475
chore(deps): upgrade dev tooling patch/minor
maotoumao Jun 20, 2026
590b495
feat(deps): upgrade lucide-react 0.574 to 1.21
maotoumao Jun 20, 2026
94290ad
fix(build): pin @vercel/webpack-asset-relocator-loader to 1.7.3
maotoumao Jun 20, 2026
bd9dac5
ci: add issue/PR governance workflows and update templates
maotoumao Jun 25, 2026
09825f5
docs: add bilingual changelog following Keep a Changelog
maotoumao Jun 25, 2026
8f14e75
docs: drop language-level headings in changelog
maotoumao Jun 25, 2026
629a5a7
docs: merge issue templates into single bilingual forms (zh then en)
maotoumao Jun 25, 2026
c7a42db
docs: use inline bilingual fields (zh then en) in issue templates
maotoumao Jun 25, 2026
2f09cbb
feat(download): add download interval and random jitter settings
maotoumao Jun 25, 2026
1fac9ac
fix(player): prevent premature skip and hang on streamed sources
maotoumao Jun 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
89 changes: 89 additions & 0 deletions .agents/skills/css-naming/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
---
name: css-naming
description: Enforce CSS class naming conventions (BEM + global SCSS) when writing, reviewing, or modifying component styles. Triggers when creating/editing SCSS files, adding CSS class names in JSX/TSX, or reviewing styling code. Ensures correct BEM syntax, block-level prefixes, state class usage, and adherence to project theming via CSS variables. Does NOT use CSS Modules or Tailwind CSS.
---

# CSS Class Naming Convention

This project uses **BEM global SCSS**. No CSS Modules, no Tailwind.

## BEM Syntax

```
.block__element--modifier
```

- **Block**: `-` joins multi-word (`song-table`, `context-menu`)
- **Element**: `__` (`song-table__header`)
- **Modifier**: `--` for static variants (`btn--primary`, `btn--lg`)

## Block Prefix by Layer

| Layer | Prefix | Examples |
| --------- | ------ | ------------------------------------------------- |
| Atom | (none) | `btn`, `badge`, `input`, `avatar`, `progress-bar` |
| Composite | (none) | `search-input`, `select`, `tab-bar`, `nav-item` |
| Pattern | (none) | `modal`, `drawer`, `context-menu`, `song-table` |
| Layout | `l-` | `l-app-shell`, `l-sidebar`, `l-topbar` |
| Page | `p-` | `p-search`, `p-setting`, `p-download` |
| Business | `b-` | `b-search-lyric-modal` (optional, semantic ok) |

## Dynamic State Classes

Use `is-` / `has-` for runtime JS-toggled states (NOT `--modifier`):

```scss
.nav-item {
&.is-active {
}
}
.input {
&.is-focused {
}
&.has-error {
}
}
.song-table__row {
&.is-playing {
}
&.is-selected {
}
}
```

**Rule**: `--modifier` = static variant decided at render; `is-`/`has-` = dynamic state toggled by JS.

## File Organization

One SCSS file per component, centered on one primary Block:

```
components/Button/index.scss → .btn { ... }
components/Modal/index.scss → .modal { ... }
pages/SearchPage/index.scss → .p-search { ... }
```

Allowed companions in the same file: tightly-coupled sibling root classes (e.g., `modal-backdrop`).

## Prohibited

| Rule | Reason |
| --------------------------------------------------------------------- | ------------------------------------------------------------------------------ |
| Hardcoded colors/font-sizes/spacing/border-radius in component styles | Use CSS variables from `global.scss`; hardcode only with comment justification |
| SCSS nesting > 3 levels | BEM is flat; deep nesting = need to split |
| Bare tag selectors (`div`, `span`, `a`) in component styles | Only in `global.scss` reset or controlled rich-text containers |
| Unexplained `!important` | Only for global reset / a11y / third-party overrides, with comment |
| Global utility class for single-component need | Use BEM modifier instead (`scroll-area--hide-scrollbar`) |
| Abbreviated class names (`bg`, `fs`, `mt`) | Not utility-first; names must be readable |
| `camelCase` / `PascalCase` class names | Use kebab-case with BEM separators |
| Single underscore (`btn_icon`) | Use double underscore `__` for elements |
| Missing `--` for modifiers (`btn-primary`) | Must be `btn--primary` |

## Quick Check

```
✅ .btn--primary .btn__icon .nav-item.is-active
✅ .l-sidebar__nav .p-search__results .scroll-area--hide-scrollbar

❌ .btn-primary .sidebar-nav .active .BtnPrimary .btn_icon
```
Loading