| 'use client' |
| import classNames from '@/utils/classnames' |
|
|
| type IChildrenProps = { |
| children: React.ReactNode |
| id?: string |
| tag?: any |
| label?: any |
| anchor: boolean |
| } |
|
|
| type IHeaderingProps = { |
| url: string |
| method: 'PUT' | 'DELETE' | 'GET' | 'POST' |
| title: string |
| name: string |
| } |
|
|
| export const Heading = function H2({ |
| url, |
| method, |
| title, |
| name, |
| }: IHeaderingProps) { |
| let style = '' |
| switch (method) { |
| case 'PUT': |
| style = 'ring-amber-300 bg-amber-400/10 text-amber-500 dark:ring-amber-400/30 dark:bg-amber-400/10 dark:text-amber-400' |
| break |
| case 'DELETE': |
| style = 'ring-rose-200 bg-rose-50 text-red-500 dark:ring-rose-500/20 dark:bg-rose-400/10 dark:text-rose-400' |
| break |
| case 'POST': |
| style = 'ring-sky-300 bg-sky-400/10 text-sky-500 dark:ring-sky-400/30 dark:bg-sky-400/10 dark:text-sky-400' |
| break |
| default: |
| style = 'ring-emerald-300 dark:ring-emerald-400/30 bg-emerald-400/10 text-emerald-500 dark:text-emerald-400' |
| break |
| } |
| return ( |
| <> |
| <span id={name?.replace(/^#/, '')} className='relative -top-28' /> |
| <div className="flex items-center gap-x-3" > |
| <span className={`font-mono text-[0.625rem] font-semibold leading-6 rounded-lg px-1.5 ring-1 ring-inset ${style}`}>{method}</span> |
| {/* <span className="h-0.5 w-0.5 rounded-full bg-zinc-300 dark:bg-zinc-600"></span> */} |
| <span className="font-mono text-xs text-zinc-400">{url}</span> |
| </div> |
| <h2 className='mt-2 scroll-mt-32'> |
| <a href={name} className='no-underline group text-inherit hover:text-inherit'>{title}</a> |
| </h2> |
| </> |
|
|
| ) |
| } |
|
|
| export function Row({ children }: IChildrenProps) { |
| return ( |
| <div className="grid items-start grid-cols-1 gap-x-16 gap-y-10 xl:max-w-none xl:grid-cols-2"> |
| {children} |
| </div> |
| ) |
| } |
|
|
| type IColProps = IChildrenProps & { |
| sticky: boolean |
| } |
| export function Col({ children, sticky = false }: IColProps) { |
| return ( |
| <div |
| className={classNames( |
| '[&>:first-child]:mt-0 [&>:last-child]:mb-0', |
| sticky && 'xl:sticky xl:top-24', |
| )} |
| > |
| {children} |
| </div> |
| ) |
| } |
|
|
| export function Properties({ children }: IChildrenProps) { |
| return ( |
| <div className="my-6"> |
| <ul |
| role="list" |
| className="m-0 max-w-[calc(theme(maxWidth.lg)-theme(spacing.8))] list-none divide-y divide-zinc-900/5 p-0 dark:divide-white/5" |
| > |
| {children} |
| </ul> |
| </div> |
| ) |
| } |
|
|
| type IProperty = IChildrenProps & { |
| name: string |
| type: string |
| } |
| export function Property({ name, type, children }: IProperty) { |
| return ( |
| <li className="px-0 py-4 m-0 first:pt-0 last:pb-0"> |
| <dl className="flex flex-wrap items-center m-0 gap-x-3 gap-y-2"> |
| <dt className="sr-only">Name</dt> |
| <dd> |
| <code>{name}</code> |
| </dd> |
| <dt className="sr-only">Type</dt> |
| <dd className="font-mono text-xs text-zinc-400 dark:text-zinc-500"> |
| {type} |
| </dd> |
| <dt className="sr-only">Description</dt> |
| <dd className="w-full flex-none [&>:first-child]:mt-0 [&>:last-child]:mb-0"> |
| {children} |
| </dd> |
| </dl> |
| </li> |
| ) |
| } |
|
|
| type ISubProperty = IChildrenProps & { |
| name: string |
| type: string |
| } |
| export function SubProperty({ name, type, children }: ISubProperty) { |
| return ( |
| <li className="px-0 py-1 m-0 last:pb-0"> |
| <dl className="flex flex-wrap items-center m-0 gap-x-3"> |
| <dt className="sr-only">Name</dt> |
| <dd> |
| <code>{name}</code> |
| </dd> |
| <dt className="sr-only">Type</dt> |
| <dd className="font-mono text-xs text-zinc-400 dark:text-zinc-500"> |
| {type} |
| </dd> |
| <dt className="sr-only">Description</dt> |
| <dd className="w-full flex-none [&>:first-child]:mt-0 [&>:last-child]:mb-0"> |
| {children} |
| </dd> |
| </dl> |
| </li> |
| ) |
| } |
|
|