diff --git a/src/lib/output/themes/default/DefaultTheme.tsx b/src/lib/output/themes/default/DefaultTheme.tsx index c3fbac511..b12f3db25 100644 --- a/src/lib/output/themes/default/DefaultTheme.tsx +++ b/src/lib/output/themes/default/DefaultTheme.tsx @@ -99,7 +99,7 @@ export class DefaultTheme extends Theme { return this.getRenderContext(pageEvent).defaultLayout(template, pageEvent); }; - getReflectionClasses(reflection: DeclarationReflection | DocumentReflection) { + getReflectionClasses(reflection: Reflection) { const filters = this.application.options.getValue("visibilityFilters") as Record; return getReflectionClasses(reflection, filters); } @@ -502,46 +502,55 @@ export class DefaultTheme extends Theme { } } -function getReflectionClasses( - reflection: DeclarationReflection | DocumentReflection, - filters: Record, -) { - const classes: string[] = []; +function getReflectionClasses(reflection: Reflection, filters: Record) { + const classes = new Set(); // Filter classes should match up with the settings function in // partials/navigation.tsx. for (const key of Object.keys(filters)) { if (key === "inherited") { if (reflection.flags.isInherited) { - classes.push("tsd-is-inherited"); + classes.add("tsd-is-inherited"); } } else if (key === "protected") { if (reflection.flags.isProtected) { - classes.push("tsd-is-protected"); + classes.add("tsd-is-protected"); } } else if (key === "private") { if (reflection.flags.isPrivate) { - classes.push("tsd-is-private"); + classes.add("tsd-is-private"); } } else if (key === "external") { if (reflection.flags.isExternal) { - classes.push("tsd-is-external"); + classes.add("tsd-is-external"); } } else if (key.startsWith("@")) { if (key === "@deprecated") { if (reflection.isDeprecated()) { - classes.push(toStyleClass(`tsd-is-${key.substring(1)}`)); + classes.add(toStyleClass(`tsd-is-${key.substring(1)}`)); } } else if ( reflection.comment?.hasModifier(key as `@${string}`) || reflection.comment?.getTag(key as `@${string}`) ) { - classes.push(toStyleClass(`tsd-is-${key.substring(1)}`)); + classes.add(toStyleClass(`tsd-is-${key.substring(1)}`)); + } else if (reflection.isDeclaration()) { + const ownSignatures = reflection.getNonIndexSignatures(); + // Check methods and accessors, find common tags, elevate + if ( + ownSignatures.length && + ownSignatures.every( + (refl) => + refl.comment?.hasModifier(key as `@${string}`) || refl.comment?.getTag(key as `@${string}`), + ) + ) { + classes.add(toStyleClass(`tsd-is-${key.substring(1)}`)); + } } } } - return classes.join(" "); + return Array.from(classes).join(" "); } function shouldShowCategories(reflection: Reflection, opts: { includeCategories: boolean; includeGroups: boolean }) { diff --git a/src/lib/output/themes/default/DefaultThemeRenderContext.ts b/src/lib/output/themes/default/DefaultThemeRenderContext.ts index d5634fea3..3a9918c58 100644 --- a/src/lib/output/themes/default/DefaultThemeRenderContext.ts +++ b/src/lib/output/themes/default/DefaultThemeRenderContext.ts @@ -3,12 +3,7 @@ import type { Internationalization, TranslationProxy, } from "../../../internationalization/internationalization.js"; -import type { - DocumentReflection, - CommentDisplayPart, - DeclarationReflection, - Reflection, -} from "../../../models/index.js"; +import type { CommentDisplayPart, Reflection } from "../../../models/index.js"; import { type NeverIfInternal, type Options } from "../../../utils/index.js"; import type { DefaultTheme } from "./DefaultTheme.js"; import { defaultLayout } from "./layouts/default.js"; @@ -123,7 +118,7 @@ export class DefaultThemeRenderContext { getNavigation = () => this.theme.getNavigation(this.page.project); - getReflectionClasses = (refl: DeclarationReflection | DocumentReflection) => + getReflectionClasses = (refl: Reflection) => this.theme.getReflectionClasses(refl); documentTemplate = bind(documentTemplate, this); diff --git a/src/lib/output/themes/default/partials/member.getterSetter.tsx b/src/lib/output/themes/default/partials/member.getterSetter.tsx index e4bfad1c2..72a1a0af6 100644 --- a/src/lib/output/themes/default/partials/member.getterSetter.tsx +++ b/src/lib/output/themes/default/partials/member.getterSetter.tsx @@ -14,20 +14,20 @@ export const memberGetterSetter = (context: DefaultThemeRenderContext, props: De )} > {!!props.getSignature && ( - <> -
  • +
  • +
    {context.memberSignatureTitle(props.getSignature)} -
  • -
  • {context.memberSignatureBody(props.getSignature)}
  • - + +
    {context.memberSignatureBody(props.getSignature)}
    + )} {!!props.setSignature && ( - <> -
  • +
  • +
    {context.memberSignatureTitle(props.setSignature)} -
  • -
  • {context.memberSignatureBody(props.setSignature)}
  • - + +
    {context.memberSignatureBody(props.setSignature)}
    + )} diff --git a/src/lib/output/themes/default/partials/member.signatures.tsx b/src/lib/output/themes/default/partials/member.signatures.tsx index a19ad7b6b..705084e20 100644 --- a/src/lib/output/themes/default/partials/member.signatures.tsx +++ b/src/lib/output/themes/default/partials/member.signatures.tsx @@ -8,14 +8,14 @@ export const memberSignatures = (context: DefaultThemeRenderContext, props: Decl <>
      {props.signatures?.map((item) => ( - <> -
    • +
    • -
    • {context.memberSignatureBody(item)}
    • - + +
      {context.memberSignatureBody(item)}
      + ))}
    diff --git a/src/lib/output/themes/default/templates/reflection.tsx b/src/lib/output/themes/default/templates/reflection.tsx index 022176d33..c33d022c4 100644 --- a/src/lib/output/themes/default/templates/reflection.tsx +++ b/src/lib/output/themes/default/templates/reflection.tsx @@ -64,7 +64,7 @@ export function reflectionTemplate(context: DefaultThemeRenderContext, props: Pa
    {context.memberSignatures(props.model)}
    )} {!!props.model.indexSignatures?.length && ( -
    +

    {context.i18n.theme_indexable()}

      {props.model.indexSignatures.map((index) => renderIndexSignature(context, index))} @@ -82,7 +82,7 @@ export function reflectionTemplate(context: DefaultThemeRenderContext, props: Pa function renderIndexSignature(context: DefaultThemeRenderContext, index: SignatureReflection) { return ( -
    • +
    • {index.flags.isReadonly && readonly } [