- Changed row ID prefix from 'row_' to '_' for valid CSS selectors
- Added _id property assignment in row data for proper rendering
- Resolves querySelectorAll SyntaxError when deleting rows
The issue was that numeric row IDs (0, 1, 2) created invalid CSS
selectors like 'tr#0 button.action-delete'. CSS IDs cannot start
with numbers. By prefixing with underscore, we get valid selectors
like 'tr#_0 button.action-delete'.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Changed package name from shopkeeper/vendornotes to shopkeeper/module-vendor-notes
- Updated repository URL to code.shopkeeper.dev
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Removed extra.map section that was causing duplicate installation paths
- Module will now install correctly to vendor/ directory only
- Magento's component registration handles module loading
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Update package name from shopkeeper/vendornotes to shopkeeper/module-vendor-notes to follow naming conventions
- Fix invalid CSS selector issue by prefixing numeric row IDs with 'row_' in getArrayRows()
- Resolves JavaScript error: "Failed to execute 'querySelectorAll' on 'Document': 'tr#0 button.action-delete' is not a valid selector"
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Add proper HTML filtering to render mailto links and formatting in vendor notes.
- Create HtmlArraySerialized backend model to prevent HTML escaping
- Add filterOutputHtml() method to safely render HTML content
- Update template to use HTML filtering
- Decode HTML entities before display