@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.
- package/LICENSE +21 -0
- package/dist/callout-CFw8zUIz.js +2 -0
- package/dist/callout-CFw8zUIz.js.map +1 -0
- package/dist/callout-VcT2d48I.d.ts +17 -0
- package/dist/callout-VcT2d48I.d.ts.map +1 -0
- package/dist/charts-DX0UohRi.js +2 -0
- package/dist/charts-DX0UohRi.js.map +1 -0
- package/dist/charts-hfCEZEQp.d.ts +6 -0
- package/dist/charts-hfCEZEQp.d.ts.map +1 -0
- package/dist/client.d.ts +54 -0
- package/dist/client.js +1 -0
- package/dist/code-Cz75Womb.js +0 -0
- package/dist/code-block-CR2loi-i.d.ts +14 -0
- package/dist/code-block-CR2loi-i.d.ts.map +1 -0
- package/dist/code-block-DqFdGhI-.js +2 -0
- package/dist/code-block-DqFdGhI-.js.map +1 -0
- package/dist/code-block-wrapper-C8I0XMsN.d.ts +12 -0
- package/dist/code-block-wrapper-C8I0XMsN.d.ts.map +1 -0
- package/dist/code-block-wrapper-CCAw9mie.js +2 -0
- package/dist/code-block-wrapper-CCAw9mie.js.map +1 -0
- package/dist/code-preview-CeNXQxYN.d.ts +20 -0
- package/dist/code-preview-CeNXQxYN.d.ts.map +1 -0
- package/dist/code-preview-cIvw8qyg.js +2 -0
- package/dist/code-preview-cIvw8qyg.js.map +1 -0
- package/dist/colors-Ba_cRR6y.js +2 -0
- package/dist/colors-Ba_cRR6y.js.map +1 -0
- package/dist/colors-CpJMSMtf.d.ts +47 -0
- package/dist/colors-CpJMSMtf.d.ts.map +1 -0
- package/dist/command-menu-7HTBKVxd.js +0 -0
- package/dist/command-menu-BVebU1JI.js +2 -0
- package/dist/command-menu-BVebU1JI.js.map +1 -0
- package/dist/command-menu-C8RLyuBe.d.ts +7 -0
- package/dist/command-menu-C8RLyuBe.d.ts.map +1 -0
- package/dist/component-preview-CL6guE-v.js +2 -0
- package/dist/component-preview-CL6guE-v.js.map +1 -0
- package/dist/component-preview-DknaF8TG.d.ts +33 -0
- package/dist/component-preview-DknaF8TG.d.ts.map +1 -0
- package/dist/component-source-BCBDjfEb.js +5 -0
- package/dist/component-source-BCBDjfEb.js.map +1 -0
- package/dist/component-source-IrGlRkUy.d.ts +17 -0
- package/dist/component-source-IrGlRkUy.d.ts.map +1 -0
- package/dist/components/copy-button/copy-button.d.ts +4 -0
- package/dist/components/copy-button/copy-button.js +1 -0
- package/dist/components/copy-button/copy-button.types.d.ts +3 -0
- package/dist/components/copy-button/copy-button.types.js +0 -0
- package/dist/components/copy-button/index.d.ts +5 -0
- package/dist/components/copy-button/index.js +1 -0
- package/dist/components/docs/docs-copy-page.d.ts +2 -0
- package/dist/components/docs/docs-copy-page.js +1 -0
- package/dist/components/docs/docs-pager.d.ts +4 -0
- package/dist/components/docs/docs-pager.js +1 -0
- package/dist/components/docs/docs-sidebar.d.ts +4 -0
- package/dist/components/docs/docs-sidebar.js +1 -0
- package/dist/components/docs/docs-toc.d.ts +4 -0
- package/dist/components/docs/docs-toc.js +1 -0
- package/dist/components/docs/index.d.ts +8 -0
- package/dist/components/docs/index.js +1 -0
- package/dist/components/icons.d.ts +2 -0
- package/dist/components/icons.js +1 -0
- package/dist/components/index.d.ts +44 -0
- package/dist/components/index.js +1 -0
- package/dist/components/layouts/command-menu/command-menu.d.ts +2 -0
- package/dist/components/layouts/command-menu/command-menu.js +1 -0
- package/dist/components/layouts/command-menu/index.d.ts +3 -0
- package/dist/components/layouts/command-menu/index.js +1 -0
- package/dist/components/layouts/index.d.ts +8 -0
- package/dist/components/layouts/index.js +1 -0
- package/dist/components/layouts/site-footer/index.d.ts +2 -0
- package/dist/components/layouts/site-footer/index.js +1 -0
- package/dist/components/layouts/site-header/header-shell.d.ts +2 -0
- package/dist/components/layouts/site-header/header-shell.js +1 -0
- package/dist/components/layouts/site-header/index.d.ts +3 -0
- package/dist/components/layouts/site-header/index.js +1 -0
- package/dist/components/layouts/tailwind-indicator/index.d.ts +2 -0
- package/dist/components/layouts/tailwind-indicator/index.js +1 -0
- package/dist/components/main-nav.d.ts +2 -0
- package/dist/components/main-nav.js +1 -0
- package/dist/components/mdx/mdx-components/callout.d.ts +2 -0
- package/dist/components/mdx/mdx-components/callout.js +1 -0
- package/dist/components/mdx/mdx-components/code/code-block-wrapper.d.ts +2 -0
- package/dist/components/mdx/mdx-components/code/code-block-wrapper.js +1 -0
- package/dist/components/mdx/mdx-components/code/code-block.d.ts +2 -0
- package/dist/components/mdx/mdx-components/code/code-block.js +1 -0
- package/dist/components/mdx/mdx-components/code/code-preview.d.ts +2 -0
- package/dist/components/mdx/mdx-components/code/code-preview.js +1 -0
- package/dist/components/mdx/mdx-components/code/component-preview.d.ts +2 -0
- package/dist/components/mdx/mdx-components/code/component-preview.js +1 -0
- package/dist/components/mdx/mdx-components/code/component-source.d.ts +2 -0
- package/dist/components/mdx/mdx-components/code/component-source.js +1 -0
- package/dist/components/mdx/mdx-components/code/figcaption-block.d.ts +2 -0
- package/dist/components/mdx/mdx-components/code/figcaption-block.js +1 -0
- package/dist/components/mdx/mdx-components/code/index.d.ts +11 -0
- package/dist/components/mdx/mdx-components/code/index.js +1 -0
- package/dist/components/mdx/mdx-components/code/pre-block.d.ts +4 -0
- package/dist/components/mdx/mdx-components/code/pre-block.js +1 -0
- package/dist/components/mdx/mdx-components/code/span-block.d.ts +11 -0
- package/dist/components/mdx/mdx-components/code/span-block.d.ts.map +1 -0
- package/dist/components/mdx/mdx-components/code/span-block.js +2 -0
- package/dist/components/mdx/mdx-components/code/span-block.js.map +1 -0
- package/dist/components/mdx/mdx-components/components-list.d.ts +4 -0
- package/dist/components/mdx/mdx-components/components-list.js +1 -0
- package/dist/components/mdx/mdx-components/exalidraw.d.ts +7 -0
- package/dist/components/mdx/mdx-components/exalidraw.d.ts.map +1 -0
- package/dist/components/mdx/mdx-components/exalidraw.js +2 -0
- package/dist/components/mdx/mdx-components/exalidraw.js.map +1 -0
- package/dist/components/mdx/mdx-components/framework-docs.d.ts +2 -0
- package/dist/components/mdx/mdx-components/framework-docs.js +1 -0
- package/dist/components/mdx/mdx-components/index.d.ts +20 -0
- package/dist/components/mdx/mdx-components/index.js +1 -0
- package/dist/components/mdx/mdx-components/table.d.ts +2 -0
- package/dist/components/mdx/mdx-components/table.js +1 -0
- package/dist/components/mdx/mdx-components/tabs.d.ts +2 -0
- package/dist/components/mdx/mdx-components/tabs.js +1 -0
- package/dist/components/mdx/mdx-components/typepography.d.ts +2 -0
- package/dist/components/mdx/mdx-components/typepography.js +1 -0
- package/dist/components/mdx/mdx.d.ts +2 -0
- package/dist/components/mdx/mdx.js +1 -0
- package/dist/components/mobile-nav.d.ts +2 -0
- package/dist/components/mobile-nav.js +1 -0
- package/dist/components/mode-toggle.d.ts +2 -0
- package/dist/components/mode-toggle.js +1 -0
- package/dist/components/page-header.d.ts +2 -0
- package/dist/components/page-header.js +1 -0
- package/dist/components/providers.d.ts +2 -0
- package/dist/components/providers.js +1 -0
- package/dist/components/themes/index.d.ts +3 -0
- package/dist/components/themes/index.js +1 -0
- package/dist/components/themes/style-switcher.d.ts +2 -0
- package/dist/components/themes/style-switcher.js +1 -0
- package/dist/components-list-BCV3yN6H.js +2 -0
- package/dist/components-list-BCV3yN6H.js.map +1 -0
- package/dist/components-list-ZLlUD-Nr.d.ts +12 -0
- package/dist/components-list-ZLlUD-Nr.d.ts.map +1 -0
- package/dist/context/context.d.ts +2 -0
- package/dist/context/context.js +1 -0
- package/dist/context/context.types.d.ts +2 -0
- package/dist/context/context.types.js +0 -0
- package/dist/context/index.d.ts +4 -0
- package/dist/context/index.js +1 -0
- package/dist/context-Bd4Sf8r8.js +2 -0
- package/dist/context-Bd4Sf8r8.js.map +1 -0
- package/dist/context-BoqMzqgD.js +0 -0
- package/dist/context-tLL-jUw_.d.ts +26 -0
- package/dist/context-tLL-jUw_.d.ts.map +1 -0
- package/dist/context.types-8c0sgn5Q.js +0 -0
- package/dist/context.types-DgaGu8Ly.d.ts +57 -0
- package/dist/context.types-DgaGu8Ly.d.ts.map +1 -0
- package/dist/copy-button-Bh7DmVLN.d.ts +22 -0
- package/dist/copy-button-Bh7DmVLN.d.ts.map +1 -0
- package/dist/copy-button-D50DXq56.js +2 -0
- package/dist/copy-button-D50DXq56.js.map +1 -0
- package/dist/copy-button-DpLK4Hc9.js +0 -0
- package/dist/copy-button.types-D6D1XKDN.d.ts +19 -0
- package/dist/copy-button.types-D6D1XKDN.d.ts.map +1 -0
- package/dist/copy-button.types-ZXpoKEH1.js +0 -0
- package/dist/docs-B9qhW8T2.js +0 -0
- package/dist/docs-copy-page-B1HSXqlm.js +3 -0
- package/dist/docs-copy-page-B1HSXqlm.js.map +1 -0
- package/dist/docs-copy-page-rZ3GkUUQ.d.ts +13 -0
- package/dist/docs-copy-page-rZ3GkUUQ.d.ts.map +1 -0
- package/dist/docs-pager-2p2cKZcg.js +2 -0
- package/dist/docs-pager-2p2cKZcg.js.map +1 -0
- package/dist/docs-pager-CLERxm13.d.ts +25 -0
- package/dist/docs-pager-CLERxm13.d.ts.map +1 -0
- package/dist/docs-sidebar-C4HMPDIN.d.ts +30 -0
- package/dist/docs-sidebar-C4HMPDIN.d.ts.map +1 -0
- package/dist/docs-sidebar-Cq7haHti.js +2 -0
- package/dist/docs-sidebar-Cq7haHti.js.map +1 -0
- package/dist/docs-toc-B4_Znnrj.d.ts +13 -0
- package/dist/docs-toc-B4_Znnrj.d.ts.map +1 -0
- package/dist/docs-toc-DfQz3sNZ.js +2 -0
- package/dist/docs-toc-DfQz3sNZ.js.map +1 -0
- package/dist/events-BKAEw9TQ.d.ts +25 -0
- package/dist/events-BKAEw9TQ.d.ts.map +1 -0
- package/dist/events-D55YvIRi.js +2 -0
- package/dist/events-D55YvIRi.js.map +1 -0
- package/dist/figcaption-block-B7CmTI6d.d.ts +11 -0
- package/dist/figcaption-block-B7CmTI6d.d.ts.map +1 -0
- package/dist/figcaption-block-DWZhs-6i.js +2 -0
- package/dist/figcaption-block-DWZhs-6i.js.map +1 -0
- package/dist/framework-docs-ZYLz3BBy.js +2 -0
- package/dist/framework-docs-ZYLz3BBy.js.map +1 -0
- package/dist/framework-docs-tYKaeYsi.d.ts +13 -0
- package/dist/framework-docs-tYKaeYsi.d.ts.map +1 -0
- package/dist/header-shell-BusaKA4C.d.ts +39 -0
- package/dist/header-shell-BusaKA4C.d.ts.map +1 -0
- package/dist/header-shell-CWHnv2ot.js +2 -0
- package/dist/header-shell-CWHnv2ot.js.map +1 -0
- package/dist/hooks/index.d.ts +8 -0
- package/dist/hooks/index.js +1 -0
- package/dist/hooks/use-colors.d.ts +3 -0
- package/dist/hooks/use-colors.js +1 -0
- package/dist/hooks/use-config.d.ts +2 -0
- package/dist/hooks/use-config.js +1 -0
- package/dist/hooks/use-lift-mode.d.ts +2 -0
- package/dist/hooks/use-lift-mode.js +1 -0
- package/dist/hooks/use-meta-colors.d.ts +2 -0
- package/dist/hooks/use-meta-colors.js +1 -0
- package/dist/hooks/use-mounted.d.ts +2 -0
- package/dist/hooks/use-mounted.js +1 -0
- package/dist/hooks/use-themes-config.d.ts +2 -0
- package/dist/hooks/use-themes-config.js +1 -0
- package/dist/icons-BqnlXRgx.d.ts +30 -0
- package/dist/icons-BqnlXRgx.d.ts.map +1 -0
- package/dist/icons-bFf026bR.js +2 -0
- package/dist/icons-bFf026bR.js.map +1 -0
- package/dist/index-2mWOLEIP.d.ts +7 -0
- package/dist/index-2mWOLEIP.d.ts.map +1 -0
- package/dist/index-BZ1Usw1L.d.ts +8 -0
- package/dist/index-BZ1Usw1L.d.ts.map +1 -0
- package/dist/index-Bunxo_8h.d.ts +8 -0
- package/dist/index-Bunxo_8h.d.ts.map +1 -0
- package/dist/index-BwEOYyLd.d.ts +1 -0
- package/dist/index-CJOkJMYm.d.ts +1 -0
- package/dist/index-Cp46Zvz-.d.ts +1 -0
- package/dist/index-CsVdkYso.d.ts +1 -0
- package/dist/index-DIk3-d3u.d.ts +1 -0
- package/dist/index-LAzYY5Wa.d.ts +1 -0
- package/dist/index-k586z2Y3.d.ts +1 -0
- package/dist/index-mj9Ys67i.d.ts +1 -0
- package/dist/index-otwxHF3U.d.ts +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.js +1 -0
- package/dist/layouts-hVp-aKom.js +0 -0
- package/dist/lib/charts.d.ts +2 -0
- package/dist/lib/charts.js +1 -0
- package/dist/lib/colors.d.ts +2 -0
- package/dist/lib/colors.js +1 -0
- package/dist/lib/events.d.ts +2 -0
- package/dist/lib/events.js +1 -0
- package/dist/lib/index.d.ts +6 -0
- package/dist/lib/index.js +1 -0
- package/dist/lib/registry-colors-data.d.ts +229 -0
- package/dist/lib/registry-colors-data.d.ts.map +1 -0
- package/dist/lib/registry-colors-data.js +1 -0
- package/dist/lib/registry-styles.d.ts +2 -0
- package/dist/lib/registry-styles.js +1 -0
- package/dist/lib/themes.d.ts +2 -0
- package/dist/lib/themes.js +1 -0
- package/dist/lib/utils.d.ts +2 -0
- package/dist/lib/utils.js +1 -0
- package/dist/main-nav-Df2pgQUs.js +2 -0
- package/dist/main-nav-Df2pgQUs.js.map +1 -0
- package/dist/main-nav-SathVgSN.d.ts +7 -0
- package/dist/main-nav-SathVgSN.d.ts.map +1 -0
- package/dist/mdx-CBnfwESR.d.ts +12 -0
- package/dist/mdx-CBnfwESR.d.ts.map +1 -0
- package/dist/mdx-components-BoD1jTr7.js +0 -0
- package/dist/mdx-cqn1ggXI.js +2 -0
- package/dist/mdx-cqn1ggXI.js.map +1 -0
- package/dist/metadata-plugin-Ag61IUUu.d.ts +7 -0
- package/dist/metadata-plugin-Ag61IUUu.d.ts.map +1 -0
- package/dist/metadata-plugin-Mc8lCfYT.js +2 -0
- package/dist/metadata-plugin-Mc8lCfYT.js.map +1 -0
- package/dist/mobile-nav-DRQtHK-O.js +2 -0
- package/dist/mobile-nav-DRQtHK-O.js.map +1 -0
- package/dist/mobile-nav-hEfoD2ld.d.ts +7 -0
- package/dist/mobile-nav-hEfoD2ld.d.ts.map +1 -0
- package/dist/mode-toggle-BcPx4Vfk.d.ts +7 -0
- package/dist/mode-toggle-BcPx4Vfk.d.ts.map +1 -0
- package/dist/mode-toggle-CGGAaMUK.js +2 -0
- package/dist/mode-toggle-CGGAaMUK.js.map +1 -0
- package/dist/nav-0JAtUIst.d.ts +18 -0
- package/dist/nav-0JAtUIst.d.ts.map +1 -0
- package/dist/nav-6wUjcK0K.js +0 -0
- package/dist/page-header-BGKsl1LK.js +2 -0
- package/dist/page-header-BGKsl1LK.js.map +1 -0
- package/dist/page-header-Brw3423H.d.ts +23 -0
- package/dist/page-header-Brw3423H.d.ts.map +1 -0
- package/dist/pre-block-BThyCz1h.js +2 -0
- package/dist/pre-block-BThyCz1h.js.map +1 -0
- package/dist/pre-block-CTP3z9eq.d.ts +33 -0
- package/dist/pre-block-CTP3z9eq.d.ts.map +1 -0
- package/dist/providers-BU3xm7I4.d.ts +11 -0
- package/dist/providers-BU3xm7I4.d.ts.map +1 -0
- package/dist/providers-fDpVqSs8.js +2 -0
- package/dist/providers-fDpVqSs8.js.map +1 -0
- package/dist/registry-colors-data-FyxAihEQ.js +2 -0
- package/dist/registry-colors-data-FyxAihEQ.js.map +1 -0
- package/dist/registry-styles-Cm1HpC4C.js +2 -0
- package/dist/registry-styles-Cm1HpC4C.js.map +1 -0
- package/dist/registry-styles-WvCGd0xY.d.ts +9 -0
- package/dist/registry-styles-WvCGd0xY.d.ts.map +1 -0
- package/dist/rehype-pre-block-source-Bz3-G4tr.js +2 -0
- package/dist/rehype-pre-block-source-Bz3-G4tr.js.map +1 -0
- package/dist/rehype-pre-block-source-Le9z9RN8.d.ts +7 -0
- package/dist/rehype-pre-block-source-Le9z9RN8.d.ts.map +1 -0
- package/dist/rehype-title-C1q6PbyG.js +2 -0
- package/dist/rehype-title-C1q6PbyG.js.map +1 -0
- package/dist/rehype-title-Dwt_OKnR.d.ts +7 -0
- package/dist/rehype-title-Dwt_OKnR.d.ts.map +1 -0
- package/dist/site-footer-CsUC-l-l.js +2 -0
- package/dist/site-footer-CsUC-l-l.js.map +1 -0
- package/dist/site-header-Bi3-9Kl3.js +2 -0
- package/dist/site-header-Bi3-9Kl3.js.map +1 -0
- package/dist/style-switcher-BXEGTMW2.d.ts +12 -0
- package/dist/style-switcher-BXEGTMW2.d.ts.map +1 -0
- package/dist/style-switcher-CpcMcuwL.js +2 -0
- package/dist/style-switcher-CpcMcuwL.js.map +1 -0
- package/dist/styles/base.css +156 -0
- package/dist/styles/docs.css +186 -0
- package/dist/styles/mdx.css +205 -0
- package/dist/table-B1hJe5kw.d.ts +10 -0
- package/dist/table-B1hJe5kw.d.ts.map +1 -0
- package/dist/table-Sc60jiil.js +2 -0
- package/dist/table-Sc60jiil.js.map +1 -0
- package/dist/tabs-DWxNPhgN.d.ts +23 -0
- package/dist/tabs-DWxNPhgN.d.ts.map +1 -0
- package/dist/tabs-KvYm5au9.js +2 -0
- package/dist/tabs-KvYm5au9.js.map +1 -0
- package/dist/tailwind-indicator-CV2jUfip.js +2 -0
- package/dist/tailwind-indicator-CV2jUfip.js.map +1 -0
- package/dist/themes-Dg5GgDgK.js +0 -0
- package/dist/themes-DsvojWlq.js +2 -0
- package/dist/themes-DsvojWlq.js.map +1 -0
- package/dist/themes-dv8YVpXg.d.ts +495 -0
- package/dist/themes-dv8YVpXg.d.ts.map +1 -0
- package/dist/typepography-B_jjjv9F.d.ts +54 -0
- package/dist/typepography-B_jjjv9F.d.ts.map +1 -0
- package/dist/typepography-Btk-lJ3O.js +2 -0
- package/dist/typepography-Btk-lJ3O.js.map +1 -0
- package/dist/types/index.d.ts +4 -0
- package/dist/types/index.js +0 -0
- package/dist/types/nav.d.ts +2 -0
- package/dist/types/nav.js +0 -0
- package/dist/types/unist.d.ts +2 -0
- package/dist/types/unist.js +0 -0
- package/dist/unist-Bs-H_R8g.d.ts +40 -0
- package/dist/unist-Bs-H_R8g.d.ts.map +1 -0
- package/dist/unist-DpNAVhDX.js +0 -0
- package/dist/use-colors-CeiLGCjZ.d.ts +13 -0
- package/dist/use-colors-CeiLGCjZ.d.ts.map +1 -0
- package/dist/use-colors-JhoQAYK2.js +2 -0
- package/dist/use-colors-JhoQAYK2.js.map +1 -0
- package/dist/use-config-CFygUPAg.d.ts +13 -0
- package/dist/use-config-CFygUPAg.d.ts.map +1 -0
- package/dist/use-config-D1zkiIbf.js +2 -0
- package/dist/use-config-D1zkiIbf.js.map +1 -0
- package/dist/use-lift-mode-Dya2HcpU.js +2 -0
- package/dist/use-lift-mode-Dya2HcpU.js.map +1 -0
- package/dist/use-lift-mode-IpZRia0D.d.ts +8 -0
- package/dist/use-lift-mode-IpZRia0D.d.ts.map +1 -0
- package/dist/use-meta-colors-BhIhFzvx.js +2 -0
- package/dist/use-meta-colors-BhIhFzvx.js.map +1 -0
- package/dist/use-meta-colors-C8OegAZO.d.ts +8 -0
- package/dist/use-meta-colors-C8OegAZO.d.ts.map +1 -0
- package/dist/use-mounted-D25Cx8rc.d.ts +5 -0
- package/dist/use-mounted-D25Cx8rc.d.ts.map +1 -0
- package/dist/use-mounted-SpB3P6Vt.js +2 -0
- package/dist/use-mounted-SpB3P6Vt.js.map +1 -0
- package/dist/use-themes-config-Bo-JZDNU.js +2 -0
- package/dist/use-themes-config-Bo-JZDNU.js.map +1 -0
- package/dist/use-themes-config-DfQCuhPn.d.ts +14 -0
- package/dist/use-themes-config-DfQCuhPn.d.ts.map +1 -0
- package/dist/utils-CMPpWmbv.d.ts +9 -0
- package/dist/utils-CMPpWmbv.d.ts.map +1 -0
- package/dist/utils-NjSy-iOL.js +2 -0
- package/dist/utils-NjSy-iOL.js.map +1 -0
- package/dist/velite/browser.d.ts +11 -0
- package/dist/velite/browser.d.ts.map +1 -0
- package/dist/velite/browser.js +2 -0
- package/dist/velite/browser.js.map +1 -0
- package/dist/velite/config.d.ts +21 -0
- package/dist/velite/config.d.ts.map +1 -0
- package/dist/velite/config.js +2 -0
- package/dist/velite/config.js.map +1 -0
- package/dist/velite/index.d.ts +10 -0
- package/dist/velite/index.js +1 -0
- package/dist/velite/plugins/index.d.ts +6 -0
- package/dist/velite/plugins/index.js +1 -0
- package/dist/velite/plugins/metadata-plugin.d.ts +4 -0
- package/dist/velite/plugins/metadata-plugin.js +1 -0
- package/dist/velite/plugins/rehype-pre-block-source.d.ts +4 -0
- package/dist/velite/plugins/rehype-pre-block-source.js +1 -0
- package/dist/velite/plugins/rehype-title.d.ts +4 -0
- package/dist/velite/plugins/rehype-title.js +1 -0
- package/dist/velite/rehype-npm-command.d.ts +8 -0
- package/dist/velite/rehype-npm-command.d.ts.map +1 -0
- package/dist/velite/rehype-npm-command.js +2 -0
- package/dist/velite/rehype-npm-command.js.map +1 -0
- package/dist/velite/utils.d.ts +5 -0
- package/dist/velite/utils.d.ts.map +1 -0
- package/dist/velite/utils.js +2 -0
- package/dist/velite/utils.js.map +1 -0
- package/package.json +174 -0
- package/src/client.ts +5 -0
- package/src/components/copy-button/copy-button.tsx +88 -0
- package/src/components/copy-button/copy-button.types.ts +17 -0
- package/src/components/copy-button/index.ts +2 -0
- package/src/components/docs/docs-copy-page.tsx +106 -0
- package/src/components/docs/docs-pager.tsx +114 -0
- package/src/components/docs/docs-sidebar.tsx +104 -0
- package/src/components/docs/docs-toc.tsx +104 -0
- package/src/components/docs/index.ts +4 -0
- package/src/components/icons.tsx +194 -0
- package/src/components/index.ts +13 -0
- package/src/components/layouts/command-menu/command-menu.tsx +166 -0
- package/src/components/layouts/command-menu/index.ts +1 -0
- package/src/components/layouts/index.ts +4 -0
- package/src/components/layouts/site-footer/index.tsx +70 -0
- package/src/components/layouts/site-header/header-shell.tsx +75 -0
- package/src/components/layouts/site-header/index.tsx +121 -0
- package/src/components/layouts/tailwind-indicator/index.tsx +16 -0
- package/src/components/main-nav.tsx +33 -0
- package/src/components/mdx/mdx-components/callout.tsx +17 -0
- package/src/components/mdx/mdx-components/code/code-block-wrapper.tsx +12 -0
- package/src/components/mdx/mdx-components/code/code-block.tsx +30 -0
- package/src/components/mdx/mdx-components/code/code-preview.tsx +80 -0
- package/src/components/mdx/mdx-components/code/component-preview.tsx +161 -0
- package/src/components/mdx/mdx-components/code/component-source.tsx +54 -0
- package/src/components/mdx/mdx-components/code/figcaption-block.tsx +25 -0
- package/src/components/mdx/mdx-components/code/index.ts +7 -0
- package/src/components/mdx/mdx-components/code/pre-block.tsx +103 -0
- package/src/components/mdx/mdx-components/code/span-block.tsx +13 -0
- package/src/components/mdx/mdx-components/components-list.tsx +23 -0
- package/src/components/mdx/mdx-components/exalidraw.tsx +12 -0
- package/src/components/mdx/mdx-components/framework-docs.tsx +20 -0
- package/src/components/mdx/mdx-components/index.ts +7 -0
- package/src/components/mdx/mdx-components/table.tsx +35 -0
- package/src/components/mdx/mdx-components/tabs.tsx +32 -0
- package/src/components/mdx/mdx-components/typepography.tsx +70 -0
- package/src/components/mdx/mdx.tsx +103 -0
- package/src/components/mobile-nav.tsx +91 -0
- package/src/components/mode-toggle.tsx +41 -0
- package/src/components/page-header.tsx +42 -0
- package/src/components/providers.tsx +14 -0
- package/src/components/themes/index.ts +1 -0
- package/src/components/themes/style-switcher.tsx +35 -0
- package/src/context/context.tsx +66 -0
- package/src/context/context.types.ts +55 -0
- package/src/context/index.ts +2 -0
- package/src/hooks/index.ts +6 -0
- package/src/hooks/use-colors.ts +27 -0
- package/src/hooks/use-config.ts +19 -0
- package/src/hooks/use-lift-mode.ts +19 -0
- package/src/hooks/use-meta-colors.ts +27 -0
- package/src/hooks/use-mounted.ts +11 -0
- package/src/hooks/use-themes-config.ts +17 -0
- package/src/index.ts +10 -0
- package/src/lib/charts.ts +23 -0
- package/src/lib/colors.ts +86 -0
- package/src/lib/events.ts +30 -0
- package/src/lib/index.ts +5 -0
- package/src/lib/registry-colors-data.ts +1810 -0
- package/src/lib/registry-styles.ts +8 -0
- package/src/lib/themes.ts +482 -0
- package/src/lib/utils.ts +42 -0
- package/src/styles/base.css +156 -0
- package/src/styles/docs.css +186 -0
- package/src/styles/mdx.css +205 -0
- package/src/types/index.ts +2 -0
- package/src/types/nav.ts +17 -0
- package/src/types/unist.ts +39 -0
- package/src/velite/browser.ts +11 -0
- package/src/velite/config.ts +118 -0
- package/src/velite/index.ts +5 -0
- package/src/velite/plugins/index.ts +3 -0
- package/src/velite/plugins/metadata-plugin.ts +26 -0
- package/src/velite/plugins/rehype-pre-block-source.ts +25 -0
- package/src/velite/plugins/rehype-title.ts +24 -0
- package/src/velite/rehype-npm-command.ts +42 -0
- 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,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
|
+
}
|