@hanzo/ui 5.3.26 → 5.3.29
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/content/index.ts +26 -0
- package/dist/util/index.js +6 -0
- package/dist/util/index.mjs +6 -1
- package/docs/_registry/index.ts +426 -0
- package/docs/_registry/layout/docs-min.tsx +197 -0
- package/docs/_registry/layout/page-min.tsx +128 -0
- package/docs/components/accordion.tsx +118 -0
- package/docs/components/banner.tsx +144 -0
- package/docs/components/callout.tsx +112 -0
- package/docs/components/card.tsx +52 -0
- package/docs/components/codeblock.tsx +258 -0
- package/docs/components/dialog/search-algolia.tsx +132 -0
- package/docs/components/dialog/search-default.tsx +131 -0
- package/docs/components/dialog/search-orama.tsx +143 -0
- package/docs/components/dialog/search.tsx +529 -0
- package/docs/components/dynamic-codeblock.tsx +129 -0
- package/docs/components/files.tsx +81 -0
- package/docs/components/github-info.tsx +107 -0
- package/docs/components/heading.tsx +33 -0
- package/docs/components/image-zoom.css +77 -0
- package/docs/components/image-zoom.tsx +58 -0
- package/docs/components/index.ts +7 -0
- package/docs/components/inline-toc.tsx +48 -0
- package/docs/components/sidebar/base.tsx +451 -0
- package/docs/components/sidebar/link-item.tsx +65 -0
- package/docs/components/sidebar/page-tree.tsx +113 -0
- package/docs/components/sidebar/tabs/dropdown.tsx +109 -0
- package/docs/components/sidebar/tabs/index.tsx +89 -0
- package/docs/components/steps.tsx +9 -0
- package/docs/components/tabs.tsx +203 -0
- package/docs/components/toc/clerk.tsx +173 -0
- package/docs/components/toc/default.tsx +57 -0
- package/docs/components/toc/index.tsx +136 -0
- package/docs/components/type-table.tsx +174 -0
- package/docs/components/ui/accordion.tsx +88 -0
- package/docs/components/ui/button.tsx +28 -0
- package/docs/components/ui/collapsible.tsx +42 -0
- package/docs/components/ui/navigation-menu.tsx +83 -0
- package/docs/components/ui/popover.tsx +32 -0
- package/docs/components/ui/scroll-area.tsx +59 -0
- package/docs/components/ui/tabs.tsx +145 -0
- package/docs/contexts/i18n.tsx +56 -0
- package/docs/contexts/search.tsx +165 -0
- package/docs/contexts/tree.tsx +65 -0
- package/docs/css/black.css +39 -0
- package/docs/css/catppuccin.css +49 -0
- package/docs/css/colors/index.css +51 -0
- package/docs/css/dusk.css +47 -0
- package/docs/css/layouts/docs.css +1 -0
- package/docs/css/layouts/home.css +1 -0
- package/docs/css/layouts/notebook.css +1 -0
- package/docs/css/neutral.css +7 -0
- package/docs/css/ocean.css +48 -0
- package/docs/css/preset.css +305 -0
- package/docs/css/purple.css +39 -0
- package/docs/css/shadcn.css +36 -0
- package/docs/css/shiki.css +90 -0
- package/docs/css/solar.css +75 -0
- package/docs/css/style.css +9 -0
- package/docs/css/vitepress.css +77 -0
- package/docs/i18n.tsx +30 -0
- package/docs/icons.tsx +354 -0
- package/docs/layouts/docs/client.tsx +129 -0
- package/docs/layouts/docs/index.tsx +321 -0
- package/docs/layouts/docs/page/client.tsx +376 -0
- package/docs/layouts/docs/page/index.tsx +251 -0
- package/docs/layouts/docs/sidebar.tsx +265 -0
- package/docs/layouts/home/client.tsx +375 -0
- package/docs/layouts/home/index.tsx +51 -0
- package/docs/layouts/home/navbar.tsx +55 -0
- package/docs/layouts/notebook/client.tsx +281 -0
- package/docs/layouts/notebook/index.tsx +461 -0
- package/docs/layouts/notebook/page/client.tsx +375 -0
- package/docs/layouts/notebook/page/index.tsx +251 -0
- package/docs/layouts/notebook/sidebar.tsx +248 -0
- package/docs/layouts/shared/index.tsx +89 -0
- package/docs/layouts/shared/language-toggle.tsx +66 -0
- package/docs/layouts/shared/link-item.tsx +119 -0
- package/docs/layouts/shared/search-toggle.tsx +78 -0
- package/docs/layouts/shared/theme-toggle.tsx +86 -0
- package/docs/mdx.server.tsx +37 -0
- package/docs/mdx.tsx +97 -0
- package/docs/og.tsx +101 -0
- package/docs/page.tsx +85 -0
- package/docs/provider/base.tsx +173 -0
- package/docs/provider/next.tsx +23 -0
- package/docs/provider/react-router.tsx +23 -0
- package/docs/provider/tanstack.tsx +23 -0
- package/docs/provider/waku.tsx +23 -0
- package/docs/source.ts +3 -0
- package/docs/theme/typography/LICENSE +21 -0
- package/docs/theme/typography/index.ts +201 -0
- package/docs/theme/typography/styles.ts +449 -0
- package/docs/utils/cn.ts +1 -0
- package/docs/utils/is-active.ts +23 -0
- package/docs/utils/merge-refs.ts +15 -0
- package/docs/utils/use-copy-button.ts +39 -0
- package/docs/utils/use-footer-items.ts +27 -0
- package/docs/utils/use-is-scroll-top.ts +21 -0
- package/package.json +4 -2
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { LoaderConfig, LoaderOutput, Page } from '@hanzo/docs-core/source';
|
|
2
|
+
import type { ComponentProps, FC } from 'react';
|
|
3
|
+
import defaultMdxComponents from '@/mdx';
|
|
4
|
+
import * as path from 'node:path';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Extend the default Link component to resolve relative file paths in `href`.
|
|
8
|
+
*
|
|
9
|
+
* @param page the current page
|
|
10
|
+
* @param source the source object
|
|
11
|
+
* @param OverrideLink The component to override from
|
|
12
|
+
*/
|
|
13
|
+
export function createRelativeLink(
|
|
14
|
+
source: LoaderOutput<LoaderConfig>,
|
|
15
|
+
page: Page,
|
|
16
|
+
OverrideLink: FC<ComponentProps<'a'>> = defaultMdxComponents.a,
|
|
17
|
+
): FC<ComponentProps<'a'>> {
|
|
18
|
+
return async function RelativeLink({ href, ...props }) {
|
|
19
|
+
// resolve relative href
|
|
20
|
+
if (href && href.startsWith('.')) {
|
|
21
|
+
const target = source.getPageByHref(href, {
|
|
22
|
+
dir: path.dirname(page.path),
|
|
23
|
+
language: page.locale,
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
if (target) {
|
|
27
|
+
href = target.hash
|
|
28
|
+
? `${target.page.url}#${target.hash}`
|
|
29
|
+
: target.page.url;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
return <OverrideLink href={href} {...props} />;
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export { defaultMdxComponents as default };
|
package/docs/mdx.tsx
ADDED
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import Link from '@hanzo/docs-core/link';
|
|
2
|
+
import type {
|
|
3
|
+
AnchorHTMLAttributes,
|
|
4
|
+
FC,
|
|
5
|
+
HTMLAttributes,
|
|
6
|
+
ImgHTMLAttributes,
|
|
7
|
+
TableHTMLAttributes,
|
|
8
|
+
} from 'react';
|
|
9
|
+
import { Image as FrameworkImage } from '@hanzo/docs-core/framework';
|
|
10
|
+
import { Card, Cards } from '@/components/card';
|
|
11
|
+
import {
|
|
12
|
+
Callout,
|
|
13
|
+
CalloutContainer,
|
|
14
|
+
CalloutDescription,
|
|
15
|
+
CalloutTitle,
|
|
16
|
+
} from '@/components/callout';
|
|
17
|
+
import { Heading } from '@/components/heading';
|
|
18
|
+
import { cn } from '@/utils/cn';
|
|
19
|
+
import {
|
|
20
|
+
CodeBlock,
|
|
21
|
+
CodeBlockTab,
|
|
22
|
+
CodeBlockTabs,
|
|
23
|
+
CodeBlockTabsList,
|
|
24
|
+
CodeBlockTabsTrigger,
|
|
25
|
+
Pre,
|
|
26
|
+
} from '@/components/codeblock';
|
|
27
|
+
|
|
28
|
+
function Image(
|
|
29
|
+
props: ImgHTMLAttributes<HTMLImageElement> & {
|
|
30
|
+
sizes?: string;
|
|
31
|
+
},
|
|
32
|
+
) {
|
|
33
|
+
return (
|
|
34
|
+
<FrameworkImage
|
|
35
|
+
sizes="(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px"
|
|
36
|
+
{...props}
|
|
37
|
+
src={props.src as unknown as string}
|
|
38
|
+
className={cn('rounded-lg', props.className)}
|
|
39
|
+
/>
|
|
40
|
+
);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function Table(props: TableHTMLAttributes<HTMLTableElement>) {
|
|
44
|
+
return (
|
|
45
|
+
<div className="relative overflow-auto prose-no-margin my-6">
|
|
46
|
+
<table {...props} />
|
|
47
|
+
</div>
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const defaultMdxComponents = {
|
|
52
|
+
CodeBlockTab,
|
|
53
|
+
CodeBlockTabs,
|
|
54
|
+
CodeBlockTabsList,
|
|
55
|
+
CodeBlockTabsTrigger,
|
|
56
|
+
pre: (props: HTMLAttributes<HTMLPreElement>) => (
|
|
57
|
+
<CodeBlock {...props}>
|
|
58
|
+
<Pre>{props.children}</Pre>
|
|
59
|
+
</CodeBlock>
|
|
60
|
+
),
|
|
61
|
+
Card,
|
|
62
|
+
Cards,
|
|
63
|
+
a: Link as FC<AnchorHTMLAttributes<HTMLAnchorElement>>,
|
|
64
|
+
img: Image,
|
|
65
|
+
h1: (props: HTMLAttributes<HTMLHeadingElement>) => (
|
|
66
|
+
<Heading as="h1" {...props} />
|
|
67
|
+
),
|
|
68
|
+
h2: (props: HTMLAttributes<HTMLHeadingElement>) => (
|
|
69
|
+
<Heading as="h2" {...props} />
|
|
70
|
+
),
|
|
71
|
+
h3: (props: HTMLAttributes<HTMLHeadingElement>) => (
|
|
72
|
+
<Heading as="h3" {...props} />
|
|
73
|
+
),
|
|
74
|
+
h4: (props: HTMLAttributes<HTMLHeadingElement>) => (
|
|
75
|
+
<Heading as="h4" {...props} />
|
|
76
|
+
),
|
|
77
|
+
h5: (props: HTMLAttributes<HTMLHeadingElement>) => (
|
|
78
|
+
<Heading as="h5" {...props} />
|
|
79
|
+
),
|
|
80
|
+
h6: (props: HTMLAttributes<HTMLHeadingElement>) => (
|
|
81
|
+
<Heading as="h6" {...props} />
|
|
82
|
+
),
|
|
83
|
+
table: Table,
|
|
84
|
+
Callout,
|
|
85
|
+
CalloutContainer,
|
|
86
|
+
CalloutTitle,
|
|
87
|
+
CalloutDescription,
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
export const createRelativeLink: typeof import('./mdx.server').createRelativeLink =
|
|
91
|
+
() => {
|
|
92
|
+
throw new Error(
|
|
93
|
+
'`createRelativeLink` is only supported in Node.js environment',
|
|
94
|
+
);
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
export { defaultMdxComponents as default };
|
package/docs/og.tsx
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { ImageResponse } from 'next/og';
|
|
2
|
+
import type { ReactElement, ReactNode } from 'react';
|
|
3
|
+
import type { ImageResponseOptions } from 'next/dist/compiled/@vercel/og/types';
|
|
4
|
+
|
|
5
|
+
interface GenerateProps {
|
|
6
|
+
title: ReactNode;
|
|
7
|
+
description?: ReactNode;
|
|
8
|
+
icon?: ReactNode;
|
|
9
|
+
primaryColor?: string;
|
|
10
|
+
primaryTextColor?: string;
|
|
11
|
+
site?: ReactNode;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export function generateOGImage(
|
|
15
|
+
options: GenerateProps & ImageResponseOptions,
|
|
16
|
+
): ImageResponse {
|
|
17
|
+
const {
|
|
18
|
+
title,
|
|
19
|
+
description,
|
|
20
|
+
icon,
|
|
21
|
+
site,
|
|
22
|
+
primaryColor,
|
|
23
|
+
primaryTextColor,
|
|
24
|
+
...rest
|
|
25
|
+
} = options;
|
|
26
|
+
|
|
27
|
+
return new ImageResponse(
|
|
28
|
+
generate({
|
|
29
|
+
title,
|
|
30
|
+
description,
|
|
31
|
+
icon,
|
|
32
|
+
site,
|
|
33
|
+
primaryTextColor,
|
|
34
|
+
primaryColor,
|
|
35
|
+
}),
|
|
36
|
+
{
|
|
37
|
+
width: 1200,
|
|
38
|
+
height: 630,
|
|
39
|
+
...rest,
|
|
40
|
+
},
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export function generate({
|
|
45
|
+
primaryColor = 'rgba(255,150,255,0.3)',
|
|
46
|
+
primaryTextColor = 'rgb(255,150,255)',
|
|
47
|
+
...props
|
|
48
|
+
}: GenerateProps): ReactElement {
|
|
49
|
+
return (
|
|
50
|
+
<div
|
|
51
|
+
style={{
|
|
52
|
+
display: 'flex',
|
|
53
|
+
flexDirection: 'column',
|
|
54
|
+
width: '100%',
|
|
55
|
+
height: '100%',
|
|
56
|
+
color: 'white',
|
|
57
|
+
padding: '4rem',
|
|
58
|
+
backgroundColor: '#0c0c0c',
|
|
59
|
+
backgroundImage: `linear-gradient(to top right, ${primaryColor}, transparent)`,
|
|
60
|
+
}}
|
|
61
|
+
>
|
|
62
|
+
<div
|
|
63
|
+
style={{
|
|
64
|
+
display: 'flex',
|
|
65
|
+
flexDirection: 'row',
|
|
66
|
+
alignItems: 'center',
|
|
67
|
+
gap: '16px',
|
|
68
|
+
marginBottom: '12px',
|
|
69
|
+
color: primaryTextColor,
|
|
70
|
+
}}
|
|
71
|
+
>
|
|
72
|
+
{props.icon}
|
|
73
|
+
<p
|
|
74
|
+
style={{
|
|
75
|
+
fontSize: '56px',
|
|
76
|
+
fontWeight: 600,
|
|
77
|
+
}}
|
|
78
|
+
>
|
|
79
|
+
{props.site}
|
|
80
|
+
</p>
|
|
81
|
+
</div>
|
|
82
|
+
|
|
83
|
+
<p
|
|
84
|
+
style={{
|
|
85
|
+
fontWeight: 800,
|
|
86
|
+
fontSize: '82px',
|
|
87
|
+
}}
|
|
88
|
+
>
|
|
89
|
+
{props.title}
|
|
90
|
+
</p>
|
|
91
|
+
<p
|
|
92
|
+
style={{
|
|
93
|
+
fontSize: '52px',
|
|
94
|
+
color: 'rgba(240,240,240,0.8)',
|
|
95
|
+
}}
|
|
96
|
+
>
|
|
97
|
+
{props.description}
|
|
98
|
+
</p>
|
|
99
|
+
</div>
|
|
100
|
+
);
|
|
101
|
+
}
|
package/docs/page.tsx
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { use, type ComponentProps } from 'react';
|
|
3
|
+
import { cn } from './utils/cn';
|
|
4
|
+
import * as Docs from './layouts/docs/page';
|
|
5
|
+
import * as Notebook from './layouts/notebook/page';
|
|
6
|
+
import { LayoutContext } from './layouts/docs/client';
|
|
7
|
+
|
|
8
|
+
// TODO: remove this compat layer on v17
|
|
9
|
+
|
|
10
|
+
export {
|
|
11
|
+
DocsDescription,
|
|
12
|
+
DocsTitle,
|
|
13
|
+
EditOnGitHub,
|
|
14
|
+
DocsBody,
|
|
15
|
+
PageBreadcrumb,
|
|
16
|
+
PageLastUpdate,
|
|
17
|
+
} from './layouts/docs/page';
|
|
18
|
+
|
|
19
|
+
interface EditOnGitHubOptions extends Omit<
|
|
20
|
+
ComponentProps<'a'>,
|
|
21
|
+
'href' | 'children'
|
|
22
|
+
> {
|
|
23
|
+
owner: string;
|
|
24
|
+
repo: string;
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* SHA or ref (branch or tag) name.
|
|
28
|
+
*
|
|
29
|
+
* @defaultValue main
|
|
30
|
+
*/
|
|
31
|
+
sha?: string;
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* File path in the repo
|
|
35
|
+
*/
|
|
36
|
+
path: string;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export interface DocsPageProps extends Docs.DocsPageProps {
|
|
40
|
+
editOnGithub?: EditOnGitHubOptions;
|
|
41
|
+
lastUpdate?: Date | string | number;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* For separate MDX page
|
|
46
|
+
*/
|
|
47
|
+
export function withArticle(props: ComponentProps<'main'>) {
|
|
48
|
+
return (
|
|
49
|
+
<main
|
|
50
|
+
{...props}
|
|
51
|
+
className={cn(
|
|
52
|
+
'w-full max-w-[1400px] mx-auto px-4 py-12',
|
|
53
|
+
props.className,
|
|
54
|
+
)}
|
|
55
|
+
>
|
|
56
|
+
<article className="prose">{props.children}</article>
|
|
57
|
+
</main>
|
|
58
|
+
);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export function DocsPage({
|
|
62
|
+
lastUpdate,
|
|
63
|
+
editOnGithub,
|
|
64
|
+
children,
|
|
65
|
+
...props
|
|
66
|
+
}: DocsPageProps) {
|
|
67
|
+
const docsLayoutCtx = use(LayoutContext);
|
|
68
|
+
const { DocsPage, EditOnGitHub, PageLastUpdate } = docsLayoutCtx
|
|
69
|
+
? Docs
|
|
70
|
+
: Notebook;
|
|
71
|
+
|
|
72
|
+
return (
|
|
73
|
+
<DocsPage {...props}>
|
|
74
|
+
{children}
|
|
75
|
+
<div className="flex flex-row flex-wrap items-center justify-between gap-4 empty:hidden">
|
|
76
|
+
{editOnGithub && (
|
|
77
|
+
<EditOnGitHub
|
|
78
|
+
href={`https://github.com/${editOnGithub.owner}/${editOnGithub.repo}/blob/${editOnGithub.sha}/${editOnGithub.path.startsWith('/') ? editOnGithub.path.slice(1) : editOnGithub.path}`}
|
|
79
|
+
/>
|
|
80
|
+
)}
|
|
81
|
+
{lastUpdate && <PageLastUpdate date={new Date(lastUpdate)} />}
|
|
82
|
+
</div>
|
|
83
|
+
</DocsPage>
|
|
84
|
+
);
|
|
85
|
+
}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { ThemeProvider } from 'next-themes';
|
|
4
|
+
import {
|
|
5
|
+
type ComponentPropsWithoutRef,
|
|
6
|
+
lazy,
|
|
7
|
+
type ReactNode,
|
|
8
|
+
useMemo,
|
|
9
|
+
useRef,
|
|
10
|
+
} from 'react';
|
|
11
|
+
import { DirectionProvider } from '@radix-ui/react-direction';
|
|
12
|
+
import type { DefaultSearchDialogProps } from '@/components/dialog/search-default';
|
|
13
|
+
import { SearchProvider, type SearchProviderProps } from '@/contexts/search';
|
|
14
|
+
import {
|
|
15
|
+
defaultTranslations,
|
|
16
|
+
I18nContext,
|
|
17
|
+
type LocaleItem,
|
|
18
|
+
type Translations,
|
|
19
|
+
} from '@/contexts/i18n';
|
|
20
|
+
import { usePathname, useRouter } from '@hanzo/docs-core/framework';
|
|
21
|
+
|
|
22
|
+
interface SearchOptions extends Omit<
|
|
23
|
+
SearchProviderProps,
|
|
24
|
+
'options' | 'children'
|
|
25
|
+
> {
|
|
26
|
+
options?: Partial<DefaultSearchDialogProps>;
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Enable search functionality
|
|
30
|
+
*
|
|
31
|
+
* @defaultValue `true`
|
|
32
|
+
*/
|
|
33
|
+
enabled?: boolean;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export interface RootProviderProps {
|
|
37
|
+
/**
|
|
38
|
+
* `dir` option for Radix UI
|
|
39
|
+
*/
|
|
40
|
+
dir?: 'rtl' | 'ltr';
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* @remarks `SearchProviderProps`
|
|
44
|
+
*/
|
|
45
|
+
search?: Partial<SearchOptions>;
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Customise options of `next-themes`
|
|
49
|
+
*/
|
|
50
|
+
theme?: Partial<ComponentPropsWithoutRef<typeof ThemeProvider>> & {
|
|
51
|
+
/**
|
|
52
|
+
* Enable `next-themes`
|
|
53
|
+
*
|
|
54
|
+
* @defaultValue true
|
|
55
|
+
*/
|
|
56
|
+
enabled?: boolean;
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
i18n?: Omit<I18nProviderProps, 'children'>;
|
|
60
|
+
|
|
61
|
+
children?: ReactNode;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export interface I18nProviderProps {
|
|
65
|
+
/**
|
|
66
|
+
* Current locale
|
|
67
|
+
*/
|
|
68
|
+
locale: string;
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Handle changes to the locale, redirect user when not specified.
|
|
72
|
+
*/
|
|
73
|
+
onLocaleChange?: (v: string) => void;
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Translations of current locale
|
|
77
|
+
*/
|
|
78
|
+
translations?: Partial<Translations>;
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Available languages
|
|
82
|
+
*/
|
|
83
|
+
locales?: LocaleItem[];
|
|
84
|
+
|
|
85
|
+
children?: ReactNode;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
const DefaultSearchDialog = lazy(
|
|
89
|
+
() => import('@/components/dialog/search-default'),
|
|
90
|
+
);
|
|
91
|
+
|
|
92
|
+
export function RootProvider({
|
|
93
|
+
children,
|
|
94
|
+
dir = 'ltr',
|
|
95
|
+
theme = {},
|
|
96
|
+
search,
|
|
97
|
+
i18n,
|
|
98
|
+
}: RootProviderProps) {
|
|
99
|
+
let body = children;
|
|
100
|
+
|
|
101
|
+
if (search?.enabled !== false)
|
|
102
|
+
body = (
|
|
103
|
+
<SearchProvider SearchDialog={DefaultSearchDialog} {...search}>
|
|
104
|
+
{body}
|
|
105
|
+
</SearchProvider>
|
|
106
|
+
);
|
|
107
|
+
|
|
108
|
+
if (theme?.enabled !== false)
|
|
109
|
+
body = (
|
|
110
|
+
<ThemeProvider
|
|
111
|
+
attribute="class"
|
|
112
|
+
defaultTheme="system"
|
|
113
|
+
enableSystem
|
|
114
|
+
disableTransitionOnChange
|
|
115
|
+
{...theme}
|
|
116
|
+
>
|
|
117
|
+
{body}
|
|
118
|
+
</ThemeProvider>
|
|
119
|
+
);
|
|
120
|
+
|
|
121
|
+
if (i18n) {
|
|
122
|
+
body = <I18nProvider {...i18n}>{body}</I18nProvider>;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
return <DirectionProvider dir={dir}>{body}</DirectionProvider>;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
function I18nProvider({
|
|
129
|
+
locales = [],
|
|
130
|
+
locale,
|
|
131
|
+
onLocaleChange,
|
|
132
|
+
children,
|
|
133
|
+
translations,
|
|
134
|
+
}: I18nProviderProps) {
|
|
135
|
+
const router = useRouter();
|
|
136
|
+
const pathname = usePathname();
|
|
137
|
+
const onChange = (value: string) => {
|
|
138
|
+
if (onLocaleChange) {
|
|
139
|
+
return onLocaleChange(value);
|
|
140
|
+
}
|
|
141
|
+
const segments = pathname.split('/').filter((v) => v.length > 0);
|
|
142
|
+
|
|
143
|
+
// If locale prefix hidden
|
|
144
|
+
if (segments[0] !== locale) {
|
|
145
|
+
segments.unshift(value);
|
|
146
|
+
} else {
|
|
147
|
+
segments[0] = value;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
router.push(`/${segments.join('/')}`);
|
|
151
|
+
};
|
|
152
|
+
const onChangeRef = useRef(onChange);
|
|
153
|
+
onChangeRef.current = onChange;
|
|
154
|
+
|
|
155
|
+
return (
|
|
156
|
+
<I18nContext
|
|
157
|
+
value={useMemo(
|
|
158
|
+
() => ({
|
|
159
|
+
locale,
|
|
160
|
+
locales,
|
|
161
|
+
text: {
|
|
162
|
+
...defaultTranslations,
|
|
163
|
+
...translations,
|
|
164
|
+
},
|
|
165
|
+
onChange: (v) => onChangeRef.current(v),
|
|
166
|
+
}),
|
|
167
|
+
[locale, locales, translations],
|
|
168
|
+
)}
|
|
169
|
+
>
|
|
170
|
+
{children}
|
|
171
|
+
</I18nContext>
|
|
172
|
+
);
|
|
173
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import type { ComponentProps } from 'react';
|
|
3
|
+
import { RootProvider as BaseProvider } from '@/provider/base';
|
|
4
|
+
import { NextProvider } from '@hanzo/docs-core/framework/next';
|
|
5
|
+
import type { Framework } from '@hanzo/docs-core/framework';
|
|
6
|
+
|
|
7
|
+
export interface RootProviderProps extends ComponentProps<typeof BaseProvider> {
|
|
8
|
+
/**
|
|
9
|
+
* Custom framework components to override Next.js defaults
|
|
10
|
+
*/
|
|
11
|
+
components?: {
|
|
12
|
+
Link?: Framework['Link'];
|
|
13
|
+
Image?: Framework['Image'];
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export function RootProvider({ components, ...props }: RootProviderProps) {
|
|
18
|
+
return (
|
|
19
|
+
<NextProvider Link={components?.Link} Image={components?.Image}>
|
|
20
|
+
<BaseProvider {...props}>{props.children}</BaseProvider>
|
|
21
|
+
</NextProvider>
|
|
22
|
+
);
|
|
23
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import type { ComponentProps } from 'react';
|
|
3
|
+
import { RootProvider as BaseProvider } from '@/provider/base';
|
|
4
|
+
import { ReactRouterProvider } from '@hanzo/docs-core/framework/react-router';
|
|
5
|
+
import type { Framework } from '@hanzo/docs-core/framework';
|
|
6
|
+
|
|
7
|
+
export interface RootProviderProps extends ComponentProps<typeof BaseProvider> {
|
|
8
|
+
/**
|
|
9
|
+
* Custom framework components to override React Router defaults
|
|
10
|
+
*/
|
|
11
|
+
components?: {
|
|
12
|
+
Link?: Framework['Link'];
|
|
13
|
+
Image?: Framework['Image'];
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export function RootProvider({ components, ...props }: RootProviderProps) {
|
|
18
|
+
return (
|
|
19
|
+
<ReactRouterProvider Link={components?.Link} Image={components?.Image}>
|
|
20
|
+
<BaseProvider {...props}>{props.children}</BaseProvider>
|
|
21
|
+
</ReactRouterProvider>
|
|
22
|
+
);
|
|
23
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import type { ComponentProps } from 'react';
|
|
3
|
+
import { RootProvider as BaseProvider } from '@/provider/base';
|
|
4
|
+
import { TanstackProvider } from '@hanzo/docs-core/framework/tanstack';
|
|
5
|
+
import type { Framework } from '@hanzo/docs-core/framework';
|
|
6
|
+
|
|
7
|
+
export interface RootProviderProps extends ComponentProps<typeof BaseProvider> {
|
|
8
|
+
/**
|
|
9
|
+
* Custom framework components to override Tanstack Router defaults
|
|
10
|
+
*/
|
|
11
|
+
components?: {
|
|
12
|
+
Link?: Framework['Link'];
|
|
13
|
+
Image?: Framework['Image'];
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export function RootProvider({ components, ...props }: RootProviderProps) {
|
|
18
|
+
return (
|
|
19
|
+
<TanstackProvider Link={components?.Link} Image={components?.Image}>
|
|
20
|
+
<BaseProvider {...props}>{props.children}</BaseProvider>
|
|
21
|
+
</TanstackProvider>
|
|
22
|
+
);
|
|
23
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import type { ComponentProps } from 'react';
|
|
3
|
+
import { RootProvider as BaseProvider } from '@/provider/base';
|
|
4
|
+
import { WakuProvider } from '@hanzo/docs-core/framework/waku';
|
|
5
|
+
import type { Framework } from '@hanzo/docs-core/framework';
|
|
6
|
+
|
|
7
|
+
export interface RootProviderProps extends ComponentProps<typeof BaseProvider> {
|
|
8
|
+
/**
|
|
9
|
+
* Custom framework components to override Waku defaults
|
|
10
|
+
*/
|
|
11
|
+
components?: {
|
|
12
|
+
Link?: Framework['Link'];
|
|
13
|
+
Image?: Framework['Image'];
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export function RootProvider({ components, ...props }: RootProviderProps) {
|
|
18
|
+
return (
|
|
19
|
+
<WakuProvider Link={components?.Link} Image={components?.Image}>
|
|
20
|
+
<BaseProvider {...props}>{props.children}</BaseProvider>
|
|
21
|
+
</WakuProvider>
|
|
22
|
+
);
|
|
23
|
+
}
|
package/docs/source.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) Tailwind Labs, Inc.
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|