diff --git a/deck-frontend/CHANGELOG.md b/deck-frontend/CHANGELOG.md new file mode 100644 index 0000000..542af4f --- /dev/null +++ b/deck-frontend/CHANGELOG.md @@ -0,0 +1,109 @@ +# DECK Frontend - Changelog + +## v4.1 (2026-01-15) - Security & Accessibility Update + +### π΄ Critical Fix +- **XSS Protection**: Added `Utils.escapeHtml()` function to sanitize all user-generated content before rendering to DOM + - Applied in: DetailPanel, GridView, TreeView, GraphView sidebar + - Prevents script injection from malicious tag names, descriptions, or refs + +### π‘ Important Fixes + +#### Responsive CSS +Added 3 breakpoints for mobile compatibility: +```css +@media (max-width: 1024px) - Tablet adjustments +@media (max-width: 768px) - Mobile: hides left-panel, detail-panel fullwidth +@media (max-width: 480px) - Small screens: hides graph-sidebar +``` + +#### Accessibility (WCAG 2.1) +- `aria-label` on all interactive elements (inputs, selects, buttons) +- `aria-pressed` on toggle buttons (SEL, base buttons, view tabs) +- `aria-expanded` on tree headers +- `role` attributes: button, group, dialog, navigation, complementary +- `tabindex="0"` on clickable non-button elements +- `aria-live="polite"` on dynamic content areas + +#### Focus Styles +```css +.btn:focus-visible +.base-btn:focus-visible +.view-tab:focus-visible +.group-btn:focus-visible +.lang-select:focus-visible +.lib-icon:focus-visible +.card:focus-visible +.tree-header:focus-visible +.tree-item:focus-visible +.tag-chip:focus-visible +.detail-close:focus-visible +.modal-close:focus-visible +``` + +#### Memory Leak Fix +- `GraphView.unmount()` now properly cleans up: + - Stops D3 force simulation + - Removes SVG element from DOM + - Nullifies references +- Called at start of `render()` to prevent accumulation + +#### State Management +- Changed `State.set()` from `Object.assign()` to spread operator for immutability +- Prevents mutation bugs with nested Sets (graphFilters) + +--- + +## v4.0 (2026-01-15) - Clean Modular Architecture + +### Structure +- Single HTML file with clear separation markers +- CSS: lines 30-560 (CSS_START/CSS_END) +- HTML: lines 560-680 (structure only) +- JS: lines 680-1614 (JS_START/JS_END) + +### Extraction Commands +```bash +# Extract CSS (pure, without + + + +
+ +