@gentleduck/docs 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (462) hide show
  1. package/LICENSE +21 -0
  2. package/dist/callout-CFw8zUIz.js +2 -0
  3. package/dist/callout-CFw8zUIz.js.map +1 -0
  4. package/dist/callout-VcT2d48I.d.ts +17 -0
  5. package/dist/callout-VcT2d48I.d.ts.map +1 -0
  6. package/dist/charts-DX0UohRi.js +2 -0
  7. package/dist/charts-DX0UohRi.js.map +1 -0
  8. package/dist/charts-hfCEZEQp.d.ts +6 -0
  9. package/dist/charts-hfCEZEQp.d.ts.map +1 -0
  10. package/dist/client.d.ts +54 -0
  11. package/dist/client.js +1 -0
  12. package/dist/code-Cz75Womb.js +0 -0
  13. package/dist/code-block-CR2loi-i.d.ts +14 -0
  14. package/dist/code-block-CR2loi-i.d.ts.map +1 -0
  15. package/dist/code-block-DqFdGhI-.js +2 -0
  16. package/dist/code-block-DqFdGhI-.js.map +1 -0
  17. package/dist/code-block-wrapper-C8I0XMsN.d.ts +12 -0
  18. package/dist/code-block-wrapper-C8I0XMsN.d.ts.map +1 -0
  19. package/dist/code-block-wrapper-CCAw9mie.js +2 -0
  20. package/dist/code-block-wrapper-CCAw9mie.js.map +1 -0
  21. package/dist/code-preview-CeNXQxYN.d.ts +20 -0
  22. package/dist/code-preview-CeNXQxYN.d.ts.map +1 -0
  23. package/dist/code-preview-cIvw8qyg.js +2 -0
  24. package/dist/code-preview-cIvw8qyg.js.map +1 -0
  25. package/dist/colors-Ba_cRR6y.js +2 -0
  26. package/dist/colors-Ba_cRR6y.js.map +1 -0
  27. package/dist/colors-CpJMSMtf.d.ts +47 -0
  28. package/dist/colors-CpJMSMtf.d.ts.map +1 -0
  29. package/dist/command-menu-7HTBKVxd.js +0 -0
  30. package/dist/command-menu-BVebU1JI.js +2 -0
  31. package/dist/command-menu-BVebU1JI.js.map +1 -0
  32. package/dist/command-menu-C8RLyuBe.d.ts +7 -0
  33. package/dist/command-menu-C8RLyuBe.d.ts.map +1 -0
  34. package/dist/component-preview-CL6guE-v.js +2 -0
  35. package/dist/component-preview-CL6guE-v.js.map +1 -0
  36. package/dist/component-preview-DknaF8TG.d.ts +33 -0
  37. package/dist/component-preview-DknaF8TG.d.ts.map +1 -0
  38. package/dist/component-source-BCBDjfEb.js +5 -0
  39. package/dist/component-source-BCBDjfEb.js.map +1 -0
  40. package/dist/component-source-IrGlRkUy.d.ts +17 -0
  41. package/dist/component-source-IrGlRkUy.d.ts.map +1 -0
  42. package/dist/components/copy-button/copy-button.d.ts +4 -0
  43. package/dist/components/copy-button/copy-button.js +1 -0
  44. package/dist/components/copy-button/copy-button.types.d.ts +3 -0
  45. package/dist/components/copy-button/copy-button.types.js +0 -0
  46. package/dist/components/copy-button/index.d.ts +5 -0
  47. package/dist/components/copy-button/index.js +1 -0
  48. package/dist/components/docs/docs-copy-page.d.ts +2 -0
  49. package/dist/components/docs/docs-copy-page.js +1 -0
  50. package/dist/components/docs/docs-pager.d.ts +4 -0
  51. package/dist/components/docs/docs-pager.js +1 -0
  52. package/dist/components/docs/docs-sidebar.d.ts +4 -0
  53. package/dist/components/docs/docs-sidebar.js +1 -0
  54. package/dist/components/docs/docs-toc.d.ts +4 -0
  55. package/dist/components/docs/docs-toc.js +1 -0
  56. package/dist/components/docs/index.d.ts +8 -0
  57. package/dist/components/docs/index.js +1 -0
  58. package/dist/components/icons.d.ts +2 -0
  59. package/dist/components/icons.js +1 -0
  60. package/dist/components/index.d.ts +44 -0
  61. package/dist/components/index.js +1 -0
  62. package/dist/components/layouts/command-menu/command-menu.d.ts +2 -0
  63. package/dist/components/layouts/command-menu/command-menu.js +1 -0
  64. package/dist/components/layouts/command-menu/index.d.ts +3 -0
  65. package/dist/components/layouts/command-menu/index.js +1 -0
  66. package/dist/components/layouts/index.d.ts +8 -0
  67. package/dist/components/layouts/index.js +1 -0
  68. package/dist/components/layouts/site-footer/index.d.ts +2 -0
  69. package/dist/components/layouts/site-footer/index.js +1 -0
  70. package/dist/components/layouts/site-header/header-shell.d.ts +2 -0
  71. package/dist/components/layouts/site-header/header-shell.js +1 -0
  72. package/dist/components/layouts/site-header/index.d.ts +3 -0
  73. package/dist/components/layouts/site-header/index.js +1 -0
  74. package/dist/components/layouts/tailwind-indicator/index.d.ts +2 -0
  75. package/dist/components/layouts/tailwind-indicator/index.js +1 -0
  76. package/dist/components/main-nav.d.ts +2 -0
  77. package/dist/components/main-nav.js +1 -0
  78. package/dist/components/mdx/mdx-components/callout.d.ts +2 -0
  79. package/dist/components/mdx/mdx-components/callout.js +1 -0
  80. package/dist/components/mdx/mdx-components/code/code-block-wrapper.d.ts +2 -0
  81. package/dist/components/mdx/mdx-components/code/code-block-wrapper.js +1 -0
  82. package/dist/components/mdx/mdx-components/code/code-block.d.ts +2 -0
  83. package/dist/components/mdx/mdx-components/code/code-block.js +1 -0
  84. package/dist/components/mdx/mdx-components/code/code-preview.d.ts +2 -0
  85. package/dist/components/mdx/mdx-components/code/code-preview.js +1 -0
  86. package/dist/components/mdx/mdx-components/code/component-preview.d.ts +2 -0
  87. package/dist/components/mdx/mdx-components/code/component-preview.js +1 -0
  88. package/dist/components/mdx/mdx-components/code/component-source.d.ts +2 -0
  89. package/dist/components/mdx/mdx-components/code/component-source.js +1 -0
  90. package/dist/components/mdx/mdx-components/code/figcaption-block.d.ts +2 -0
  91. package/dist/components/mdx/mdx-components/code/figcaption-block.js +1 -0
  92. package/dist/components/mdx/mdx-components/code/index.d.ts +11 -0
  93. package/dist/components/mdx/mdx-components/code/index.js +1 -0
  94. package/dist/components/mdx/mdx-components/code/pre-block.d.ts +4 -0
  95. package/dist/components/mdx/mdx-components/code/pre-block.js +1 -0
  96. package/dist/components/mdx/mdx-components/code/span-block.d.ts +11 -0
  97. package/dist/components/mdx/mdx-components/code/span-block.d.ts.map +1 -0
  98. package/dist/components/mdx/mdx-components/code/span-block.js +2 -0
  99. package/dist/components/mdx/mdx-components/code/span-block.js.map +1 -0
  100. package/dist/components/mdx/mdx-components/components-list.d.ts +4 -0
  101. package/dist/components/mdx/mdx-components/components-list.js +1 -0
  102. package/dist/components/mdx/mdx-components/exalidraw.d.ts +7 -0
  103. package/dist/components/mdx/mdx-components/exalidraw.d.ts.map +1 -0
  104. package/dist/components/mdx/mdx-components/exalidraw.js +2 -0
  105. package/dist/components/mdx/mdx-components/exalidraw.js.map +1 -0
  106. package/dist/components/mdx/mdx-components/framework-docs.d.ts +2 -0
  107. package/dist/components/mdx/mdx-components/framework-docs.js +1 -0
  108. package/dist/components/mdx/mdx-components/index.d.ts +20 -0
  109. package/dist/components/mdx/mdx-components/index.js +1 -0
  110. package/dist/components/mdx/mdx-components/table.d.ts +2 -0
  111. package/dist/components/mdx/mdx-components/table.js +1 -0
  112. package/dist/components/mdx/mdx-components/tabs.d.ts +2 -0
  113. package/dist/components/mdx/mdx-components/tabs.js +1 -0
  114. package/dist/components/mdx/mdx-components/typepography.d.ts +2 -0
  115. package/dist/components/mdx/mdx-components/typepography.js +1 -0
  116. package/dist/components/mdx/mdx.d.ts +2 -0
  117. package/dist/components/mdx/mdx.js +1 -0
  118. package/dist/components/mobile-nav.d.ts +2 -0
  119. package/dist/components/mobile-nav.js +1 -0
  120. package/dist/components/mode-toggle.d.ts +2 -0
  121. package/dist/components/mode-toggle.js +1 -0
  122. package/dist/components/page-header.d.ts +2 -0
  123. package/dist/components/page-header.js +1 -0
  124. package/dist/components/providers.d.ts +2 -0
  125. package/dist/components/providers.js +1 -0
  126. package/dist/components/themes/index.d.ts +3 -0
  127. package/dist/components/themes/index.js +1 -0
  128. package/dist/components/themes/style-switcher.d.ts +2 -0
  129. package/dist/components/themes/style-switcher.js +1 -0
  130. package/dist/components-list-BCV3yN6H.js +2 -0
  131. package/dist/components-list-BCV3yN6H.js.map +1 -0
  132. package/dist/components-list-ZLlUD-Nr.d.ts +12 -0
  133. package/dist/components-list-ZLlUD-Nr.d.ts.map +1 -0
  134. package/dist/context/context.d.ts +2 -0
  135. package/dist/context/context.js +1 -0
  136. package/dist/context/context.types.d.ts +2 -0
  137. package/dist/context/context.types.js +0 -0
  138. package/dist/context/index.d.ts +4 -0
  139. package/dist/context/index.js +1 -0
  140. package/dist/context-Bd4Sf8r8.js +2 -0
  141. package/dist/context-Bd4Sf8r8.js.map +1 -0
  142. package/dist/context-BoqMzqgD.js +0 -0
  143. package/dist/context-tLL-jUw_.d.ts +26 -0
  144. package/dist/context-tLL-jUw_.d.ts.map +1 -0
  145. package/dist/context.types-8c0sgn5Q.js +0 -0
  146. package/dist/context.types-DgaGu8Ly.d.ts +57 -0
  147. package/dist/context.types-DgaGu8Ly.d.ts.map +1 -0
  148. package/dist/copy-button-Bh7DmVLN.d.ts +22 -0
  149. package/dist/copy-button-Bh7DmVLN.d.ts.map +1 -0
  150. package/dist/copy-button-D50DXq56.js +2 -0
  151. package/dist/copy-button-D50DXq56.js.map +1 -0
  152. package/dist/copy-button-DpLK4Hc9.js +0 -0
  153. package/dist/copy-button.types-D6D1XKDN.d.ts +19 -0
  154. package/dist/copy-button.types-D6D1XKDN.d.ts.map +1 -0
  155. package/dist/copy-button.types-ZXpoKEH1.js +0 -0
  156. package/dist/docs-B9qhW8T2.js +0 -0
  157. package/dist/docs-copy-page-B1HSXqlm.js +3 -0
  158. package/dist/docs-copy-page-B1HSXqlm.js.map +1 -0
  159. package/dist/docs-copy-page-rZ3GkUUQ.d.ts +13 -0
  160. package/dist/docs-copy-page-rZ3GkUUQ.d.ts.map +1 -0
  161. package/dist/docs-pager-2p2cKZcg.js +2 -0
  162. package/dist/docs-pager-2p2cKZcg.js.map +1 -0
  163. package/dist/docs-pager-CLERxm13.d.ts +25 -0
  164. package/dist/docs-pager-CLERxm13.d.ts.map +1 -0
  165. package/dist/docs-sidebar-C4HMPDIN.d.ts +30 -0
  166. package/dist/docs-sidebar-C4HMPDIN.d.ts.map +1 -0
  167. package/dist/docs-sidebar-Cq7haHti.js +2 -0
  168. package/dist/docs-sidebar-Cq7haHti.js.map +1 -0
  169. package/dist/docs-toc-B4_Znnrj.d.ts +13 -0
  170. package/dist/docs-toc-B4_Znnrj.d.ts.map +1 -0
  171. package/dist/docs-toc-DfQz3sNZ.js +2 -0
  172. package/dist/docs-toc-DfQz3sNZ.js.map +1 -0
  173. package/dist/events-BKAEw9TQ.d.ts +25 -0
  174. package/dist/events-BKAEw9TQ.d.ts.map +1 -0
  175. package/dist/events-D55YvIRi.js +2 -0
  176. package/dist/events-D55YvIRi.js.map +1 -0
  177. package/dist/figcaption-block-B7CmTI6d.d.ts +11 -0
  178. package/dist/figcaption-block-B7CmTI6d.d.ts.map +1 -0
  179. package/dist/figcaption-block-DWZhs-6i.js +2 -0
  180. package/dist/figcaption-block-DWZhs-6i.js.map +1 -0
  181. package/dist/framework-docs-ZYLz3BBy.js +2 -0
  182. package/dist/framework-docs-ZYLz3BBy.js.map +1 -0
  183. package/dist/framework-docs-tYKaeYsi.d.ts +13 -0
  184. package/dist/framework-docs-tYKaeYsi.d.ts.map +1 -0
  185. package/dist/header-shell-BusaKA4C.d.ts +39 -0
  186. package/dist/header-shell-BusaKA4C.d.ts.map +1 -0
  187. package/dist/header-shell-CWHnv2ot.js +2 -0
  188. package/dist/header-shell-CWHnv2ot.js.map +1 -0
  189. package/dist/hooks/index.d.ts +8 -0
  190. package/dist/hooks/index.js +1 -0
  191. package/dist/hooks/use-colors.d.ts +3 -0
  192. package/dist/hooks/use-colors.js +1 -0
  193. package/dist/hooks/use-config.d.ts +2 -0
  194. package/dist/hooks/use-config.js +1 -0
  195. package/dist/hooks/use-lift-mode.d.ts +2 -0
  196. package/dist/hooks/use-lift-mode.js +1 -0
  197. package/dist/hooks/use-meta-colors.d.ts +2 -0
  198. package/dist/hooks/use-meta-colors.js +1 -0
  199. package/dist/hooks/use-mounted.d.ts +2 -0
  200. package/dist/hooks/use-mounted.js +1 -0
  201. package/dist/hooks/use-themes-config.d.ts +2 -0
  202. package/dist/hooks/use-themes-config.js +1 -0
  203. package/dist/icons-BqnlXRgx.d.ts +30 -0
  204. package/dist/icons-BqnlXRgx.d.ts.map +1 -0
  205. package/dist/icons-bFf026bR.js +2 -0
  206. package/dist/icons-bFf026bR.js.map +1 -0
  207. package/dist/index-2mWOLEIP.d.ts +7 -0
  208. package/dist/index-2mWOLEIP.d.ts.map +1 -0
  209. package/dist/index-BZ1Usw1L.d.ts +8 -0
  210. package/dist/index-BZ1Usw1L.d.ts.map +1 -0
  211. package/dist/index-Bunxo_8h.d.ts +8 -0
  212. package/dist/index-Bunxo_8h.d.ts.map +1 -0
  213. package/dist/index-BwEOYyLd.d.ts +1 -0
  214. package/dist/index-CJOkJMYm.d.ts +1 -0
  215. package/dist/index-Cp46Zvz-.d.ts +1 -0
  216. package/dist/index-CsVdkYso.d.ts +1 -0
  217. package/dist/index-DIk3-d3u.d.ts +1 -0
  218. package/dist/index-LAzYY5Wa.d.ts +1 -0
  219. package/dist/index-k586z2Y3.d.ts +1 -0
  220. package/dist/index-mj9Ys67i.d.ts +1 -0
  221. package/dist/index-otwxHF3U.d.ts +1 -0
  222. package/dist/index.d.ts +11 -0
  223. package/dist/index.js +1 -0
  224. package/dist/layouts-hVp-aKom.js +0 -0
  225. package/dist/lib/charts.d.ts +2 -0
  226. package/dist/lib/charts.js +1 -0
  227. package/dist/lib/colors.d.ts +2 -0
  228. package/dist/lib/colors.js +1 -0
  229. package/dist/lib/events.d.ts +2 -0
  230. package/dist/lib/events.js +1 -0
  231. package/dist/lib/index.d.ts +6 -0
  232. package/dist/lib/index.js +1 -0
  233. package/dist/lib/registry-colors-data.d.ts +229 -0
  234. package/dist/lib/registry-colors-data.d.ts.map +1 -0
  235. package/dist/lib/registry-colors-data.js +1 -0
  236. package/dist/lib/registry-styles.d.ts +2 -0
  237. package/dist/lib/registry-styles.js +1 -0
  238. package/dist/lib/themes.d.ts +2 -0
  239. package/dist/lib/themes.js +1 -0
  240. package/dist/lib/utils.d.ts +2 -0
  241. package/dist/lib/utils.js +1 -0
  242. package/dist/main-nav-Df2pgQUs.js +2 -0
  243. package/dist/main-nav-Df2pgQUs.js.map +1 -0
  244. package/dist/main-nav-SathVgSN.d.ts +7 -0
  245. package/dist/main-nav-SathVgSN.d.ts.map +1 -0
  246. package/dist/mdx-CBnfwESR.d.ts +12 -0
  247. package/dist/mdx-CBnfwESR.d.ts.map +1 -0
  248. package/dist/mdx-components-BoD1jTr7.js +0 -0
  249. package/dist/mdx-cqn1ggXI.js +2 -0
  250. package/dist/mdx-cqn1ggXI.js.map +1 -0
  251. package/dist/metadata-plugin-Ag61IUUu.d.ts +7 -0
  252. package/dist/metadata-plugin-Ag61IUUu.d.ts.map +1 -0
  253. package/dist/metadata-plugin-Mc8lCfYT.js +2 -0
  254. package/dist/metadata-plugin-Mc8lCfYT.js.map +1 -0
  255. package/dist/mobile-nav-DRQtHK-O.js +2 -0
  256. package/dist/mobile-nav-DRQtHK-O.js.map +1 -0
  257. package/dist/mobile-nav-hEfoD2ld.d.ts +7 -0
  258. package/dist/mobile-nav-hEfoD2ld.d.ts.map +1 -0
  259. package/dist/mode-toggle-BcPx4Vfk.d.ts +7 -0
  260. package/dist/mode-toggle-BcPx4Vfk.d.ts.map +1 -0
  261. package/dist/mode-toggle-CGGAaMUK.js +2 -0
  262. package/dist/mode-toggle-CGGAaMUK.js.map +1 -0
  263. package/dist/nav-0JAtUIst.d.ts +18 -0
  264. package/dist/nav-0JAtUIst.d.ts.map +1 -0
  265. package/dist/nav-6wUjcK0K.js +0 -0
  266. package/dist/page-header-BGKsl1LK.js +2 -0
  267. package/dist/page-header-BGKsl1LK.js.map +1 -0
  268. package/dist/page-header-Brw3423H.d.ts +23 -0
  269. package/dist/page-header-Brw3423H.d.ts.map +1 -0
  270. package/dist/pre-block-BThyCz1h.js +2 -0
  271. package/dist/pre-block-BThyCz1h.js.map +1 -0
  272. package/dist/pre-block-CTP3z9eq.d.ts +33 -0
  273. package/dist/pre-block-CTP3z9eq.d.ts.map +1 -0
  274. package/dist/providers-BU3xm7I4.d.ts +11 -0
  275. package/dist/providers-BU3xm7I4.d.ts.map +1 -0
  276. package/dist/providers-fDpVqSs8.js +2 -0
  277. package/dist/providers-fDpVqSs8.js.map +1 -0
  278. package/dist/registry-colors-data-FyxAihEQ.js +2 -0
  279. package/dist/registry-colors-data-FyxAihEQ.js.map +1 -0
  280. package/dist/registry-styles-Cm1HpC4C.js +2 -0
  281. package/dist/registry-styles-Cm1HpC4C.js.map +1 -0
  282. package/dist/registry-styles-WvCGd0xY.d.ts +9 -0
  283. package/dist/registry-styles-WvCGd0xY.d.ts.map +1 -0
  284. package/dist/rehype-pre-block-source-Bz3-G4tr.js +2 -0
  285. package/dist/rehype-pre-block-source-Bz3-G4tr.js.map +1 -0
  286. package/dist/rehype-pre-block-source-Le9z9RN8.d.ts +7 -0
  287. package/dist/rehype-pre-block-source-Le9z9RN8.d.ts.map +1 -0
  288. package/dist/rehype-title-C1q6PbyG.js +2 -0
  289. package/dist/rehype-title-C1q6PbyG.js.map +1 -0
  290. package/dist/rehype-title-Dwt_OKnR.d.ts +7 -0
  291. package/dist/rehype-title-Dwt_OKnR.d.ts.map +1 -0
  292. package/dist/site-footer-CsUC-l-l.js +2 -0
  293. package/dist/site-footer-CsUC-l-l.js.map +1 -0
  294. package/dist/site-header-Bi3-9Kl3.js +2 -0
  295. package/dist/site-header-Bi3-9Kl3.js.map +1 -0
  296. package/dist/style-switcher-BXEGTMW2.d.ts +12 -0
  297. package/dist/style-switcher-BXEGTMW2.d.ts.map +1 -0
  298. package/dist/style-switcher-CpcMcuwL.js +2 -0
  299. package/dist/style-switcher-CpcMcuwL.js.map +1 -0
  300. package/dist/styles/base.css +156 -0
  301. package/dist/styles/docs.css +186 -0
  302. package/dist/styles/mdx.css +205 -0
  303. package/dist/table-B1hJe5kw.d.ts +10 -0
  304. package/dist/table-B1hJe5kw.d.ts.map +1 -0
  305. package/dist/table-Sc60jiil.js +2 -0
  306. package/dist/table-Sc60jiil.js.map +1 -0
  307. package/dist/tabs-DWxNPhgN.d.ts +23 -0
  308. package/dist/tabs-DWxNPhgN.d.ts.map +1 -0
  309. package/dist/tabs-KvYm5au9.js +2 -0
  310. package/dist/tabs-KvYm5au9.js.map +1 -0
  311. package/dist/tailwind-indicator-CV2jUfip.js +2 -0
  312. package/dist/tailwind-indicator-CV2jUfip.js.map +1 -0
  313. package/dist/themes-Dg5GgDgK.js +0 -0
  314. package/dist/themes-DsvojWlq.js +2 -0
  315. package/dist/themes-DsvojWlq.js.map +1 -0
  316. package/dist/themes-dv8YVpXg.d.ts +495 -0
  317. package/dist/themes-dv8YVpXg.d.ts.map +1 -0
  318. package/dist/typepography-B_jjjv9F.d.ts +54 -0
  319. package/dist/typepography-B_jjjv9F.d.ts.map +1 -0
  320. package/dist/typepography-Btk-lJ3O.js +2 -0
  321. package/dist/typepography-Btk-lJ3O.js.map +1 -0
  322. package/dist/types/index.d.ts +4 -0
  323. package/dist/types/index.js +0 -0
  324. package/dist/types/nav.d.ts +2 -0
  325. package/dist/types/nav.js +0 -0
  326. package/dist/types/unist.d.ts +2 -0
  327. package/dist/types/unist.js +0 -0
  328. package/dist/unist-Bs-H_R8g.d.ts +40 -0
  329. package/dist/unist-Bs-H_R8g.d.ts.map +1 -0
  330. package/dist/unist-DpNAVhDX.js +0 -0
  331. package/dist/use-colors-CeiLGCjZ.d.ts +13 -0
  332. package/dist/use-colors-CeiLGCjZ.d.ts.map +1 -0
  333. package/dist/use-colors-JhoQAYK2.js +2 -0
  334. package/dist/use-colors-JhoQAYK2.js.map +1 -0
  335. package/dist/use-config-CFygUPAg.d.ts +13 -0
  336. package/dist/use-config-CFygUPAg.d.ts.map +1 -0
  337. package/dist/use-config-D1zkiIbf.js +2 -0
  338. package/dist/use-config-D1zkiIbf.js.map +1 -0
  339. package/dist/use-lift-mode-Dya2HcpU.js +2 -0
  340. package/dist/use-lift-mode-Dya2HcpU.js.map +1 -0
  341. package/dist/use-lift-mode-IpZRia0D.d.ts +8 -0
  342. package/dist/use-lift-mode-IpZRia0D.d.ts.map +1 -0
  343. package/dist/use-meta-colors-BhIhFzvx.js +2 -0
  344. package/dist/use-meta-colors-BhIhFzvx.js.map +1 -0
  345. package/dist/use-meta-colors-C8OegAZO.d.ts +8 -0
  346. package/dist/use-meta-colors-C8OegAZO.d.ts.map +1 -0
  347. package/dist/use-mounted-D25Cx8rc.d.ts +5 -0
  348. package/dist/use-mounted-D25Cx8rc.d.ts.map +1 -0
  349. package/dist/use-mounted-SpB3P6Vt.js +2 -0
  350. package/dist/use-mounted-SpB3P6Vt.js.map +1 -0
  351. package/dist/use-themes-config-Bo-JZDNU.js +2 -0
  352. package/dist/use-themes-config-Bo-JZDNU.js.map +1 -0
  353. package/dist/use-themes-config-DfQCuhPn.d.ts +14 -0
  354. package/dist/use-themes-config-DfQCuhPn.d.ts.map +1 -0
  355. package/dist/utils-CMPpWmbv.d.ts +9 -0
  356. package/dist/utils-CMPpWmbv.d.ts.map +1 -0
  357. package/dist/utils-NjSy-iOL.js +2 -0
  358. package/dist/utils-NjSy-iOL.js.map +1 -0
  359. package/dist/velite/browser.d.ts +11 -0
  360. package/dist/velite/browser.d.ts.map +1 -0
  361. package/dist/velite/browser.js +2 -0
  362. package/dist/velite/browser.js.map +1 -0
  363. package/dist/velite/config.d.ts +21 -0
  364. package/dist/velite/config.d.ts.map +1 -0
  365. package/dist/velite/config.js +2 -0
  366. package/dist/velite/config.js.map +1 -0
  367. package/dist/velite/index.d.ts +10 -0
  368. package/dist/velite/index.js +1 -0
  369. package/dist/velite/plugins/index.d.ts +6 -0
  370. package/dist/velite/plugins/index.js +1 -0
  371. package/dist/velite/plugins/metadata-plugin.d.ts +4 -0
  372. package/dist/velite/plugins/metadata-plugin.js +1 -0
  373. package/dist/velite/plugins/rehype-pre-block-source.d.ts +4 -0
  374. package/dist/velite/plugins/rehype-pre-block-source.js +1 -0
  375. package/dist/velite/plugins/rehype-title.d.ts +4 -0
  376. package/dist/velite/plugins/rehype-title.js +1 -0
  377. package/dist/velite/rehype-npm-command.d.ts +8 -0
  378. package/dist/velite/rehype-npm-command.d.ts.map +1 -0
  379. package/dist/velite/rehype-npm-command.js +2 -0
  380. package/dist/velite/rehype-npm-command.js.map +1 -0
  381. package/dist/velite/utils.d.ts +5 -0
  382. package/dist/velite/utils.d.ts.map +1 -0
  383. package/dist/velite/utils.js +2 -0
  384. package/dist/velite/utils.js.map +1 -0
  385. package/package.json +174 -0
  386. package/src/client.ts +5 -0
  387. package/src/components/copy-button/copy-button.tsx +88 -0
  388. package/src/components/copy-button/copy-button.types.ts +17 -0
  389. package/src/components/copy-button/index.ts +2 -0
  390. package/src/components/docs/docs-copy-page.tsx +106 -0
  391. package/src/components/docs/docs-pager.tsx +114 -0
  392. package/src/components/docs/docs-sidebar.tsx +104 -0
  393. package/src/components/docs/docs-toc.tsx +104 -0
  394. package/src/components/docs/index.ts +4 -0
  395. package/src/components/icons.tsx +194 -0
  396. package/src/components/index.ts +13 -0
  397. package/src/components/layouts/command-menu/command-menu.tsx +166 -0
  398. package/src/components/layouts/command-menu/index.ts +1 -0
  399. package/src/components/layouts/index.ts +4 -0
  400. package/src/components/layouts/site-footer/index.tsx +70 -0
  401. package/src/components/layouts/site-header/header-shell.tsx +75 -0
  402. package/src/components/layouts/site-header/index.tsx +121 -0
  403. package/src/components/layouts/tailwind-indicator/index.tsx +16 -0
  404. package/src/components/main-nav.tsx +33 -0
  405. package/src/components/mdx/mdx-components/callout.tsx +17 -0
  406. package/src/components/mdx/mdx-components/code/code-block-wrapper.tsx +12 -0
  407. package/src/components/mdx/mdx-components/code/code-block.tsx +30 -0
  408. package/src/components/mdx/mdx-components/code/code-preview.tsx +80 -0
  409. package/src/components/mdx/mdx-components/code/component-preview.tsx +161 -0
  410. package/src/components/mdx/mdx-components/code/component-source.tsx +54 -0
  411. package/src/components/mdx/mdx-components/code/figcaption-block.tsx +25 -0
  412. package/src/components/mdx/mdx-components/code/index.ts +7 -0
  413. package/src/components/mdx/mdx-components/code/pre-block.tsx +103 -0
  414. package/src/components/mdx/mdx-components/code/span-block.tsx +13 -0
  415. package/src/components/mdx/mdx-components/components-list.tsx +23 -0
  416. package/src/components/mdx/mdx-components/exalidraw.tsx +12 -0
  417. package/src/components/mdx/mdx-components/framework-docs.tsx +20 -0
  418. package/src/components/mdx/mdx-components/index.ts +7 -0
  419. package/src/components/mdx/mdx-components/table.tsx +35 -0
  420. package/src/components/mdx/mdx-components/tabs.tsx +32 -0
  421. package/src/components/mdx/mdx-components/typepography.tsx +70 -0
  422. package/src/components/mdx/mdx.tsx +103 -0
  423. package/src/components/mobile-nav.tsx +91 -0
  424. package/src/components/mode-toggle.tsx +41 -0
  425. package/src/components/page-header.tsx +42 -0
  426. package/src/components/providers.tsx +14 -0
  427. package/src/components/themes/index.ts +1 -0
  428. package/src/components/themes/style-switcher.tsx +35 -0
  429. package/src/context/context.tsx +66 -0
  430. package/src/context/context.types.ts +55 -0
  431. package/src/context/index.ts +2 -0
  432. package/src/hooks/index.ts +6 -0
  433. package/src/hooks/use-colors.ts +27 -0
  434. package/src/hooks/use-config.ts +19 -0
  435. package/src/hooks/use-lift-mode.ts +19 -0
  436. package/src/hooks/use-meta-colors.ts +27 -0
  437. package/src/hooks/use-mounted.ts +11 -0
  438. package/src/hooks/use-themes-config.ts +17 -0
  439. package/src/index.ts +10 -0
  440. package/src/lib/charts.ts +23 -0
  441. package/src/lib/colors.ts +86 -0
  442. package/src/lib/events.ts +30 -0
  443. package/src/lib/index.ts +5 -0
  444. package/src/lib/registry-colors-data.ts +1810 -0
  445. package/src/lib/registry-styles.ts +8 -0
  446. package/src/lib/themes.ts +482 -0
  447. package/src/lib/utils.ts +42 -0
  448. package/src/styles/base.css +156 -0
  449. package/src/styles/docs.css +186 -0
  450. package/src/styles/mdx.css +205 -0
  451. package/src/types/index.ts +2 -0
  452. package/src/types/nav.ts +17 -0
  453. package/src/types/unist.ts +39 -0
  454. package/src/velite/browser.ts +11 -0
  455. package/src/velite/config.ts +118 -0
  456. package/src/velite/index.ts +5 -0
  457. package/src/velite/plugins/index.ts +3 -0
  458. package/src/velite/plugins/metadata-plugin.ts +26 -0
  459. package/src/velite/plugins/rehype-pre-block-source.ts +25 -0
  460. package/src/velite/plugins/rehype-title.ts +24 -0
  461. package/src/velite/rehype-npm-command.ts +42 -0
  462. package/src/velite/utils.ts +9 -0
@@ -0,0 +1,88 @@
1
+ 'use client'
2
+
3
+ import { type Event, trackEvent } from '@duck-docs/lib/events'
4
+ import { cn } from '@gentleduck/libs/cn'
5
+ import { Button } from '@gentleduck/registry-ui-duckui/button'
6
+ import {
7
+ DropdownMenu,
8
+ DropdownMenuContent,
9
+ DropdownMenuItem,
10
+ DropdownMenuTrigger,
11
+ } from '@gentleduck/registry-ui-duckui/dropdown-menu'
12
+ import { CheckIcon, ClipboardIcon, Copy } from 'lucide-react'
13
+ import * as React from 'react'
14
+ import type { CopyButtonProps, CopyWithClassNamesProps } from './copy-button.types'
15
+
16
+ export async function copyToClipboardWithMeta(value: string, event?: Event) {
17
+ navigator.clipboard.writeText(value)
18
+ if (event) {
19
+ trackEvent(event)
20
+ }
21
+ }
22
+
23
+ export function CopyButton({ value, className, variant = 'ghost', event, ...props }: CopyButtonProps) {
24
+ const [hasCopied, setHasCopied] = React.useState(false)
25
+
26
+ React.useEffect(() => {
27
+ setTimeout(() => {
28
+ setHasCopied(false)
29
+ }, 3000)
30
+ }, [hasCopied])
31
+
32
+ return (
33
+ <Button
34
+ aria-label="Copy"
35
+ className={cn('[&_svg]:!size-3.5 z-50 size-7 rounded-sm shadow-none', className)}
36
+ icon={hasCopied ? <CheckIcon /> : <Copy />}
37
+ onClick={() => {
38
+ copyToClipboardWithMeta(
39
+ value,
40
+ event
41
+ ? {
42
+ name: event,
43
+ properties: {
44
+ code: value,
45
+ },
46
+ }
47
+ : undefined,
48
+ )
49
+ setHasCopied(true)
50
+ }}
51
+ size="icon"
52
+ variant={variant}
53
+ {...props}
54
+ />
55
+ )
56
+ }
57
+
58
+ export function CopyWithClassNames({ value, classNames, className, ...props }: CopyWithClassNamesProps) {
59
+ const [hasCopied, setHasCopied] = React.useState(false)
60
+
61
+ React.useEffect(() => {
62
+ setTimeout(() => {
63
+ setHasCopied(false)
64
+ }, 2000)
65
+ }, [hasCopied])
66
+
67
+ const copyToClipboard = React.useCallback((value: string) => {
68
+ copyToClipboardWithMeta(value)
69
+ setHasCopied(true)
70
+ }, [])
71
+
72
+ return (
73
+ <DropdownMenu placement="bottom-end">
74
+ <DropdownMenuTrigger asChild>
75
+ <Button
76
+ className={cn('!size-6.5 relative z-50 [&_svg]:w-3.5', className)}
77
+ icon={hasCopied ? <CheckIcon /> : <ClipboardIcon />}
78
+ size="icon"
79
+ variant="outline"
80
+ {...props}></Button>
81
+ </DropdownMenuTrigger>
82
+ <DropdownMenuContent>
83
+ <DropdownMenuItem onClick={() => copyToClipboard(value)}>Component</DropdownMenuItem>
84
+ <DropdownMenuItem onClick={() => copyToClipboard(classNames)}>Classname</DropdownMenuItem>
85
+ </DropdownMenuContent>
86
+ </DropdownMenu>
87
+ )
88
+ }
@@ -0,0 +1,17 @@
1
+ import type { Event } from '@duck-docs/lib/events'
2
+ import type * as React from 'react'
3
+
4
+ export type DropdownMenuTriggerProps = React.ComponentPropsWithoutRef<
5
+ typeof import('@gentleduck/registry-ui-duckui/dropdown-menu').DropdownMenuTrigger
6
+ >
7
+
8
+ export type CopyWithClassNamesProps = DropdownMenuTriggerProps & {
9
+ value: string
10
+ classNames: string
11
+ className?: string
12
+ }
13
+
14
+ export type CopyButtonProps = import('@gentleduck/registry-ui-duckui/button').ButtonProps & {
15
+ value: string
16
+ event?: Event['name']
17
+ }
@@ -0,0 +1,2 @@
1
+ export * from './copy-button'
2
+ export * from './copy-button.types'
@@ -0,0 +1,106 @@
1
+ 'use client'
2
+
3
+ import { useCopyToClipboard } from '@gentleduck/hooks/use-copy-to-clipboard'
4
+ import { Button } from '@gentleduck/registry-ui-duckui/button'
5
+ import {
6
+ DropdownMenu,
7
+ DropdownMenuContent,
8
+ DropdownMenuItem,
9
+ DropdownMenuTrigger,
10
+ } from '@gentleduck/registry-ui-duckui/dropdown-menu'
11
+ import { Separator } from '@gentleduck/registry-ui-duckui/separator'
12
+ import { Check, ChevronDown, Copy } from 'lucide-react'
13
+ import { useSiteConfig } from '../../context'
14
+
15
+ function getPromptUrl(baseURL: string, url: string, siteName: string) {
16
+ return `${baseURL}?q=${encodeURIComponent(
17
+ `I’m looking at this ${siteName} documentation: ${url}.
18
+ Help me understand how to use it. Be ready to explain concepts, give examples, or help debug based on it.`,
19
+ )}`
20
+ }
21
+
22
+ const menuItems = {
23
+ chatgpt: (url: string, siteName: string) => (
24
+ <a href={getPromptUrl('https://chatgpt.com', url, siteName)} rel="noopener noreferrer" target="_blank">
25
+ <svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
26
+ <path
27
+ d="M22.282 9.821a5.985 5.985 0 0 0-.516-4.91 6.046 6.046 0 0 0-6.51-2.9A6.065 6.065 0 0 0 4.981 4.18a5.985 5.985 0 0 0-3.998 2.9 6.046 6.046 0 0 0 .743 7.097 5.98 5.98 0 0 0 .51 4.911 6.051 6.051 0 0 0 6.515 2.9A5.985 5.985 0 0 0 13.26 24a6.056 6.056 0 0 0 5.772-4.206 5.99 5.99 0 0 0 3.997-2.9 6.056 6.056 0 0 0-.747-7.073zM13.26 22.43a4.476 4.476 0 0 1-2.876-1.04l.141-.081 4.779-2.758a.795.795 0 0 0 .392-.681v-6.737l2.02 1.168a.071.071 0 0 1 .038.052v5.583a4.504 4.504 0 0 1-4.494 4.494zM3.6 18.304a4.47 4.47 0 0 1-.535-3.014l.142.085 4.783 2.759a.771.771 0 0 0 .78 0l5.843-3.369v2.332a.08.08 0 0 1-.033.062L9.74 19.95a4.5 4.5 0 0 1-6.14-1.646zM2.34 7.896a4.485 4.485 0 0 1 2.366-1.973V11.6a.766.766 0 0 0 .388.676l5.815 3.355-2.02 1.168a.076.076 0 0 1-.071 0l-4.83-2.786A4.504 4.504 0 0 1 2.34 7.872zm16.597 3.855-5.833-3.387L15.119 7.2a.076.076 0 0 1 .071 0l4.83 2.791a4.494 4.494 0 0 1-.676 8.105v-5.678a.79.79 0 0 0-.407-.667zm2.01-3.023-.141-.085-4.774-2.782a.776.776 0 0 0-.785 0L9.409 9.23V6.897a.066.066 0 0 1 .028-.061l4.83-2.787a4.5 4.5 0 0 1 6.68 4.66zm-12.64 4.135-2.02-1.164a.08.08 0 0 1-.038-.057V6.075a4.5 4.5 0 0 1 7.375-3.453l-.142.08-4.778 2.758a.795.795 0 0 0-.393.681zm1.097-2.365 2.602-1.5 2.607 1.5v2.999l-2.597 1.5-2.607-1.5Z"
28
+ fill="currentColor"
29
+ />
30
+ </svg>
31
+ Open in ChatGPT
32
+ </a>
33
+ ),
34
+ claude: (url: string, siteName: string) => (
35
+ <a href={getPromptUrl('https://claude.ai/new', url, siteName)} rel="noopener noreferrer" target="_blank">
36
+ <svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
37
+ <path
38
+ d="m4.714 15.956 4.718-2.648.079-.23-.08-.128h-.23l-.79-.048-2.695-.073-2.337-.097-2.265-.122-.57-.121-.535-.704.055-.353.48-.321.685.06 1.518.104 2.277.157 1.651.098 2.447.255h.389l.054-.158-.133-.097-.103-.098-2.356-1.596-2.55-1.688-1.336-.972-.722-.491L2 6.223l-.158-1.008.655-.722.88.06.225.061.893.686 1.906 1.476 2.49 1.833.364.304.146-.104.018-.072-.164-.274-1.354-2.446-1.445-2.49-.644-1.032-.17-.619a2.972 2.972 0 0 1-.103-.729L6.287.133 6.7 0l.995.134.42.364.619 1.415L9.735 4.14l1.555 3.03.455.898.243.832.09.255h.159V9.01l.127-1.706.237-2.095.23-2.695.08-.76.376-.91.747-.492.583.28.48.685-.067.444-.286 1.851-.558 2.903-.365 1.942h.213l.243-.242.983-1.306 1.652-2.064.728-.82.85-.904.547-.431h1.032l.759 1.129-.34 1.166-1.063 1.347-.88 1.142-1.263 1.7-.79 1.36.074.11.188-.02 2.853-.606 1.542-.28 1.84-.315.832.388.09.395-.327.807-1.967.486-2.307.462-3.436.813-.043.03.049.061 1.548.146.662.036h1.62l3.018.225.79.522.473.638-.08.485-1.213.62-1.64-.389-3.825-.91-1.31-.329h-.183v.11l1.093 1.068 2.003 1.81 2.508 2.33.127.578-.321.455-.34-.049-2.204-1.657-.85-.747-1.925-1.62h-.127v.17l.443.649 2.343 3.521.122 1.08-.17.353-.607.213-.668-.122-1.372-1.924-1.415-2.168-1.141-1.943-.14.08-.674 7.254-.316.37-.728.28-.607-.461-.322-.747.322-1.476.388-1.924.316-1.53.285-1.9.17-.632-.012-.042-.14.018-1.432 1.967-2.18 2.945-1.724 1.845-.413.164-.716-.37.066-.662.401-.589 2.386-3.036 1.439-1.882.929-1.086-.006-.158h-.055L4.138 18.56l-1.13.146-.485-.456.06-.746.231-.243 1.907-1.312Z"
39
+ fill="currentColor"
40
+ />
41
+ </svg>
42
+ Open in Claude
43
+ </a>
44
+ ),
45
+ markdown: (url: string) => (
46
+ <a href={`${url}.md`} rel="noopener noreferrer" target="_blank">
47
+ <svg strokeLinejoin="round" viewBox="0 0 22 16">
48
+ <path
49
+ clipRule="evenodd"
50
+ d="M19.5 2.25H2.5C1.80964 2.25 1.25 2.80964 1.25 3.5V12.5C1.25 13.1904 1.80964 13.75 2.5 13.75H19.5C20.1904 13.75 20.75 13.1904 20.75 12.5V3.5C20.75 2.80964 20.1904 2.25 19.5 2.25ZM2.5 1C1.11929 1 0 2.11929 0 3.5V12.5C0 13.8807 1.11929 15 2.5 15H19.5C20.8807 15 22 13.8807 22 12.5V3.5C22 2.11929 20.8807 1 19.5 1H2.5ZM3 4.5H4H4.25H4.6899L4.98715 4.82428L7 7.02011L9.01285 4.82428L9.3101 4.5H9.75H10H11V5.5V11.5H9V7.79807L7.73715 9.17572L7 9.97989L6.26285 9.17572L5 7.79807V11.5H3V5.5V4.5ZM15 8V4.5H17V8H19.5L17 10.5L16 11.5L15 10.5L12.5 8H15Z"
51
+ fill="currentColor"
52
+ fillRule="evenodd"
53
+ />
54
+ </svg>
55
+ View as Markdown
56
+ </a>
57
+ ),
58
+ v0: (url: string, siteName: string) => (
59
+ <a href={getPromptUrl('https://v0.dev', url, siteName)} rel="noopener noreferrer" target="_blank">
60
+ <svg
61
+ className="size-4.5 -translate-x-px"
62
+ fill="currentColor"
63
+ viewBox="0 0 147 70"
64
+ xmlns="http://www.w3.org/2000/svg">
65
+ <path d="M56 50.203V14h14v46.156C70 65.593 65.593 70 60.156 70c-2.596 0-5.158-1-7-2.843L0 14h19.797L56 50.203ZM147 56h-14V23.953L100.953 56H133v14H96.687C85.814 70 77 61.186 77 50.312V14h14v32.156L123.156 14H91V0h36.312C138.186 0 147 8.814 147 19.688V56Z" />
66
+ </svg>
67
+ <span className="-translate-x-[2px]">Open in v0</span>
68
+ </a>
69
+ ),
70
+ }
71
+
72
+ export function DocsCopyPage({ page, url }: { page: string; url: string }) {
73
+ const siteConfig = useSiteConfig()
74
+ const siteName = siteConfig.name ?? 'documentation'
75
+ const { copyToClipboard, isCopied } = useCopyToClipboard()
76
+
77
+ const trigger = (
78
+ <Button className="peer [&>svg]:!size-4 size-8 shadow-none" size="sm" variant="secondary">
79
+ <ChevronDown />
80
+ </Button>
81
+ )
82
+
83
+ return (
84
+ <div className="group/buttons relative flex rounded-lg bg-secondary *:[[data-slot=button]]:focus-visible:relative *:[[data-slot=button]]:focus-visible:z-10">
85
+ <Button className="[&_svg]:!size-3.5" onClick={() => copyToClipboard(page)} size="sm" variant="secondary">
86
+ {isCopied ? <Check /> : <Copy />}
87
+ Copy Page
88
+ </Button>
89
+ <Separator className="bg-foreground/25" orientation="vertical" />
90
+ <DropdownMenu placement="bottom-end">
91
+ <DropdownMenuTrigger asChild className="hidden sm:flex">
92
+ {trigger}
93
+ </DropdownMenuTrigger>
94
+ <DropdownMenuContent className="bg-muted shadow-none">
95
+ {Object.entries(menuItems).map(([key, value]) => (
96
+ <DropdownMenuItem
97
+ className="flex [&>a]:flex [&>a]:items-center [&>a]:gap-2 [&[aria-selected]]:bg-zinc-600/40"
98
+ key={key}>
99
+ {value(url, siteName)}
100
+ </DropdownMenuItem>
101
+ ))}
102
+ </DropdownMenuContent>
103
+ </DropdownMenu>
104
+ </div>
105
+ )
106
+ }
@@ -0,0 +1,114 @@
1
+ 'use client'
2
+
3
+ import { type DocsConfig, useDocsConfig } from '@duck-docs/context'
4
+ import type { NavItem, NavItemWithChildren } from '@duck-docs/types/nav'
5
+ import { cn } from '@gentleduck/libs/cn'
6
+ import { buttonVariants } from '@gentleduck/registry-ui-duckui/button'
7
+ import { ArrowLeft, ArrowRight, ChevronLeft, ChevronRight } from 'lucide-react'
8
+ import Link from 'next/link'
9
+
10
+ interface DocsPagerProps {
11
+ doc: {
12
+ slug?: string
13
+ title: string
14
+ }
15
+ }
16
+
17
+ export function DocsPagerBottom({ doc }: DocsPagerProps) {
18
+ const docsConfig = useDocsConfig()
19
+ const pager = getPagerForDoc(doc, docsConfig)
20
+
21
+ if (!pager) {
22
+ return null
23
+ }
24
+
25
+ return (
26
+ <div className="flex flex-row items-center justify-between">
27
+ {pager?.prev?.href && (
28
+ <Link
29
+ className={cn(
30
+ buttonVariants({
31
+ className: 'flex items-center',
32
+ variant: 'outline',
33
+ }),
34
+ )}
35
+ href={pager.prev.href}>
36
+ <ChevronLeft className="mr-2 size-4" />
37
+ <span>{pager.prev.title}</span>
38
+ </Link>
39
+ )}
40
+ {pager?.next?.href && (
41
+ <Link
42
+ className={cn(
43
+ buttonVariants({
44
+ className: 'flex items-center',
45
+ variant: 'outline',
46
+ }),
47
+ )}
48
+ href={pager.next.href}>
49
+ <span>{pager.next.title}</span>
50
+ <ChevronRight className="ml-2 size-4" />
51
+ </Link>
52
+ )}
53
+ </div>
54
+ )
55
+ }
56
+ export function DocsPagerTop({ doc }: DocsPagerProps) {
57
+ const docsConfig = useDocsConfig()
58
+ const pager = getPagerForDoc(doc, docsConfig)
59
+
60
+ if (!pager) {
61
+ return null
62
+ }
63
+
64
+ return (
65
+ <div className="flex flex-row items-center justify-between">
66
+ {pager?.prev?.href && (
67
+ <Link
68
+ className={cn(
69
+ buttonVariants({
70
+ className: '[&>svg]:!size-4 size-8 items-center',
71
+ size: 'sm',
72
+ variant: 'secondary',
73
+ }),
74
+ )}
75
+ href={pager.prev.href}>
76
+ <ArrowLeft />
77
+ </Link>
78
+ )}
79
+ {pager?.next?.href && (
80
+ <Link
81
+ className={cn(
82
+ buttonVariants({
83
+ className: '[&>svg]:!size-4 ml-2 size-8 items-center',
84
+ size: 'sm',
85
+ variant: 'secondary',
86
+ }),
87
+ )}
88
+ href={pager.next.href}>
89
+ <ArrowRight />
90
+ </Link>
91
+ )}
92
+ </div>
93
+ )
94
+ }
95
+
96
+ export function getPagerForDoc(doc: DocsPagerProps['doc'], docsConfig: DocsConfig) {
97
+ const nav = doc.title.startsWith('/docs/charts') ? docsConfig.chartsNav : docsConfig.sidebarNav
98
+ const flattenedLinks = [null, ...flatten(nav ?? []), null]
99
+ const activeIndex = flattenedLinks.findIndex((link) => link?.href?.includes(doc.slug ?? doc.title))
100
+ const prev = activeIndex !== 0 ? flattenedLinks[activeIndex - 1] : null
101
+ const next = activeIndex !== flattenedLinks.length - 1 ? flattenedLinks[activeIndex + 1] : null
102
+ return {
103
+ next,
104
+ prev,
105
+ }
106
+ }
107
+
108
+ export function flatten(links: NavItemWithChildren[]): NavItem[] {
109
+ return links
110
+ .reduce<NavItem[]>((flat, link) => {
111
+ return flat.concat(link.items?.length ? flatten(link.items) : link)
112
+ }, [])
113
+ .filter((link) => !link?.disabled)
114
+ }
@@ -0,0 +1,104 @@
1
+ 'use client'
2
+
3
+ import { type DocsConfig, useDocsConfig } from '@duck-docs/context'
4
+ import type { SidebarNavItem } from '@duck-docs/types/nav'
5
+ import { cn } from '@gentleduck/libs/cn'
6
+ import Link from 'next/link'
7
+ import { usePathname } from 'next/navigation'
8
+
9
+ export interface DocsSidebarNavProps {
10
+ config?: DocsConfig
11
+ }
12
+
13
+ export function DocsSidebarNav({ config }: DocsSidebarNavProps) {
14
+ const pathname = usePathname()
15
+ const fallbackConfig = useDocsConfig()
16
+ const resolvedConfig = config ?? fallbackConfig
17
+
18
+ const items = pathname?.startsWith('/charts') ? resolvedConfig.chartsNav : resolvedConfig.sidebarNav
19
+
20
+ return (
21
+ items?.length && (
22
+ <div className="flex w-full flex-col">
23
+ {items.map((item, index) => (
24
+ <CategoryItem item={item} key={index} pathname={pathname} />
25
+ ))}
26
+ </div>
27
+ )
28
+ )
29
+ }
30
+
31
+ // Memoized category component to prevent unnecessary re-renders
32
+ const CategoryItem = ({ item, pathname }: { item: SidebarNavItem; pathname: string | null }) => {
33
+ return (
34
+ <div className="mb-2 flex flex-col gap-1">
35
+ <div className="flex h-[36px] w-full items-center justify-between text-start font-semibold text-sm [&>div]:w-full [&>div]:justify-between">
36
+ {item.title}
37
+ {item.label && (
38
+ <span className="bg- ml-2 rounded-md px-1.5 py-0.5 font-normal text-[#000000] text-sm leading-none no-underline group-hover:no-underline">
39
+ {item.label}
40
+ </span>
41
+ )}
42
+ </div>
43
+ <div className="border-l">
44
+ {item?.items?.length && <DocsSidebarNavItems items={item.items} pathname={pathname} />}
45
+ </div>
46
+ </div>
47
+ )
48
+ }
49
+
50
+ interface DocsSidebarNavItemsProps {
51
+ items: SidebarNavItem[]
52
+ pathname: string | null
53
+ className?: string
54
+ }
55
+
56
+ export function DocsSidebarNavItems({ items, pathname }: DocsSidebarNavItemsProps) {
57
+ return (
58
+ items?.length && (
59
+ <ul>
60
+ {items.map((item, index) => (
61
+ <DocsSidebarNavItem item={item} key={index} pathname={pathname} />
62
+ ))}
63
+ </ul>
64
+ )
65
+ )
66
+ }
67
+
68
+ export function DocsSidebarNavItem({ item, pathname }: { item: SidebarNavItem; pathname: string | null }) {
69
+ if (item.href && !item.disabled) {
70
+ return (
71
+ <li className={cn(pathname === item.href && 'border-primary border-l')}>
72
+ <Link
73
+ className={cn(
74
+ 'group flex w-full items-center border-primary px-4 py-1 font-medium text-sm focus-visible:border-l focus-visible:outline-none',
75
+ pathname === item.href ? 'font-medium text-foreground' : 'text-muted-foreground',
76
+ )}
77
+ href={item.href}
78
+ rel={item.external ? 'noreferrer' : ''}
79
+ target={item.external ? '_blank' : ''}>
80
+ {item.title}
81
+ {item.label && (
82
+ <span className="ml-2 rounded-md bg-primary px-1.5 py-0.5 font-medium text-accent text-xs leading-none no-underline group-hover:no-underline">
83
+ {item.label}
84
+ </span>
85
+ )}
86
+ </Link>
87
+ </li>
88
+ )
89
+ }
90
+
91
+ return (
92
+ <span
93
+ className={cn(
94
+ 'flex w-full cursor-not-allowed items-center rounded-md p-2 text-muted-foreground hover:underline',
95
+ )}>
96
+ {item.title}
97
+ {item.label && (
98
+ <span className="ml-2 rounded-md bg-muted px-1.5 py-0.5 text-muted-foreground text-sm leading-none no-underline group-hover:no-underline">
99
+ {item.label}
100
+ </span>
101
+ )}
102
+ </span>
103
+ )
104
+ }
@@ -0,0 +1,104 @@
1
+ 'use client'
2
+
3
+ import type { TocEntry } from '@duck-docs/context'
4
+ import { useMounted } from '@duck-docs/hooks/use-mounted'
5
+ import { cn } from '@gentleduck/libs/cn'
6
+ import * as React from 'react'
7
+
8
+ interface TocProps {
9
+ toc: TocEntry[]
10
+ }
11
+
12
+ export function DashboardTableOfContents({ toc }: TocProps) {
13
+ const itemIds = React.useMemo(
14
+ () =>
15
+ toc
16
+ ? toc
17
+ .flatMap((item) => [item.url, item?.items?.map((item) => item.url)])
18
+ .flat()
19
+ .filter(Boolean)
20
+ .map((id) => id?.split('#')[1])
21
+ : [],
22
+ [toc],
23
+ )
24
+ const activeHeading = useActiveItem(itemIds)
25
+ const mounted = useMounted()
26
+
27
+ return mounted ? (
28
+ <div className="space-y-2">
29
+ <p className="font-medium">On This Page</p>
30
+ <Tree activeItem={activeHeading} tree={toc} />
31
+ </div>
32
+ ) : null
33
+ }
34
+
35
+ function useActiveItem(itemIds: (string | undefined)[]) {
36
+ const [activeId, setActiveId] = React.useState<string>('')
37
+
38
+ React.useEffect(() => {
39
+ const observer = new IntersectionObserver(
40
+ (entries) => {
41
+ entries.forEach((entry) => {
42
+ if (entry.isIntersecting) {
43
+ setActiveId(entry.target.id)
44
+ }
45
+ })
46
+ },
47
+ { rootMargin: `0% 0% -80% 0%` },
48
+ )
49
+
50
+ itemIds?.forEach((id) => {
51
+ if (!id) {
52
+ return
53
+ }
54
+
55
+ const element = document.getElementById(id)
56
+ if (element) {
57
+ observer.observe(element)
58
+ }
59
+ })
60
+
61
+ return () => {
62
+ itemIds?.forEach((id) => {
63
+ if (!id) {
64
+ return
65
+ }
66
+
67
+ const element = document.getElementById(id)
68
+ if (element) {
69
+ observer.unobserve(element)
70
+ }
71
+ })
72
+ }
73
+ }, [itemIds])
74
+
75
+ return activeId
76
+ }
77
+
78
+ interface TreeProps {
79
+ tree: TocEntry[]
80
+ level?: number
81
+ activeItem?: string | null
82
+ }
83
+
84
+ function Tree({ tree, level = 1, activeItem }: TreeProps) {
85
+ return tree.length && level < 3 ? (
86
+ <ul className={cn('m-0 list-none', { 'pl-4': level !== 1 })}>
87
+ {tree.map((item, index) => {
88
+ return (
89
+ <li className={cn('mt-0 pt-2')} key={index}>
90
+ <a
91
+ className={cn(
92
+ 'inline-block no-underline',
93
+ item.url === `#${activeItem}` ? 'font-medium text-primary' : 'text-muted-foreground text-sm',
94
+ )}
95
+ href={item.url}>
96
+ {item.title}
97
+ </a>
98
+ {item.items?.length ? <Tree activeItem={activeItem} level={level + 1} tree={item.items} /> : null}
99
+ </li>
100
+ )
101
+ })}
102
+ </ul>
103
+ ) : null
104
+ }
@@ -0,0 +1,4 @@
1
+ export * from './docs-copy-page'
2
+ export * from './docs-pager'
3
+ export * from './docs-sidebar'
4
+ export * from './docs-toc'