* refactor: rename index.tsx to Message.tsx
* refactor: update Message import paths and extract MessageView component
* MessageView does not need .return class.
* refactor: unify message normalization across components
* refactor: extract MessageView and introduce normalizeText callback
- Extract pure MessageView component from Message.tsx
- Replace isAsync prop with normalizeText callback in MessageLabel
- Create messageNormalizers.ts with sync/async normalizers
- Update all statement components to pass appropriate normalizers
- Fix editable-label tests to use stable locators and page.keyboard
* refactor: extract pure EditableSpan component
- Create generic EditableSpan component in src/components/common/EditableSpan/
- Refactor MessageLabel, ParticipantLabel, ConditionLabel to use EditableSpan
- Remove useEditLabel.ts hook (logic moved to component)
- Move specialCharRegex to messageNormalizers.ts
- Update dark theme selector from label to .name class
- Update tests to use .editable-span-base selector
- Change style-panel test to use dblclick (editing now requires double-click)
Architecture: Three-layer pattern
- EditableSpan: pure view component, no DSL knowledge
- Wrapper components: DSL-aware, handle code replacement
- Layout components: handle decoration (guillemets, brackets)
* fix: ESC key now properly cancels EditableSpan edits without saving
- Fixed race condition by moving ESC handling from keyup to keydown
- ESC now sets cancel flag before blur event fires
- Simplified handleBlur by removing unnecessary setTimeout
- Removed unused onCancel and showHoverHint props
- Added comprehensive Playwright tests for ESC behavior (6 tests)
- Added ESC cancel test to existing editable-label tests
- Added Storybook story demonstrating ESC cancel behavior
* fix: handle undefined labelText in MessageLabel to prevent crash
* fix: simplify EditableSpan CSS and add maxDiffPixels tolerance for flaky screenshot tests
- Simplify EditableSpan.css by removing !important and unnecessary styles
- Add maxDiffPixels: 3 to fragments-with-return test for anti-aliasing tolerance
- Update snapshot baselines
* refactor(Return): reuse ret variable to avoid redundant method calls
* refactor(ReturnTo): move asyncMessage target logic to parser layer
* refactor(RetContext): add Signature function and update From to handle asyncMessage
* refactor(Message): simplify getEditable with creation-specific check
* refactor(Message): simplify stylable check by removing redundant type validation
* refactor(MessageView): remove unused content prop, use labelText for display
* refactor: rename borderStyle to lineStyle and simplify logic
- Rename borderStyle to lineStyle in Message.tsx and MessageView.tsx
- Simplify lineStyle calculation from object lookup to ternary expression
- Remove incorrect type assertion
* refactor: move getEditable to Creation.tsx.
* refactor: move getLabelPosition for 'sync' message to Interaction.tsx.
* refactor: move getLabelPosition for 'async' message to Interaction-async.tsx.
* refactor: move getLabelPosition for 'creation' message to Creation.tsx.
* refactor: move getLabelPosition for 'assignment' message to Interaction.tsx.
* refactor: move getLabelPosition for 'return' message to Return.tsx.
* refactor: Renamed labelPosition1 to labelPosition.
* refactor: Removed 'style' from EditableSpan.tsx
* refactor: stop extracting param of creation from signature.
* refactor: stop passing stylable to MessageView.tsx
* refactor: removed parameters of style and editable.
* refactor: calc lineStyle inside MessageView.tsx.
* added styling panel for SelfInvocationAsync.tsx
* removed class right-to-left from MessageView.tsx
* removed class from Creation.tsx; removed style attribute from Message inside Creation.tsx
* chore: use local vendor files for offline development
* refactor: update context prop in Creation.tsx to use creation object
* Revert "refactor: removed parameters of style and editable."
This reverts commit 67f88ba585bf3af78475555f09141218885eb18b.
* Removed `translate: 0` from styling Message.
* Removed `w-full` from styling Message as Message gets width from style.
* Add Playwright test for RTL creation message layout
- Add cy/creation-rtl.html with DSL testing right-to-left creation layout
- Add tests/creation-rtl.spec.ts for visual regression testing
- Test focuses on creation message RTL layout with participant declaration and assignment
* Add labelPosition to assignee return message in Creation component
- Extract assigneeStart and assigneeStop from creation assignment context
- Add labelPosition prop to assignee return Message component
- Matches the pattern used in Interaction component for consistency
* Refactor: streamline assignee handling in Creation and Occurrence components
* fix: consistent occurrence height with proper return message styling
- Wrap return Message in statement-container and interaction return divs
- Add mb-[-16px] bottom-[-1px] for consistent height across occurrences
- Add conditional transform based on rtl prop for correct positioning
* test: update Playwright snapshots for occurrence height fix
* chore: update Playwright snapshots for Linux CI
Generated Linux-specific snapshots for chromium-linux platform.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* fix: correct bun.lock file reference in e2e workflow
- Changed bun.lockb to bun.lock to match actual lock file
- This ensures proper caching and workflow execution
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>