15b6cd93dSBartosz Kaszubowskiimport { css } from '@emotion/react'; 2f4b1168bSBartosz Kaszubowskiimport { shadows, theme, typography } from '@expo/styleguide'; 3f4b1168bSBartosz Kaszubowskiimport { borderRadius, breakpoints, spacing } from '@expo/styleguide-base'; 4a16a3d18SBartosz Kaszubowskiimport type { ComponentProps, ComponentType } from 'react'; 512abeb84SBartosz Kaszubowskiimport { Fragment } from 'react'; 6299f02f2SBartosz Kaszubowskiimport ReactMarkdown from 'react-markdown'; 7dc379e46SBartosz Kaszubowskiimport remarkGfm from 'remark-gfm'; 8299f02f2SBartosz Kaszubowski 9f8204ef0SBartosz Kaszubowskiimport { APIDataType } from './APIDataType'; 10f8204ef0SBartosz Kaszubowski 11a16a3d18SBartosz Kaszubowskiimport { HeadingType } from '~/common/headingManager'; 1212abeb84SBartosz Kaszubowskiimport { Code as PrismCodeBlock } from '~/components/base/code'; 13299f02f2SBartosz Kaszubowskiimport { 145990cc31SBartosz Kaszubowski CommentContentData, 15299f02f2SBartosz Kaszubowski CommentData, 16adede39aSŁukasz Kosmaty MethodDefinitionData, 17299f02f2SBartosz Kaszubowski MethodParamData, 18b15ebaf2SBartosz Kaszubowski MethodSignatureData, 19f52aa21eSBartosz Kaszubowski PropData, 20299f02f2SBartosz Kaszubowski TypeDefinitionData, 21b15ebaf2SBartosz Kaszubowski TypePropertyDataFlags, 225990cc31SBartosz Kaszubowski TypeSignaturesData, 23299f02f2SBartosz Kaszubowski} from '~/components/plugins/api/APIDataTypes'; 24b3bd70ceSTomasz Sapetaimport { APISectionPlatformTags } from '~/components/plugins/api/APISectionPlatformTags'; 25d9bd5b6cSBartosz Kaszubowskiimport { Callout } from '~/ui/components/Callout'; 266a5c065cSBartosz Kaszubowskiimport { Cell, HeaderCell, Row, Table, TableHead } from '~/ui/components/Table'; 276a5c065cSBartosz Kaszubowskiimport { tableWrapperStyle } from '~/ui/components/Table/Table'; 28a0c5fbc5SBartosz Kaszubowskiimport { Tag } from '~/ui/components/Tag'; 29a16a3d18SBartosz Kaszubowskiimport { 30a16a3d18SBartosz Kaszubowski A, 31a16a3d18SBartosz Kaszubowski BOLD, 32a16a3d18SBartosz Kaszubowski CODE, 33a16a3d18SBartosz Kaszubowski H4, 34a16a3d18SBartosz Kaszubowski LI, 35a16a3d18SBartosz Kaszubowski OL, 36a16a3d18SBartosz Kaszubowski P, 37a16a3d18SBartosz Kaszubowski RawH3, 38a16a3d18SBartosz Kaszubowski RawH4, 39a16a3d18SBartosz Kaszubowski UL, 40a16a3d18SBartosz Kaszubowski createPermalinkedComponent, 41be43ea08SBartosz Kaszubowski DEMI, 42be43ea08SBartosz Kaszubowski CALLOUT, 43be43ea08SBartosz Kaszubowski createTextComponent, 44a16a3d18SBartosz Kaszubowski} from '~/ui/components/Text'; 45be43ea08SBartosz Kaszubowskiimport { TextElement } from '~/ui/components/Text/types'; 46299f02f2SBartosz Kaszubowski 47a7112dadSBartosz Kaszubowskiconst isDev = process.env.NODE_ENV === 'development'; 48a7112dadSBartosz Kaszubowski 49299f02f2SBartosz Kaszubowskiexport enum TypeDocKind { 506b7802baSBartosz Kaszubowski Namespace = 4, 51c8c9d6e8SBartosz Kaszubowski Enum = 8, 52299f02f2SBartosz Kaszubowski Variable = 32, 53299f02f2SBartosz Kaszubowski Function = 64, 54299f02f2SBartosz Kaszubowski Class = 128, 55299f02f2SBartosz Kaszubowski Interface = 256, 56299f02f2SBartosz Kaszubowski Property = 1024, 572c8d37c0SBartosz Kaszubowski Method = 2048, 58a116a546SBartosz Kaszubowski Parameter = 32768, 596b7802baSBartosz Kaszubowski Accessor = 262144, 60299f02f2SBartosz Kaszubowski TypeAlias = 4194304, 61299f02f2SBartosz Kaszubowski} 62299f02f2SBartosz Kaszubowski 6312abeb84SBartosz Kaszubowskiexport type MDComponents = ComponentProps<typeof ReactMarkdown>['components']; 6484745a05SBartosz Kaszubowski 65a7112dadSBartosz Kaszubowskiconst getInvalidLinkMessage = (href: string) => 66a7112dadSBartosz Kaszubowski `Using "../" when linking other packages in doc comments produce a broken link! Please use "./" instead. Problematic link:\n\t${href}`; 67a7112dadSBartosz Kaszubowski 68dc379e46SBartosz Kaszubowskiexport const mdComponents: MDComponents = { 69d9bd5b6cSBartosz Kaszubowski blockquote: ({ children }) => <Callout>{children}</Callout>, 70c8c9d6e8SBartosz Kaszubowski code: ({ children, className }) => 7112abeb84SBartosz Kaszubowski className ? ( 7212abeb84SBartosz Kaszubowski <PrismCodeBlock className={className}>{children}</PrismCodeBlock> 7312abeb84SBartosz Kaszubowski ) : ( 7412abeb84SBartosz Kaszubowski <CODE css={css({ display: 'inline' })}>{children}</CODE> 7512abeb84SBartosz Kaszubowski ), 76dc379e46SBartosz Kaszubowski h1: ({ children }) => <H4>{children}</H4>, 77f4b1168bSBartosz Kaszubowski ul: ({ children }) => <UL className={ELEMENT_SPACING}>{children}</UL>, 78f4b1168bSBartosz Kaszubowski ol: ({ children }) => <OL className={ELEMENT_SPACING}>{children}</OL>, 79dc379e46SBartosz Kaszubowski li: ({ children }) => <LI>{children}</LI>, 80a7112dadSBartosz Kaszubowski a: ({ href, children }) => { 81a7112dadSBartosz Kaszubowski if ( 82a7112dadSBartosz Kaszubowski href?.startsWith('../') && 83a7112dadSBartosz Kaszubowski !href?.startsWith('../..') && 84a7112dadSBartosz Kaszubowski !href?.startsWith('../react-native') 85a7112dadSBartosz Kaszubowski ) { 86a7112dadSBartosz Kaszubowski if (isDev) { 87a7112dadSBartosz Kaszubowski throw new Error(getInvalidLinkMessage(href)); 88a7112dadSBartosz Kaszubowski } else { 89a7112dadSBartosz Kaszubowski console.warn(getInvalidLinkMessage(href)); 90a7112dadSBartosz Kaszubowski } 91a7112dadSBartosz Kaszubowski } 923c9a6b96SBartosz Kaszubowski return <A href={href}>{children}</A>; 93a7112dadSBartosz Kaszubowski }, 94f4b1168bSBartosz Kaszubowski p: ({ children }) => (children ? <P className={ELEMENT_SPACING}>{children}</P> : null), 953c9a6b96SBartosz Kaszubowski strong: ({ children }) => <BOLD>{children}</BOLD>, 96dc379e46SBartosz Kaszubowski span: ({ children }) => (children ? <span>{children}</span> : null), 973e972ef8SBartosz Kaszubowski table: ({ children }) => <Table>{children}</Table>, 983e972ef8SBartosz Kaszubowski thead: ({ children }) => <TableHead>{children}</TableHead>, 993e972ef8SBartosz Kaszubowski tr: ({ children }) => <Row>{children}</Row>, 1003e972ef8SBartosz Kaszubowski th: ({ children }) => <HeaderCell>{children}</HeaderCell>, 1013e972ef8SBartosz Kaszubowski td: ({ children }) => <Cell>{children}</Cell>, 102299f02f2SBartosz Kaszubowski}; 103299f02f2SBartosz Kaszubowski 104f6311d0dSBartosz Kaszubowskiexport const mdComponentsNoValidation: MDComponents = { 105dc379e46SBartosz Kaszubowski ...mdComponents, 1063c9a6b96SBartosz Kaszubowski a: ({ href, children }) => <A href={href}>{children}</A>, 1073f609562SBartosz Kaszubowski}; 1083f609562SBartosz Kaszubowski 1091ef472c3SBartosz Kaszubowskiconst nonLinkableTypes = [ 110f52aa21eSBartosz Kaszubowski 'ColorValue', 111f31f564bSBartosz Kaszubowski 'Component', 11213032b48SBartosz Kaszubowski 'ComponentClass', 1136d4adf53STomasz Sapeta 'PureComponent', 114c14370d2SBartosz Kaszubowski 'E', 115c14370d2SBartosz Kaszubowski 'EventSubscription', 11635e5274fSBartosz Kaszubowski 'Listener', 117f52aa21eSBartosz Kaszubowski 'NativeSyntheticEvent', 118ad814e56SBartosz Kaszubowski 'ParsedQs', 11942175e80SBartosz Kaszubowski 'ServiceActionResult', 1201ef472c3SBartosz Kaszubowski 'T', 1211ef472c3SBartosz Kaszubowski 'TaskOptions', 1221ef472c3SBartosz Kaszubowski 'Uint8Array', 123ce122823SBartłomiej Bukowski // React & React Native 124ce122823SBartłomiej Bukowski 'React.FC', 125ce122823SBartłomiej Bukowski 'ForwardRefExoticComponent', 126ce122823SBartłomiej Bukowski 'StyleProp', 127fd27228dSBartosz Kaszubowski 'HTMLInputElement', 128a620d75aSBartosz Kaszubowski // Cross-package permissions management 129afd08d69SCedric van Putten 'RequestPermissionMethod', 130afd08d69SCedric van Putten 'GetPermissionMethod', 131a620d75aSBartosz Kaszubowski 'Options', 132a620d75aSBartosz Kaszubowski 'PermissionHookBehavior', 1331ef472c3SBartosz Kaszubowski]; 1341deaefb9SBartosz Kaszubowski 135ce122823SBartłomiej Bukowski/** 136ce122823SBartłomiej Bukowski * List of type names that should not be visible in the docs. 137ce122823SBartłomiej Bukowski */ 138ce122823SBartłomiej Bukowskiconst omittableTypes = [ 139ce122823SBartłomiej Bukowski // Internal React type that adds `ref` prop to the component 140ce122823SBartłomiej Bukowski 'RefAttributes', 141ce122823SBartłomiej Bukowski]; 142ce122823SBartłomiej Bukowski 143ce122823SBartłomiej Bukowski/** 144ce122823SBartłomiej Bukowski * Map of internal names/type names that should be replaced with something more developer-friendly. 145ce122823SBartłomiej Bukowski */ 146ce122823SBartłomiej Bukowskiconst replaceableTypes: Partial<Record<string, string>> = { 147ce122823SBartłomiej Bukowski ForwardRefExoticComponent: 'Component', 148*d2435341SAman Mittal LocationAccuracy: 'Accuracy', 149*d2435341SAman Mittal LocationGeofencingRegionState: 'GeofencingRegionState', 150*d2435341SAman Mittal LocationActivityType: 'ActivityType', 151ce122823SBartłomiej Bukowski}; 152ce122823SBartłomiej Bukowski 1531cefc4ecSBartosz Kaszubowskiconst hardcodedTypeLinks: Record<string, string> = { 1544c73bbf6SBartosz Kaszubowski AVPlaybackSource: '/versions/latest/sdk/av/#avplaybacksource', 1554c73bbf6SBartosz Kaszubowski AVPlaybackStatus: '/versions/latest/sdk/av/#avplaybackstatus', 1564c73bbf6SBartosz Kaszubowski AVPlaybackStatusToSet: '/versions/latest/sdk/av/#avplaybackstatustoset', 15713032b48SBartosz Kaszubowski Blob: 'https://developer.mozilla.org/en-US/docs/Web/API/Blob', 1581cefc4ecSBartosz Kaszubowski Date: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date', 15935e5274fSBartosz Kaszubowski DeviceSensor: '/versions/latest/sdk/sensors', 160144e76edSBartosz Kaszubowski Element: 'https://www.typescriptlang.org/docs/handbook/jsx.html#function-component', 1611cefc4ecSBartosz Kaszubowski Error: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error', 162a116a546SBartosz Kaszubowski ExpoConfig: 163a116a546SBartosz Kaszubowski 'https://github.com/expo/expo/blob/main/packages/%40expo/config-types/src/ExpoConfig.ts', 164faf3d32fSBartosz Kaszubowski File: 'https://developer.mozilla.org/en-US/docs/Web/API/File', 165faf3d32fSBartosz Kaszubowski FileList: 'https://developer.mozilla.org/en-US/docs/Web/API/FileList', 16600b8ce63SBartosz Kaszubowski Manifest: '/versions/latest/sdk/constants/#manifest', 16753a43234SBartosz Kaszubowski MediaTrackSettings: 'https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackSettings', 168ad814e56SBartosz Kaszubowski MessageEvent: 'https://developer.mozilla.org/en-US/docs/Web/API/MessageEvent', 16993e61eefSBartosz Kaszubowski Omit: 'https://www.typescriptlang.org/docs/handbook/utility-types.html#omittype-keys', 17093e61eefSBartosz Kaszubowski Pick: 'https://www.typescriptlang.org/docs/handbook/utility-types.html#picktype-keys', 17193e61eefSBartosz Kaszubowski Partial: 'https://www.typescriptlang.org/docs/handbook/utility-types.html#partialtype', 1721cefc4ecSBartosz Kaszubowski Promise: 1731cefc4ecSBartosz Kaszubowski 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise', 174be71811dSAman Mittal SyntheticEvent: 'https://react.dev/reference/react-dom/components/common#react-event-object', 1755990cc31SBartosz Kaszubowski View: 'https://reactnative.dev/docs/view', 1765990cc31SBartosz Kaszubowski ViewProps: 'https://reactnative.dev/docs/view#props', 1775990cc31SBartosz Kaszubowski ViewStyle: 'https://reactnative.dev/docs/view-style-props', 17813032b48SBartosz Kaszubowski WebGL2RenderingContext: 'https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext', 17913032b48SBartosz Kaszubowski WebGLFramebuffer: 'https://developer.mozilla.org/en-US/docs/Web/API/WebGLFramebuffer', 1801cefc4ecSBartosz Kaszubowski}; 1811cefc4ecSBartosz Kaszubowski 182ce122823SBartłomiej Bukowskiconst renderWithLink = (name: string, type?: string) => { 183ce122823SBartłomiej Bukowski const replacedName = replaceableTypes[name] ?? name; 184ce122823SBartłomiej Bukowski 1856b7802baSBartosz Kaszubowski if (name.includes('.')) return name; 1866b7802baSBartosz Kaszubowski 187ce122823SBartłomiej Bukowski return nonLinkableTypes.includes(replacedName) ? ( 188ce122823SBartłomiej Bukowski replacedName + (type === 'array' ? '[]' : '') 1891cefc4ecSBartosz Kaszubowski ) : ( 1903c9a6b96SBartosz Kaszubowski <A 191ce122823SBartłomiej Bukowski href={hardcodedTypeLinks[replacedName] || `#${replacedName.toLowerCase()}`} 19267ef0fb8SBrent Vatne key={`type-link-${replacedName}`}> 193ce122823SBartłomiej Bukowski {replacedName} 1941cefc4ecSBartosz Kaszubowski {type === 'array' && '[]'} 1953c9a6b96SBartosz Kaszubowski </A> 1961cefc4ecSBartosz Kaszubowski ); 197ce122823SBartłomiej Bukowski}; 1981cefc4ecSBartosz Kaszubowski 199abded2bbSBartosz Kaszubowskiconst renderUnion = (types: TypeDefinitionData[]) => 2004c73bbf6SBartosz Kaszubowski types 2014c73bbf6SBartosz Kaszubowski .map(type => resolveTypeName(type)) 2024c73bbf6SBartosz Kaszubowski .map((valueToRender, index) => ( 203abded2bbSBartosz Kaszubowski <span key={`union-type-${index}`}> 204abded2bbSBartosz Kaszubowski {valueToRender} 205abded2bbSBartosz Kaszubowski {index + 1 !== types.length && ' | '} 206abded2bbSBartosz Kaszubowski </span> 207abded2bbSBartosz Kaszubowski )); 208abded2bbSBartosz Kaszubowski 2094c73bbf6SBartosz Kaszubowskiexport const resolveTypeName = ( 2104c73bbf6SBartosz Kaszubowski typeDefinition: TypeDefinitionData 2114c73bbf6SBartosz Kaszubowski): string | JSX.Element | (string | JSX.Element)[] => { 2124c73bbf6SBartosz Kaszubowski if (!typeDefinition) { 2134c73bbf6SBartosz Kaszubowski return 'undefined'; 2144c73bbf6SBartosz Kaszubowski } 2154c73bbf6SBartosz Kaszubowski 2164c73bbf6SBartosz Kaszubowski const { 217d87a784eSBartosz Kaszubowski elements, 218299f02f2SBartosz Kaszubowski elementType, 219299f02f2SBartosz Kaszubowski name, 220299f02f2SBartosz Kaszubowski type, 221299f02f2SBartosz Kaszubowski types, 222299f02f2SBartosz Kaszubowski typeArguments, 2231b3dce65SBartosz Kaszubowski declaration, 2248e38d640SBartosz Kaszubowski value, 2256062847eSBartosz Kaszubowski queryType, 226e3060685SBartosz Kaszubowski operator, 2279f72d43bSBartosz Kaszubowski objectType, 2289f72d43bSBartosz Kaszubowski indexType, 2294c73bbf6SBartosz Kaszubowski } = typeDefinition; 2304c73bbf6SBartosz Kaszubowski 231ae6cc736SBartosz Kaszubowski try { 232299f02f2SBartosz Kaszubowski if (name) { 233299f02f2SBartosz Kaszubowski if (type === 'reference') { 234299f02f2SBartosz Kaszubowski if (typeArguments) { 235d87a784eSBartosz Kaszubowski if (name === 'Record' || name === 'React.ComponentProps') { 236299f02f2SBartosz Kaszubowski return ( 237d87a784eSBartosz Kaszubowski <> 2386062847eSBartosz Kaszubowski {name}< 2396062847eSBartosz Kaszubowski {typeArguments.map((type, index) => ( 2406062847eSBartosz Kaszubowski <span key={`record-type-${index}`}> 2416062847eSBartosz Kaszubowski {resolveTypeName(type)} 2421ef472c3SBartosz Kaszubowski {index !== typeArguments.length - 1 ? ', ' : null} 2436062847eSBartosz Kaszubowski </span> 2446062847eSBartosz Kaszubowski ))} 2456062847eSBartosz Kaszubowski > 246d87a784eSBartosz Kaszubowski </> 247299f02f2SBartosz Kaszubowski ); 248299f02f2SBartosz Kaszubowski } else { 249d87a784eSBartosz Kaszubowski return ( 250d87a784eSBartosz Kaszubowski <> 2511cefc4ecSBartosz Kaszubowski {renderWithLink(name)} 252d87a784eSBartosz Kaszubowski < 253d87a784eSBartosz Kaszubowski {typeArguments.map((type, index) => ( 2541ef472c3SBartosz Kaszubowski <span key={`${name}-nested-type-${index}`}> 2551ef472c3SBartosz Kaszubowski {resolveTypeName(type)} 2561ef472c3SBartosz Kaszubowski {index !== typeArguments.length - 1 ? ', ' : null} 2571ef472c3SBartosz Kaszubowski </span> 258d87a784eSBartosz Kaszubowski ))} 259d87a784eSBartosz Kaszubowski > 260d87a784eSBartosz Kaszubowski </> 261d87a784eSBartosz Kaszubowski ); 262299f02f2SBartosz Kaszubowski } 263299f02f2SBartosz Kaszubowski } else { 2641cefc4ecSBartosz Kaszubowski return renderWithLink(name); 265299f02f2SBartosz Kaszubowski } 266299f02f2SBartosz Kaszubowski } else { 267299f02f2SBartosz Kaszubowski return name; 268299f02f2SBartosz Kaszubowski } 269299f02f2SBartosz Kaszubowski } else if (elementType?.name) { 270393777a1SBartosz Kaszubowski if (elementType.type === 'reference') { 2711cefc4ecSBartosz Kaszubowski return renderWithLink(elementType.name, type); 2721cefc4ecSBartosz Kaszubowski } else if (type === 'array') { 273299f02f2SBartosz Kaszubowski return elementType.name + '[]'; 274299f02f2SBartosz Kaszubowski } 275299f02f2SBartosz Kaszubowski return elementType.name + type; 276abded2bbSBartosz Kaszubowski } else if (elementType?.declaration) { 277abded2bbSBartosz Kaszubowski if (type === 'array') { 278abded2bbSBartosz Kaszubowski const { parameters, type: paramType } = elementType.declaration.indexSignature || {}; 279abded2bbSBartosz Kaszubowski if (parameters && paramType) { 280abded2bbSBartosz Kaszubowski return `{ [${listParams(parameters)}]: ${resolveTypeName(paramType)} }`; 281abded2bbSBartosz Kaszubowski } 282abded2bbSBartosz Kaszubowski } 283abded2bbSBartosz Kaszubowski return elementType.name + type; 284299f02f2SBartosz Kaszubowski } else if (type === 'union' && types?.length) { 285abded2bbSBartosz Kaszubowski return renderUnion(types); 286abded2bbSBartosz Kaszubowski } else if (elementType && elementType.type === 'union' && elementType?.types?.length) { 287abded2bbSBartosz Kaszubowski const unionTypes = elementType?.types || []; 288abded2bbSBartosz Kaszubowski return ( 289abded2bbSBartosz Kaszubowski <> 290abded2bbSBartosz Kaszubowski ({renderUnion(unionTypes)}){type === 'array' && '[]'} 291abded2bbSBartosz Kaszubowski </> 292abded2bbSBartosz Kaszubowski ); 2931b3dce65SBartosz Kaszubowski } else if (declaration?.signatures) { 2940a4e04c3SBartosz Kaszubowski const baseSignature = declaration.signatures[0]; 2950a4e04c3SBartosz Kaszubowski if (baseSignature?.parameters?.length) { 2960a4e04c3SBartosz Kaszubowski return ( 2970a4e04c3SBartosz Kaszubowski <> 2980a4e04c3SBartosz Kaszubowski ( 2990a4e04c3SBartosz Kaszubowski {baseSignature.parameters?.map((param, index) => ( 3000a4e04c3SBartosz Kaszubowski <span key={`param-${index}-${param.name}`}> 3010a4e04c3SBartosz Kaszubowski {param.name}: {resolveTypeName(param.type)} 302c6a02be9SBartosz Kaszubowski {index + 1 !== baseSignature.parameters?.length && ', '} 3030a4e04c3SBartosz Kaszubowski </span> 3040a4e04c3SBartosz Kaszubowski ))} 3050a4e04c3SBartosz Kaszubowski ) {'=>'} {resolveTypeName(baseSignature.type)} 3060a4e04c3SBartosz Kaszubowski </> 3070a4e04c3SBartosz Kaszubowski ); 3080a4e04c3SBartosz Kaszubowski } else { 309c6a02be9SBartosz Kaszubowski return ( 310c6a02be9SBartosz Kaszubowski <> 311c6a02be9SBartosz Kaszubowski {'() =>'} {resolveTypeName(baseSignature.type)} 312c6a02be9SBartosz Kaszubowski </> 313c6a02be9SBartosz Kaszubowski ); 3140a4e04c3SBartosz Kaszubowski } 315f52aa21eSBartosz Kaszubowski } else if (type === 'reflection' && declaration?.children) { 316f52aa21eSBartosz Kaszubowski return ( 317f52aa21eSBartosz Kaszubowski <> 318f8204ef0SBartosz Kaszubowski {'{\n'} 319f52aa21eSBartosz Kaszubowski {declaration?.children.map((child: PropData, i) => ( 320f52aa21eSBartosz Kaszubowski <span key={`reflection-${name}-${i}`}> 321f8204ef0SBartosz Kaszubowski {' '} 3224c73bbf6SBartosz Kaszubowski {child.name + ': '} 3234c73bbf6SBartosz Kaszubowski {resolveTypeName(child.type)} 324f52aa21eSBartosz Kaszubowski {i + 1 !== declaration?.children?.length ? ', ' : null} 325f8204ef0SBartosz Kaszubowski {'\n'} 326f52aa21eSBartosz Kaszubowski </span> 327f52aa21eSBartosz Kaszubowski ))} 328f52aa21eSBartosz Kaszubowski {'}'} 329f52aa21eSBartosz Kaszubowski </> 330f52aa21eSBartosz Kaszubowski ); 331d87a784eSBartosz Kaszubowski } else if (type === 'tuple' && elements) { 332d87a784eSBartosz Kaszubowski return ( 333d87a784eSBartosz Kaszubowski <> 334d87a784eSBartosz Kaszubowski [ 335d87a784eSBartosz Kaszubowski {elements.map((elem, i) => ( 336d87a784eSBartosz Kaszubowski <span key={`tuple-${name}-${i}`}> 337d87a784eSBartosz Kaszubowski {resolveTypeName(elem)} 3381ef472c3SBartosz Kaszubowski {i + 1 !== elements.length ? ', ' : null} 339d87a784eSBartosz Kaszubowski </span> 340d87a784eSBartosz Kaszubowski ))} 341d87a784eSBartosz Kaszubowski ] 342d87a784eSBartosz Kaszubowski </> 343d87a784eSBartosz Kaszubowski ); 3446062847eSBartosz Kaszubowski } else if (type === 'query' && queryType) { 3456062847eSBartosz Kaszubowski return queryType.name; 34642175e80SBartosz Kaszubowski } else if (type === 'literal' && typeof value === 'boolean') { 34742175e80SBartosz Kaszubowski return `${value}`; 34802e14744SBartosz Kaszubowski } else if (type === 'literal' && (value || (typeof value === 'number' && value === 0))) { 3498e38d640SBartosz Kaszubowski return `'${value}'`; 350ce122823SBartłomiej Bukowski } else if (type === 'intersection' && types) { 351ce122823SBartłomiej Bukowski return types 352ce122823SBartłomiej Bukowski .filter(({ name }) => !omittableTypes.includes(name ?? '')) 353ce122823SBartłomiej Bukowski .map((value, index, array) => ( 354ce122823SBartłomiej Bukowski <span key={`intersection-${name}-${index}`}> 355ce122823SBartłomiej Bukowski {resolveTypeName(value)} 356ce122823SBartłomiej Bukowski {index + 1 !== array.length && ' & '} 357ce122823SBartłomiej Bukowski </span> 358ce122823SBartłomiej Bukowski )); 3599f72d43bSBartosz Kaszubowski } else if (type === 'indexedAccess') { 3609f72d43bSBartosz Kaszubowski return `${objectType?.name}['${indexType?.value}']`; 361e3060685SBartosz Kaszubowski } else if (type === 'typeOperator') { 362e3060685SBartosz Kaszubowski return operator || 'undefined'; 3636b7802baSBartosz Kaszubowski } else if (type === 'intrinsic') { 3646b7802baSBartosz Kaszubowski return name || 'undefined'; 365d87a784eSBartosz Kaszubowski } else if (value === null) { 366d87a784eSBartosz Kaszubowski return 'null'; 367299f02f2SBartosz Kaszubowski } 368299f02f2SBartosz Kaszubowski return 'undefined'; 369ae6cc736SBartosz Kaszubowski } catch (e) { 370ae6cc736SBartosz Kaszubowski console.warn('Type resolve has failed!', e); 371ae6cc736SBartosz Kaszubowski return 'undefined'; 372ae6cc736SBartosz Kaszubowski } 373299f02f2SBartosz Kaszubowski}; 374299f02f2SBartosz Kaszubowski 375764ac031SBartosz Kaszubowskiexport const parseParamName = (name: string) => (name.startsWith('__') ? name.substr(2) : name); 376764ac031SBartosz Kaszubowski 3777d500c47SBartosz Kaszubowskiexport const renderParamRow = ({ 3787d500c47SBartosz Kaszubowski comment, 3797d500c47SBartosz Kaszubowski name, 3807d500c47SBartosz Kaszubowski type, 3817d500c47SBartosz Kaszubowski flags, 3827d500c47SBartosz Kaszubowski defaultValue, 3837d500c47SBartosz Kaszubowski}: MethodParamData): JSX.Element => { 3845990cc31SBartosz Kaszubowski const defaultData = getTagData('default', comment); 3855990cc31SBartosz Kaszubowski const initValue = parseCommentContent( 3865990cc31SBartosz Kaszubowski defaultValue || (defaultData ? getCommentContent(defaultData.content) : '') 3875990cc31SBartosz Kaszubowski ); 3887534da61SBartosz Kaszubowski return ( 3897534da61SBartosz Kaszubowski <Row key={`param-${name}`}> 3907534da61SBartosz Kaszubowski <Cell> 3913c9a6b96SBartosz Kaszubowski <BOLD>{parseParamName(name)}</BOLD> 3927d500c47SBartosz Kaszubowski {renderFlags(flags, initValue)} 3937534da61SBartosz Kaszubowski </Cell> 3947534da61SBartosz Kaszubowski <Cell> 395f8204ef0SBartosz Kaszubowski <APIDataType typeDefinition={type} /> 3967534da61SBartosz Kaszubowski </Cell> 3977534da61SBartosz Kaszubowski <Cell> 3987534da61SBartosz Kaszubowski <CommentTextBlock 3997534da61SBartosz Kaszubowski comment={comment} 4007d500c47SBartosz Kaszubowski afterContent={renderDefaultValue(initValue)} 4017534da61SBartosz Kaszubowski emptyCommentFallback="-" 4027534da61SBartosz Kaszubowski /> 4037534da61SBartosz Kaszubowski </Cell> 4047534da61SBartosz Kaszubowski </Row> 4057534da61SBartosz Kaszubowski ); 4067534da61SBartosz Kaszubowski}; 4077534da61SBartosz Kaszubowski 408a0c5fbc5SBartosz Kaszubowskiexport const ParamsTableHeadRow = () => ( 4097534da61SBartosz Kaszubowski <TableHead> 4107534da61SBartosz Kaszubowski <Row> 4117534da61SBartosz Kaszubowski <HeaderCell>Name</HeaderCell> 4127534da61SBartosz Kaszubowski <HeaderCell>Type</HeaderCell> 4137534da61SBartosz Kaszubowski <HeaderCell>Description</HeaderCell> 4147534da61SBartosz Kaszubowski </Row> 4157534da61SBartosz Kaszubowski </TableHead> 4167534da61SBartosz Kaszubowski); 4177534da61SBartosz Kaszubowski 418be43ea08SBartosz Kaszubowskiconst InheritPermalink = createPermalinkedComponent( 419be43ea08SBartosz Kaszubowski createTextComponent( 420be43ea08SBartosz Kaszubowski TextElement.SPAN, 421be43ea08SBartosz Kaszubowski css({ fontSize: 'inherit', fontWeight: 'inherit', color: 'inherit' }) 422be43ea08SBartosz Kaszubowski ), 423be43ea08SBartosz Kaszubowski { baseNestingLevel: 2 } 424be43ea08SBartosz Kaszubowski); 425be43ea08SBartosz Kaszubowski 426be43ea08SBartosz Kaszubowskiexport const BoxSectionHeader = ({ 427be43ea08SBartosz Kaszubowski text, 428be43ea08SBartosz Kaszubowski exposeInSidebar, 429be43ea08SBartosz Kaszubowski}: { 430be43ea08SBartosz Kaszubowski text: string; 431be43ea08SBartosz Kaszubowski exposeInSidebar?: boolean; 432be43ea08SBartosz Kaszubowski}) => { 433be43ea08SBartosz Kaszubowski const TextWrapper = exposeInSidebar ? InheritPermalink : Fragment; 434be43ea08SBartosz Kaszubowski return ( 435be43ea08SBartosz Kaszubowski <CALLOUT theme="secondary" weight="medium" css={STYLES_NESTED_SECTION_HEADER}> 436be43ea08SBartosz Kaszubowski <TextWrapper>{text}</TextWrapper> 437be43ea08SBartosz Kaszubowski </CALLOUT> 438be43ea08SBartosz Kaszubowski ); 439be43ea08SBartosz Kaszubowski}; 440be43ea08SBartosz Kaszubowski 4417534da61SBartosz Kaszubowskiexport const renderParams = (parameters: MethodParamData[]) => ( 4427534da61SBartosz Kaszubowski <Table> 443a0c5fbc5SBartosz Kaszubowski <ParamsTableHeadRow /> 4446a5c065cSBartosz Kaszubowski <tbody>{parameters?.map(renderParamRow)}</tbody> 4457534da61SBartosz Kaszubowski </Table> 446299f02f2SBartosz Kaszubowski); 447299f02f2SBartosz Kaszubowski 448abded2bbSBartosz Kaszubowskiexport const listParams = (parameters: MethodParamData[]) => 449abded2bbSBartosz Kaszubowski parameters ? parameters?.map(param => parseParamName(param.name)).join(', ') : ''; 450abded2bbSBartosz Kaszubowski 4517534da61SBartosz Kaszubowskiexport const renderDefaultValue = (defaultValue?: string) => 4527d500c47SBartosz Kaszubowski defaultValue && defaultValue !== '...' ? ( 4534eaef1b0SBartosz Kaszubowski <div css={defaultValueContainerStyle}> 454be43ea08SBartosz Kaszubowski <DEMI>Default:</DEMI> <CODE>{defaultValue}</CODE> 4554eaef1b0SBartosz Kaszubowski </div> 4567534da61SBartosz Kaszubowski ) : undefined; 4577534da61SBartosz Kaszubowski 458b15ebaf2SBartosz Kaszubowskiexport const renderTypeOrSignatureType = ( 459b15ebaf2SBartosz Kaszubowski type?: TypeDefinitionData, 4605990cc31SBartosz Kaszubowski signatures?: MethodSignatureData[] | TypeSignaturesData[], 461f8204ef0SBartosz Kaszubowski allowBlock: boolean = false 462b15ebaf2SBartosz Kaszubowski) => { 4633e972ef8SBartosz Kaszubowski if (signatures && signatures.length) { 4643e972ef8SBartosz Kaszubowski return ( 46512abeb84SBartosz Kaszubowski <CODE key={`signature-type-${signatures[0].name}`}> 4663e972ef8SBartosz Kaszubowski ( 4673e972ef8SBartosz Kaszubowski {signatures?.map(({ parameters }) => 4683e972ef8SBartosz Kaszubowski parameters?.map(param => ( 469558a63feSBartosz Kaszubowski <span key={`signature-param-${param.name}`}> 470b15ebaf2SBartosz Kaszubowski {param.name} 471b15ebaf2SBartosz Kaszubowski {param.flags?.isOptional && '?'}: {resolveTypeName(param.type)} 472558a63feSBartosz Kaszubowski </span> 473b15ebaf2SBartosz Kaszubowski )) 4743e972ef8SBartosz Kaszubowski )} 4755990cc31SBartosz Kaszubowski ) => {signatures[0].type ? resolveTypeName(signatures[0].type) : 'void'} 47612abeb84SBartosz Kaszubowski </CODE> 4776a5c065cSBartosz Kaszubowski ); 4783e972ef8SBartosz Kaszubowski } else if (type) { 479f8204ef0SBartosz Kaszubowski if (allowBlock) { 480f8204ef0SBartosz Kaszubowski return <APIDataType typeDefinition={type} />; 481f8204ef0SBartosz Kaszubowski } 48212abeb84SBartosz Kaszubowski return <CODE key={`signature-type-${type.name}`}>{resolveTypeName(type)}</CODE>; 483b15ebaf2SBartosz Kaszubowski } 484b15ebaf2SBartosz Kaszubowski return undefined; 485b15ebaf2SBartosz Kaszubowski}; 486b15ebaf2SBartosz Kaszubowski 4877d500c47SBartosz Kaszubowskiexport const renderFlags = (flags?: TypePropertyDataFlags, defaultValue?: string) => 488a116a546SBartosz Kaszubowski (flags?.isOptional || defaultValue) && ( 489b15ebaf2SBartosz Kaszubowski <> 490b15ebaf2SBartosz Kaszubowski <br /> 491b15ebaf2SBartosz Kaszubowski <span css={STYLES_OPTIONAL}>(optional)</span> 492b15ebaf2SBartosz Kaszubowski </> 493a116a546SBartosz Kaszubowski ); 494a116a546SBartosz Kaszubowski 495a116a546SBartosz Kaszubowskiexport const renderIndexSignature = (kind: TypeDocKind) => 496a116a546SBartosz Kaszubowski kind === TypeDocKind.Parameter && ( 497a116a546SBartosz Kaszubowski <> 498a116a546SBartosz Kaszubowski <br /> 499a116a546SBartosz Kaszubowski <A 500a116a546SBartosz Kaszubowski css={STYLES_OPTIONAL} 501a116a546SBartosz Kaszubowski href="https://www.typescriptlang.org/docs/handbook/2/objects.html#index-signatures" 502a116a546SBartosz Kaszubowski openInNewTab 503a116a546SBartosz Kaszubowski isStyled> 504a116a546SBartosz Kaszubowski (index signature) 505a116a546SBartosz Kaszubowski </A> 506a116a546SBartosz Kaszubowski </> 507a116a546SBartosz Kaszubowski ); 508b15ebaf2SBartosz Kaszubowski 50984745a05SBartosz Kaszubowskiexport type CommentTextBlockProps = { 510299f02f2SBartosz Kaszubowski comment?: CommentData; 511dc379e46SBartosz Kaszubowski components?: MDComponents; 5124eaef1b0SBartosz Kaszubowski beforeContent?: JSX.Element; 5134eaef1b0SBartosz Kaszubowski afterContent?: JSX.Element; 514d0262524SBartosz Kaszubowski includePlatforms?: boolean; 515f6311d0dSBartosz Kaszubowski inlineHeaders?: boolean; 5167534da61SBartosz Kaszubowski emptyCommentFallback?: string; 517299f02f2SBartosz Kaszubowski}; 518299f02f2SBartosz Kaszubowski 519764ac031SBartosz Kaszubowskiexport const parseCommentContent = (content?: string): string => 5206d6ca9d7SBartosz Kaszubowski content && content.length ? content.replace(/*/g, '*').replace(/\t/g, '') : ''; 521764ac031SBartosz Kaszubowski 522b15ebaf2SBartosz Kaszubowskiexport const getCommentOrSignatureComment = ( 523b15ebaf2SBartosz Kaszubowski comment?: CommentData, 5245990cc31SBartosz Kaszubowski signatures?: MethodSignatureData[] | TypeSignaturesData[] 525b15ebaf2SBartosz Kaszubowski) => comment || (signatures && signatures[0]?.comment); 526b15ebaf2SBartosz Kaszubowski 527c8c9d6e8SBartosz Kaszubowskiexport const getTagData = (tagName: string, comment?: CommentData) => 528d0262524SBartosz Kaszubowski getAllTagData(tagName, comment)?.[0]; 529d0262524SBartosz Kaszubowski 530d0262524SBartosz Kaszubowskiexport const getAllTagData = (tagName: string, comment?: CommentData) => 5315990cc31SBartosz Kaszubowski comment?.blockTags?.filter(tag => tag.tag.substring(1) === tagName); 532c8c9d6e8SBartosz Kaszubowski 533c4c6b9d1SBartosz Kaszubowskiexport const getTagNamesList = (comment?: CommentData) => 534c4c6b9d1SBartosz Kaszubowski comment && [ 5355990cc31SBartosz Kaszubowski ...(getAllTagData('platform', comment)?.map(platformData => 5365990cc31SBartosz Kaszubowski getCommentContent(platformData.content) 5375990cc31SBartosz Kaszubowski ) || []), 538c4c6b9d1SBartosz Kaszubowski ...(getTagData('deprecated', comment) ? ['deprecated'] : []), 539c4c6b9d1SBartosz Kaszubowski ...(getTagData('experimental', comment) ? ['experimental'] : []), 540c4c6b9d1SBartosz Kaszubowski ]; 541c4c6b9d1SBartosz Kaszubowski 542adede39aSŁukasz Kosmatyexport const getMethodName = ( 543adede39aSŁukasz Kosmaty method: MethodDefinitionData, 544adede39aSŁukasz Kosmaty apiName?: string, 545adede39aSŁukasz Kosmaty name?: string, 546adede39aSŁukasz Kosmaty parameters?: MethodParamData[] 547adede39aSŁukasz Kosmaty) => { 548adede39aSŁukasz Kosmaty const isProperty = method.kind === TypeDocKind.Property && !parameters?.length; 549adede39aSŁukasz Kosmaty const methodName = ((apiName && `${apiName}.`) ?? '') + (method.name || name); 550adede39aSŁukasz Kosmaty if (!isProperty) { 551adede39aSŁukasz Kosmaty return `${methodName}(${parameters ? listParams(parameters) : ''})`; 552adede39aSŁukasz Kosmaty } 553adede39aSŁukasz Kosmaty 554adede39aSŁukasz Kosmaty return methodName; 555adede39aSŁukasz Kosmaty}; 556adede39aSŁukasz Kosmaty 5576a5c065cSBartosz Kaszubowskiexport const capitalize = (str: string) => str.charAt(0).toUpperCase() + str.slice(1); 558144e76edSBartosz Kaszubowski 559a0c5fbc5SBartosz Kaszubowskiconst PARAM_TAGS_REGEX = /@tag-\S*/g; 560a0c5fbc5SBartosz Kaszubowski 561a0c5fbc5SBartosz Kaszubowskiconst getParamTags = (shortText?: string) => { 562a0c5fbc5SBartosz Kaszubowski if (!shortText || !shortText.includes('@tag-')) { 563a0c5fbc5SBartosz Kaszubowski return undefined; 564a0c5fbc5SBartosz Kaszubowski } 565a0c5fbc5SBartosz Kaszubowski return Array.from(shortText.matchAll(PARAM_TAGS_REGEX), match => match[0]); 566a0c5fbc5SBartosz Kaszubowski}; 567a0c5fbc5SBartosz Kaszubowski 5685990cc31SBartosz Kaszubowskiexport const getCommentContent = (content: CommentContentData[]) => { 5695990cc31SBartosz Kaszubowski return content 5705990cc31SBartosz Kaszubowski .map(entry => entry.text) 5715990cc31SBartosz Kaszubowski .join('') 5725990cc31SBartosz Kaszubowski .trim(); 5735990cc31SBartosz Kaszubowski}; 5745990cc31SBartosz Kaszubowski 575558a63feSBartosz Kaszubowskiexport const CommentTextBlock = ({ 576299f02f2SBartosz Kaszubowski comment, 577ffc1cfa8SBartosz Kaszubowski beforeContent, 578669ac6e6SBartosz Kaszubowski afterContent, 579d0262524SBartosz Kaszubowski includePlatforms = true, 580f6311d0dSBartosz Kaszubowski inlineHeaders = false, 5817534da61SBartosz Kaszubowski emptyCommentFallback, 582558a63feSBartosz Kaszubowski}: CommentTextBlockProps) => { 5835990cc31SBartosz Kaszubowski const content = comment && comment.summary ? getCommentContent(comment.summary) : undefined; 584a0c5fbc5SBartosz Kaszubowski 5855990cc31SBartosz Kaszubowski if (emptyCommentFallback && (!comment || !content || !content.length)) { 5867534da61SBartosz Kaszubowski return <>{emptyCommentFallback}</>; 5877534da61SBartosz Kaszubowski } 5887534da61SBartosz Kaszubowski 5895990cc31SBartosz Kaszubowski const paramTags = content ? getParamTags(content) : undefined; 5905990cc31SBartosz Kaszubowski const parsedContent = ( 591f6311d0dSBartosz Kaszubowski <ReactMarkdown components={mdComponents} remarkPlugins={[remarkGfm]}> 5925990cc31SBartosz Kaszubowski {parseCommentContent(paramTags ? content?.replaceAll(PARAM_TAGS_REGEX, '') : content)} 5935990cc31SBartosz Kaszubowski </ReactMarkdown> 5945990cc31SBartosz Kaszubowski ); 5955990cc31SBartosz Kaszubowski 596fd06ac0fSEvan Bacon const examples = getAllTagData('example', comment); 597fd06ac0fSEvan Bacon const exampleText = examples?.map((example, index) => ( 59812abeb84SBartosz Kaszubowski <Fragment key={'example-' + index}> 599f6311d0dSBartosz Kaszubowski {inlineHeaders ? ( 600669ac6e6SBartosz Kaszubowski <div css={STYLES_EXAMPLE_IN_TABLE}> 6013c9a6b96SBartosz Kaszubowski <BOLD>Example</BOLD> 602669ac6e6SBartosz Kaszubowski </div> 603669ac6e6SBartosz Kaszubowski ) : ( 604be43ea08SBartosz Kaszubowski <BoxSectionHeader text="Example" /> 605669ac6e6SBartosz Kaszubowski )} 606f6311d0dSBartosz Kaszubowski <ReactMarkdown components={mdComponents}>{getCommentContent(example.content)}</ReactMarkdown> 60712abeb84SBartosz Kaszubowski </Fragment> 608fd06ac0fSEvan Bacon )); 609c1e3b3a3SBartosz Kaszubowski 610558a63feSBartosz Kaszubowski const see = getTagData('see', comment); 611d9bd5b6cSBartosz Kaszubowski const seeText = see && ( 612d9bd5b6cSBartosz Kaszubowski <Callout> 613f6311d0dSBartosz Kaszubowski <ReactMarkdown components={mdComponents}> 614f6311d0dSBartosz Kaszubowski {`**See:** ` + getCommentContent(see.content)} 6155990cc31SBartosz Kaszubowski </ReactMarkdown> 616d9bd5b6cSBartosz Kaszubowski </Callout> 617d9bd5b6cSBartosz Kaszubowski ); 618558a63feSBartosz Kaszubowski 6196a5c065cSBartosz Kaszubowski const hasPlatforms = (getAllTagData('platform', comment)?.length || 0) > 0; 6206a5c065cSBartosz Kaszubowski 621299f02f2SBartosz Kaszubowski return ( 622299f02f2SBartosz Kaszubowski <> 623f6311d0dSBartosz Kaszubowski {includePlatforms && hasPlatforms && ( 624b3bd70ceSTomasz Sapeta <APISectionPlatformTags comment={comment} prefix="Only for:" /> 6256a5c065cSBartosz Kaszubowski )} 626a0c5fbc5SBartosz Kaszubowski {paramTags && ( 627a0c5fbc5SBartosz Kaszubowski <> 6283c9a6b96SBartosz Kaszubowski <BOLD>Only for: </BOLD> 629a0c5fbc5SBartosz Kaszubowski {paramTags.map(tag => ( 630a0c5fbc5SBartosz Kaszubowski <Tag key={tag} name={tag.split('-')[1]} /> 631a0c5fbc5SBartosz Kaszubowski ))} 632a0c5fbc5SBartosz Kaszubowski </> 633a0c5fbc5SBartosz Kaszubowski )} 634ffc1cfa8SBartosz Kaszubowski {beforeContent} 6355990cc31SBartosz Kaszubowski {parsedContent} 636669ac6e6SBartosz Kaszubowski {afterContent} 637558a63feSBartosz Kaszubowski {seeText} 638c1e3b3a3SBartosz Kaszubowski {exampleText} 639299f02f2SBartosz Kaszubowski </> 640299f02f2SBartosz Kaszubowski ); 641299f02f2SBartosz Kaszubowski}; 642b671e53fSBartosz Kaszubowski 643a16a3d18SBartosz Kaszubowskiconst getMonospaceHeader = (element: ComponentType<any>) => { 644a16a3d18SBartosz Kaszubowski const level = parseInt(element?.displayName?.replace(/\D/g, '') ?? '0', 10); 645a16a3d18SBartosz Kaszubowski return createPermalinkedComponent(element, { 646a16a3d18SBartosz Kaszubowski baseNestingLevel: level !== 0 ? level : undefined, 647a16a3d18SBartosz Kaszubowski sidebarType: HeadingType.InlineCode, 648a16a3d18SBartosz Kaszubowski }); 649a16a3d18SBartosz Kaszubowski}; 650a16a3d18SBartosz Kaszubowski 651a16a3d18SBartosz Kaszubowskiexport const H3Code = getMonospaceHeader(RawH3); 652a16a3d18SBartosz Kaszubowskiexport const H4Code = getMonospaceHeader(RawH4); 653a16a3d18SBartosz Kaszubowski 6549f72d43bSBartosz Kaszubowskiexport const getComponentName = (name?: string, children: PropData[] = []) => { 6559f72d43bSBartosz Kaszubowski if (name && name !== 'default') return name; 6569f72d43bSBartosz Kaszubowski const ctor = children.filter((child: PropData) => child.name === 'constructor')[0]; 6579f72d43bSBartosz Kaszubowski return ctor?.signatures?.[0]?.type?.name ?? 'default'; 6589f72d43bSBartosz Kaszubowski}; 6599f72d43bSBartosz Kaszubowski 6606a5c065cSBartosz Kaszubowskiexport const STYLES_APIBOX = css({ 66114c78e61SJon Samp borderRadius: borderRadius.md, 6626a5c065cSBartosz Kaszubowski borderWidth: 1, 6636a5c065cSBartosz Kaszubowski borderStyle: 'solid', 6646a5c065cSBartosz Kaszubowski borderColor: theme.border.default, 66512abeb84SBartosz Kaszubowski padding: spacing[5], 66614c78e61SJon Samp boxShadow: shadows.xs, 6676a5c065cSBartosz Kaszubowski marginBottom: spacing[6], 6686a5c065cSBartosz Kaszubowski overflowX: 'hidden', 66907337117SBartosz Kaszubowski 6706a5c065cSBartosz Kaszubowski h3: { 6713324c13cSBartosz Kaszubowski marginBottom: spacing[2.5], 672d9bd5b6cSBartosz Kaszubowski }, 673d9bd5b6cSBartosz Kaszubowski 6745990cc31SBartosz Kaszubowski 'h2, h3, h4': { 675d9bd5b6cSBartosz Kaszubowski marginTop: 0, 6766a5c065cSBartosz Kaszubowski }, 677d0262524SBartosz Kaszubowski 67825b16883SBartosz Kaszubowski th: { 67925b16883SBartosz Kaszubowski color: theme.text.secondary, 68025b16883SBartosz Kaszubowski padding: `${spacing[3]}px ${spacing[4]}px`, 68125b16883SBartosz Kaszubowski }, 68225b16883SBartosz Kaszubowski 68312abeb84SBartosz Kaszubowski li: { 68412abeb84SBartosz Kaszubowski marginBottom: 0, 68512abeb84SBartosz Kaszubowski }, 68612abeb84SBartosz Kaszubowski 6876a5c065cSBartosz Kaszubowski [`.css-${tableWrapperStyle.name}`]: { 6886a5c065cSBartosz Kaszubowski boxShadow: 'none', 68912abeb84SBartosz Kaszubowski marginBottom: 0, 6906a5c065cSBartosz Kaszubowski }, 69140194603SBartosz Kaszubowski 6923f609562SBartosz Kaszubowski [`@media screen and (max-width: ${breakpoints.medium + 124}px)`]: { 6933aa00179SAbdullah Mzaien paddingInline: spacing[4], 6946a5c065cSBartosz Kaszubowski }, 6956a5c065cSBartosz Kaszubowski}); 696669ac6e6SBartosz Kaszubowski 6976a5c065cSBartosz Kaszubowskiexport const STYLES_APIBOX_NESTED = css({ 6986a5c065cSBartosz Kaszubowski boxShadow: 'none', 69912abeb84SBartosz Kaszubowski marginBottom: spacing[4], 700a16a3d18SBartosz Kaszubowski padding: `${spacing[4]}px ${spacing[5]}px 0`, 701504f93b3SBartosz Kaszubowski 702504f93b3SBartosz Kaszubowski h4: { 703504f93b3SBartosz Kaszubowski marginTop: 0, 704504f93b3SBartosz Kaszubowski }, 7056a5c065cSBartosz Kaszubowski}); 7066a5c065cSBartosz Kaszubowski 707de0f7b57SBartosz Kaszubowskiexport const STYLES_APIBOX_WRAPPER = css({ 708de0f7b57SBartosz Kaszubowski marginBottom: spacing[4], 709de0f7b57SBartosz Kaszubowski padding: `${spacing[4]}px ${spacing[5]}px 0`, 710de0f7b57SBartosz Kaszubowski 711de0f7b57SBartosz Kaszubowski [`.css-${tableWrapperStyle.name}:last-child`]: { 712de0f7b57SBartosz Kaszubowski marginBottom: spacing[4], 713de0f7b57SBartosz Kaszubowski }, 714de0f7b57SBartosz Kaszubowski}); 715de0f7b57SBartosz Kaszubowski 71612abeb84SBartosz Kaszubowskiexport const STYLE_APIBOX_NO_SPACING = css({ marginBottom: -spacing[5] }); 71712abeb84SBartosz Kaszubowski 7186a5c065cSBartosz Kaszubowskiexport const STYLES_NESTED_SECTION_HEADER = css({ 7196a5c065cSBartosz Kaszubowski display: 'flex', 7206a5c065cSBartosz Kaszubowski borderTop: `1px solid ${theme.border.default}`, 7216a5c065cSBartosz Kaszubowski borderBottom: `1px solid ${theme.border.default}`, 722d9bd5b6cSBartosz Kaszubowski margin: `${spacing[4]}px -${spacing[5]}px ${spacing[4]}px`, 72314c78e61SJon Samp padding: `${spacing[2.5]}px ${spacing[5]}px`, 72414c78e61SJon Samp backgroundColor: theme.background.subtle, 7256a5c065cSBartosz Kaszubowski 7266a5c065cSBartosz Kaszubowski h4: { 7276a5c065cSBartosz Kaszubowski ...typography.fontSizes[16], 728db57e342SBartosz Kaszubowski fontWeight: 600, 7296a5c065cSBartosz Kaszubowski marginBottom: 0, 73091029aa9SBartosz Kaszubowski marginTop: 0, 7314c73bbf6SBartosz Kaszubowski color: theme.text.secondary, 7326a5c065cSBartosz Kaszubowski }, 7336a5c065cSBartosz Kaszubowski}); 7346a5c065cSBartosz Kaszubowski 7356a5c065cSBartosz Kaszubowskiexport const STYLES_NOT_EXPOSED_HEADER = css({ 736d9bd5b6cSBartosz Kaszubowski marginBottom: spacing[1], 7376a5c065cSBartosz Kaszubowski display: 'inline-block', 738d9bd5b6cSBartosz Kaszubowski 739d9bd5b6cSBartosz Kaszubowski code: { 740d9bd5b6cSBartosz Kaszubowski marginBottom: 0, 741d9bd5b6cSBartosz Kaszubowski }, 7426a5c065cSBartosz Kaszubowski}); 7436a5c065cSBartosz Kaszubowski 7446a5c065cSBartosz Kaszubowskiexport const STYLES_OPTIONAL = css({ 7456a5c065cSBartosz Kaszubowski color: theme.text.secondary, 7466a5c065cSBartosz Kaszubowski fontSize: '90%', 7476a5c065cSBartosz Kaszubowski paddingTop: 22, 7486a5c065cSBartosz Kaszubowski}); 7496a5c065cSBartosz Kaszubowski 7506a5c065cSBartosz Kaszubowskiexport const STYLES_SECONDARY = css({ 7516a5c065cSBartosz Kaszubowski color: theme.text.secondary, 7526a5c065cSBartosz Kaszubowski fontSize: '90%', 7536a5c065cSBartosz Kaszubowski fontWeight: 600, 7546a5c065cSBartosz Kaszubowski}); 7556a5c065cSBartosz Kaszubowski 7564eaef1b0SBartosz Kaszubowskiconst defaultValueContainerStyle = css({ 7574eaef1b0SBartosz Kaszubowski marginTop: spacing[2], 758d9bd5b6cSBartosz Kaszubowski marginBottom: spacing[2], 759d9bd5b6cSBartosz Kaszubowski 760d9bd5b6cSBartosz Kaszubowski '&:last-child': { 761d9bd5b6cSBartosz Kaszubowski marginBottom: 0, 762d9bd5b6cSBartosz Kaszubowski }, 7634eaef1b0SBartosz Kaszubowski}); 7644eaef1b0SBartosz Kaszubowski 7656a5c065cSBartosz Kaszubowskiconst STYLES_EXAMPLE_IN_TABLE = css({ 7666a5c065cSBartosz Kaszubowski margin: `${spacing[2]}px 0`, 7676a5c065cSBartosz Kaszubowski}); 76812abeb84SBartosz Kaszubowski 769f4b1168bSBartosz Kaszubowskiexport const ELEMENT_SPACING = 'mb-4'; 770