Frontend
attik-frontend/src/app/tools/agreements/templates/[id]/AgreementTextBlock.tsx, which uses TipTapWithVariables for the rich-text field. The editor receives content (TipTap/ProseMirror JSONContent) and persists it via onContentChange; block UI and wrapper are in AgreementBlockWrapper.tsx (e.g. mb-2 space-y-4 for block spacing).attik-frontend/src/components/tiptap/TipTapWithVariables.tsx, which uses TipTap with a Placeholder extension (emptyEditorClass, emptyNodeClass), default content, and editorProps. ProseMirror/TipTap often keeps a trailing empty paragraph or similar node so the doc always has a valid structure; that can both prevent deleting the "last" line and render as extra space.AgreementTextBlock.tsx via TextContentPreview and renderTipTapToHtml; the client-facing agreement view uses AgreementContent.tsx. Any fix should ensure that stored content does not include unnecessary trailing empty nodes that produce visible gaps, and/or that the editor allows users to remove the trailing line without leaving a visible gap in the final contract.Backend
content.jsonContent) on agreement template blocks; the backend serves and persists blocks via routes such as agreement/template/blocks. No change to the stored schema is required unless the fix involves normalizing or trimming content on save.Decision needed
attik-frontend/src/app/tools/agreements/templates/[id]/AgreementBuilderBase.tsxattik-frontend/src/app/tools/agreements/templates/[id]/AgreementTextBlock.tsx, AgreementBlockWrapper.tsxattik-frontend/src/components/tiptap/TipTapWithVariables.tsxPlease authenticate to join the conversation.
Planned
New Features
20 days ago
Linear
Get notified by email when there are changes.
Planned
New Features
20 days ago
Linear
Get notified by email when there are changes.