Skip to content
Open
3 changes: 3 additions & 0 deletions .Jules/palette.md
Original file line number Diff line number Diff line change
Expand Up @@ -56,3 +56,6 @@
## 2024-07-14 - Native Keyboard Submission with Forms for Modals
**Learning:** Modals designed with plain `<div>` elements as wrappers instead of `<form>` lack native keyboard submission support, forcing users to switch from keyboard to mouse to confirm actions like "Save".
**Action:** When designing modals or popups containing inputs, always use a `<form>` element to wrap the content, handle the `onSubmit` event (calling `e.preventDefault()`), and set the primary confirmation button to `type="submit"` to enable seamless Enter-key submission for keyboard users.
## 2026-07-15 - [Accessible Edge Deletion Modal]
**Learning:** In edge configuration modals (like EditEdgeModal.tsx), the generic "์‚ญ์ œ" (delete) button lacks screen reader context. Because edge deletion is a destructive action, users relying on assistive technology may trigger it without fully understanding what is being deleted.
**Action:** Always provide contextual `aria-label`s on generic action buttons within relation modals. For example, adding `aria-label="๊ด€๊ณ„ ์‚ญ์ œ"` to the delete button significantly improves clarity.
3 changes: 2 additions & 1 deletion frontend/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -36,5 +36,6 @@
},
"overrides": {
"esbuild": "^0.25.0"
}
},
"packageManager": "pnpm@11.13.0"
}
1 change: 1 addition & 0 deletions frontend/src/components/modals/EditEdgeModal.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@ export function EditEdgeModal({
>
<button
type="button"
aria-label="๊ด€๊ณ„ ์‚ญ์ œ"
onClick={onRelDelete}
style={{ color: "#b91c1c", borderColor: "#fca5a5" }}
>
Expand Down
2 changes: 1 addition & 1 deletion frontend/src/components/modals/ModalCoverage.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ describe('modal behavior coverage', () => {
fireEvent.change(screen.getByLabelText('์ œ์•ฝ์กฐ๊ฑด ์ด๋ฆ„ (Label)'), {
target: { value: 'fk_changed' },
})
fireEvent.click(screen.getByRole('button', { name: '์‚ญ์ œ' }))
fireEvent.click(screen.getByRole('button', { name: '๊ด€๊ณ„ ์‚ญ์ œ' }))
fireEvent.click(screen.getByRole('button', { name: '์ทจ์†Œ' }))
fireEvent.click(screen.getByRole('button', { name: '์ €์žฅ' }))
expect(setRelLabel).toHaveBeenCalledWith('fk_changed')
Expand Down
Loading