docs: add anchor link to reference parameters (#6194)
- Added anchor links to items in parameter components - Added sectionTitle prop in markdown theme Note: Due to the second point, the change requires generating references to see the anchor links, which would result in a big diff in this PR. Instead, next time the references are generated for a release, this feature will available for use.
This commit is contained in:
1 parent
75fd6b0c83
commit
ddc0c9dfff
22 files changed
+212
-46
No files matched your search
+5
-1
@@ -8,7 +8,10 @@ import { formatParameterComponent } from "../../utils/format-parameter-component
|
|||||||
export default function (theme: MarkdownTheme) {
|
export default function (theme: MarkdownTheme) {
|
||||||
Handlebars.registerHelper(
|
Handlebars.registerHelper(
|
||||||
"parameterComponent",
|
"parameterComponent",
|
||||||
function (this: ReflectionParameterType[]) {
|
function (
|
||||||
|
this: ReflectionParameterType[],
|
||||||
|
options: Handlebars.HelperOptions
|
||||||
|
) {
|
||||||
const { parameterComponent, maxLevel, parameterComponentExtraProps } =
|
const { parameterComponent, maxLevel, parameterComponentExtraProps } =
|
||||||
theme.getFormattingOptionsForLocation()
|
theme.getFormattingOptionsForLocation()
|
||||||
const parameters = this.reduce(
|
const parameters = this.reduce(
|
||||||
@@ -26,6 +29,7 @@ export default function (theme: MarkdownTheme) {
|
|||||||
parameterComponent,
|
parameterComponent,
|
||||||
componentItems: parameters,
|
componentItems: parameters,
|
||||||
extraProps: parameterComponentExtraProps,
|
extraProps: parameterComponentExtraProps,
|
||||||
|
sectionTitle: options.hash.sectionTitle,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|||||||
+2
-2
@@ -5,13 +5,13 @@ import { ParameterReflection } from "typedoc"
|
|||||||
export default function (theme: MarkdownTheme) {
|
export default function (theme: MarkdownTheme) {
|
||||||
Handlebars.registerHelper(
|
Handlebars.registerHelper(
|
||||||
"parameter",
|
"parameter",
|
||||||
function (this: ParameterReflection[]) {
|
function (this: ParameterReflection[], options: Handlebars.HelperOptions) {
|
||||||
const { parameterStyle } = theme.getFormattingOptionsForLocation()
|
const { parameterStyle } = theme.getFormattingOptionsForLocation()
|
||||||
|
|
||||||
if (parameterStyle === "list") {
|
if (parameterStyle === "list") {
|
||||||
return Handlebars.helpers.parameterList.call(this)
|
return Handlebars.helpers.parameterList.call(this)
|
||||||
} else if (parameterStyle === "component") {
|
} else if (parameterStyle === "component") {
|
||||||
return Handlebars.helpers.parameterComponent.call(this)
|
return Handlebars.helpers.parameterComponent.call(this, options)
|
||||||
} else {
|
} else {
|
||||||
return Handlebars.helpers.parameterTable.call(this)
|
return Handlebars.helpers.parameterTable.call(this)
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-1
@@ -10,7 +10,11 @@ export default function () {
|
|||||||
const hookParameters = getHookParams(this)
|
const hookParameters = getHookParams(this)
|
||||||
|
|
||||||
if (hookParameters?.length) {
|
if (hookParameters?.length) {
|
||||||
parametersStr = Handlebars.helpers.parameter.call(hookParameters)
|
parametersStr = Handlebars.helpers.parameter.call(hookParameters, {
|
||||||
|
hash: {
|
||||||
|
sectionTitle: this.name,
|
||||||
|
},
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
return parametersStr
|
return parametersStr
|
||||||
|
|||||||
+1
@@ -31,6 +31,7 @@ export default function (theme: MarkdownTheme) {
|
|||||||
parameterComponent,
|
parameterComponent,
|
||||||
componentItems: mutationParameters,
|
componentItems: mutationParameters,
|
||||||
extraProps: parameterComponentExtraProps,
|
extraProps: parameterComponentExtraProps,
|
||||||
|
sectionTitle: this.name,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|||||||
+1
@@ -31,6 +31,7 @@ export default function (theme: MarkdownTheme) {
|
|||||||
parameterComponent,
|
parameterComponent,
|
||||||
componentItems: mutationParameters,
|
componentItems: mutationParameters,
|
||||||
extraProps: parameterComponentExtraProps,
|
extraProps: parameterComponentExtraProps,
|
||||||
|
sectionTitle: this.name,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|||||||
+1
@@ -31,6 +31,7 @@ export default function (theme: MarkdownTheme) {
|
|||||||
parameterComponent,
|
parameterComponent,
|
||||||
componentItems: mutationParameters,
|
componentItems: mutationParameters,
|
||||||
extraProps: parameterComponentExtraProps,
|
extraProps: parameterComponentExtraProps,
|
||||||
|
sectionTitle: this.name,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ export default function (theme: MarkdownTheme) {
|
|||||||
if (reflection.variant === "signature" && "type" in reflection) {
|
if (reflection.variant === "signature" && "type" in reflection) {
|
||||||
return getReturnFromType(theme, reflection)
|
return getReturnFromType(theme, reflection)
|
||||||
} else if (reflection.comment) {
|
} else if (reflection.comment) {
|
||||||
return getReturnFromComment(theme, reflection.comment)
|
return getReturnFromComment(theme, reflection.comment, reflection.name)
|
||||||
} else {
|
} else {
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
@@ -49,6 +49,7 @@ function getReturnFromType(
|
|||||||
parameterComponent,
|
parameterComponent,
|
||||||
componentItems,
|
componentItems,
|
||||||
extraProps: parameterComponentExtraProps,
|
extraProps: parameterComponentExtraProps,
|
||||||
|
sectionTitle: reflection.name,
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
return formatReturnAsList(componentItems)
|
return formatReturnAsList(componentItems)
|
||||||
@@ -77,7 +78,11 @@ function formatReturnAsList(componentItems: Parameter[], level = 1): string {
|
|||||||
.join("\n")
|
.join("\n")
|
||||||
}
|
}
|
||||||
|
|
||||||
function getReturnFromComment(theme: MarkdownTheme, comment: Comment) {
|
function getReturnFromComment(
|
||||||
|
theme: MarkdownTheme,
|
||||||
|
comment: Comment,
|
||||||
|
reflectionName: string
|
||||||
|
) {
|
||||||
const md: string[] = []
|
const md: string[] = []
|
||||||
const {
|
const {
|
||||||
parameterStyle,
|
parameterStyle,
|
||||||
@@ -113,6 +118,7 @@ function getReturnFromComment(theme: MarkdownTheme, comment: Comment) {
|
|||||||
...parameterComponentExtraProps,
|
...parameterComponentExtraProps,
|
||||||
title: commentPart.target.name,
|
title: commentPart.target.name,
|
||||||
},
|
},
|
||||||
|
sectionTitle: reflectionName,
|
||||||
})}\n\n`
|
})}\n\n`
|
||||||
: `\n\n<details>\n<summary>\n${
|
: `\n\n<details>\n<summary>\n${
|
||||||
commentPart.target.name
|
commentPart.target.name
|
||||||
|
|||||||
+12
-1
@@ -10,7 +10,10 @@ import { formatParameterComponent } from "../../utils/format-parameter-component
|
|||||||
export default function (theme: MarkdownTheme) {
|
export default function (theme: MarkdownTheme) {
|
||||||
Handlebars.registerHelper(
|
Handlebars.registerHelper(
|
||||||
"typeDeclarationMembers",
|
"typeDeclarationMembers",
|
||||||
function (this: DeclarationReflection[]) {
|
function (
|
||||||
|
this: DeclarationReflection[],
|
||||||
|
options: Handlebars.HelperOptions
|
||||||
|
) {
|
||||||
const { parameterComponent, maxLevel, parameterComponentExtraProps } =
|
const { parameterComponent, maxLevel, parameterComponentExtraProps } =
|
||||||
theme.getFormattingOptionsForLocation()
|
theme.getFormattingOptionsForLocation()
|
||||||
const comments = this.map(
|
const comments = this.map(
|
||||||
@@ -24,6 +27,10 @@ export default function (theme: MarkdownTheme) {
|
|||||||
[]
|
[]
|
||||||
) as DeclarationReflection[]
|
) as DeclarationReflection[]
|
||||||
|
|
||||||
|
// if (typeof options.hash.sectionTitle !== "string") {
|
||||||
|
// console.log("here2")
|
||||||
|
// }
|
||||||
|
|
||||||
let result = ""
|
let result = ""
|
||||||
switch (theme.objectLiteralTypeDeclarationStyle) {
|
switch (theme.objectLiteralTypeDeclarationStyle) {
|
||||||
case "list": {
|
case "list": {
|
||||||
@@ -36,6 +43,7 @@ export default function (theme: MarkdownTheme) {
|
|||||||
parameterComponent,
|
parameterComponent,
|
||||||
maxLevel,
|
maxLevel,
|
||||||
parameterComponentExtraProps,
|
parameterComponentExtraProps,
|
||||||
|
sectionTitle: options.hash.sectionTitle,
|
||||||
})
|
})
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
@@ -65,11 +73,13 @@ function getComponentMarkdownContent({
|
|||||||
parameterComponent,
|
parameterComponent,
|
||||||
maxLevel,
|
maxLevel,
|
||||||
parameterComponentExtraProps,
|
parameterComponentExtraProps,
|
||||||
|
sectionTitle,
|
||||||
}: {
|
}: {
|
||||||
properties: DeclarationReflection[]
|
properties: DeclarationReflection[]
|
||||||
parameterComponent?: string
|
parameterComponent?: string
|
||||||
maxLevel?: number | undefined
|
maxLevel?: number | undefined
|
||||||
parameterComponentExtraProps?: Record<string, unknown>
|
parameterComponentExtraProps?: Record<string, unknown>
|
||||||
|
sectionTitle: string
|
||||||
}) {
|
}) {
|
||||||
const parameters = properties.map((property) =>
|
const parameters = properties.map((property) =>
|
||||||
reflectionFormatter({
|
reflectionFormatter({
|
||||||
@@ -84,6 +94,7 @@ function getComponentMarkdownContent({
|
|||||||
parameterComponent,
|
parameterComponent,
|
||||||
componentItems: parameters as Parameter[],
|
componentItems: parameters as Parameter[],
|
||||||
extraProps: parameterComponentExtraProps,
|
extraProps: parameterComponentExtraProps,
|
||||||
|
sectionTitle,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+9
-1
@@ -7,7 +7,10 @@ import { formatParameterComponent } from "../../utils/format-parameter-component
|
|||||||
export default function (theme: MarkdownTheme) {
|
export default function (theme: MarkdownTheme) {
|
||||||
Handlebars.registerHelper(
|
Handlebars.registerHelper(
|
||||||
"typeParameterComponent",
|
"typeParameterComponent",
|
||||||
function (this: TypeParameterReflection[]) {
|
function (
|
||||||
|
this: TypeParameterReflection[],
|
||||||
|
options: Handlebars.HelperOptions
|
||||||
|
) {
|
||||||
const { parameterComponent, maxLevel, parameterComponentExtraProps } =
|
const { parameterComponent, maxLevel, parameterComponentExtraProps } =
|
||||||
theme.getFormattingOptionsForLocation()
|
theme.getFormattingOptionsForLocation()
|
||||||
const parameters = this.map((parameter) =>
|
const parameters = this.map((parameter) =>
|
||||||
@@ -18,10 +21,15 @@ export default function (theme: MarkdownTheme) {
|
|||||||
})
|
})
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// if (typeof options.hash.sectionTitle !== "string") {
|
||||||
|
// console.log("here3")
|
||||||
|
// }
|
||||||
|
|
||||||
return formatParameterComponent({
|
return formatParameterComponent({
|
||||||
parameterComponent,
|
parameterComponent,
|
||||||
componentItems: parameters,
|
componentItems: parameters,
|
||||||
extraProps: parameterComponentExtraProps,
|
extraProps: parameterComponentExtraProps,
|
||||||
|
sectionTitle: options.hash.sectionTitle,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|||||||
+5
-2
@@ -5,13 +5,16 @@ import { TypeParameterReflection } from "typedoc"
|
|||||||
export default function (theme: MarkdownTheme) {
|
export default function (theme: MarkdownTheme) {
|
||||||
Handlebars.registerHelper(
|
Handlebars.registerHelper(
|
||||||
"typeParameter",
|
"typeParameter",
|
||||||
function (this: TypeParameterReflection[]) {
|
function (
|
||||||
|
this: TypeParameterReflection[],
|
||||||
|
options: Handlebars.HelperOptions
|
||||||
|
) {
|
||||||
const { parameterStyle } = theme.getFormattingOptionsForLocation()
|
const { parameterStyle } = theme.getFormattingOptionsForLocation()
|
||||||
|
|
||||||
if (parameterStyle === "list") {
|
if (parameterStyle === "list") {
|
||||||
return Handlebars.helpers.typeParameterList.call(this)
|
return Handlebars.helpers.typeParameterList.call(this)
|
||||||
} else if (parameterStyle === "component") {
|
} else if (parameterStyle === "component") {
|
||||||
return Handlebars.helpers.typeParameterComponent.call(this)
|
return Handlebars.helpers.typeParameterComponent.call(this, options)
|
||||||
} else {
|
} else {
|
||||||
return Handlebars.helpers.typeParameterTable.call(this)
|
return Handlebars.helpers.typeParameterTable.call(this)
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-3
@@ -24,7 +24,7 @@
|
|||||||
|
|
||||||
{{#with typeParameters}}
|
{{#with typeParameters}}
|
||||||
|
|
||||||
{{{typeParameter}}}
|
{{{typeParameter sectionTitle=../name}}}
|
||||||
|
|
||||||
{{/with}}
|
{{/with}}
|
||||||
|
|
||||||
@@ -92,7 +92,7 @@
|
|||||||
|
|
||||||
{{#with type.declaration.children}}
|
{{#with type.declaration.children}}
|
||||||
|
|
||||||
{{{typeDeclarationMembers}}}
|
{{{typeDeclarationMembers sectionTitle=../name}}}
|
||||||
|
|
||||||
{{/with}}
|
{{/with}}
|
||||||
|
|
||||||
@@ -118,7 +118,7 @@
|
|||||||
|
|
||||||
{{{titleLevel}}} Properties
|
{{{titleLevel}}} Properties
|
||||||
|
|
||||||
{{{typeDeclarationMembers}}}
|
{{{typeDeclarationMembers sectionTitle=../name}}}
|
||||||
|
|
||||||
{{/with}}
|
{{/with}}
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -38,7 +38,7 @@
|
|||||||
|
|
||||||
{{#with typeParameters}}
|
{{#with typeParameters}}
|
||||||
|
|
||||||
{{{typeParameter}}}
|
{{{typeParameter sectionTitle=../name}}}
|
||||||
|
|
||||||
{{/with}}
|
{{/with}}
|
||||||
|
|
||||||
|
|||||||
+3
-3
@@ -38,7 +38,7 @@
|
|||||||
|
|
||||||
{{#with typeParameters}}
|
{{#with typeParameters}}
|
||||||
|
|
||||||
{{{typeParameter}}}
|
{{{typeParameter sectionTitle=../name}}}
|
||||||
|
|
||||||
{{/with}}
|
{{/with}}
|
||||||
|
|
||||||
@@ -54,7 +54,7 @@
|
|||||||
|
|
||||||
{{#with parameters}}
|
{{#with parameters}}
|
||||||
|
|
||||||
{{{parameter}}}
|
{{{parameter sectionTitle=../name}}}
|
||||||
|
|
||||||
{{/with}}
|
{{/with}}
|
||||||
|
|
||||||
@@ -106,7 +106,7 @@
|
|||||||
|
|
||||||
{{#with declaration.children}}
|
{{#with declaration.children}}
|
||||||
|
|
||||||
{{{typeDeclarationMembers}}}
|
{{{typeDeclarationMembers sectionTitle=../../name}}}
|
||||||
|
|
||||||
{{/with}}
|
{{/with}}
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -34,7 +34,7 @@ ___
|
|||||||
|
|
||||||
{{#with children}}
|
{{#with children}}
|
||||||
|
|
||||||
{{{parameterComponent}}}
|
{{{parameterComponent sectionTitle=../owningReflection.name}}}
|
||||||
|
|
||||||
{{/with}}
|
{{/with}}
|
||||||
|
|
||||||
@@ -86,7 +86,7 @@ ___
|
|||||||
|
|
||||||
{{#with children}}
|
{{#with children}}
|
||||||
|
|
||||||
{{{parameterComponent}}}
|
{{{parameterComponent sectionTitle=../owningReflection.name}}}
|
||||||
|
|
||||||
{{/with}}
|
{{/with}}
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -32,7 +32,7 @@
|
|||||||
|
|
||||||
{{#with model.typeParameters}}
|
{{#with model.typeParameters}}
|
||||||
|
|
||||||
{{{typeParameter}}}
|
{{{typeParameter sectionTitle=../model.name}}}
|
||||||
|
|
||||||
{{/with}}
|
{{/with}}
|
||||||
|
|
||||||
|
|||||||
+3
-1
@@ -3,6 +3,7 @@ import { Parameter } from "../types"
|
|||||||
type FormatParameterComponentProps = {
|
type FormatParameterComponentProps = {
|
||||||
parameterComponent: string | undefined
|
parameterComponent: string | undefined
|
||||||
componentItems: Parameter[]
|
componentItems: Parameter[]
|
||||||
|
sectionTitle: string
|
||||||
extraProps?: Record<string, unknown>
|
extraProps?: Record<string, unknown>
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -43,6 +44,7 @@ export function formatParameterComponent({
|
|||||||
parameterComponent,
|
parameterComponent,
|
||||||
componentItems,
|
componentItems,
|
||||||
extraProps,
|
extraProps,
|
||||||
|
sectionTitle,
|
||||||
}: FormatParameterComponentProps): string {
|
}: FormatParameterComponentProps): string {
|
||||||
let extraPropsArr: string[] = []
|
let extraPropsArr: string[] = []
|
||||||
if (extraProps) {
|
if (extraProps) {
|
||||||
@@ -54,5 +56,5 @@ export function formatParameterComponent({
|
|||||||
componentItems = sortComponentItems(componentItems)
|
componentItems = sortComponentItems(componentItems)
|
||||||
return `<${parameterComponent} parameters={${JSON.stringify(
|
return `<${parameterComponent} parameters={${JSON.stringify(
|
||||||
componentItems
|
componentItems
|
||||||
)}} ${extraPropsArr.join(" ")}/>`
|
)}} ${extraPropsArr.join(" ")} sectionTitle="${sectionTitle}"/>`
|
||||||
}
|
}
|
||||||
@@ -1,34 +1,53 @@
|
|||||||
import {
|
import {
|
||||||
|
CopyButton,
|
||||||
DetailsSummary,
|
DetailsSummary,
|
||||||
ExpandableNotice,
|
ExpandableNotice,
|
||||||
FeatureFlagNotice,
|
FeatureFlagNotice,
|
||||||
InlineCode,
|
InlineCode,
|
||||||
MarkdownContent,
|
MarkdownContent,
|
||||||
} from "docs-ui"
|
} from "docs-ui"
|
||||||
import React from "react"
|
import React, { useEffect, useMemo, useRef, useState } from "react"
|
||||||
import Details from "../../../theme/Details"
|
import Details from "../../../theme/Details"
|
||||||
import clsx from "clsx"
|
import clsx from "clsx"
|
||||||
import { Parameter } from ".."
|
import { Parameter } from ".."
|
||||||
import {
|
import {
|
||||||
ArrowDownLeftMini,
|
ArrowDownLeftMini,
|
||||||
ArrowsPointingOutMini,
|
ArrowsPointingOutMini,
|
||||||
|
Link,
|
||||||
TriangleRightMini,
|
TriangleRightMini,
|
||||||
} from "@medusajs/icons"
|
} from "@medusajs/icons"
|
||||||
import IconFlagMini from "../../../theme/Icon/FlagMini"
|
import IconFlagMini from "../../../theme/Icon/FlagMini"
|
||||||
import decodeStr from "../../../utils/decode-str"
|
import decodeStr from "../../../utils/decode-str"
|
||||||
|
import { useLocation } from "@docusaurus/router"
|
||||||
|
import useDocusaurusContext from "@docusaurus/useDocusaurusContext"
|
||||||
|
import isInView from "../../../utils/is-in-view"
|
||||||
|
|
||||||
type ParameterTypesItemsProps = {
|
type CommonProps = {
|
||||||
parameters: Parameter[]
|
|
||||||
level?: number
|
level?: number
|
||||||
expandUrl?: string
|
expandUrl?: string
|
||||||
|
sectionTitle?: string
|
||||||
}
|
}
|
||||||
|
|
||||||
const ParameterTypesItems = ({
|
type ParameterTypesItemProps = {
|
||||||
parameters,
|
parameter: Parameter
|
||||||
|
elementKey: number
|
||||||
|
} & CommonProps &
|
||||||
|
React.AllHTMLAttributes<HTMLDivElement>
|
||||||
|
|
||||||
|
const ParameterTypesItem = ({
|
||||||
|
parameter,
|
||||||
level = 1,
|
level = 1,
|
||||||
expandUrl,
|
expandUrl,
|
||||||
}: ParameterTypesItemsProps) => {
|
elementKey,
|
||||||
function getGroupName() {
|
sectionTitle,
|
||||||
|
}: ParameterTypesItemProps) => {
|
||||||
|
const location = useLocation()
|
||||||
|
|
||||||
|
const {
|
||||||
|
siteConfig: { url },
|
||||||
|
} = useDocusaurusContext()
|
||||||
|
|
||||||
|
const groupName = useMemo(() => {
|
||||||
switch (level) {
|
switch (level) {
|
||||||
case 1:
|
case 1:
|
||||||
return "group/parameterOne"
|
return "group/parameterOne"
|
||||||
@@ -39,8 +58,8 @@ const ParameterTypesItems = ({
|
|||||||
case 4:
|
case 4:
|
||||||
return "group/parameterFour"
|
return "group/parameterFour"
|
||||||
}
|
}
|
||||||
}
|
}, [level])
|
||||||
function getBorderForGroupName() {
|
const borderForGroupName = useMemo(() => {
|
||||||
switch (level) {
|
switch (level) {
|
||||||
case 1:
|
case 1:
|
||||||
return "group-open/parameterOne:border-solid group-open/parameterOne:border-0 group-open/parameterOne:border-b"
|
return "group-open/parameterOne:border-solid group-open/parameterOne:border-0 group-open/parameterOne:border-b"
|
||||||
@@ -51,8 +70,8 @@ const ParameterTypesItems = ({
|
|||||||
case 4:
|
case 4:
|
||||||
return "group-open/parameterFour:border-solid group-open/parameterFour:border-0 group-open/parameterFour:border-b"
|
return "group-open/parameterFour:border-solid group-open/parameterFour:border-0 group-open/parameterFour:border-b"
|
||||||
}
|
}
|
||||||
}
|
}, [level])
|
||||||
function getRotateForGroupName() {
|
const rotateForGroupName = useMemo(() => {
|
||||||
switch (level) {
|
switch (level) {
|
||||||
case 1:
|
case 1:
|
||||||
return "group-open/parameterOne:rotate-90"
|
return "group-open/parameterOne:rotate-90"
|
||||||
@@ -63,15 +82,52 @@ const ParameterTypesItems = ({
|
|||||||
case 4:
|
case 4:
|
||||||
return "group-open/parameterFour:rotate-90"
|
return "group-open/parameterFour:rotate-90"
|
||||||
}
|
}
|
||||||
}
|
}, [level])
|
||||||
function getItemClassNames(details = true) {
|
function getItemClassNames(details = true) {
|
||||||
return clsx(
|
return clsx(
|
||||||
"odd:[&:not(:first-child):not(:last-child)]:!border-y last:not(:first-child):!border-t",
|
"odd:[&:not(:first-child):not(:last-child)]:!border-y last:not(:first-child):!border-t",
|
||||||
"first:!border-t-0 first:not(:last-child):!border-b last:!border-b-0 even:!border-y-0",
|
"first:!border-t-0 first:not(:last-child):!border-b last:!border-b-0 even:!border-y-0",
|
||||||
details && getGroupName(),
|
details && groupName,
|
||||||
!details && getBorderForGroupName()
|
!details && borderForGroupName
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
const formatId = (str: string) => {
|
||||||
|
return str.replaceAll(" ", "_")
|
||||||
|
}
|
||||||
|
const parameterId = useMemo(() => {
|
||||||
|
return sectionTitle
|
||||||
|
? `#${formatId(sectionTitle)}-${formatId(
|
||||||
|
parameter.name
|
||||||
|
)}-${level}-${elementKey}`
|
||||||
|
: ""
|
||||||
|
}, [sectionTitle, parameter, elementKey])
|
||||||
|
const parameterPath = useMemo(
|
||||||
|
() => `${location.pathname}${parameterId}`,
|
||||||
|
[location, parameterId]
|
||||||
|
)
|
||||||
|
const parameterUrl = useMemo(
|
||||||
|
() => `${url}${parameterPath}`,
|
||||||
|
[url, parameterPath]
|
||||||
|
)
|
||||||
|
|
||||||
|
const ref = useRef<HTMLDivElement>()
|
||||||
|
const [isSelected, setIsSelected] = useState(false)
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (!parameterId.length) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
const shouldScroll = location.hash === parameterId
|
||||||
|
if (shouldScroll && !isSelected && ref.current && !isInView(ref.current)) {
|
||||||
|
ref.current.scrollIntoView({
|
||||||
|
block: "center",
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
setIsSelected(shouldScroll)
|
||||||
|
}, [parameterId])
|
||||||
|
|
||||||
function getSummary(parameter: Parameter, nested = true) {
|
function getSummary(parameter: Parameter, nested = true) {
|
||||||
return (
|
return (
|
||||||
<DetailsSummary
|
<DetailsSummary
|
||||||
@@ -102,7 +158,8 @@ const ParameterTypesItems = ({
|
|||||||
level === 2 && "pl-3",
|
level === 2 && "pl-3",
|
||||||
level === 3 && "pl-[120px]",
|
level === 3 && "pl-[120px]",
|
||||||
level === 4 && "pl-[160px]",
|
level === 4 && "pl-[160px]",
|
||||||
!nested && "cursor-default"
|
!nested && "cursor-default",
|
||||||
|
isSelected && "animate-flash animate-bg-surface"
|
||||||
)}
|
)}
|
||||||
onClick={(e) => {
|
onClick={(e) => {
|
||||||
const targetElm = e.target as HTMLElement
|
const targetElm = e.target as HTMLElement
|
||||||
@@ -112,13 +169,15 @@ const ParameterTypesItems = ({
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
}}
|
}}
|
||||||
|
summaryRef={!nested ? ref : undefined}
|
||||||
|
id={!nested && parameterId ? parameterId : ""}
|
||||||
>
|
>
|
||||||
<div className="flex gap-0.5">
|
<div className="flex gap-0.5">
|
||||||
{nested && (
|
{nested && (
|
||||||
<TriangleRightMini
|
<TriangleRightMini
|
||||||
className={clsx(
|
className={clsx(
|
||||||
"text-medusa-fg-subtle transition-transform",
|
"text-medusa-fg-subtle transition-transform",
|
||||||
getRotateForGroupName()
|
rotateForGroupName
|
||||||
)}
|
)}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
@@ -127,6 +186,21 @@ const ParameterTypesItems = ({
|
|||||||
className={clsx("text-medusa-fg-subtle flip-y")}
|
className={clsx("text-medusa-fg-subtle flip-y")}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
|
{level === 1 && parameterId.length > 0 && (
|
||||||
|
<CopyButton
|
||||||
|
text={parameterUrl}
|
||||||
|
onCopy={(e: React.MouseEvent<HTMLSpanElement, MouseEvent>) => {
|
||||||
|
e.preventDefault()
|
||||||
|
e.stopPropagation()
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<Link
|
||||||
|
className={clsx(
|
||||||
|
"text-medusa-fg-interactive hover:text-medusa-fg-interactive-hover"
|
||||||
|
)}
|
||||||
|
/>
|
||||||
|
</CopyButton>
|
||||||
|
)}
|
||||||
<div className="flex gap-0.75 flex-wrap">
|
<div className="flex gap-0.75 flex-wrap">
|
||||||
<InlineCode>{decodeStr(parameter.name)}</InlineCode>
|
<InlineCode>{decodeStr(parameter.name)}</InlineCode>
|
||||||
<span className="font-monospace text-compact-small-plus text-medusa-fg-subtle">
|
<span className="font-monospace text-compact-small-plus text-medusa-fg-subtle">
|
||||||
@@ -168,17 +242,15 @@ const ParameterTypesItems = ({
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
|
||||||
<div>
|
|
||||||
{parameters.map((parameter, key) => {
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
{parameter.children?.length > 0 && (
|
{parameter.children?.length > 0 && (
|
||||||
<Details
|
<Details
|
||||||
summary={getSummary(parameter)}
|
summary={getSummary(parameter)}
|
||||||
key={key}
|
|
||||||
className={clsx(getItemClassNames())}
|
className={clsx(getItemClassNames())}
|
||||||
heightAnimation={true}
|
heightAnimation={true}
|
||||||
|
ref={ref}
|
||||||
|
id={parameterId ? parameterId : ""}
|
||||||
>
|
>
|
||||||
{parameter.children && (
|
{parameter.children && (
|
||||||
<ParameterTypesItems
|
<ParameterTypesItems
|
||||||
@@ -189,11 +261,29 @@ const ParameterTypesItems = ({
|
|||||||
)}
|
)}
|
||||||
</Details>
|
</Details>
|
||||||
)}
|
)}
|
||||||
{(parameter.children?.length || 0) === 0 &&
|
{(parameter.children?.length || 0) === 0 && getSummary(parameter, false)}
|
||||||
getSummary(parameter, false)}
|
|
||||||
</>
|
</>
|
||||||
)
|
)
|
||||||
})}
|
}
|
||||||
|
|
||||||
|
type ParameterTypesItemsProps = {
|
||||||
|
parameters: Parameter[]
|
||||||
|
} & CommonProps
|
||||||
|
|
||||||
|
const ParameterTypesItems = ({
|
||||||
|
parameters,
|
||||||
|
...rest
|
||||||
|
}: ParameterTypesItemsProps) => {
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
{parameters.map((parameter, key) => (
|
||||||
|
<ParameterTypesItem
|
||||||
|
parameter={parameter}
|
||||||
|
key={key}
|
||||||
|
elementKey={key}
|
||||||
|
{...rest}
|
||||||
|
/>
|
||||||
|
))}
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ export type Parameter = {
|
|||||||
type ParameterTypesType = {
|
type ParameterTypesType = {
|
||||||
parameters: Parameter[]
|
parameters: Parameter[]
|
||||||
expandUrl?: string
|
expandUrl?: string
|
||||||
|
sectionTitle?: string
|
||||||
} & React.HTMLAttributes<HTMLDivElement>
|
} & React.HTMLAttributes<HTMLDivElement>
|
||||||
|
|
||||||
const ParameterTypesItems = lazy(async () => import("./Items"))
|
const ParameterTypesItems = lazy(async () => import("./Items"))
|
||||||
@@ -34,6 +35,7 @@ const ParameterTypes = ({
|
|||||||
<ParameterTypesItems
|
<ParameterTypesItems
|
||||||
parameters={parameters}
|
parameters={parameters}
|
||||||
expandUrl={props.expandUrl}
|
expandUrl={props.expandUrl}
|
||||||
|
sectionTitle={props.sectionTitle}
|
||||||
/>
|
/>
|
||||||
</Suspense>
|
</Suspense>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -0,0 +1,10 @@
|
|||||||
|
export default function isInView(element: Element): boolean {
|
||||||
|
const rect = element.getBoundingClientRect()
|
||||||
|
return (
|
||||||
|
rect.top >= 0 &&
|
||||||
|
rect.left >= 0 &&
|
||||||
|
rect.bottom <=
|
||||||
|
(window.innerHeight || document.documentElement.clientHeight) &&
|
||||||
|
rect.right <= (window.innerWidth || document.documentElement.clientWidth)
|
||||||
|
)
|
||||||
|
}
|
||||||
@@ -10,7 +10,8 @@ export type CopyButtonProps = {
|
|||||||
buttonClassName?: string
|
buttonClassName?: string
|
||||||
tooltipClassName?: string
|
tooltipClassName?: string
|
||||||
tooltipText?: string
|
tooltipText?: string
|
||||||
} & React.HTMLAttributes<HTMLDivElement>
|
onCopy?: (e: React.MouseEvent<HTMLSpanElement, MouseEvent>) => void
|
||||||
|
} & Omit<React.HTMLAttributes<HTMLDivElement>, "onCopy">
|
||||||
|
|
||||||
export const CopyButton = ({
|
export const CopyButton = ({
|
||||||
text,
|
text,
|
||||||
@@ -19,6 +20,7 @@ export const CopyButton = ({
|
|||||||
tooltipText = "Copy to Clipboard",
|
tooltipText = "Copy to Clipboard",
|
||||||
children,
|
children,
|
||||||
className,
|
className,
|
||||||
|
onCopy,
|
||||||
}: CopyButtonProps) => {
|
}: CopyButtonProps) => {
|
||||||
const { isCopied, handleCopy } = useCopy(text)
|
const { isCopied, handleCopy } = useCopy(text)
|
||||||
|
|
||||||
@@ -30,7 +32,10 @@ export const CopyButton = ({
|
|||||||
>
|
>
|
||||||
<span
|
<span
|
||||||
className={clsx("cursor-pointer", buttonClassName)}
|
className={clsx("cursor-pointer", buttonClassName)}
|
||||||
onClick={handleCopy}
|
onClick={(e) => {
|
||||||
|
onCopy?.(e)
|
||||||
|
handleCopy()
|
||||||
|
}}
|
||||||
>
|
>
|
||||||
{children}
|
{children}
|
||||||
</span>
|
</span>
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ export type DetailsSummaryProps = {
|
|||||||
className?: string
|
className?: string
|
||||||
titleClassName?: string
|
titleClassName?: string
|
||||||
hideExpandableIcon?: boolean
|
hideExpandableIcon?: boolean
|
||||||
|
summaryRef?: React.LegacyRef<HTMLDivElement>
|
||||||
} & Omit<React.HTMLAttributes<HTMLElement>, "title">
|
} & Omit<React.HTMLAttributes<HTMLElement>, "title">
|
||||||
|
|
||||||
export const DetailsSummary = ({
|
export const DetailsSummary = ({
|
||||||
@@ -23,6 +24,7 @@ export const DetailsSummary = ({
|
|||||||
className,
|
className,
|
||||||
titleClassName,
|
titleClassName,
|
||||||
hideExpandableIcon = false,
|
hideExpandableIcon = false,
|
||||||
|
summaryRef,
|
||||||
...rest
|
...rest
|
||||||
}: DetailsSummaryProps) => {
|
}: DetailsSummaryProps) => {
|
||||||
return (
|
return (
|
||||||
@@ -36,6 +38,7 @@ export const DetailsSummary = ({
|
|||||||
"no-marker",
|
"no-marker",
|
||||||
className
|
className
|
||||||
)}
|
)}
|
||||||
|
ref={summaryRef}
|
||||||
{...rest}
|
{...rest}
|
||||||
>
|
>
|
||||||
<span className="gap-docs_0.25 flex flex-col">
|
<span className="gap-docs_0.25 flex flex-col">
|
||||||
|
|||||||
@@ -577,6 +577,17 @@ module.exports = {
|
|||||||
transform: "scale(1)",
|
transform: "scale(1)",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
flash: {
|
||||||
|
"0%": {
|
||||||
|
backgroundColor: "transparent",
|
||||||
|
},
|
||||||
|
"50%": {
|
||||||
|
backgroundColor: "var(--animation-color)",
|
||||||
|
},
|
||||||
|
"100%": {
|
||||||
|
backgroundColor: "transparent",
|
||||||
|
},
|
||||||
|
},
|
||||||
}),
|
}),
|
||||||
animation: {
|
animation: {
|
||||||
fadeIn: "fadeIn 500ms",
|
fadeIn: "fadeIn 500ms",
|
||||||
@@ -595,6 +606,7 @@ module.exports = {
|
|||||||
pulsingDots: "pulsingDots 1s alternate infinite",
|
pulsingDots: "pulsingDots 1s alternate infinite",
|
||||||
minimize: "minimize 500ms",
|
minimize: "minimize 500ms",
|
||||||
maximize: "maximize 500ms",
|
maximize: "maximize 500ms",
|
||||||
|
flash: "flash 1500ms 1",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
fontFamily: {
|
fontFamily: {
|
||||||
@@ -708,6 +720,9 @@ module.exports = {
|
|||||||
".flip-y": {
|
".flip-y": {
|
||||||
transform: "rotateY(180deg)",
|
transform: "rotateY(180deg)",
|
||||||
},
|
},
|
||||||
|
".animate-bg-surface": {
|
||||||
|
"--animation-color": "var(--docs-bg-subtle-pressed)",
|
||||||
|
},
|
||||||
})
|
})
|
||||||
addComponents({
|
addComponents({
|
||||||
".btn-secondary-icon": {
|
".btn-secondary-icon": {
|
||||||
|
|||||||
Reference in new issue
Block a user