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 (