eisland-dev-add-empty-…
Add a new empty subpage (tab) to an existing eIsland settings section with page navigation…
Refactor a monolithic React component file into a standardized module structure with components/, hooks/, utils/, types/, and config/ subdirectories. Use this skill whenever the user asks to "split", "refactor", "拆分", "拆解", or "restructure" a component file into subdirectories,
$ npx -y skills add JNTMTMTM/eIsland --skill eisland-dev-refactor-module-split --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/eisland-dev-refactor-module-splitContext preview
The summary Claude sees to decide when to auto-load this skill.
Refactor a monolithic React component file into a standardized module structure with components/, hooks/, utils/, types/, and config/ subdirectories. Use this skill whenever the user asks to "split", "refactor", "拆分", "拆解", or "restructure" a component file into subdirectories,
name: eisland-dev-refactor-module-split author: JNTMTMTM description: > Refactor a monolithic React component file into a standardized module structure with components/, hooks/, utils/, types/, and config/ subdirectories. Use this skill whenever the user asks to "split", "refactor", "拆分", "拆解", or "restructure" a component file into subdirectories, or when they mention organizing code into modules.
Split a monolithic React component file into a clean module structure with five subdirectories: `components/`, `hooks/`, `utils/`, `types/`, and `config/`, plus an `index.ts` entry point.
Before extracting any code, verify the target module directory has the required structure. If any of the following are missing, create them first:
<module>/ ├── index.ts (if missing, create with placeholder export) ├── types/ (if missing, create directory) ├── config/ (if missing, create directory) ├── utils/ (if missing, create directory) ├── hooks/ (if missing, create directory) └── components/ (if missing, create directory)
Read the target file in full. Categorize every piece of code into one of five buckets:
| Bucket | Criteria | Target directory | |--------|----------|-----------------| | **Types** | `type`, `interface`, component prop interfaces, hook return types | `types/` | | **Constants** | `const` values, config keys, store keys, i18n keys/defaults | `config/` | | **Pure functions** | No React hooks, no side effects, deterministic input→output | `utils/` | | **React hooks** | Uses `useState`, `useEffect`, `useMemo`, `useCallback`, or custom hooks | `hooks/` | | **Sub-components** | Returns JSX, used within the main component | `components/` |
Also check if the file's sibling directories already exist (e.g., `components/` or `hooks/` may already have files from prior refactoring). Don't duplicate existing extractions.
For each extracted piece, create a new file in the appropriate directory. Every file must include:
1. **License header** — copy the exact GPL-3.0 block from the source file 2. **File-level JSDoc** — `@file`, `@description`, `@author` tags 3. **Function/type JSDoc** — `@param`, `@returns` for all exported functions 4. **Correct imports** — relative paths back to shared types or store slices
Naming conventions:
Create `types/<module>Types.ts` **before** other files. This file must contain:
1. **Domain types** — data models, enums, union types used by the module 2. **Hook return type** — `Use<Module>Return` interface describing the hook's full return shape 3. **Component prop interfaces** — `<Component>Props` for every sub-component
All component prop interfaces and hook return types MUST be defined in `types/`, not inline in component or hook files.
Example pattern:
// types/todoTypes.ts
/** 紧急程度 */
export type Priority = 'P0' | 'P1' | 'P2';
/** 单条待办 */
export interface TodoItem { ... }
/** useTodos hook 返回值类型 */
export interface UseTodosReturn { ... }
/** TodoHeader 组件入参 */
export interface TodoHeaderProps { ... }
/** TodoInputBar 组件入参 */
export interface TodoInputBarProps { ... }Replace the extracted code in the original file with imports from the new modules. The source file should become a thin composition layer that:
Create `<module>/index.ts` that re-exports the main component:
export { TodoTab } from './components/TodoTab';Run these checks in order — all must pass before committing:
# 1. TypeScript compilation npx tsc --noEmit --pretty # 2. Comment standards compliance (file headers, JSDoc) npm run comment:check # 3. i18n completeness (all t() keys exist in both zh-CN and en-US) npm run i18n:check # 4. Unit tests npm run test
If any check fails, fix the issue before proceeding. Common failures:
Use a conventional commit message:
refactor(<module-name>): extract types, utils, hooks, components, config from <OriginalFile> - types/<name>Types.ts: type definitions + component prop interfaces - utils/<name>Utils.ts: <what it does> - hooks/us
eIsland - A sleek, Apple Dynamic Island inspired floating widget for Windows, built with Electron.
Repo: JNTMTMTM/eIsland
Add a new empty subpage (tab) to an existing eIsland settings section with page navigation…
为 eIsland 灵动岛添加一个新的空白状态机(IslandState)。当用户要求创建新状态、新页面、 新界面(如登录页、设置子页面、独立面板)时使用此…
创建 eIsland 引导配置窗口的新步骤页面。当用户要求在引导界面(Guide)中新增配置步骤、引导页面、引导分页时使用此 skill。 触发关键词:guide…
为 eIsland 灵动岛的 MaxExpand(全展开)模式添加一个新的 Tab 页面。当用户要求创建新的 MaxExpand…
Add a new SVG icon to the project's icon enum system with matching test assertions. Use this…
Generate a release announcement markdown for eIsland. Use this skill whenever the user asks…