diff --git a/packages/raystack/components/code-block/__tests__/code-block.test.tsx b/packages/raystack/components/code-block/__tests__/code-block.test.tsx index 5c3963689..4bd22c031 100644 --- a/packages/raystack/components/code-block/__tests__/code-block.test.tsx +++ b/packages/raystack/components/code-block/__tests__/code-block.test.tsx @@ -186,5 +186,35 @@ describe('CodeBlock', () => { expect(screen.getByText('Show Code')).toBeInTheDocument(); }); + + it('renders maxLines lines when collapsed', () => { + const { container } = render( + + ); + + expect( + container.querySelectorAll('[data-slot="code-block-line"]') + ).toHaveLength(2); + }); + + it('hides collapse trigger when code fits in maxLines', () => { + render(); + + expect(screen.queryByText('Show Code')).not.toBeInTheDocument(); + }); + + it('counts bare \\r as a line break', () => { + const code = 'a\rb\rc'; + render( + + + {code} + + + + ); + + expect(screen.getByText('Show Code')).toBeInTheDocument(); + }); }); }); diff --git a/packages/raystack/components/code-block/code-block-misc.tsx b/packages/raystack/components/code-block/code-block-misc.tsx index b96e93717..055ae6944 100644 --- a/packages/raystack/components/code-block/code-block-misc.tsx +++ b/packages/raystack/components/code-block/code-block-misc.tsx @@ -78,9 +78,9 @@ export function CodeBlockCollapseTrigger({ }: CodeBlockCollapseTriggerProps) { const { maxLines, collapsed, toggleCollapsed, code } = useCodeBlockContext(); const canCollapse = maxLines && maxLines > 0; - const lineCount = code?.split('\n').length ?? 0; + const lineCount = code?.split(/\r\n|\r|\n/).length ?? 0; - if (!canCollapse || lineCount < maxLines) return null; + if (!canCollapse || lineCount <= maxLines) return null; return (