diff --git a/packages/react/src/jsx-ast/utils/__tests__/buildContent.test.mjs b/packages/react/src/jsx-ast/utils/__tests__/buildContent.test.mjs index c5c17acb..a1dc5235 100644 --- a/packages/react/src/jsx-ast/utils/__tests__/buildContent.test.mjs +++ b/packages/react/src/jsx-ast/utils/__tests__/buildContent.test.mjs @@ -3,7 +3,10 @@ import { describe, it } from 'node:test'; import { setConfig } from '@doc-kit/core/utils/configuration/index.mjs'; -import { transformHeadingNode } from '../buildContent.mjs'; +import { + transformHeadingNode, + createHeadingElement, +} from '../buildContent.mjs'; const heading = { type: 'heading', @@ -67,3 +70,33 @@ describe('transformHeadingNode (deprecation Type -> AlertBox level)', () => { assert.equal(levelAttr.value, 'danger'); }); }); + +describe('createHeadingElement (Overloads Layout)', () => { + it('returns a hidden span for subsequent overloads to prevent UI noise', () => { + const content = { + depth: 3, + data: { type: 'method', slug: 'factorizemodule-1', isOverload: true }, + }; + + const result = createHeadingElement(content, null); + + assert.equal(result.type, 'element'); + assert.equal(result.tagName, 'span'); + assert.equal(result.properties.id, 'factorizemodule-1'); + assert.equal(result.properties.style, 'display: none;'); + }); + + it('returns a full heading element for normal methods (non-overloads)', () => { + const content = { + depth: 3, + data: { type: 'method', slug: 'factorizemodule' }, + }; + + const result = createHeadingElement(content, null); + + assert.equal(result.tagName, 'div'); + const h3 = result.children.find(child => child.tagName === 'h3'); + assert.ok(h3); + assert.equal(h3.properties.id, 'factorizemodule'); + }); +}); diff --git a/packages/react/src/jsx-ast/utils/buildContent.mjs b/packages/react/src/jsx-ast/utils/buildContent.mjs index bc92b7be..fcc9be90 100644 --- a/packages/react/src/jsx-ast/utils/buildContent.mjs +++ b/packages/react/src/jsx-ast/utils/buildContent.mjs @@ -132,7 +132,11 @@ export const extractHeadingContent = content => { * @param {import('unist').Node|null} changeElement - The change history element, if available */ export const createHeadingElement = (content, changeElement) => { - const { type, slug } = content.data; + const { type, slug, isOverload } = content.data; + + if (isOverload) { + return createElement('span', { id: slug, style: 'display: none;' }); + } let headingContent = extractHeadingContent(content);