You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. 'use client'
  2. import type { PropsWithChildren } from 'react'
  3. import classNames from '@/utils/classnames'
  4. type IChildrenProps = {
  5. children: React.ReactNode
  6. id?: string
  7. tag?: any
  8. label?: any
  9. anchor: boolean
  10. }
  11. type IHeaderingProps = {
  12. url: string
  13. method: 'PUT' | 'DELETE' | 'GET' | 'POST' | 'PATCH'
  14. title: string
  15. name: string
  16. }
  17. export const Heading = function H2({
  18. url,
  19. method,
  20. title,
  21. name,
  22. }: IHeaderingProps) {
  23. let style = ''
  24. switch (method) {
  25. case 'PUT':
  26. 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'
  27. break
  28. case 'DELETE':
  29. style = 'ring-rose-200 bg-rose-50 text-red-500 dark:ring-rose-500/20 dark:bg-rose-400/10 dark:text-rose-400'
  30. break
  31. case 'POST':
  32. 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'
  33. break
  34. case 'PATCH':
  35. style = 'ring-violet-300 bg-violet-400/10 text-violet-500 dark:ring-violet-400/30 dark:bg-violet-400/10 dark:text-violet-400'
  36. break
  37. default:
  38. style = 'ring-emerald-300 dark:ring-emerald-400/30 bg-emerald-400/10 text-emerald-500 dark:text-emerald-400'
  39. break
  40. }
  41. return (
  42. <>
  43. <span id={name?.replace(/^#/, '')} className='relative -top-28' />
  44. <div className="flex items-center gap-x-3" >
  45. <span className={`rounded-lg px-1.5 font-mono text-[0.625rem] font-semibold leading-6 ring-1 ring-inset ${style}`}>{method}</span>
  46. {/* <span className="h-0.5 w-0.5 rounded-full bg-zinc-300 dark:bg-zinc-600"></span> */}
  47. <span className="font-mono text-xs text-zinc-400">{url}</span>
  48. </div>
  49. <h2 className='mt-2 scroll-mt-32'>
  50. <a href={name} className='group text-inherit no-underline hover:text-inherit'>{title}</a>
  51. </h2>
  52. </>
  53. )
  54. }
  55. export function Row({ children }: IChildrenProps) {
  56. return (
  57. <div className="grid grid-cols-1 items-start gap-x-16 gap-y-10 xl:!max-w-none xl:grid-cols-2">
  58. {children}
  59. </div>
  60. )
  61. }
  62. type IColProps = IChildrenProps & {
  63. sticky: boolean
  64. }
  65. export function Col({ children, sticky = false }: IColProps) {
  66. return (
  67. <div
  68. className={classNames(
  69. '[&>:first-child]:mt-0 [&>:last-child]:mb-0',
  70. sticky && 'xl:sticky xl:top-24',
  71. )}
  72. >
  73. {children}
  74. </div>
  75. )
  76. }
  77. export function Properties({ children }: IChildrenProps) {
  78. return (
  79. <div className="my-6">
  80. <ul
  81. role="list"
  82. 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"
  83. >
  84. {children}
  85. </ul>
  86. </div>
  87. )
  88. }
  89. type IProperty = IChildrenProps & {
  90. name: string
  91. type: string
  92. }
  93. export function Property({ name, type, children }: IProperty) {
  94. return (
  95. <li className="m-0 px-0 py-4 first:pt-0 last:pb-0">
  96. <dl className="m-0 flex flex-wrap items-center gap-x-3 gap-y-2">
  97. <dt className="sr-only">Name</dt>
  98. <dd>
  99. <code>{name}</code>
  100. </dd>
  101. <dt className="sr-only">Type</dt>
  102. <dd className="font-mono text-xs text-zinc-400 dark:text-zinc-500">
  103. {type}
  104. </dd>
  105. <dt className="sr-only">Description</dt>
  106. <dd className="w-full flex-none [&>:first-child]:mt-0 [&>:last-child]:mb-0">
  107. {children}
  108. </dd>
  109. </dl>
  110. </li>
  111. )
  112. }
  113. type ISubProperty = IChildrenProps & {
  114. name: string
  115. type: string
  116. }
  117. export function SubProperty({ name, type, children }: ISubProperty) {
  118. return (
  119. <li className="m-0 px-0 py-1 last:pb-0">
  120. <dl className="m-0 flex flex-wrap items-center gap-x-3">
  121. <dt className="sr-only">Name</dt>
  122. <dd>
  123. <code>{name}</code>
  124. </dd>
  125. <dt className="sr-only">Type</dt>
  126. <dd className="font-mono text-xs text-zinc-400 dark:text-zinc-500">
  127. {type}
  128. </dd>
  129. <dt className="sr-only">Description</dt>
  130. <dd className="w-full flex-none [&>:first-child]:mt-0 [&>:last-child]:mb-0">
  131. {children}
  132. </dd>
  133. </dl>
  134. </li>
  135. )
  136. }
  137. export function PropertyInstruction({ children }: PropsWithChildren<{}>) {
  138. return (
  139. <li className="m-0 px-0 py-4 italic first:pt-0">{children}</li>
  140. )
  141. }