version 1.12.0 :add File Tree
This commit is contained in:
86
.gitignore
vendored
86
.gitignore
vendored
@@ -1,39 +1,99 @@
|
|||||||
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
|
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
|
||||||
|
|
||||||
# dependencies
|
# Dependencies
|
||||||
/node_modules
|
/node_modules
|
||||||
/.pnp
|
/.pnp
|
||||||
.pnp.js
|
.pnp.js
|
||||||
.yarn/install-state.gz
|
.yarn/install-state.gz
|
||||||
|
.pnp.cjs
|
||||||
|
.yarn/cache
|
||||||
|
.yarn/unplugged
|
||||||
|
.yarn/build-state.yml
|
||||||
|
.yarn/install-state.gz
|
||||||
|
.pnp.*
|
||||||
|
|
||||||
# testing
|
# Testing
|
||||||
/coverage
|
/coverage
|
||||||
|
/.nyc_output
|
||||||
|
|
||||||
# next.js
|
# Next.js
|
||||||
/.next/
|
/.next/
|
||||||
/out/
|
/out/
|
||||||
|
/.swc
|
||||||
|
.next/
|
||||||
|
out/
|
||||||
|
|
||||||
# production
|
# Production
|
||||||
/build
|
/build
|
||||||
|
|
||||||
# misc
|
# Environment variables
|
||||||
.DS_Store
|
.env*.local
|
||||||
*.pem
|
.env
|
||||||
|
.env.development
|
||||||
|
.env.test
|
||||||
|
.env.production
|
||||||
|
|
||||||
# debug
|
# Debug logs
|
||||||
npm-debug.log*
|
npm-debug.log*
|
||||||
yarn-debug.log*
|
yarn-debug.log*
|
||||||
yarn-error.log*
|
yarn-error.log*
|
||||||
|
.pnpm-debug.log*
|
||||||
|
|
||||||
# local env files
|
# Editor directories and files
|
||||||
.env*.local
|
.idea
|
||||||
|
!.vscode/extensions.json
|
||||||
|
.idea
|
||||||
|
.DS_Store
|
||||||
|
*.suo
|
||||||
|
*.ntvs*
|
||||||
|
*.njsproj
|
||||||
|
*.sln
|
||||||
|
*.sw?
|
||||||
|
|
||||||
# vercel
|
# System files
|
||||||
|
.DS_Store
|
||||||
|
Thumbs.db
|
||||||
|
|
||||||
|
# Vercel
|
||||||
.vercel
|
.vercel
|
||||||
|
|
||||||
# typescript
|
# TypeScript
|
||||||
*.tsbuildinfo
|
*.tsbuildinfo
|
||||||
next-env.d.ts
|
next-env.d.ts
|
||||||
|
|
||||||
# bun
|
# Package managers
|
||||||
|
package-lock.json
|
||||||
|
yarn.lock
|
||||||
bun.lock
|
bun.lock
|
||||||
|
pnpm-lock.yaml
|
||||||
|
|
||||||
|
# Build outputs
|
||||||
|
.next
|
||||||
|
out
|
||||||
|
|
||||||
|
# Local development
|
||||||
|
.cache
|
||||||
|
.temp
|
||||||
|
.tmp
|
||||||
|
|
||||||
|
# Testing
|
||||||
|
/coverage
|
||||||
|
/__tests__/__snapshots__/
|
||||||
|
|
||||||
|
# Logs
|
||||||
|
logs
|
||||||
|
*.log
|
||||||
|
|
||||||
|
# Misc
|
||||||
|
*.pem
|
||||||
|
*.p12
|
||||||
|
*.key
|
||||||
|
*.crt
|
||||||
|
*.cer
|
||||||
|
*.p7b
|
||||||
|
*.p7c
|
||||||
|
*.p7s
|
||||||
|
*.pfx
|
||||||
|
*.der
|
||||||
|
*.sst
|
||||||
|
*.stl
|
||||||
|
|||||||
53
.vscode/file-tree.code-snippets
vendored
Normal file
53
.vscode/file-tree.code-snippets
vendored
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
{
|
||||||
|
"File Tree Component": {
|
||||||
|
"prefix": "filetree",
|
||||||
|
"body": [
|
||||||
|
"<Files>",
|
||||||
|
" <Folder name=\"${1:folder-name}\">",
|
||||||
|
" <File name=\"${2:file-name}\" />",
|
||||||
|
" <Folder name=\"${3:subfolder}\">",
|
||||||
|
" <File name=\"${4:file.tsx}\" />",
|
||||||
|
" </Folder>\n$0",
|
||||||
|
" </Folder>",
|
||||||
|
"</Files>"
|
||||||
|
],
|
||||||
|
"description": "DocuBook File Tree component with nested structure"
|
||||||
|
},
|
||||||
|
"File Tree Minimal": {
|
||||||
|
"prefix": "filetree-mini",
|
||||||
|
"body": [
|
||||||
|
"<Files>\n <Folder name=\"${1:folder}\">\n <File name=\"${2:file}\" />\n </Folder>\n</Files>$0"
|
||||||
|
],
|
||||||
|
"description": "Minimal DocuBook File Tree component"
|
||||||
|
},
|
||||||
|
"File Tree Complex": {
|
||||||
|
"prefix": "filetree-complex",
|
||||||
|
"body": [
|
||||||
|
"<Files>",
|
||||||
|
" <Folder name=\"${1:project-root}\">",
|
||||||
|
" <File name=\"package.json\" />",
|
||||||
|
" <File name=\"tsconfig.json\" />",
|
||||||
|
" <Folder name=\"src\">",
|
||||||
|
" <File name=\"index.ts\" />",
|
||||||
|
" <Folder name=\"components\">",
|
||||||
|
" <File name=\"${2:Component}.tsx\" />",
|
||||||
|
" <File name=\"${3:Component}.types.ts\" />",
|
||||||
|
" <File name=\"index.ts\" />",
|
||||||
|
" </Folder>\n$0",
|
||||||
|
" </Folder>",
|
||||||
|
" </Folder>",
|
||||||
|
"</Files>"
|
||||||
|
],
|
||||||
|
"description": "Complex DocuBook File Tree with common project structure"
|
||||||
|
},
|
||||||
|
"File Tree Folder": {
|
||||||
|
"prefix": "folder",
|
||||||
|
"body": "<Folder name=\"${1:folder-name}\">\n $0\n</Folder>",
|
||||||
|
"description": "DocuBook Folder component for file trees"
|
||||||
|
},
|
||||||
|
"File Tree File": {
|
||||||
|
"prefix": "file",
|
||||||
|
"body": "<File name=\"${1:file-name}\" />$0",
|
||||||
|
"description": "DocuBook File component for file trees"
|
||||||
|
}
|
||||||
|
}
|
||||||
49
.vscode/release.code-snippets
vendored
Normal file
49
.vscode/release.code-snippets
vendored
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
{
|
||||||
|
"Release Note Component": {
|
||||||
|
"prefix": "release",
|
||||||
|
"body": [
|
||||||
|
"<Release version=\"$1\" date=\"${2:$CURRENT_YEAR-${CURRENT_MONTH}-${CURRENT_DATE}}\" title=\"$3\">",
|
||||||
|
" <Changes type=\"added\">",
|
||||||
|
" - $4",
|
||||||
|
" </Changes>",
|
||||||
|
"",
|
||||||
|
" <Changes type=\"fixed\">",
|
||||||
|
" - $5",
|
||||||
|
" </Changes>",
|
||||||
|
"",
|
||||||
|
" <Changes type=\"improved\">",
|
||||||
|
" - $6",
|
||||||
|
" </Changes>",
|
||||||
|
"",
|
||||||
|
" <Changes type=\"deprecated\">",
|
||||||
|
" - $7",
|
||||||
|
" </Changes>",
|
||||||
|
"",
|
||||||
|
" <Changes type=\"removed\">",
|
||||||
|
" - $8",
|
||||||
|
" </Changes>",
|
||||||
|
"</Release>"
|
||||||
|
],
|
||||||
|
"description": "DocuBook Release Note component with all change types"
|
||||||
|
},
|
||||||
|
"Release Note Simple": {
|
||||||
|
"prefix": "release-simple",
|
||||||
|
"body": [
|
||||||
|
"<Release version=\"$1\" date=\"${2:$CURRENT_YEAR-${CURRENT_MONTH}-${CURRENT_DATE}}\" title=\"$3\">",
|
||||||
|
" <Changes type=\"$4\">",
|
||||||
|
" - $5",
|
||||||
|
" </Changes>\n$0",
|
||||||
|
"</Release>"
|
||||||
|
],
|
||||||
|
"description": "Simple DocuBook Release Note component with one change type"
|
||||||
|
},
|
||||||
|
"Changes Only": {
|
||||||
|
"prefix": "changes",
|
||||||
|
"body": [
|
||||||
|
"<Changes type=\"$1\">",
|
||||||
|
" - $2",
|
||||||
|
"</Changes>"
|
||||||
|
],
|
||||||
|
"description": "DocuBook Changes component for individual change items"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -3,7 +3,7 @@
|
|||||||
**DocuBook** is a documentation web project designed to provide a simple and user-friendly interface for accessing various types of documentation. This site is crafted for developers and teams who need quick access to references, guides, and essential documents.
|
**DocuBook** is a documentation web project designed to provide a simple and user-friendly interface for accessing various types of documentation. This site is crafted for developers and teams who need quick access to references, guides, and essential documents.
|
||||||
|
|
||||||
[](https://vercel.com/import/project?template=https://github.com/gitfromwildan/docubook)
|
Vercel](https://vercel.com/button)](https://vercel.com/import/project?template=https://github.com/DocuBook/docubook)
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ export default function Home() {
|
|||||||
)}
|
)}
|
||||||
>
|
>
|
||||||
<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">
|
<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">
|
||||||
<span>🚀 New Version - Release v1.11.0</span>
|
<span>🚀 New Version - Release v1.12.0</span>
|
||||||
<ArrowRightIcon className="ml-1 size-3 transition-transform duration-300 ease-in-out group-hover:translate-x-0.5" />
|
<ArrowRightIcon className="ml-1 size-3 transition-transform duration-300 ease-in-out group-hover:translate-x-0.5" />
|
||||||
</AnimatedShinyText>
|
</AnimatedShinyText>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
119
components/markdown/FileTreeMdx.tsx
Normal file
119
components/markdown/FileTreeMdx.tsx
Normal file
@@ -0,0 +1,119 @@
|
|||||||
|
'use client';
|
||||||
|
|
||||||
|
import React, { useState, ReactNode, Children, isValidElement, cloneElement } from 'react';
|
||||||
|
import { ChevronRight, ChevronDown, File as FileIcon, Folder as FolderIcon, FolderOpen } from 'lucide-react';
|
||||||
|
|
||||||
|
interface FileTreeProps {
|
||||||
|
children: ReactNode;
|
||||||
|
defaultOpen?: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface FileProps {
|
||||||
|
name: string;
|
||||||
|
children?: ReactNode;
|
||||||
|
}
|
||||||
|
|
||||||
|
const FileComponent = ({ name }: FileProps) => {
|
||||||
|
const [isHovered, setIsHovered] = useState(false);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div
|
||||||
|
className={`
|
||||||
|
flex items-center gap-2 py-1.5 pl-7 pr-3 text-sm
|
||||||
|
transition-all duration-200 ease-in-out rounded-md
|
||||||
|
${isHovered
|
||||||
|
? 'bg-blue-50 dark:bg-blue-900/30'
|
||||||
|
: 'hover:bg-gray-50 dark:hover:bg-gray-800/50'}
|
||||||
|
`}
|
||||||
|
onMouseEnter={() => setIsHovered(true)}
|
||||||
|
onMouseLeave={() => setIsHovered(false)}
|
||||||
|
>
|
||||||
|
<FileIcon className={`h-3.5 w-3.5 transition-colors ${isHovered ? 'text-blue-500' : 'text-gray-400 dark:text-gray-500'}`} />
|
||||||
|
<span className="font-mono text-sm text-gray-700 dark:text-gray-300">{name}</span>
|
||||||
|
{isHovered && (
|
||||||
|
<span className="ml-auto text-xs text-gray-400 dark:text-gray-500">
|
||||||
|
{name.split('.').pop()?.toUpperCase()}
|
||||||
|
</span>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
const FolderComponent = ({ name, children }: FileProps) => {
|
||||||
|
const [isOpen, setIsOpen] = useState(true); // Set to true by default
|
||||||
|
const [isHovered, setIsHovered] = useState(false);
|
||||||
|
const hasChildren = React.Children.count(children) > 0;
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className="relative">
|
||||||
|
<div
|
||||||
|
className={`
|
||||||
|
flex items-center gap-2 py-1.5 pl-4 pr-3 rounded-md cursor-pointer
|
||||||
|
transition-all duration-200 ease-in-out
|
||||||
|
${isHovered ? 'bg-gray-50 dark:bg-gray-800/50' : ''}
|
||||||
|
${isOpen ? 'text-blue-600 dark:text-blue-400' : 'text-gray-800 dark:text-gray-200'}
|
||||||
|
`}
|
||||||
|
onClick={() => setIsOpen(!isOpen)}
|
||||||
|
onMouseEnter={() => setIsHovered(true)}
|
||||||
|
onMouseLeave={() => setIsHovered(false)}
|
||||||
|
>
|
||||||
|
{hasChildren ? (
|
||||||
|
<ChevronRight
|
||||||
|
className={`h-3.5 w-3.5 transition-transform duration-200 ${isOpen ? 'transform rotate-90' : ''}`}
|
||||||
|
/>
|
||||||
|
) : (
|
||||||
|
<div className="w-3.5" />
|
||||||
|
)}
|
||||||
|
{isOpen ? (
|
||||||
|
<FolderOpen className="h-4 w-4 text-blue-500 dark:text-blue-400" />
|
||||||
|
) : (
|
||||||
|
<FolderIcon className="h-4 w-4 text-blue-400 dark:text-blue-500" />
|
||||||
|
)}
|
||||||
|
<span className="font-medium">{name}</span>
|
||||||
|
</div>
|
||||||
|
{isOpen && hasChildren && (
|
||||||
|
<div className="ml-5 border-l-2 border-gray-100 dark:border-gray-700/50 pl-2">
|
||||||
|
{children}
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export const Files = ({ children }: { children: ReactNode }) => {
|
||||||
|
return (
|
||||||
|
<div className="
|
||||||
|
rounded-xl border border-gray-100 dark:border-gray-700/50
|
||||||
|
bg-white/50 dark:bg-gray-800/30 backdrop-blur-sm
|
||||||
|
shadow-sm overflow-hidden
|
||||||
|
transition-all duration-200
|
||||||
|
hover:shadow-md hover:border-gray-200 dark:hover:border-gray-600/50
|
||||||
|
">
|
||||||
|
<div className="p-2">
|
||||||
|
{Children.map(children, (child, index) => {
|
||||||
|
if (isValidElement(child)) {
|
||||||
|
return cloneElement(child, { key: index });
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
})}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export const Folder = ({ name, children }: FileProps) => {
|
||||||
|
return <FolderComponent name={name}>{children}</FolderComponent>;
|
||||||
|
};
|
||||||
|
|
||||||
|
export const File = ({ name }: FileProps) => {
|
||||||
|
return <FileComponent name={name} />;
|
||||||
|
};
|
||||||
|
|
||||||
|
// MDX Components
|
||||||
|
export const FileTreeMdx = {
|
||||||
|
Files,
|
||||||
|
File,
|
||||||
|
Folder,
|
||||||
|
};
|
||||||
|
|
||||||
|
export default FileTreeMdx;
|
||||||
@@ -8,6 +8,44 @@ date: 24-05-2025
|
|||||||
|
|
||||||
> 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.
|
> 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.
|
||||||
|
|
||||||
|
<div className="sr-only">
|
||||||
|
### v 1.12.0
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<Release version="1.12.0" date="2025-05-28" title="New File Tree Component and enhancements for existing components or features">
|
||||||
|
<Changes type="added">
|
||||||
|
- New FileTree component for displaying hierarchical file structures
|
||||||
|
- Support for nested folders and files with expand/collapse functionality
|
||||||
|
- Hover effects showing file extensions
|
||||||
|
- Dark mode support with modern styling
|
||||||
|
- Keyboard navigation and accessibility features
|
||||||
|
- add toc-observer data attribute to detect toc section
|
||||||
|
- cli to copy from path npm registry
|
||||||
|
</Changes>
|
||||||
|
<Changes type="improved">
|
||||||
|
- search dialog hover effect return key
|
||||||
|
- search icon showing on mobile screens
|
||||||
|
</Changes>
|
||||||
|
<Changes type="fixed">
|
||||||
|
- fix search dialog on mobile screens
|
||||||
|
- fix release note component eslint error on mdx when rendering
|
||||||
|
- fix mob-toc callback function
|
||||||
|
- fix toc height issue when toc section is longer than screen height
|
||||||
|
</Changes>
|
||||||
|
<Changes type="removed">
|
||||||
|
- remove prompts depedencies
|
||||||
|
- remove degit depedencies
|
||||||
|
- remove prompts functions
|
||||||
|
- remove degit functions
|
||||||
|
- remove prompts and degit from package.json
|
||||||
|
- remove clone repository using git
|
||||||
|
</Changes>
|
||||||
|
</Release>
|
||||||
|
|
||||||
|
<Note type="note" title="Note">
|
||||||
|
on this version `1.12.0`, we remove clone repository using git and replace it with cli to copy from path npm registry
|
||||||
|
</Note>
|
||||||
|
|
||||||
<div className="sr-only">
|
<div className="sr-only">
|
||||||
### v 1.11.0
|
### v 1.11.0
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
109
contents/docs/getting-started/components/file-tree/index.mdx
Normal file
109
contents/docs/getting-started/components/file-tree/index.mdx
Normal file
@@ -0,0 +1,109 @@
|
|||||||
|
---
|
||||||
|
title: File Tree Component
|
||||||
|
description: A customizable file tree component for displaying hierarchical file structures in your documentation.
|
||||||
|
date: 28-05-2025
|
||||||
|
---
|
||||||
|
|
||||||
|
The File Tree component allows you to display hierarchical file structures in your documentation with collapsible folders and files.
|
||||||
|
|
||||||
|
## Basic Usage
|
||||||
|
|
||||||
|
```
|
||||||
|
<Files>
|
||||||
|
<Folder name="src">
|
||||||
|
<File name="App.tsx" />
|
||||||
|
<File name="index.tsx" />
|
||||||
|
<Folder name="components">
|
||||||
|
<File name="Button.tsx" />
|
||||||
|
<File name="Card.tsx" />
|
||||||
|
</Folder>
|
||||||
|
<Folder name="pages">
|
||||||
|
<File name="Home.tsx" />
|
||||||
|
<File name="About.tsx" />
|
||||||
|
</Folder>
|
||||||
|
</Folder>
|
||||||
|
</Files>
|
||||||
|
```
|
||||||
|
|
||||||
|
Render As:
|
||||||
|
<Files>
|
||||||
|
<Folder name="src">
|
||||||
|
<File name="App.tsx" />
|
||||||
|
<File name="index.tsx" />
|
||||||
|
<Folder name="components">
|
||||||
|
<File name="Button.tsx" />
|
||||||
|
<File name="Card.tsx" />
|
||||||
|
</Folder>
|
||||||
|
<Folder name="pages">
|
||||||
|
<File name="Home.tsx" />
|
||||||
|
<File name="About.tsx" />
|
||||||
|
</Folder>
|
||||||
|
</Folder>
|
||||||
|
</Files>
|
||||||
|
|
||||||
|
## Props
|
||||||
|
|
||||||
|
### Files
|
||||||
|
|
||||||
|
The root component that wraps the entire file tree.
|
||||||
|
|
||||||
|
### Folder
|
||||||
|
|
||||||
|
| Prop | Type | Required | Description |
|
||||||
|
|----------|----------|----------|---------------------------------------|
|
||||||
|
| name | string | Yes | The name of the folder |
|
||||||
|
| children | ReactNode | No | Child elements (File or Folder) |
|
||||||
|
|
||||||
|
### File
|
||||||
|
|
||||||
|
| Prop | Type | Required | Description |
|
||||||
|
|------|--------|----------|----------------------------|
|
||||||
|
| name | string | Yes | The name of the file |
|
||||||
|
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
### Nested Folder Structure
|
||||||
|
|
||||||
|
```
|
||||||
|
<Files>
|
||||||
|
<Folder name="project-root">
|
||||||
|
<File name="package.json" />
|
||||||
|
<File name="tsconfig.json" />
|
||||||
|
<Folder name="src">
|
||||||
|
<File name="index.ts" />
|
||||||
|
<Folder name="components">
|
||||||
|
<File name="Button.tsx" />
|
||||||
|
<File name="Card.tsx" />
|
||||||
|
</Folder>
|
||||||
|
</Folder>
|
||||||
|
</Folder>
|
||||||
|
</Files>
|
||||||
|
```
|
||||||
|
|
||||||
|
### Minimal Example
|
||||||
|
|
||||||
|
```
|
||||||
|
<Files>
|
||||||
|
<Folder name="components">
|
||||||
|
<File name="Button.tsx" />
|
||||||
|
<File name="Input.tsx" />
|
||||||
|
</Folder>
|
||||||
|
</Files>
|
||||||
|
```
|
||||||
|
|
||||||
|
## Best Practices
|
||||||
|
|
||||||
|
1. Keep the nesting level reasonable (recommended max 3-4 levels deep)
|
||||||
|
2. Use clear and descriptive names for files and folders
|
||||||
|
3. Consider the user experience when displaying large file structures
|
||||||
|
4. Use consistent naming conventions throughout your file tree
|
||||||
|
|
||||||
|
## Accessibility
|
||||||
|
|
||||||
|
The File Tree component includes built-in accessibility features:
|
||||||
|
|
||||||
|
- Keyboard navigation support
|
||||||
|
- ARIA attributes for screen readers
|
||||||
|
- Focus management for interactive elements
|
||||||
|
- High contrast mode support
|
||||||
10
docu.json
10
docu.json
@@ -14,11 +14,6 @@
|
|||||||
"footer": {
|
"footer": {
|
||||||
"copyright": "DocuBook",
|
"copyright": "DocuBook",
|
||||||
"social": [
|
"social": [
|
||||||
{
|
|
||||||
"name": "Gitlab",
|
|
||||||
"url": "https://gitlab.com/mywildancloud",
|
|
||||||
"iconName": "GitlabIcon"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "Instagram",
|
"name": "Instagram",
|
||||||
"url": "https://www.instagram.com/wildan.nrs",
|
"url": "https://www.instagram.com/wildan.nrs",
|
||||||
@@ -48,7 +43,7 @@
|
|||||||
"favicon": "/favicon.ico"
|
"favicon": "/favicon.ico"
|
||||||
},
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
"url": "https://github.com/gitfromwildan/docubook",
|
"url": "https://github.com/DocuBook/docubook",
|
||||||
"editPathTemplate": "/blob/main/{filePath}",
|
"editPathTemplate": "/blob/main/{filePath}",
|
||||||
"editLink": true
|
"editLink": true
|
||||||
},
|
},
|
||||||
@@ -58,7 +53,7 @@
|
|||||||
"title": "Vercel",
|
"title": "Vercel",
|
||||||
"description": "Deploy your DocuBook app with zero configuration.",
|
"description": "Deploy your DocuBook app with zero configuration.",
|
||||||
"image": "/images/vercel.png",
|
"image": "/images/vercel.png",
|
||||||
"url": "https://vercel.com/import/project?template=https://github.com/gitfromwildan/docubook"
|
"url": "https://vercel.com/import/project?template=https://github.com/DocuBook/docubook"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"routes": [
|
"routes": [
|
||||||
@@ -80,6 +75,7 @@
|
|||||||
{ "title": "Card", "href": "/card" },
|
{ "title": "Card", "href": "/card" },
|
||||||
{ "title": "Card Group", "href": "/card-group" },
|
{ "title": "Card Group", "href": "/card-group" },
|
||||||
{ "title": "Code Block", "href": "/code-block" },
|
{ "title": "Code Block", "href": "/code-block" },
|
||||||
|
{ "title": "File Tree", "href": "/file-tree" },
|
||||||
{ "title": "Image", "href": "/image" },
|
{ "title": "Image", "href": "/image" },
|
||||||
{ "title": "Keyboard", "href": "/keyboard" },
|
{ "title": "Keyboard", "href": "/keyboard" },
|
||||||
{ "title": "Link", "href": "/link" },
|
{ "title": "Link", "href": "/link" },
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ import Accordion from "@/components/markdown/AccordionMdx";
|
|||||||
import CardGroup from "@/components/markdown/CardGroupMdx";
|
import CardGroup from "@/components/markdown/CardGroupMdx";
|
||||||
import Kbd from "@/components/markdown/KeyboardMdx";
|
import Kbd from "@/components/markdown/KeyboardMdx";
|
||||||
import { Release, Changes } from "@/components/markdown/ReleaseMdx";
|
import { Release, Changes } from "@/components/markdown/ReleaseMdx";
|
||||||
|
import { File, Files, Folder } from "@/components/markdown/FileTreeMdx";
|
||||||
|
|
||||||
// add custom components
|
// add custom components
|
||||||
const components = {
|
const components = {
|
||||||
@@ -47,8 +48,13 @@ const components = {
|
|||||||
Accordion,
|
Accordion,
|
||||||
CardGroup,
|
CardGroup,
|
||||||
Kbd,
|
Kbd,
|
||||||
|
// Release Note Components
|
||||||
Release,
|
Release,
|
||||||
Changes,
|
Changes,
|
||||||
|
// File Tree Components
|
||||||
|
File,
|
||||||
|
Files,
|
||||||
|
Folder,
|
||||||
};
|
};
|
||||||
|
|
||||||
// can be used for other pages like blogs, Guides etc
|
// can be used for other pages like blogs, Guides etc
|
||||||
@@ -181,64 +187,3 @@ const postProcess = () => (tree: any) => {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
// export type Author = {
|
|
||||||
// avatar?: string;
|
|
||||||
// handle: string;
|
|
||||||
// username: string;
|
|
||||||
// handleUrl: string;
|
|
||||||
// };
|
|
||||||
|
|
||||||
// Blog related types and functions have been removed
|
|
||||||
/*
|
|
||||||
export type BlogMdxFrontmatter = BaseMdxFrontmatter & {
|
|
||||||
date: string;
|
|
||||||
authors: Author[];
|
|
||||||
cover: string;
|
|
||||||
};
|
|
||||||
|
|
||||||
export async function getAllBlogStaticPaths() {
|
|
||||||
try {
|
|
||||||
const blogFolder = path.join(process.cwd(), "/contents/blogs/");
|
|
||||||
const res = await fs.readdir(blogFolder);
|
|
||||||
return res.map((file) => file.split(".")[0]);
|
|
||||||
} catch (err) {
|
|
||||||
console.log(err);
|
|
||||||
return [];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export async function getAllBlogs() {
|
|
||||||
const blogFolder = path.join(process.cwd(), "/contents/blogs/");
|
|
||||||
const files = await fs.readdir(blogFolder);
|
|
||||||
const uncheckedRes = await Promise.all(
|
|
||||||
files.map(async (file) => {
|
|
||||||
try {
|
|
||||||
const filepath = path.join(process.cwd(), `/contents/blogs/${file}`);
|
|
||||||
const rawMdx = await fs.readFile(filepath, "utf-8");
|
|
||||||
return {
|
|
||||||
...justGetFrontmatterFromMD<BlogMdxFrontmatter>(rawMdx),
|
|
||||||
slug: file.split(".")[0],
|
|
||||||
};
|
|
||||||
} catch (err) {
|
|
||||||
console.log(err);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
})
|
|
||||||
);
|
|
||||||
return uncheckedRes.filter((it) => !!it) as (BlogMdxFrontmatter & {
|
|
||||||
slug: string;
|
|
||||||
})[];
|
|
||||||
}
|
|
||||||
|
|
||||||
export async function getBlogForSlug(slug: string) {
|
|
||||||
try {
|
|
||||||
const blogFile = path.join(process.cwd(), "/contents/blogs/", `${slug}.mdx`);
|
|
||||||
const rawMdx = await fs.readFile(blogFile, "utf-8");
|
|
||||||
return await parseMdx<BlogMdxFrontmatter>(rawMdx);
|
|
||||||
} catch (err) {
|
|
||||||
console.log(err);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|||||||
8628
package-lock.json
generated
8628
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "docubook",
|
"name": "docubook",
|
||||||
"version": "1.11.0",
|
"version": "1.12.0",
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "next dev",
|
"dev": "next dev",
|
||||||
@@ -54,6 +54,5 @@
|
|||||||
"postcss": "^8",
|
"postcss": "^8",
|
||||||
"tailwindcss": "^3.4.10",
|
"tailwindcss": "^3.4.10",
|
||||||
"typescript": "^5"
|
"typescript": "^5"
|
||||||
},
|
}
|
||||||
"packageManager": "npm@11.3.0"
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user