@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,121 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
|
|
3
|
+
import { CommandMenu } from '@duck-docs/components/layouts/command-menu'
|
|
4
|
+
import { MainNav } from '@duck-docs/components/main-nav'
|
|
5
|
+
import { MobileNav } from '@duck-docs/components/mobile-nav'
|
|
6
|
+
import { ModeSwitcher } from '@duck-docs/components/mode-toggle'
|
|
7
|
+
import { useSiteConfig } from '@duck-docs/context'
|
|
8
|
+
import { cn } from '@gentleduck/libs/cn'
|
|
9
|
+
import { buttonVariants } from '@gentleduck/registry-ui-duckui/button'
|
|
10
|
+
import { useAtom } from 'jotai'
|
|
11
|
+
import { atomWithStorage } from 'jotai/utils'
|
|
12
|
+
import { CaseUpper, Github, Twitter, Type } from 'lucide-react'
|
|
13
|
+
import Link from 'next/link'
|
|
14
|
+
import React from 'react'
|
|
15
|
+
import { HeaderContainer, HeaderRoot } from './header-shell'
|
|
16
|
+
|
|
17
|
+
export function SiteHeader() {
|
|
18
|
+
const siteConfig = useSiteConfig()
|
|
19
|
+
|
|
20
|
+
return (
|
|
21
|
+
<HeaderRoot className="border-border/50 border-b bg-background/95 backdrop-blur-sm supports-[backdrop-filter]:bg-background/70">
|
|
22
|
+
<HeaderContainer>
|
|
23
|
+
<MainNav />
|
|
24
|
+
<MobileNav />
|
|
25
|
+
<div className="flex flex-1 items-center justify-between space-x-2 md:justify-end">
|
|
26
|
+
<div className="w-full flex-1 md:w-auto md:flex-none">
|
|
27
|
+
<CommandMenu />
|
|
28
|
+
</div>
|
|
29
|
+
<nav className="flex items-center">
|
|
30
|
+
<GitHubStarsButton />
|
|
31
|
+
<FontStyleButton />
|
|
32
|
+
{siteConfig.links?.twitter ? (
|
|
33
|
+
<Link aria-label="Twitter" href={siteConfig.links.twitter} rel="noreferrer" target="_blank">
|
|
34
|
+
<div
|
|
35
|
+
className={cn(
|
|
36
|
+
buttonVariants({
|
|
37
|
+
size: 'icon',
|
|
38
|
+
variant: 'ghost',
|
|
39
|
+
}),
|
|
40
|
+
)}>
|
|
41
|
+
<Twitter />
|
|
42
|
+
</div>
|
|
43
|
+
</Link>
|
|
44
|
+
) : null}
|
|
45
|
+
<ModeSwitcher />
|
|
46
|
+
</nav>
|
|
47
|
+
</div>
|
|
48
|
+
</HeaderContainer>
|
|
49
|
+
</HeaderRoot>
|
|
50
|
+
)
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
function GitHubStarsButton() {
|
|
54
|
+
const [stars, setStars] = React.useState<number | null>(null)
|
|
55
|
+
const siteConfig = useSiteConfig()
|
|
56
|
+
const repoFromUrl = siteConfig.links?.github?.replace('https://github.com/', '').replace(/\/$/, '')
|
|
57
|
+
const repo = siteConfig.githubRepo ?? repoFromUrl
|
|
58
|
+
|
|
59
|
+
React.useEffect(() => {
|
|
60
|
+
async function fetchStars() {
|
|
61
|
+
try {
|
|
62
|
+
if (!repo) {
|
|
63
|
+
return
|
|
64
|
+
}
|
|
65
|
+
const res = await fetch(`https://api.github.com/repos/${repo}`)
|
|
66
|
+
const data = await res.json()
|
|
67
|
+
setStars(data.stargazers_count)
|
|
68
|
+
} catch (err) {
|
|
69
|
+
console.error('Failed to fetch stars:', err)
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
fetchStars()
|
|
73
|
+
}, [])
|
|
74
|
+
|
|
75
|
+
if (!siteConfig.links?.github) {
|
|
76
|
+
return null
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
return (
|
|
80
|
+
<Link aria-label="GitHub" href={siteConfig.links.github} rel="noopener noreferrer" target="_blank">
|
|
81
|
+
<div
|
|
82
|
+
className={cn(
|
|
83
|
+
buttonVariants({
|
|
84
|
+
className: 'size-auto h-8 w-16 font-medium text-sm',
|
|
85
|
+
size: 'icon',
|
|
86
|
+
variant: 'ghost',
|
|
87
|
+
}),
|
|
88
|
+
)}>
|
|
89
|
+
<Github />
|
|
90
|
+
{stars !== null ? stars.toLocaleString() : '...'}
|
|
91
|
+
</div>
|
|
92
|
+
</Link>
|
|
93
|
+
)
|
|
94
|
+
}
|
|
95
|
+
const fontAtom = atomWithStorage('fontType', 'mono')
|
|
96
|
+
|
|
97
|
+
export function FontStyleButton() {
|
|
98
|
+
const [fontType, setFontType] = useAtom(fontAtom)
|
|
99
|
+
const firstRender = React.useRef(true)
|
|
100
|
+
|
|
101
|
+
React.useEffect(() => {
|
|
102
|
+
if (firstRender.current) {
|
|
103
|
+
firstRender.current = false
|
|
104
|
+
return
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
const family = fontType === 'sans' ? 'var(--font-sans-geist)' : 'var(--font-mono-geist)'
|
|
108
|
+
|
|
109
|
+
document.documentElement.style.setProperty('font-family', family, 'important')
|
|
110
|
+
}, [fontType])
|
|
111
|
+
|
|
112
|
+
return (
|
|
113
|
+
<div
|
|
114
|
+
className={cn(buttonVariants({ size: 'icon', variant: 'ghost' }))}
|
|
115
|
+
onClick={() => setFontType(fontType === 'mono' ? 'sans' : 'mono')}>
|
|
116
|
+
{fontType === 'mono' ? <Type /> : <CaseUpper />}
|
|
117
|
+
</div>
|
|
118
|
+
)
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
export { HeaderBrand, HeaderContainer, HeaderRoot, HeaderSection } from './header-shell'
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export function TailwindIndicator() {
|
|
2
|
+
if (process.env.NODE_ENV === 'production') return null
|
|
3
|
+
|
|
4
|
+
return (
|
|
5
|
+
<div
|
|
6
|
+
className="fixed bottom-1 left-1 z-50 flex h-6 w-6 items-center justify-center rounded-full bg-gray-800 p-3 font-mono text-white text-xs"
|
|
7
|
+
data-tailwind-indicator="">
|
|
8
|
+
<div className="block sm:hidden">xs</div>
|
|
9
|
+
<div className="hidden sm:block md:hidden">sm</div>
|
|
10
|
+
<div className="hidden md:block lg:hidden">md</div>
|
|
11
|
+
<div className="hidden lg:block xl:hidden">lg</div>
|
|
12
|
+
<div className="hidden xl:block 2xl:hidden">xl</div>
|
|
13
|
+
<div className="hidden 2xl:block">2xl</div>
|
|
14
|
+
</div>
|
|
15
|
+
)
|
|
16
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
|
|
3
|
+
import { useDocsConfig } from '@duck-docs/context'
|
|
4
|
+
import { cn } from '@gentleduck/libs/cn'
|
|
5
|
+
import Link from 'next/link'
|
|
6
|
+
import { usePathname } from 'next/navigation'
|
|
7
|
+
import { HeaderBrand } from './layouts/site-header/header-shell'
|
|
8
|
+
|
|
9
|
+
export function MainNav() {
|
|
10
|
+
const pathname = usePathname()
|
|
11
|
+
const { mainNav } = useDocsConfig()
|
|
12
|
+
|
|
13
|
+
return (
|
|
14
|
+
<div className="mr-4 hidden md:flex">
|
|
15
|
+
<HeaderBrand className="mr-4 lg:mr-6" />
|
|
16
|
+
{mainNav?.length ? (
|
|
17
|
+
<nav className="flex items-center gap-4 text-sm xl:gap-6">
|
|
18
|
+
{mainNav.map((item) => (
|
|
19
|
+
<Link
|
|
20
|
+
className={cn(
|
|
21
|
+
'font-medium transition-colors hover:text-foreground/80',
|
|
22
|
+
pathname === item.href ? 'text-foreground' : 'text-foreground/80',
|
|
23
|
+
)}
|
|
24
|
+
href={item.href ?? '#'}
|
|
25
|
+
key={item.href ?? item.title}>
|
|
26
|
+
{item.title}
|
|
27
|
+
</Link>
|
|
28
|
+
))}
|
|
29
|
+
</nav>
|
|
30
|
+
) : null}
|
|
31
|
+
</div>
|
|
32
|
+
)
|
|
33
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Alert, AlertDescription, AlertTitle } from '@gentleduck/registry-ui-duckui/alert'
|
|
2
|
+
|
|
3
|
+
interface CalloutProps {
|
|
4
|
+
icon?: string
|
|
5
|
+
title?: string
|
|
6
|
+
children?: React.ReactNode
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export function Callout({ title, children, icon, ...props }: CalloutProps) {
|
|
10
|
+
return (
|
|
11
|
+
<Alert {...props}>
|
|
12
|
+
{icon && <span className="mr-4 text-2xl">{icon}</span>}
|
|
13
|
+
{title && <AlertTitle>{title}</AlertTitle>}
|
|
14
|
+
<AlertDescription>{children}</AlertDescription>
|
|
15
|
+
</Alert>
|
|
16
|
+
)
|
|
17
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
|
|
3
|
+
import { cn } from '@gentleduck/libs/cn'
|
|
4
|
+
import type * as React from 'react'
|
|
5
|
+
|
|
6
|
+
export function CodeBlockWrapper({ className, children, ...props }: React.HTMLAttributes<HTMLDivElement>) {
|
|
7
|
+
return (
|
|
8
|
+
<div className={cn(className)} {...props}>
|
|
9
|
+
{children}
|
|
10
|
+
</div>
|
|
11
|
+
)
|
|
12
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { cn } from '@gentleduck/libs/cn'
|
|
2
|
+
|
|
3
|
+
interface CodeProps extends React.HTMLAttributes<HTMLElement> {
|
|
4
|
+
__rawString__?: boolean
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export function CodeBlock({ className, __rawString__, ...props }: CodeProps) {
|
|
8
|
+
if (__rawString__) {
|
|
9
|
+
return (
|
|
10
|
+
<code
|
|
11
|
+
className={cn(
|
|
12
|
+
'relative rounded-sm bg-muted px-[0.3rem] py-[0.2rem] font-mono text-sm dark:bg-muted',
|
|
13
|
+
className,
|
|
14
|
+
)}
|
|
15
|
+
{...props}
|
|
16
|
+
/>
|
|
17
|
+
)
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
return (
|
|
21
|
+
<code
|
|
22
|
+
className={cn(
|
|
23
|
+
'relative rounded-sm px-[0.3rem] py-[0.2rem] font-mono text-sm',
|
|
24
|
+
'grid min-w-full break-words rounded-none border-0 bg-transparent p-0',
|
|
25
|
+
className,
|
|
26
|
+
)}
|
|
27
|
+
{...props}
|
|
28
|
+
/>
|
|
29
|
+
)
|
|
30
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
|
|
3
|
+
import { Icons } from '@duck-docs/components/icons'
|
|
4
|
+
import { useLiftMode } from '@duck-docs/hooks/use-lift-mode'
|
|
5
|
+
import { cn } from '@gentleduck/libs/cn'
|
|
6
|
+
import { ResizableHandle, ResizablePanel, ResizablePanelGroup } from '@gentleduck/registry-ui-duckui/resizable'
|
|
7
|
+
import { Tabs, TabsContent } from '@gentleduck/registry-ui-duckui/tabs'
|
|
8
|
+
import React from 'react'
|
|
9
|
+
import type { ImperativePanelHandle } from 'react-resizable-panels'
|
|
10
|
+
|
|
11
|
+
type Block = {
|
|
12
|
+
name: string
|
|
13
|
+
container?: {
|
|
14
|
+
height?: number
|
|
15
|
+
}
|
|
16
|
+
highlightedCode: string
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export function CodePreview({ block }: { block: Block & { hasLiftMode: boolean } }) {
|
|
20
|
+
const { isLiftMode } = useLiftMode(block.name)
|
|
21
|
+
const [isLoading, setIsLoading] = React.useState(true)
|
|
22
|
+
const ref = React.useRef<ImperativePanelHandle>(null)
|
|
23
|
+
|
|
24
|
+
return (
|
|
25
|
+
<Tabs
|
|
26
|
+
className="relative grid w-full scroll-m-20 gap-4"
|
|
27
|
+
defaultValue="preview"
|
|
28
|
+
id={block.name}
|
|
29
|
+
style={
|
|
30
|
+
{
|
|
31
|
+
'--container-height': block.container?.height,
|
|
32
|
+
} as React.CSSProperties
|
|
33
|
+
}>
|
|
34
|
+
<TabsContent
|
|
35
|
+
className="relative after:absolute after:inset-0 after:right-3 after:z-0 after:rounded-lg after:bg-muted"
|
|
36
|
+
value="preview">
|
|
37
|
+
<ResizablePanelGroup className="relative z-10" direction="horizontal">
|
|
38
|
+
<ResizablePanel
|
|
39
|
+
className={cn(
|
|
40
|
+
'relative rounded-lg border bg-background',
|
|
41
|
+
isLiftMode ? 'border-border/50' : 'border-border',
|
|
42
|
+
)}
|
|
43
|
+
defaultSize={100}
|
|
44
|
+
minSize={30}
|
|
45
|
+
ref={ref}>
|
|
46
|
+
{isLoading ? (
|
|
47
|
+
<div className="absolute inset-0 z-10 flex h-[--container-height] w-full items-center justify-center gap-2 bg-background text-muted-foreground text-sm">
|
|
48
|
+
<Icons.spinner className="h-4 w-4 animate-spin" />
|
|
49
|
+
Loading...
|
|
50
|
+
</div>
|
|
51
|
+
) : null}
|
|
52
|
+
<iframe
|
|
53
|
+
allowTransparency
|
|
54
|
+
className="chunk-mode relative z-20 w-full bg-background"
|
|
55
|
+
height={block.container?.height ?? 450}
|
|
56
|
+
onLoad={() => {
|
|
57
|
+
setIsLoading(false)
|
|
58
|
+
}}
|
|
59
|
+
src={`/blocks/${block.name}`}
|
|
60
|
+
/>
|
|
61
|
+
</ResizablePanel>
|
|
62
|
+
<ResizableHandle
|
|
63
|
+
className={cn(
|
|
64
|
+
'relative hidden w-3 bg-transparent p-0 after:absolute after:top-1/2 after:right-0 after:h-8 after:w-[6px] after:translate-x-[-1px] after:-translate-y-1/2 after:rounded-full after:bg-border after:transition-all after:hover:h-10 sm:block',
|
|
65
|
+
isLiftMode && 'invisible',
|
|
66
|
+
)}
|
|
67
|
+
/>
|
|
68
|
+
<ResizablePanel defaultSize={0} minSize={0} />
|
|
69
|
+
</ResizablePanelGroup>
|
|
70
|
+
</TabsContent>
|
|
71
|
+
<TabsContent value="code">
|
|
72
|
+
<div
|
|
73
|
+
className="w-full overflow-hidden rounded-md [&_pre]:my-0 [&_pre]:h-[--container-height] [&_pre]:overflow-auto [&_pre]:whitespace-break-spaces [&_pre]:p-6 [&_pre]:font-mono [&_pre]:text-sm [&_pre]:leading-relaxed"
|
|
74
|
+
dangerouslySetInnerHTML={{ __html: block.highlightedCode }}
|
|
75
|
+
data-rehype-pretty-code-fragment
|
|
76
|
+
/>
|
|
77
|
+
</TabsContent>
|
|
78
|
+
</Tabs>
|
|
79
|
+
)
|
|
80
|
+
}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
|
|
3
|
+
import { CopyButton } from '@duck-docs/components/copy-button'
|
|
4
|
+
import { Icons } from '@duck-docs/components/icons'
|
|
5
|
+
import { useRegistryIndex } from '@duck-docs/context'
|
|
6
|
+
import { cn } from '@gentleduck/libs/cn'
|
|
7
|
+
import { Button } from '@gentleduck/registry-ui-duckui/button'
|
|
8
|
+
import { Tabs, TabsContent, TabsList, TabsTrigger } from '@gentleduck/registry-ui-duckui/tabs'
|
|
9
|
+
import { Crown } from 'lucide-react'
|
|
10
|
+
import * as React from 'react'
|
|
11
|
+
|
|
12
|
+
interface ComponentPreviewProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
13
|
+
name: string
|
|
14
|
+
extractClassname?: boolean
|
|
15
|
+
extractedClassNames?: string
|
|
16
|
+
align?: 'center' | 'start' | 'end'
|
|
17
|
+
description?: string
|
|
18
|
+
hideCode?: boolean
|
|
19
|
+
showSettings?: boolean
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export function ComponentPreview({
|
|
23
|
+
name,
|
|
24
|
+
children,
|
|
25
|
+
className,
|
|
26
|
+
extractClassname,
|
|
27
|
+
extractedClassNames,
|
|
28
|
+
align = 'center',
|
|
29
|
+
description,
|
|
30
|
+
hideCode = false,
|
|
31
|
+
showSettings = false,
|
|
32
|
+
...props
|
|
33
|
+
}: ComponentPreviewProps) {
|
|
34
|
+
const Codes = React.Children.toArray(children) as React.ReactElement[]
|
|
35
|
+
const Code = Codes[0]
|
|
36
|
+
const registryIndex = useRegistryIndex()
|
|
37
|
+
|
|
38
|
+
const Preview = React.useMemo(() => {
|
|
39
|
+
if (!registryIndex) {
|
|
40
|
+
return <p className="text-muted-foreground text-sm">Registry index is not configured for this docs app.</p>
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
const Component = registryIndex[name]?.component
|
|
44
|
+
|
|
45
|
+
if (!Component) {
|
|
46
|
+
return (
|
|
47
|
+
<p className="text-muted-foreground text-sm">
|
|
48
|
+
Component <code className="relative rounded bg-muted px-[0.3rem] py-[0.2rem] font-mono text-sm">{name}</code>{' '}
|
|
49
|
+
not found in registry.
|
|
50
|
+
</p>
|
|
51
|
+
)
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
return <Component />
|
|
55
|
+
}, [name, registryIndex])
|
|
56
|
+
|
|
57
|
+
const codeString = React.useMemo(() => {
|
|
58
|
+
if (
|
|
59
|
+
// ! FIX:
|
|
60
|
+
// @ts-ignore 'Code.props' is of type 'unknown'.ts(18046)
|
|
61
|
+
typeof Code?.props['data-rehype-pretty-code-fragment'] !== 'undefined'
|
|
62
|
+
) {
|
|
63
|
+
const Button = React.Children.toArray(
|
|
64
|
+
// ! FIX:
|
|
65
|
+
// @ts-expect-error Property 'children' does not exist on type '{}'.ts(2339)
|
|
66
|
+
Code.props.children,
|
|
67
|
+
) as React.ReactElement[]
|
|
68
|
+
// ! FIX:
|
|
69
|
+
// @ts-expect-error Property '__rawString__' does not exist on type '{}'.ts(2339)
|
|
70
|
+
return Button[1]?.props?.value || Button[1]?.props?.__rawString__ || null
|
|
71
|
+
}
|
|
72
|
+
}, [Code])
|
|
73
|
+
|
|
74
|
+
return (
|
|
75
|
+
<div
|
|
76
|
+
className={cn('group relative my-4 flex flex-col [&_div[data-slot="placeholder"]]:h-[512px]', className)}
|
|
77
|
+
{...props}>
|
|
78
|
+
<Tabs className="relative mr-auto w-full" defaultValue="preview">
|
|
79
|
+
<div className="flex items-center justify-between">
|
|
80
|
+
{!hideCode && (
|
|
81
|
+
<TabsList className="w-full justify-start overflow-x-auto rounded-none border-b bg-transparent p-0 [&_button]:shadow-none">
|
|
82
|
+
{TABS.map((tab, idx) => (
|
|
83
|
+
<TabsTrigger
|
|
84
|
+
className="cursor-pointer rounded-none border-b-[2px] border-b-transparent px-12 py-2 [&[aria-selected='true']]:border-b-primary [&[aria-selected='true']]:shadow-none [&_input]:focus-visible:shadow-none [&_input]:focus-visible:ring-transparent [&_input]:focus-visible:ring-offset-0"
|
|
85
|
+
key={idx}
|
|
86
|
+
value={tab.value}>
|
|
87
|
+
{tab.name}
|
|
88
|
+
</TabsTrigger>
|
|
89
|
+
))}
|
|
90
|
+
</TabsList>
|
|
91
|
+
)}
|
|
92
|
+
</div>
|
|
93
|
+
<TabsContent className="relative min-w-2/5 rounded-md border" value="preview">
|
|
94
|
+
<div className="absolute flex w-full items-center justify-between p-4">
|
|
95
|
+
<span className="text-muted-foreground text-sm">{}</span>
|
|
96
|
+
<div className="flex items-center gap-2">
|
|
97
|
+
<CopyButton value={codeString} variant="outline" />
|
|
98
|
+
</div>
|
|
99
|
+
</div>
|
|
100
|
+
<div
|
|
101
|
+
className={cn('preview flex h-[500px] w-full justify-center overflow-auto p-10', {
|
|
102
|
+
'items-center': align === 'center',
|
|
103
|
+
'items-end': align === 'end',
|
|
104
|
+
'items-start': align === 'start',
|
|
105
|
+
})}
|
|
106
|
+
duck-preview="">
|
|
107
|
+
<React.Suspense
|
|
108
|
+
fallback={
|
|
109
|
+
<div className="flex w-full items-center justify-center text-muted-foreground text-sm">
|
|
110
|
+
<Icons.spinner className="mr-2 h-4 w-4 animate-spin" />
|
|
111
|
+
Loading...
|
|
112
|
+
</div>
|
|
113
|
+
}>
|
|
114
|
+
{Preview}
|
|
115
|
+
</React.Suspense>
|
|
116
|
+
</div>
|
|
117
|
+
</TabsContent>
|
|
118
|
+
<TabsContent
|
|
119
|
+
className="[&_[data-rehype-pretty-code-fragment]]:!m-0 relative mt-2 [&>div>div>button]:top-3 [&>div>div>button]:right-3 [&>div>div]:mb-0 [&>div]:rounded-lg [&>div]:border [&>div]:bg-muted/40 [&_pre]:h-[502px]"
|
|
120
|
+
value="code">
|
|
121
|
+
{Code}
|
|
122
|
+
</TabsContent>
|
|
123
|
+
<BuildTab />
|
|
124
|
+
</Tabs>
|
|
125
|
+
</div>
|
|
126
|
+
)
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
export const BuildTab = () => {
|
|
130
|
+
return (
|
|
131
|
+
<TabsContent className="relative overflow-hidden" value="build">
|
|
132
|
+
<div className="h-[500px] overflow-hidden rounded-lg">
|
|
133
|
+
<img alt="build" className="object-cover" src="/builder.png" />
|
|
134
|
+
</div>
|
|
135
|
+
|
|
136
|
+
<div className="absolute inset-0 top-0 left-0 flex h-[500px] flex-col items-center justify-center gap-4 rounded-md bg-zinc-700/10 px-4 py-2 backdrop-blur-sm dark:bg-zinc-700/50">
|
|
137
|
+
<div className="flex items-center gap-4">
|
|
138
|
+
<Button className="rounded-sm font-bold" size={'sm'}>
|
|
139
|
+
<Crown />
|
|
140
|
+
<span>Coming soon</span>
|
|
141
|
+
</Button>
|
|
142
|
+
</div>
|
|
143
|
+
</div>
|
|
144
|
+
</TabsContent>
|
|
145
|
+
)
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
export const TABS = [
|
|
149
|
+
{
|
|
150
|
+
name: 'Preview',
|
|
151
|
+
value: 'preview',
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
name: 'Code',
|
|
155
|
+
value: 'code',
|
|
156
|
+
},
|
|
157
|
+
// {
|
|
158
|
+
// name: 'Benchmark',
|
|
159
|
+
// value: 'benchmark',
|
|
160
|
+
// },
|
|
161
|
+
]
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
|
|
3
|
+
import { Separator } from '@gentleduck/registry-ui-duckui/separator'
|
|
4
|
+
import { Tabs, TabsContent, TabsList, TabsTrigger } from '@gentleduck/registry-ui-duckui/tabs'
|
|
5
|
+
import type React from 'react'
|
|
6
|
+
import { FigcaptionBlock } from './figcaption-block'
|
|
7
|
+
|
|
8
|
+
interface ComponentSourceProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
9
|
+
children: React.ReactNode[]
|
|
10
|
+
src: string
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/** NOTE: the props are not used */
|
|
14
|
+
export function ComponentSource({ children, className, ...props }: ComponentSourceProps) {
|
|
15
|
+
if (!children.length) {
|
|
16
|
+
return children
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
const defaultValue = String((children[0] as any).props.children[0].props.__rawString__)
|
|
20
|
+
.split('\n')[0]
|
|
21
|
+
?.replace('//', '') as string
|
|
22
|
+
|
|
23
|
+
return (
|
|
24
|
+
<Tabs className="rounded-md border border-border bg-muted/40" defaultValue={defaultValue}>
|
|
25
|
+
<TabsList className="w-[622px] justify-start overflow-x-auto bg-transparent px-2 py-2">
|
|
26
|
+
{children.map((item, idx) => {
|
|
27
|
+
const value = String((item as any).props.children[0].props.__rawString__)
|
|
28
|
+
.split('\n')[0]
|
|
29
|
+
?.replace('//', '') as string
|
|
30
|
+
return (
|
|
31
|
+
<TabsTrigger className="aria-[selected='true']:bg-muted" key={idx} value={value}>
|
|
32
|
+
{value}
|
|
33
|
+
</TabsTrigger>
|
|
34
|
+
)
|
|
35
|
+
})}
|
|
36
|
+
</TabsList>
|
|
37
|
+
<Separator />
|
|
38
|
+
{children.map((item, idx) => {
|
|
39
|
+
const value = String((item as any).props.children[0].props.__rawString__)
|
|
40
|
+
.split('\n')[0]
|
|
41
|
+
?.replace('//', '') as string
|
|
42
|
+
return (
|
|
43
|
+
<TabsContent
|
|
44
|
+
className="relative m-0 bg-transparent focus-visible:shadow-none focus-visible:outline-none focus-visible:ring-0 [&>div>div>button]:top-1 [&>div>div>button]:right-1 [&>div>div]:m-0"
|
|
45
|
+
key={idx}
|
|
46
|
+
value={value}>
|
|
47
|
+
<FigcaptionBlock>{value}</FigcaptionBlock>
|
|
48
|
+
{item}
|
|
49
|
+
</TabsContent>
|
|
50
|
+
)
|
|
51
|
+
})}
|
|
52
|
+
</Tabs>
|
|
53
|
+
)
|
|
54
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { getIconForLanguageExtension } from '@duck-docs/components/icons'
|
|
2
|
+
import { cn } from '@gentleduck/libs/cn'
|
|
3
|
+
import { Separator } from '@gentleduck/registry-ui-duckui/separator'
|
|
4
|
+
|
|
5
|
+
export function FigcaptionBlock({ children, className, ...props }: React.HTMLAttributes<HTMLDivElement>) {
|
|
6
|
+
const language = children?.toString().split('.').pop() ?? 'terminal'
|
|
7
|
+
|
|
8
|
+
const Icon = getIconForLanguageExtension(language)
|
|
9
|
+
|
|
10
|
+
return (
|
|
11
|
+
<>
|
|
12
|
+
<figcaption {...props} className="rounded-lg p-2">
|
|
13
|
+
<div
|
|
14
|
+
className={cn(
|
|
15
|
+
className,
|
|
16
|
+
'flex items-center gap-2 font-mono text-muted-foreground text-sm ltr:pl-1.5 rtl:pr-1.5 [&_svg]:h-4 [&_svg]:w-4',
|
|
17
|
+
)}>
|
|
18
|
+
{Icon}
|
|
19
|
+
{children}
|
|
20
|
+
</div>
|
|
21
|
+
</figcaption>
|
|
22
|
+
<Separator />
|
|
23
|
+
</>
|
|
24
|
+
)
|
|
25
|
+
}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { CopyButton } from '@duck-docs/components/copy-button'
|
|
2
|
+
import type { Event } from '@duck-docs/lib/events'
|
|
3
|
+
import type { NpmCommands } from '@duck-docs/types/unist'
|
|
4
|
+
import { cn } from '@gentleduck/libs/cn'
|
|
5
|
+
import { Separator } from '@gentleduck/registry-ui-duckui/separator'
|
|
6
|
+
import { Tabs, TabsContent, TabsList, TabsTrigger } from '@gentleduck/registry-ui-duckui/tabs'
|
|
7
|
+
import { Terminal } from 'lucide-react'
|
|
8
|
+
|
|
9
|
+
export type CodeBlockProps = React.HTMLAttributes<HTMLPreElement> & {
|
|
10
|
+
__rawString__?: string
|
|
11
|
+
__withMeta__?: boolean
|
|
12
|
+
__title__?: string
|
|
13
|
+
__event__?: Event['name']
|
|
14
|
+
} & NpmCommands
|
|
15
|
+
|
|
16
|
+
export function PreBlock({
|
|
17
|
+
className,
|
|
18
|
+
__rawString__,
|
|
19
|
+
__npmCommand__,
|
|
20
|
+
__yarnCommand__,
|
|
21
|
+
__pnpmCommand__,
|
|
22
|
+
__bunCommand__,
|
|
23
|
+
__withMeta__,
|
|
24
|
+
__event__,
|
|
25
|
+
__title__,
|
|
26
|
+
children,
|
|
27
|
+
...props
|
|
28
|
+
}: CodeBlockProps) {
|
|
29
|
+
return (
|
|
30
|
+
<div data-theme={(props as any)['data-theme']}>
|
|
31
|
+
{__npmCommand__ && __yarnCommand__ && __pnpmCommand__ && __bunCommand__ ? (
|
|
32
|
+
<ShellCommand
|
|
33
|
+
__bunCommand__={__bunCommand__}
|
|
34
|
+
__npmCommand__={__npmCommand__}
|
|
35
|
+
__pnpmCommand__={__pnpmCommand__}
|
|
36
|
+
__yarnCommand__={__yarnCommand__}
|
|
37
|
+
{...props}
|
|
38
|
+
/>
|
|
39
|
+
) : (
|
|
40
|
+
<>
|
|
41
|
+
{__rawString__ && !__npmCommand__ && (
|
|
42
|
+
<CopyButton
|
|
43
|
+
className={cn('absolute top-2 right-2 bg-muted [&_svg]:text-muted-foreground', __withMeta__ && 'top-16')}
|
|
44
|
+
event={__event__}
|
|
45
|
+
value={__rawString__}
|
|
46
|
+
variant={'outline'}
|
|
47
|
+
/>
|
|
48
|
+
)}
|
|
49
|
+
<pre
|
|
50
|
+
className={cn(
|
|
51
|
+
'max-h-[650px] overflow-auto rounded-lg py-4 focus-visible:shadow-none focus-visible:outline-none',
|
|
52
|
+
className,
|
|
53
|
+
)}
|
|
54
|
+
{...props}>
|
|
55
|
+
{children}
|
|
56
|
+
</pre>
|
|
57
|
+
</>
|
|
58
|
+
)}
|
|
59
|
+
</div>
|
|
60
|
+
)
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export function ShellCommand({ __npmCommand__, __yarnCommand__, __pnpmCommand__, __bunCommand__ }: NpmCommands) {
|
|
64
|
+
const commands = {
|
|
65
|
+
__bunCommand__,
|
|
66
|
+
__npmCommand__,
|
|
67
|
+
__pnpmCommand__,
|
|
68
|
+
__yarnCommand__,
|
|
69
|
+
}
|
|
70
|
+
return (
|
|
71
|
+
<Tabs className="rounded-md" defaultValue="__npmCommand__">
|
|
72
|
+
<TabsList className="w-fit justify-start bg-transparent py-2">
|
|
73
|
+
<div className="flex size-4 flex-col items-center justify-center bg-foreground/65 ltr:mr-2 ltr:ml-3 rtl:mr-3 rtl:ml-2">
|
|
74
|
+
<Terminal className="size-4 text-background" />
|
|
75
|
+
</div>
|
|
76
|
+
{Object.keys(commands).map((command, idx) => {
|
|
77
|
+
return (
|
|
78
|
+
<TabsTrigger className="aria-[selected='true']:bg-muted" key={idx} value={command}>
|
|
79
|
+
{command.replace('__', '').replace('Command', '').replace('__', '')}
|
|
80
|
+
</TabsTrigger>
|
|
81
|
+
)
|
|
82
|
+
})}
|
|
83
|
+
</TabsList>
|
|
84
|
+
<Separator />
|
|
85
|
+
{Object.entries(commands).map(([commandKey, command], idx) => {
|
|
86
|
+
return (
|
|
87
|
+
<TabsContent className="[&_pre]:max-w-[620px] [&_pre]:overflow-auto" key={idx} value={commandKey}>
|
|
88
|
+
<CopyButton
|
|
89
|
+
className={cn(
|
|
90
|
+
'absolute top-1.5 right-1.5 border-none bg-transparent [&_svg]:size-5 [&_svg]:text-muted-foreground',
|
|
91
|
+
)}
|
|
92
|
+
value={command as string}
|
|
93
|
+
variant={'outline'}
|
|
94
|
+
/>
|
|
95
|
+
<pre className="p-4 pt-2 text-muted-foreground text-sm focus-visible:shadow-none focus-visible:outline-none">
|
|
96
|
+
{command}
|
|
97
|
+
</pre>
|
|
98
|
+
</TabsContent>
|
|
99
|
+
)
|
|
100
|
+
})}
|
|
101
|
+
</Tabs>
|
|
102
|
+
)
|
|
103
|
+
}
|