File tree Expand file tree Collapse file tree 7 files changed +79
-26
lines changed Expand file tree Collapse file tree 7 files changed +79
-26
lines changed Original file line number Diff line number Diff line change @@ -57,7 +57,7 @@ export const FuncTemplate: FC<FuncTemplateProps> = ({
5757 </ h2 >
5858
5959 < div class = "mb-6" >
60- < FunctionDefinition func = { content } prefix = { content . name } />
60+ < FunctionDefinition func = { content } />
6161 </ div >
6262
6363 { content . example && (
@@ -67,7 +67,7 @@ export const FuncTemplate: FC<FuncTemplateProps> = ({
6767 ) }
6868
6969 < div class = "my-6" >
70- < FunctionParameters func = { content } prefix = { content . name } />
70+ < FunctionParameters func = { content } />
7171 </ div >
7272
7373 { content . scope . length > 0 && (
Original file line number Diff line number Diff line change @@ -41,7 +41,7 @@ export const GroupTemplate: FC<GroupTemplateProps> = ({
4141
4242 { content . functions . map ( ( method , index ) => (
4343 < div key = { method . name } >
44- < h3 id = { `definitions -${ method . name } ` } class = "method-head" >
44+ < h3 id = { `functions -${ method . name } ` } class = "method-head" >
4545 < code class = "text-base font-medium" > { method . name } </ code >
4646 < div class = "flex flex-wrap items-center gap-2 text-sm" >
4747 { method . element && < Tooltip kind = "element" /> }
@@ -50,7 +50,7 @@ export const GroupTemplate: FC<GroupTemplateProps> = ({
5050 </ h3 >
5151 < FunctionDisplay
5252 func = { method }
53- prefix = { `definitions -${ method . name } ` }
53+ prefix = { `functions -${ method . name } ` }
5454 isExampleFolding = { false }
5555 />
5656 </ div >
Original file line number Diff line number Diff line change @@ -2,16 +2,21 @@ import type { FC } from "hono/jsx";
22import type { Func } from "../../types/model" ;
33import { TypeIcon } from "./TypeIcon" ;
44import { genPath } from "./genPath" ;
5- import { type2href } from "./type2href" ;
5+ import { buildParamId , type2href } from "./type2href" ;
66
77type FunctionDefinitionProps = {
88 func : Func ;
9- prefix ?: string ;
9+ /**
10+ * The prefix for parameter IDs
11+ *
12+ * See `buildParamId`.
13+ */
14+ prefix ?: string | undefined ;
1015} ;
1116
1217export const FunctionDefinition : FC < FunctionDefinitionProps > = ( {
1318 func,
14- prefix = "" ,
19+ prefix = undefined ,
1520} ) => {
1621 return (
1722 < div class = "bg-gray-50 p-4 rounded-md border border-gray-100 overflow-x-auto" >
@@ -28,7 +33,7 @@ export const FunctionDefinition: FC<FunctionDefinitionProps> = ({
2833 { ! param . positional && (
2934 < div class = "flex-shrink-0" >
3035 < a
31- href = { `#${ prefix } - ${ func . name } -parameters- ${ param . name } ` }
36+ href = { `#${ buildParamId ( param . name , prefix ) } ` }
3237 class = "text-gray-800 hover:text-blue-500 transition-colors mr-1"
3338 >
3439 < span class = "font-medium" > { param . name } </ span >
Original file line number Diff line number Diff line change @@ -7,13 +7,18 @@ import { HtmlContent } from "./HtmlContent";
77
88type FunctionDisplayProps = {
99 func : Func ;
10- prefix ?: string ;
10+ /**
11+ * The prefix for IDs of function parameters
12+ *
13+ * See `buildParamId`.
14+ */
15+ prefix ?: string | undefined ;
1116 isExampleFolding ?: boolean ;
1217} ;
1318
1419export const FunctionDisplay : FC < FunctionDisplayProps > = ( {
1520 func,
16- prefix = "" ,
21+ prefix = undefined ,
1722 isExampleFolding = true ,
1823} ) => {
1924 return (
Original file line number Diff line number Diff line change @@ -4,16 +4,21 @@ import { ChevronRightIcon } from "../icons";
44import { HtmlContent } from "./HtmlContent" ;
55import { Tooltip } from "./Tooltip" ;
66import { TypeIcon } from "./TypeIcon" ;
7- import { type2href } from "./type2href" ;
7+ import { buildParamId , type2href } from "./type2href" ;
88
99type FunctionParametersProps = {
1010 func : Func ;
11- prefix ?: string ;
11+ /**
12+ * The prefix for IDs
13+ *
14+ * See `buildParamId`.
15+ */
16+ prefix ?: string | undefined ;
1217} ;
1318
1419export const FunctionParameters : FC < FunctionParametersProps > = ( {
1520 func,
16- prefix = "" ,
21+ prefix = undefined ,
1722} ) => {
1823 return (
1924 < div class = "space-y-6" >
@@ -23,7 +28,7 @@ export const FunctionParameters: FC<FunctionParametersProps> = ({
2328 class = "bg-gray-50 rounded-md p-4 border border-gray-100"
2429 >
2530 < h4
26- id = { ` ${ prefix } - ${ func . name } -parameters- ${ param . name } ` }
31+ id = { buildParamId ( param . name , prefix ) }
2732 class = "flex flex-wrap items-center gap-2 mb-3"
2833 >
2934 < code class = "text-base font-medium" > { param . name } </ code >
Original file line number Diff line number Diff line change @@ -4,6 +4,30 @@ export type TableOfContentsProps = {
44 outline : OutlineItem [ ] ;
55} ;
66
7+ const PlainTableOfContents = ( {
8+ outline,
9+ topLevel = false ,
10+ } : TableOfContentsProps & { topLevel ?: boolean } ) => {
11+ return (
12+ // Indent for succeeding levels
13+ < ol class = { `space-y-1 ${ ! topLevel && "pl-4" } text-sm text-neutral-700` } >
14+ { outline . map ( ( item ) => (
15+ < li key = { item . id } data-assoc = { item . id } >
16+ < a
17+ href = { `#${ item . id } ` }
18+ class = "block px-2 py-1 rounded hover:bg-neutral-100 transition-colors"
19+ >
20+ { item . name }
21+ </ a >
22+ { item . children . length > 0 && (
23+ < PlainTableOfContents outline = { item . children } />
24+ ) }
25+ </ li >
26+ ) ) }
27+ </ ol >
28+ ) ;
29+ } ;
30+
731export const TableOfContents = ( { outline } : TableOfContentsProps ) => {
832 if ( outline . length === 0 ) {
933 return null ;
@@ -17,18 +41,7 @@ export const TableOfContents = ({ outline }: TableOfContentsProps) => {
1741 < strong class = "block mb-2 text-sm text-neutral-500 font-semibold tracking-wide" >
1842 目次
1943 </ strong >
20- < ol class = "space-y-1 text-sm text-neutral-700" >
21- { outline . map ( ( item ) => (
22- < li key = { item . id } data-assoc = { item . id } >
23- < a
24- href = { `#${ item . id } ` }
25- class = "block px-2 py-1 rounded hover:bg-neutral-100 transition-colors"
26- >
27- { item . name }
28- </ a >
29- </ li >
30- ) ) }
31- </ ol >
44+ < PlainTableOfContents outline = { outline } topLevel = { true } />
3245 </ nav >
3346 ) ;
3447} ;
Original file line number Diff line number Diff line change @@ -58,3 +58,28 @@ export const type2href = (parameterType: string): string | null => {
5858 }
5959 return null ;
6060} ;
61+
62+ /**
63+ * Build the ID of a parameter with prefix
64+ *
65+ * If the parameter belongs to a top-level function on a page, leave `prefix` empty;
66+ * Otherwise, set it to an appropriate prefix.
67+ *
68+ * ## Example values of `prefix`
69+ *
70+ * | Page (kind) | Function | Parameter | `prefix` |
71+ * | ------------------- | ---------------- | ---------- | ----------------------- |
72+ * | `figure` (function) | `figure` | `body` | `undefined` |
73+ * | `figure` (function) | `figure.caption` | `body` | `"definitions-caption"` |
74+ * | `calc` (group) | `calc.abs` | `value` | `"functions-abs"` |
75+ * | `array` (type) | `array.at` | `index` | `"definitions-at"` |
76+ * | `array` (type) | Constructor | `value` | `"constructor"` |
77+ */
78+ export function buildParamId (
79+ parameterName : string ,
80+ prefix : string | undefined ,
81+ ) : string {
82+ return prefix === undefined
83+ ? `parameters-${ parameterName } `
84+ : `${ prefix } -${ parameterName } ` ;
85+ }
You can’t perform that action at this time.
0 commit comments