@docubook/create 1.13.0 → 1.13.5
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/package.json +1 -1
- package/src/dist/app/page.tsx +1 -1
- package/src/dist/components/context-popover.tsx +4 -4
- package/src/dist/components/footer.tsx +4 -2
- package/src/dist/components/markdown/CardGroupMdx.tsx +1 -1
- package/src/dist/components/markdown/CardMdx.tsx +5 -4
- package/src/dist/components/markdown/FileTreeMdx.tsx +52 -33
- package/src/dist/components/markdown/KeyboardMdx.tsx +1 -1
- package/src/dist/components/markdown/NoteMdx.tsx +1 -1
- package/src/dist/components/markdown/StepperMdx.tsx +2 -2
- package/src/dist/components/markdown/TooltipsMdx.tsx +6 -3
- package/src/dist/components/navbar.tsx +3 -3
- package/src/dist/components/sublink.tsx +7 -6
- package/src/dist/components/theme-toggle.tsx +10 -10
- package/src/dist/components/toc-observer.tsx +9 -9
- package/src/dist/contents/docs/changelog/version-1/index.mdx +26 -3
- package/src/dist/contents/docs/components/accordion/index.mdx +36 -22
- package/src/dist/contents/docs/components/button/index.mdx +11 -13
- package/src/dist/contents/docs/components/card/index.mdx +6 -8
- package/src/dist/contents/docs/components/card-group/index.mdx +2 -4
- package/src/dist/contents/docs/components/code-block/index.mdx +2 -4
- package/src/dist/contents/docs/components/file-tree/index.mdx +3 -3
- package/src/dist/contents/docs/components/index.mdx +9 -0
- package/src/dist/contents/docs/components/keyboard/index.mdx +3 -3
- package/src/dist/contents/docs/components/note/index.mdx +4 -6
- package/src/dist/contents/docs/components/release-note/index.mdx +2 -2
- package/src/dist/contents/docs/components/stepper/index.mdx +2 -4
- package/src/dist/contents/docs/components/tabs/index.mdx +4 -4
- package/src/dist/contents/docs/components/tooltips/index.mdx +1 -1
- package/src/dist/contents/docs/components/youtube/index.mdx +7 -5
- package/src/dist/contents/docs/getting-started/index.mdx +9 -0
- package/src/dist/contents/docs/getting-started/theme-colors/coffee/index.mdx +167 -0
- package/src/dist/contents/docs/getting-started/theme-colors/default/index.mdx +163 -0
- package/src/dist/contents/docs/getting-started/theme-colors/freshlime/index.mdx +164 -0
- package/src/dist/contents/docs/getting-started/theme-colors/index.mdx +9 -0
- package/src/dist/contents/docs/getting-started/theme-colors/llms/index.mdx +66 -0
- package/src/dist/docu.json +12 -2
- package/src/dist/package.json +1 -1
- package/src/dist/styles/globals.css +50 -50
- package/src/dist/styles/syntax.css +24 -29
- package/bun.lock +0 -102
package/package.json
CHANGED
package/src/dist/app/page.tsx
CHANGED
|
@@ -25,7 +25,7 @@ export default function Home() {
|
|
|
25
25
|
)}
|
|
26
26
|
>
|
|
27
27
|
<AnimatedShinyText className="inline-flex items-center justify-center px-4 py-1 transition ease-out hover:text-neutral-100 hover:duration-300 hover:dark:text-neutral-200">
|
|
28
|
-
<span>🚀 New Version - Release v1.13.
|
|
28
|
+
<span>🚀 New Version - Release v1.13.5</span>
|
|
29
29
|
<ArrowRightIcon className="ml-1 size-3 transition-transform duration-300 ease-in-out group-hover:translate-x-0.5" />
|
|
30
30
|
</AnimatedShinyText>
|
|
31
31
|
</div>
|
|
@@ -68,7 +68,7 @@ export default function ContextPopover({ className }: ContextPopoverProps) {
|
|
|
68
68
|
>
|
|
69
69
|
<div className="flex items-center gap-2">
|
|
70
70
|
{activeRoute?.context?.icon && (
|
|
71
|
-
<span className="text-primary bg-primary/10 border border-primary rounded p-0.5">
|
|
71
|
+
<span className="text-primary bg-primary/10 border border-primary dark:border dark:border-accent dark:bg-accent/10 dark:text-accent rounded p-0.5">
|
|
72
72
|
{getIcon(activeRoute.context.icon)}
|
|
73
73
|
</span>
|
|
74
74
|
)}
|
|
@@ -98,14 +98,14 @@ export default function ContextPopover({ className }: ContextPopoverProps) {
|
|
|
98
98
|
"relative flex w-full items-center gap-2 rounded px-2 py-1.5 text-sm",
|
|
99
99
|
"text-left outline-none transition-colors",
|
|
100
100
|
isActive
|
|
101
|
-
? "bg-primary/20 text-primary"
|
|
102
|
-
: "text-foreground/80 hover:bg-primary/20"
|
|
101
|
+
? "bg-primary/20 text-primary dark:bg-accent/20 dark:text-accent"
|
|
102
|
+
: "text-foreground/80 hover:bg-primary/20 dark:text-foreground/60 dark:hover:bg-accent/20"
|
|
103
103
|
)}
|
|
104
104
|
>
|
|
105
105
|
{route.context?.icon && (
|
|
106
106
|
<span className={cn(
|
|
107
107
|
"flex h-4 w-4 items-center justify-center",
|
|
108
|
-
isActive ? "text-primary" : "text-foreground/60"
|
|
108
|
+
isActive ? "text-primary dark:text-accent" : "text-foreground/60"
|
|
109
109
|
)}>
|
|
110
110
|
{getIcon(route.context.icon)}
|
|
111
111
|
</span>
|
|
@@ -63,8 +63,9 @@ export function FooterButtons() {
|
|
|
63
63
|
target="_blank"
|
|
64
64
|
rel="noopener noreferrer"
|
|
65
65
|
aria-label={item.name}
|
|
66
|
+
className="text-muted-foreground hover:text-foreground transition-colors"
|
|
66
67
|
>
|
|
67
|
-
<IconComponent className="w-4 h-4
|
|
68
|
+
<IconComponent className="w-4 h-4" />
|
|
68
69
|
</Link>
|
|
69
70
|
);
|
|
70
71
|
})}
|
|
@@ -79,7 +80,8 @@ export function MadeWith() {
|
|
|
79
80
|
<span className="text-primary">
|
|
80
81
|
<Link href="https://www.docubook.pro" target="_blank" rel="noopener noreferrer" className="underline underline-offset-2 text-muted-foreground">
|
|
81
82
|
DocuBook
|
|
82
|
-
</Link
|
|
83
|
+
</Link>
|
|
84
|
+
</span>
|
|
83
85
|
</>
|
|
84
86
|
);
|
|
85
87
|
}
|
|
@@ -20,8 +20,9 @@ const Card: React.FC<CardProps> = ({ title, icon, href, horizontal, children, cl
|
|
|
20
20
|
const content = (
|
|
21
21
|
<div
|
|
22
22
|
className={clsx(
|
|
23
|
-
"border rounded-lg shadow-sm p-4 transition-all duration-200
|
|
24
|
-
"
|
|
23
|
+
"border rounded-lg shadow-sm p-4 transition-all duration-200",
|
|
24
|
+
"bg-card text-card-foreground border-border",
|
|
25
|
+
"hover:bg-accent/5 hover:border-accent/30",
|
|
25
26
|
"flex gap-2",
|
|
26
27
|
horizontal ? "flex-row items-center gap-1" : "flex-col space-y-1",
|
|
27
28
|
className
|
|
@@ -29,8 +30,8 @@ const Card: React.FC<CardProps> = ({ title, icon, href, horizontal, children, cl
|
|
|
29
30
|
>
|
|
30
31
|
{Icon && <Icon className="w-5 h-5 text-primary flex-shrink-0" />}
|
|
31
32
|
<div className="flex-1 min-w-0 my-auto h-full">
|
|
32
|
-
<span className="text-base font-semibold">{title}</span>
|
|
33
|
-
<div className="text-sm text-
|
|
33
|
+
<span className="text-base font-semibold text-foreground">{title}</span>
|
|
34
|
+
<div className="text-sm text-muted-foreground -mt-3">{children}</div>
|
|
34
35
|
</div>
|
|
35
36
|
</div>
|
|
36
37
|
);
|
|
@@ -1,12 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
3
|
import React, { useState, ReactNode, Children, isValidElement, cloneElement } from 'react';
|
|
4
|
-
import { ChevronRight,
|
|
5
|
-
|
|
6
|
-
interface FileTreeProps {
|
|
7
|
-
children: ReactNode;
|
|
8
|
-
defaultOpen?: boolean;
|
|
9
|
-
}
|
|
4
|
+
import { ChevronRight, File as FileIcon, Folder as FolderIcon, FolderOpen } from 'lucide-react';
|
|
10
5
|
|
|
11
6
|
interface FileProps {
|
|
12
7
|
name: string;
|
|
@@ -15,24 +10,27 @@ interface FileProps {
|
|
|
15
10
|
|
|
16
11
|
const FileComponent = ({ name }: FileProps) => {
|
|
17
12
|
const [isHovered, setIsHovered] = useState(false);
|
|
13
|
+
const fileExtension = name.split('.').pop()?.toUpperCase();
|
|
18
14
|
|
|
19
15
|
return (
|
|
20
16
|
<div
|
|
21
17
|
className={`
|
|
22
|
-
flex items-center gap-2 py-1.5 pl-7 pr-3 text-sm
|
|
23
|
-
transition-
|
|
24
|
-
${isHovered
|
|
25
|
-
? 'bg-blue-50 dark:bg-blue-900/30'
|
|
26
|
-
: 'hover:bg-gray-50 dark:hover:bg-gray-800/50'}
|
|
18
|
+
flex items-center gap-2 py-1.5 pl-7 pr-3 text-sm rounded-md
|
|
19
|
+
transition-colors duration-150 cursor-default select-none
|
|
20
|
+
${isHovered ? 'bg-accent/10' : 'hover:bg-muted/50'}
|
|
27
21
|
`}
|
|
28
22
|
onMouseEnter={() => setIsHovered(true)}
|
|
29
23
|
onMouseLeave={() => setIsHovered(false)}
|
|
24
|
+
tabIndex={-1}
|
|
30
25
|
>
|
|
31
|
-
<FileIcon className={`
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
26
|
+
<FileIcon className={`
|
|
27
|
+
h-3.5 w-3.5 flex-shrink-0 transition-colors
|
|
28
|
+
${isHovered ? 'text-accent' : 'text-muted-foreground'}
|
|
29
|
+
`} />
|
|
30
|
+
<span className="font-mono text-sm text-foreground truncate">{name}</span>
|
|
31
|
+
{isHovered && fileExtension && (
|
|
32
|
+
<span className="ml-auto text-xs text-muted-foreground/80">
|
|
33
|
+
{fileExtension}
|
|
36
34
|
</span>
|
|
37
35
|
)}
|
|
38
36
|
</div>
|
|
@@ -48,31 +46,49 @@ const FolderComponent = ({ name, children }: FileProps) => {
|
|
|
48
46
|
<div className="relative">
|
|
49
47
|
<div
|
|
50
48
|
className={`
|
|
51
|
-
flex items-center gap-2 py-1.5 pl-4 pr-3 rounded-md
|
|
52
|
-
transition-
|
|
53
|
-
${isHovered ? 'bg-
|
|
54
|
-
${isOpen ? 'text-
|
|
49
|
+
flex items-center gap-2 py-1.5 pl-4 pr-3 rounded-md
|
|
50
|
+
transition-colors duration-150 select-none
|
|
51
|
+
${isHovered ? 'bg-muted/60' : ''}
|
|
52
|
+
${isOpen ? 'text-foreground' : 'text-foreground/80'}
|
|
53
|
+
${hasChildren ? 'cursor-pointer' : 'cursor-default'}
|
|
55
54
|
`}
|
|
56
|
-
onClick={() => setIsOpen(!isOpen)}
|
|
55
|
+
onClick={() => hasChildren && setIsOpen(!isOpen)}
|
|
57
56
|
onMouseEnter={() => setIsHovered(true)}
|
|
58
57
|
onMouseLeave={() => setIsHovered(false)}
|
|
58
|
+
tabIndex={-1}
|
|
59
|
+
onKeyDown={(e) => e.preventDefault()}
|
|
59
60
|
>
|
|
60
61
|
{hasChildren ? (
|
|
61
62
|
<ChevronRight
|
|
62
|
-
className={`
|
|
63
|
+
className={`
|
|
64
|
+
h-3.5 w-3.5 flex-shrink-0 transition-transform duration-200
|
|
65
|
+
${isOpen ? 'rotate-90' : ''}
|
|
66
|
+
${isHovered ? 'text-foreground/70' : 'text-muted-foreground'}
|
|
67
|
+
`}
|
|
63
68
|
/>
|
|
64
69
|
) : (
|
|
65
70
|
<div className="w-3.5" />
|
|
66
71
|
)}
|
|
67
72
|
{isOpen ? (
|
|
68
|
-
<FolderOpen className=
|
|
73
|
+
<FolderOpen className={`
|
|
74
|
+
h-4 w-4 flex-shrink-0 transition-colors
|
|
75
|
+
${isHovered ? 'text-accent' : 'text-muted-foreground'}
|
|
76
|
+
`} />
|
|
69
77
|
) : (
|
|
70
|
-
<FolderIcon className=
|
|
78
|
+
<FolderIcon className={`
|
|
79
|
+
h-4 w-4 flex-shrink-0 transition-colors
|
|
80
|
+
${isHovered ? 'text-accent/80' : 'text-muted-foreground/80'}
|
|
81
|
+
`} />
|
|
71
82
|
)}
|
|
72
|
-
<span className=
|
|
83
|
+
<span className={`
|
|
84
|
+
font-medium transition-colors duration-150
|
|
85
|
+
${isHovered ? 'text-accent' : ''}
|
|
86
|
+
`}>
|
|
87
|
+
{name}
|
|
88
|
+
</span>
|
|
73
89
|
</div>
|
|
74
90
|
{isOpen && hasChildren && (
|
|
75
|
-
<div className="ml-5 border-l-2 border-
|
|
91
|
+
<div className="ml-5 border-l-2 border-muted/50 pl-2">
|
|
76
92
|
{children}
|
|
77
93
|
</div>
|
|
78
94
|
)}
|
|
@@ -82,13 +98,16 @@ const FolderComponent = ({ name, children }: FileProps) => {
|
|
|
82
98
|
|
|
83
99
|
export const Files = ({ children }: { children: ReactNode }) => {
|
|
84
100
|
return (
|
|
85
|
-
<div
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
101
|
+
<div
|
|
102
|
+
className="
|
|
103
|
+
rounded-xl border border-muted/50
|
|
104
|
+
bg-card/50 backdrop-blur-sm
|
|
105
|
+
shadow-sm overflow-hidden
|
|
106
|
+
transition-all duration-200
|
|
107
|
+
hover:shadow-md hover:border-muted/60
|
|
108
|
+
"
|
|
109
|
+
onKeyDown={(e) => e.preventDefault()}
|
|
110
|
+
>
|
|
92
111
|
<div className="p-2">
|
|
93
112
|
{Children.map(children, (child, index) => {
|
|
94
113
|
if (isValidElement(child)) {
|
|
@@ -88,7 +88,7 @@ const KbdComponent: React.FC<KbdProps> = ({
|
|
|
88
88
|
|
|
89
89
|
return (
|
|
90
90
|
<kbd
|
|
91
|
-
className="inline-flex items-center justify-center px-2 py-1 mx-0.5 text-xs font-mono font-medium text-
|
|
91
|
+
className="inline-flex items-center justify-center px-2 py-1 mx-0.5 text-xs font-mono font-medium text-foreground bg-secondary/70 border rounded-md"
|
|
92
92
|
{...props}
|
|
93
93
|
>
|
|
94
94
|
{renderContent()}
|
|
@@ -29,7 +29,7 @@ export default function Note({
|
|
|
29
29
|
"dark:bg-stone-950/25 bg-stone-50": type === "note",
|
|
30
30
|
"dark:bg-red-950 bg-red-100 border-red-200 dark:border-red-900":
|
|
31
31
|
type === "danger",
|
|
32
|
-
"
|
|
32
|
+
"bg-orange-50 border-orange-200 dark:border-orange-900 dark:bg-orange-900/50":
|
|
33
33
|
type === "warning",
|
|
34
34
|
"dark:bg-green-950 bg-green-100 border-green-200 dark:border-green-900":
|
|
35
35
|
type === "success",
|
|
@@ -11,13 +11,13 @@ export function Stepper({ children }: PropsWithChildren) {
|
|
|
11
11
|
return (
|
|
12
12
|
<div
|
|
13
13
|
className={cn(
|
|
14
|
-
"border-l pl-9 ml-3 relative",
|
|
14
|
+
"border-l border-muted pl-9 ml-3 relative",
|
|
15
15
|
clsx({
|
|
16
16
|
"pb-5 ": index < length - 1,
|
|
17
17
|
})
|
|
18
18
|
)}
|
|
19
19
|
>
|
|
20
|
-
<div className="bg-muted w-8 h-8 text-xs font-medium rounded-md border flex items-center justify-center absolute -left-4 font-code">
|
|
20
|
+
<div className="bg-muted text-muted-foreground w-8 h-8 text-xs font-medium rounded-md border border-border/50 flex items-center justify-center absolute -left-4 font-code">
|
|
21
21
|
{index + 1}
|
|
22
22
|
</div>
|
|
23
23
|
{child}
|
|
@@ -11,14 +11,17 @@ const Tooltip: React.FC<TooltipProps> = ({ text, tip }) => {
|
|
|
11
11
|
|
|
12
12
|
return (
|
|
13
13
|
<span
|
|
14
|
-
className="relative inline-
|
|
14
|
+
className="relative inline-flex items-center cursor-help text-primary hover:text-primary/80 transition-colors"
|
|
15
15
|
onMouseEnter={() => setVisible(true)}
|
|
16
16
|
onMouseLeave={() => setVisible(false)}
|
|
17
17
|
>
|
|
18
|
-
|
|
18
|
+
<span className="border-b border-dashed border-primary/60 pb-0.5">
|
|
19
|
+
{text}
|
|
20
|
+
</span>
|
|
19
21
|
{visible && (
|
|
20
|
-
<span className="absolute bottom-full left-1/2 -translate-x-1/2 mb-
|
|
22
|
+
<span className="absolute bottom-full left-1/2 -translate-x-1/2 mb-3 w-64 bg-popover text-popover-foreground text-sm p-3 rounded-md shadow-lg border border-border/50 break-words text-left z-50">
|
|
21
23
|
{tip}
|
|
24
|
+
<span className="absolute -bottom-1.5 left-1/2 -translate-x-1/2 w-3 h-3 bg-popover rotate-45 border-b border-r border-border/50 -z-10" />
|
|
22
25
|
</span>
|
|
23
26
|
)}
|
|
24
27
|
</span>
|
|
@@ -63,15 +63,15 @@ export function NavMenu({ isSheet = false }) {
|
|
|
63
63
|
const Comp = (
|
|
64
64
|
<Anchor
|
|
65
65
|
key={`${item.title}-${item.href}`}
|
|
66
|
-
activeClassName="
|
|
66
|
+
activeClassName="text-primary dark:text-accent md:font-semibold font-medium"
|
|
67
67
|
absolute
|
|
68
|
-
className="flex items-center gap-1
|
|
68
|
+
className="flex items-center gap-1 text-foreground/80 hover:text-foreground transition-colors"
|
|
69
69
|
href={item.href}
|
|
70
70
|
target={isExternal ? "_blank" : undefined}
|
|
71
71
|
rel={isExternal ? "noopener noreferrer" : undefined}
|
|
72
72
|
>
|
|
73
73
|
{item.title}
|
|
74
|
-
{isExternal && <ArrowUpRight className="w-4 h-4 text-
|
|
74
|
+
{isExternal && <ArrowUpRight className="w-4 h-4 text-foreground/80" />}
|
|
75
75
|
</Anchor>
|
|
76
76
|
);
|
|
77
77
|
return isSheet ? (
|
|
@@ -54,9 +54,10 @@ export default function SubLink({
|
|
|
54
54
|
// Only apply active styles if it's an exact match and not a parent with active children
|
|
55
55
|
const Comp = useMemo(() => (
|
|
56
56
|
<Anchor
|
|
57
|
-
activeClassName={!hasActiveChild ? "text-primary font-medium" : ""}
|
|
57
|
+
activeClassName={!hasActiveChild ? "dark:text-accent text-primary font-medium" : ""}
|
|
58
58
|
href={fullHref}
|
|
59
59
|
className={cn(
|
|
60
|
+
"text-foreground/80 hover:text-foreground transition-colors",
|
|
60
61
|
hasActiveChild && "font-medium text-foreground"
|
|
61
62
|
)}
|
|
62
63
|
>
|
|
@@ -72,8 +73,8 @@ export default function SubLink({
|
|
|
72
73
|
)
|
|
73
74
|
) : (
|
|
74
75
|
<h4 className={cn(
|
|
75
|
-
"font-medium sm:text-sm",
|
|
76
|
-
hasActiveChild ? "text-foreground" : "text-
|
|
76
|
+
"font-medium sm:text-sm text-foreground/90 hover:text-foreground transition-colors",
|
|
77
|
+
hasActiveChild ? "text-foreground" : "text-foreground/80"
|
|
77
78
|
)}>
|
|
78
79
|
{title}
|
|
79
80
|
</h4>
|
|
@@ -93,7 +94,7 @@ export default function SubLink({
|
|
|
93
94
|
>
|
|
94
95
|
<div className="flex items-center justify-between w-full">
|
|
95
96
|
{titleOrLink}
|
|
96
|
-
<span className="ml-2">
|
|
97
|
+
<span className="ml-2 text-muted-foreground">
|
|
97
98
|
{!isOpen ? (
|
|
98
99
|
<ChevronRight className="h-[0.9rem] w-[0.9rem]" aria-hidden="true" />
|
|
99
100
|
) : (
|
|
@@ -111,8 +112,8 @@ export default function SubLink({
|
|
|
111
112
|
>
|
|
112
113
|
<div
|
|
113
114
|
className={cn(
|
|
114
|
-
"flex flex-col items-start sm:text-sm
|
|
115
|
-
level > 0 && "pl-4 border-l ml-1.5"
|
|
115
|
+
"flex flex-col items-start sm:text-sm text-foreground/80 ml-0.5 mt-2.5 gap-3 hover:[&_a]:text-foreground transition-colors",
|
|
116
|
+
level > 0 && "pl-4 border-l border-border ml-1.5"
|
|
116
117
|
)}
|
|
117
118
|
>
|
|
118
119
|
{items?.map((innerLink) => (
|
|
@@ -28,7 +28,7 @@ export function ModeToggle() {
|
|
|
28
28
|
setSelectedTheme(value);
|
|
29
29
|
}
|
|
30
30
|
}}
|
|
31
|
-
className="flex items-center gap-1 rounded-full border border-
|
|
31
|
+
className="flex items-center gap-1 rounded-full border border-border bg-background/50 p-1 transition-all"
|
|
32
32
|
>
|
|
33
33
|
<ToggleGroupItem
|
|
34
34
|
value="light"
|
|
@@ -36,11 +36,11 @@ export function ModeToggle() {
|
|
|
36
36
|
aria-label="Light Mode"
|
|
37
37
|
className={`rounded-full p-1 transition-all ${
|
|
38
38
|
selectedTheme === "light"
|
|
39
|
-
? "bg-
|
|
40
|
-
: "bg-transparent"
|
|
39
|
+
? "bg-primary text-primary-foreground"
|
|
40
|
+
: "bg-transparent hover:bg-muted/50"
|
|
41
41
|
}`}
|
|
42
42
|
>
|
|
43
|
-
<Sun className=
|
|
43
|
+
<Sun className="h-4 w-4" />
|
|
44
44
|
</ToggleGroupItem>
|
|
45
45
|
<ToggleGroupItem
|
|
46
46
|
value="system"
|
|
@@ -48,11 +48,11 @@ export function ModeToggle() {
|
|
|
48
48
|
aria-label="System Mode"
|
|
49
49
|
className={`rounded-full p-1 transition-all ${
|
|
50
50
|
selectedTheme === "system"
|
|
51
|
-
? "bg-
|
|
52
|
-
: "bg-transparent"
|
|
51
|
+
? "bg-primary text-primary-foreground"
|
|
52
|
+
: "bg-transparent hover:bg-muted/50"
|
|
53
53
|
}`}
|
|
54
54
|
>
|
|
55
|
-
<Monitor className=
|
|
55
|
+
<Monitor className="h-4 w-4" />
|
|
56
56
|
</ToggleGroupItem>
|
|
57
57
|
<ToggleGroupItem
|
|
58
58
|
value="dark"
|
|
@@ -60,11 +60,11 @@ export function ModeToggle() {
|
|
|
60
60
|
aria-label="Dark Mode"
|
|
61
61
|
className={`rounded-full p-1 transition-all ${
|
|
62
62
|
selectedTheme === "dark"
|
|
63
|
-
? "bg-
|
|
64
|
-
: "bg-transparent"
|
|
63
|
+
? "bg-primary text-primary-foreground"
|
|
64
|
+
: "bg-transparent hover:bg-muted/50"
|
|
65
65
|
}`}
|
|
66
66
|
>
|
|
67
|
-
<Moon className=
|
|
67
|
+
<Moon className="h-4 w-4" />
|
|
68
68
|
</ToggleGroupItem>
|
|
69
69
|
</ToggleGroup>
|
|
70
70
|
);
|
|
@@ -149,7 +149,7 @@ export default function TocObserver({
|
|
|
149
149
|
|
|
150
150
|
return (
|
|
151
151
|
<div className="relative">
|
|
152
|
-
<div className="relative text-sm text-
|
|
152
|
+
<div className="relative text-sm text-foreground/70 hover:text-foreground transition-colors">
|
|
153
153
|
<div className="flex flex-col gap-0">
|
|
154
154
|
{data.map(({ href, level, text }, index) => {
|
|
155
155
|
const id = href.slice(1);
|
|
@@ -172,7 +172,7 @@ export default function TocObserver({
|
|
|
172
172
|
{/* Vertical line */}
|
|
173
173
|
<div className={clsx(
|
|
174
174
|
"absolute left-0 top-0 h-full w-px",
|
|
175
|
-
isActive ? "bg-primary/20" : "bg-
|
|
175
|
+
isActive ? "bg-primary/20 dark:bg-primary/30" : "bg-border/50 dark:bg-border/50"
|
|
176
176
|
)}>
|
|
177
177
|
{isActive && (
|
|
178
178
|
<motion.div
|
|
@@ -187,11 +187,11 @@ export default function TocObserver({
|
|
|
187
187
|
{/* Horizontal line */}
|
|
188
188
|
<div className={clsx(
|
|
189
189
|
"absolute left-0 top-1/2 h-px w-6",
|
|
190
|
-
isActive ? "bg-primary/20" : "bg-
|
|
190
|
+
isActive ? "bg-primary/20 dark:bg-primary/30" : "bg-border/50 dark:bg-border/50"
|
|
191
191
|
)}>
|
|
192
192
|
{isActive && (
|
|
193
193
|
<motion.div
|
|
194
|
-
className="absolute left-0 top-0 h-full w-full bg-primary origin-left"
|
|
194
|
+
className="absolute left-0 top-0 h-full w-full bg-primary dark:bg-accent origin-left"
|
|
195
195
|
initial={{ scaleX: 0 }}
|
|
196
196
|
animate={{ scaleX: scrollProgress }}
|
|
197
197
|
transition={{ duration: 0.3, delay: 0.1 }}
|
|
@@ -207,8 +207,8 @@ export default function TocObserver({
|
|
|
207
207
|
className={clsx(
|
|
208
208
|
"relative flex items-center py-2 transition-colors",
|
|
209
209
|
{
|
|
210
|
-
"text-primary dark:text-primary
|
|
211
|
-
"text-
|
|
210
|
+
"text-primary dark:text-primary font-medium": isActive,
|
|
211
|
+
"text-muted-foreground hover:text-foreground dark:hover:text-foreground/90": !isActive,
|
|
212
212
|
}
|
|
213
213
|
)}
|
|
214
214
|
style={{
|
|
@@ -229,13 +229,13 @@ export default function TocObserver({
|
|
|
229
229
|
<div className={clsx(
|
|
230
230
|
"w-1.5 h-1.5 rounded-full transition-all duration-300 relative z-10",
|
|
231
231
|
{
|
|
232
|
-
"bg-primary scale-100": isActive,
|
|
233
|
-
"bg-
|
|
232
|
+
"bg-primary scale-100 dark:bg-primary/90": isActive,
|
|
233
|
+
"bg-muted-foreground/30 dark:bg-muted-foreground/30 scale-75 group-hover:scale-100 group-hover:bg-primary/50 dark:group-hover:bg-primary/50": !isActive,
|
|
234
234
|
}
|
|
235
235
|
)}>
|
|
236
236
|
{isActive && (
|
|
237
237
|
<motion.div
|
|
238
|
-
className="absolute inset-0 rounded-full bg-primary/20"
|
|
238
|
+
className="absolute inset-0 rounded-full bg-primary/20 dark:bg-primary/30"
|
|
239
239
|
initial={{ scale: 1 }}
|
|
240
240
|
animate={{ scale: 1.8 }}
|
|
241
241
|
transition={{
|
|
@@ -1,12 +1,35 @@
|
|
|
1
1
|
---
|
|
2
|
-
title:
|
|
2
|
+
title: Release Version 1.0+
|
|
3
3
|
description: List of latest changes and updates on DocuBook
|
|
4
4
|
date: 24-05-2025
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
<Note type="note" title="Version History">
|
|
8
|
+
This changelog contains a list of all the changes made to the DocuBook template. It will be updated with each new release and will include information about new features, bug fixes, and other improvements.
|
|
9
|
+
</Note>
|
|
10
|
+
|
|
11
|
+
<div className="sr-only">
|
|
12
|
+
### v 1.13.5
|
|
13
|
+
</div>
|
|
8
14
|
|
|
9
|
-
|
|
15
|
+
<Release version="1.13.5" date="2025-05-31" title="Add Theme schema for consistent theme">
|
|
16
|
+
<Changes type="added">
|
|
17
|
+
- Add Theme schema
|
|
18
|
+
- Add Freshlime theme
|
|
19
|
+
- Add Coffee theme
|
|
20
|
+
- Add llms context for generated theme with AI
|
|
21
|
+
</Changes>
|
|
22
|
+
<Changes type="improved">
|
|
23
|
+
- Markdown support for theme-colors
|
|
24
|
+
- consistent theme-colors page
|
|
25
|
+
- all components now consistent with theme-colors
|
|
26
|
+
- syntax with theme-colors
|
|
27
|
+
</Changes>
|
|
28
|
+
<Changes type="fixed">
|
|
29
|
+
- fix bug FileTree component
|
|
30
|
+
- fix issue markdown with theme-colors
|
|
31
|
+
</Changes>
|
|
32
|
+
</Release>
|
|
10
33
|
|
|
11
34
|
<div className="sr-only">
|
|
12
35
|
### v 1.13.0
|
|
@@ -4,41 +4,55 @@ description: A component used to create collapsible content that can be hidden a
|
|
|
4
4
|
date: 22-12-2024
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
The Accordion component is a collapsible content container that can be used to hide and show content again. It is a flexible component that can be used to display any content, including HTML elements, markdown components, and plain text.
|
|
8
|
-
|
|
9
7
|
## Preview
|
|
10
8
|
|
|
11
|
-
###
|
|
9
|
+
### Basic Usage
|
|
12
10
|
|
|
13
|
-
<Accordion title="
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
11
|
+
<Accordion title="Click to expand" defaultOpen={true}>
|
|
12
|
+
This is a simple accordion component that can be toggled by clicking the header. The content can include any valid React nodes, including text, components, and markdown.
|
|
13
|
+
</Accordion>
|
|
14
|
+
|
|
15
|
+
### With Code Block
|
|
16
|
+
|
|
17
|
+
<Accordion title="Code Example" className="mt-4">
|
|
18
|
+
```javascript:utils.js showLineNumbers
|
|
19
|
+
// Example of using the Accordion component
|
|
20
|
+
import Accordion from '@/components/markdown/AccordionMdx';
|
|
21
|
+
|
|
22
|
+
function Example() {
|
|
23
|
+
return (
|
|
24
|
+
<Accordion title="Click to see code">
|
|
25
|
+
<pre>
|
|
26
|
+
{`function greet() {\n console.log('Hello, world!');\n}`}
|
|
27
|
+
</pre>
|
|
28
|
+
</Accordion>
|
|
29
|
+
);
|
|
20
30
|
}
|
|
21
31
|
```
|
|
22
32
|
</Accordion>
|
|
23
33
|
|
|
24
|
-
###
|
|
34
|
+
### With Markdown Content
|
|
35
|
+
|
|
36
|
+
<Accordion title="Markdown Example" className="mt-4">
|
|
37
|
+
## This is a markdown heading
|
|
38
|
+
|
|
39
|
+
- List item 1
|
|
40
|
+
- List item 2
|
|
41
|
+
- List item 3
|
|
25
42
|
|
|
26
|
-
|
|
27
|
-
this is an example of plain text content from the accordion component and below is markdown ;
|
|
28
|
-
1. number one
|
|
29
|
-
2. number two
|
|
30
|
-
3. number three
|
|
43
|
+
You can include **bold** and *italic* text, [links](#), and other markdown elements.
|
|
31
44
|
</Accordion>
|
|
32
45
|
|
|
33
46
|
## Props
|
|
34
47
|
|
|
35
|
-
| Prop
|
|
36
|
-
|
|
37
|
-
| `title`
|
|
38
|
-
| `children`
|
|
39
|
-
| `defaultOpen` |
|
|
48
|
+
| Prop | Type | Default | Description |
|
|
49
|
+
|------|------|---------|-------------|
|
|
50
|
+
| `title` | string | - | **Required**. The text displayed in the accordion header. |
|
|
51
|
+
| `children` | ReactNode | null | The content to be displayed when the accordion is expanded. Can be plain text, markdown, or React components. |
|
|
52
|
+
| `defaultOpen` | boolean | false | When true, the accordion will be expanded by default. |
|
|
53
|
+
| `className` | string | undefined | Additional CSS classes to apply to the accordion container. |
|
|
40
54
|
|
|
41
|
-
##
|
|
55
|
+
## Output Markdown
|
|
42
56
|
|
|
43
57
|
<Tabs defaultValue="markdown" className="pt-5 pb-1">
|
|
44
58
|
<TabsList>
|
|
@@ -4,14 +4,12 @@ description: A component used to create buttons that can be used to trigger acti
|
|
|
4
4
|
date: 14-12-2024
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
The Button component is a component used to create buttons that can be used to trigger actions or navigate to other pages.
|
|
8
|
-
|
|
9
7
|
## Preview
|
|
10
8
|
|
|
11
9
|
<Button
|
|
12
10
|
text="Learn More"
|
|
13
11
|
href="https://learn.example.com"
|
|
14
|
-
icon="
|
|
12
|
+
icon="MoveUpRight"
|
|
15
13
|
size="md"
|
|
16
14
|
target="_blank"
|
|
17
15
|
variation="primary"
|
|
@@ -19,18 +17,18 @@ The Button component is a component used to create buttons that can be used to t
|
|
|
19
17
|
|
|
20
18
|
## Props
|
|
21
19
|
|
|
22
|
-
| Prop | Type | Default
|
|
23
|
-
| ----------- | -------- |
|
|
24
|
-
| `text` |
|
|
25
|
-
| `href` |
|
|
26
|
-
| `icon` |
|
|
27
|
-
| `size` |
|
|
28
|
-
| `target` |
|
|
29
|
-
| `variation` |
|
|
20
|
+
| Prop | Type | Default | Description |
|
|
21
|
+
| ----------- | -------- | ----------- | -------------------------------------------- |
|
|
22
|
+
| `text` | string | undefined | The button text |
|
|
23
|
+
| `href` | string | **required**| The URL to navigate to |
|
|
24
|
+
| `icon` | string | undefined | Lucide icon name (e.g. "MoveUpRight") |
|
|
25
|
+
| `size` | string | "md" | Button size: `"sm"`, `"md"`, or `"lg"` |
|
|
26
|
+
| `target` | string | undefined | Link target (e.g. "_blank") |
|
|
27
|
+
| `variation` | string | "primary" | Button style: `"primary"`, `"accent"`, or `"outline"` |
|
|
30
28
|
|
|
31
|
-
##
|
|
29
|
+
## Output Markdown
|
|
32
30
|
|
|
33
|
-
```
|
|
31
|
+
```markdown
|
|
34
32
|
<Button
|
|
35
33
|
text="Learn More"
|
|
36
34
|
href="https://learn.example.com"
|