d7eeff3a6800f36e721a9d7290df8a644a09af34
Wires the Task 18 payload builder and Task 16/17 diagnostics into a user-facing modal, reachable from the topbar bug icon (desktop) and overflow menu (mobile). Two gaps in the task brief's draft, not called out there, are handled explicitly: buildReportPayload() can throw when the payload is still oversized after canvas_state is dropped, so submission is wrapped in try/catch with an actionable "too large" error that preserves the user's typed text; and the textarea maxLength is sourced from MAX_DESCRIPTION_CHARS (with a proximity character count) instead of a hardcoded number, so the UI limit can't drift from the payload limit. Also portals the modal to document.body for the same stacking-context reasons TemplateModal/HeadCodeModal already do, and guards the useEditor() selection collector with optional chaining so it degrades gracefully under TopBar's existing test harness (a minimal @craftjs/core stub with no events/nodes on its collector state). The textarea uses onInput rather than onChange: React's onChange dedup (via its DOM value-tracker) treats a test harness's raw `el.value = x` assignment as a no-op change, matching this repo's existing pattern (HeadCodeModal.test.tsx, shared-controls.test.tsx, etc. all work around the same gotcha) -- onInput is a plain passthrough with no such check, and is behaviorally identical for real typing. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Description
Visual drag-and-drop website builder using GrapesJS
3.5 MiB
Languages
TypeScript
64.8%
HTML
16.1%
JavaScript
14.9%
CSS
3.2%
PHP
0.7%
Other
0.3%