TreeMap
A free, open-source disk-space visualizer. Squarified treemap, duplicate hunting, disk-full forecasting, and cleanup that only ever moves files to the Trash.
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.
Currently, two official plugins are available:
The React Compiler is not enabled on this template because of its impact on dev & build performances. To add it, see this documentation.
If you are developing a production application, we recommend using TypeScript with type-aware lint rules enabled. Check out the TS template for information on how to integrate TypeScript and typescript-eslint in your project.
Details -
NoteCode is a terminal-aesthetic markdown note-taking app. Here's a breakdown of every layer:
The Stack
┌──────────────┬──────────────────────────────────────────┐ │ Tool │ Role │ ├──────────────┼──────────────────────────────────────────┤ │ React 19 │ UI components and state │ ├──────────────┼──────────────────────────────────────────┤ │ Vite │ Dev server and bundler │ ├──────────────┼──────────────────────────────────────────┤ │ CodeMirror 6 │ The editor (replaces a plain ) │ ├──────────────┼──────────────────────────────────────────┤ │ marked │ Converts markdown → HTML for reader mode │ ├──────────────┼──────────────────────────────────────────┤ │ highlight.js │ Syntax colors in reader mode code blocks │ └──────────────┴──────────────────────────────────────────┘
What Each File Does
src/ ├── main.jsx → Entry point, mounts React into index.html ├── App.jsx → Root component: manages notes, sidebar, mode switching ├── index.css → All styles (layout, colors, toolbar, editor, markdown) └── components/ ├── Sidebar.jsx → Note list, search, create/delete ├── Editor.jsx → CodeMirror editor + formatting toolbar └── Preview.jsx → Reader mode (full-screen rendered markdown)
App.jsx is the brain — it holds all note data in state, saves to localStorage, and decides which panel to show based on the current mode (edit or read).
Editor.jsx is the most complex piece. It:
Preview.jsx just takes the raw markdown string, runs it through marked, and renders the HTML — used in reader [▶] mode.
The CodeMirror Setup (Editor internals)
EditorView (the actual DOM editor) └── EditorState ├── markdown() extension → parses markdown syntax ├── syntaxHighlighting() → applies colors per token type ├── history() → undo/redo ├── keymap → keyboard shortcuts ├── EditorView.lineWrapping → soft wrap long lines └── updateListener → fires onChange when text changes
The colors (heading purple, bold orange, italic green, etc.) are defined in markdownHighlight — a HighlightStyle that maps token types → CSS properties.
How to Make Edits
Open src/components/Editor.jsx, find markdownHighlight: { tag: tags.heading1, fontSize: '1.6em', fontWeight: '700', color: '#da8fff' }, Change the color/size there. The tag names map directly to markdown elements (tags.strong, tags.emphasis, tags.link, etc.)
In Editor.jsx, add a button in the :
<button className="toolbar-btn" onClick={() => getView() && toggleWrap(getView(), '', '')}>S
Then add the corresponding CSS in index.css under .toolbar-btn if needed.
All CSS variables are at the top of src/index.css: :root { --text-accent: #da8fff; /* purple — headings, cursor / --text-orange: #f3ae35; / bold, inline code / --text-green: #5af78e; / italic / --text-blue: #57c7ff; / h3, links / --bg-base: #0d0f11; / main background */ } Change these and both the app UI and editor decorations will update.
Open src/components/Preview.jsx. The renderer object overrides how marked renders specific elements. For example, to change how code blocks look, edit the renderer.code function there.
After any edit, the dev server hot-reloads automatically — you don't need to restart it.