docs: restructure README with concise overview and improved organization - Condensed README from 715 to 113 lines with streamlined feature descriptions - Replaced verbose documentation with quick-start focused content - Reorganized sections: removed detailed architecture, API endpoints, and Meilisearch implementation details - Added version badges and simplified feature categories (Navigation, Markdown, Graph) - Streamlined installation instructions with Docker-first approach and simplified local
5.5 KiB
5.5 KiB
Code Block Component - Fixes Applied
Issues Fixed ✅
1. Line Numbers Not Working
Problem: Line numbers were displayed but the code content overlapped them because there was no padding.
Solution:
- Added dynamic padding to the
<pre>element based onprops.showLineNumbers - When line numbers are shown:
padding: 12px 12px 12px 48px(48px left padding for line numbers) - When line numbers are hidden:
padding: 12px - Applied the same font family to line numbers to ensure proper alignment
2. Font Selection Menu Missing
Problem: There was no way to change the font of the code block.
Solution:
- Added
availableFontsarray with popular monospace fonts:- JetBrains Mono
- Fira Code
- Consolas
- Monaco
- Courier New
- Monospace
- Added font selection menu in the "More" dropdown
- Implemented
onFontChange()method to update the font - Implemented
getFontFamily()method to apply the selected font - Font is applied via
[style.font-family]="getFontFamily()"
3. Language Detection Not Working
Problem: There was no automatic language detection feature.
Solution:
- Implemented
detectLanguageInternal()method with pattern matching for 16+ languages - Auto-detection runs on component initialization if no language is set
- Added "Auto-detect Language" button in the menu
- Detection patterns include:
- JavaScript, TypeScript, Python, Java, C#, C++, C, Go, Rust
- PHP, Ruby, HTML, CSS, JSON, XML, YAML
- SQL, Bash, Dockerfile, Markdown
4. Theme Selection Doesn't Change Text Color
Problem: Theme selection menu was missing.
Solution:
- Added theme selection menu in the "More" dropdown
- Lists all available themes from
CodeThemeService - Implemented
onThemeChange()method - Fixed
getThemeClass()to use 'darcula' as default theme - Theme CSS class is properly applied to the code container
5. Preview/Collapse Option Missing
Problem: The header didn't have a collapse/preview toggle like the file block.
Solution:
- Complete UI restructure following the file block pattern
- Added header button with:
- 💻 emoji icon
- Language label
- Line count display
- "More" menu (⋮ button)
- Collapse/Preview label
- Implemented
toggleCollapse(),isCollapsed()methods - Code editor is conditionally rendered based on
!isCollapsed() - Uses
props.collapsedto track state
New Features Added 🎁
Enhanced Menu System
- Created comprehensive dropdown menu with sections:
- Language Selection: All supported languages with visual checkmarks
- Theme Selection: All available themes
- Font Selection: Multiple monospace font options
- Options: Toggle line numbers and word wrap
- Actions: Copy to clipboard and auto-detect language
Better UX
- Menu closes automatically after selection
- Menu positioning follows cursor
- Escape key closes menu
- Click outside closes menu
- Visual feedback (checkmarks) for selected options
Keyboard Accessibility
- Header button supports Enter and Space keys
- ARIA attributes for screen readers
- Focus management
Additional Utilities
getLineCount(): Shows number of lines in the headergetLanguageLabel(): Displays friendly language namecopyToClipboard(): One-click code copyingonBlur(): Updates line numbers after editing
Architecture Improvements
Consistent with File Block
The component now follows the same pattern as the file block:
- Same header structure
- Same menu positioning logic
- Same collapse/expand behavior
- Better visual consistency across the app
Better State Management
- All props updates go through
this.update.emit() - Menu state managed with
menuOpenandmenuPos - Proper cleanup with
@HostListenerdecorators
Testing Recommendations
-
Test Line Numbers:
- Toggle line numbers on/off
- Add/remove lines and verify numbers update
- Check alignment with different fonts
-
Test Themes:
- Switch between all available themes
- Verify text color changes properly
- Check that default theme (Darcula) loads correctly
-
Test Fonts:
- Try each font option
- Verify line numbers align correctly with each font
- Check that font persists after editing
-
Test Language Detection:
- Paste code in different languages
- Click "Auto-detect Language"
- Verify correct language is detected
-
Test Collapse/Expand:
- Click header to collapse
- Verify content hides
- Verify "Preview/Collapse" label updates
- Expand and verify content shows
-
Test Menu:
- Open menu and click outside to close
- Press Escape to close
- Select options and verify menu closes
- Check menu positioning on different screen sizes
Known Limitations
- Language Detection: The detection is pattern-based and may not be 100% accurate for ambiguous code snippets.
- Font Loading: Custom fonts (JetBrains Mono, Fira Code) need to be loaded in your app for them to work properly. Consider adding them to your global styles.
- Syntax Highlighting: This component uses CSS themes but doesn't have actual syntax highlighting (would need a library like Prism or Highlight.js for that).
Next Steps (Optional Enhancements)
- Add syntax highlighting with Prism.js or Highlight.js
- Add line highlighting feature
- Add search/replace functionality
- Add code folding
- Load custom fonts via CDN or local assets
- Add more sophisticated language detection (using a library)
- Add export functionality (download as file)