π¨ Π ΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΠΏΠΎ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ Lucide Icons Π² Sidebar
ΠΡΠΎ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΡΠΏΠΎΡΠΎΠ±Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΠΊΡΠ°ΡΠΈΠ²ΡΡ ΠΈΠΊΠΎΠ½ΠΎΠΊ Lucide Π² Π±ΠΎΠΊΠΎΠ²ΡΡ ΠΏΠ°Π½Π΅Π»Ρ Π²Π°ΡΠ΅Π³ΠΎ Docusaurus ΠΏΡΠΎΠ΅ΠΊΡΠ°.
π Π‘ΠΏΠΎΡΠΎΠ± 1: React ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ (Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ)β
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ°β
npm install lucide-react
Π‘ΡΡΡΠΊΡΡΡΠ° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ²β
// src/components/SidebarIcon/index.tsx
import React from 'react';
import * as Icons from 'lucide-react';
interface SidebarIconProps {
iconName: string;
size?: number;
className?: string;
strokeWidth?: number;
}
/** ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Lucide-ΠΈΠΊΠΎΠ½ΠΊΠΈ Π΄Π»Ρ sidebar */
const SidebarIcon: React.FC<SidebarIconProps> = ({ iconName, size = 20, className = '', strokeWidth = 1.5 }) => {
// ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΈΠΊΠΎΠ½ΠΊΠΈ ΠΏΠΎ Π½Π°Π·Π²Π°Π½ΠΈΡ
const IconComponent = (Icons as any)[iconName] as React.ComponentType<any>;
if (!IconComponent) {
console.warn(`Icon "${iconName}" not found in lucide-react`);
return null;
}
return (
<IconComponent
size={size}
strokeWidth={strokeWidth}
className={`sidebar-icon ${className}`}
/>
);
};
export default SidebarIcon;
ΠΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Sidebarβ
// sidebars.js
const sidebars = {
tutorialSidebar: [
{
type: 'doc',
id: 'intro',
customProps: {
icon: 'Home', // ΠΠ°Π·Π²Π°Π½ΠΈΠ΅ ΠΈΠΊΠΎΠ½ΠΊΠΈ ΠΈΠ· lucide-react
},
},
{
type: 'category',
label: 'Π ΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π°',
customProps: {
icon: 'BookOpen',
},
items: [
{
type: 'doc',
id: 'guides/getting-started',
customProps: {
icon: 'Play',
},
},
],
},
],
};
Swizzled ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρβ
// src/theme/DocSidebarItem/index.tsx (ΡΠΏΡΠΎΡΡΠ½Π½ΡΠΉ ΡΡΠ°Π³ΠΌΠ΅Π½Ρ)
import React, {type ReactNode} from 'react';
import DocSidebarItem from '@theme-original/DocSidebarItem';
import SidebarIcon from '../../components/SidebarIcon';
export default function DocSidebarItemWrapper(props: any): ReactNode {
const { item } = props;
const itemWithProps = item as any;
const hasCustomIcon = itemWithProps.customProps?.icon && typeof itemWithProps.customProps.icon === 'string';
// 1) ΠΡΠ»ΠΈ ΠΈΠΊΠΎΠ½ΠΊΠ° Π·Π°Π΄Π°Π½Π° ΡΠ²Π½ΠΎ β ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π΅Ρ
if (hasCustomIcon) {
const labelElement = (
<span className="sidebar-item-with-icon">
<SidebarIcon iconName={itemWithProps.customProps.icon} size={20} strokeWidth={1.5} />
<span className="sidebar-item-text">{itemWithProps.label}</span>
</span>
);
return <DocSidebarItem {...props} item={{ ...item, label: labelElement }} />;
}
// 2) ΠΠ°ΡΠ΅Π³ΠΎΡΠΈΡ Π±Π΅Π· ΠΊΠ°ΡΡΠΎΠΌΠ½ΠΎΠΉ ΠΈΠΊΠΎΠ½ΠΊΠΈ β ΡΠ΅Π½Π΄Π΅ΡΠΈΠΌ ΠΎΠ±Π΅ (FolderClosed/FolderOpen)
if ((item as any).type === 'category') {
const labelElement = (
<span className="sidebar-item-with-icon">
<SidebarIcon iconName="FolderClosed" size={20} className="sidebar-icon-folder-closed" />
<SidebarIcon iconName="FolderOpen" size={20} className="sidebar-icon-folder-open" />
<span className="sidebar-item-text">{itemWithProps.label}</span>
</span>
);
return <DocSidebarItem {...props} item={{ ...item, label: labelElement }} />;
}
// 3) Π€Π°ΠΉΠ» Π±Π΅Π· ΠΊΠ°ΡΡΠΎΠΌΠ½ΠΎΠΉ ΠΈΠΊΠΎΠ½ΠΊΠΈ β File
const labelElement = (
<span className="sidebar-item-with-icon">
<SidebarIcon iconName="File" size={20} strokeWidth={1.5} />
<span className="sidebar-item-text">{itemWithProps.label}</span>
</span>
);
return <DocSidebarItem {...props} item={{ ...item, label: labelElement }} />;
}
β¨ Fallback ΠΈΠΊΠΎΠ½ΠΊΠΈβ
Π‘ΠΈΡΡΠ΅ΠΌΠ° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΈΠΊΠΎΠ½ΠΊΠΈ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, Π΅ΡΠ»ΠΈ ΠΊΠ°ΡΡΠΎΠΌΠ½Π°Ρ ΠΈΠΊΠΎΠ½ΠΊΠ° Π½Π΅ Π·Π°Π΄Π°Π½Π°:
- ΠΠ»Ρ ΠΏΠ°ΠΏΠΎΠΊ (ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΉ):
FolderClosedΠΊΠΎΠ³Π΄Π° ΠΏΠ°ΠΏΠΊΠ° Π·Π°ΠΊΡΡΡΠ°,FolderOpenΠΊΠΎΠ³Π΄Π° ΠΏΠ°ΠΏΠΊΠ° ΠΎΡΠΊΡΡΡΠ° - ΠΠ»Ρ ΡΠ°ΠΉΠ»ΠΎΠ² (Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΎΠ²):
FileΠ΅ΡΠ»ΠΈ ΠΊΠ°ΡΡΠΎΠΌΠ½Π°Ρ ΠΈΠΊΠΎΠ½ΠΊΠ° Π½Π΅ ΡΠΊΠ°Π·Π°Π½Π°
ΠΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ fallbackβ
// sidebars.js
const sidebars = {
tutorialSidebar: [
// ΠΠ΅Π· customProps - Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠΊΠ°Π·Π°Π½Π° ΠΈΠΊΠΎΠ½ΠΊΠ° File
'intro',
{
type: 'category',
label: 'Π ΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π°',
// ΠΠ΅Π· customProps - Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠΊΠ°Π·Π°Π½Π° ΠΈΠΊΠΎΠ½ΠΊΠ° Folder/FolderOpen
items: [
// Π’ΠΎΠΆΠ΅ Π±Π΅Π· ΠΈΠΊΠΎΠ½ΠΊΠΈ - ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ File
'guides/getting-started',
// Π‘ ΠΊΠ°ΡΡΠΎΠΌΠ½ΠΎΠΉ ΠΈΠΊΠΎΠ½ΠΊΠΎΠΉ
{
type: 'doc',
id: 'guides/advanced',
customProps: {
icon: 'Rocket',
},
},
],
},
],
};
ΠΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΈΠΊΠΎΠ½ΠΎΠΊ ΠΏΠ°ΠΏΠΎΠΊβ
ΠΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ ΡΠ΅ΡΠ΅Π· CSS ΠΏΠΎ ΠΊΠ»Π°ΡΡΠ°ΠΌ menu__list-item--collapsed ΠΈ aria-expanded:
/* src/css/custom.css */
.sidebar-icon-folder-open { display: none; }
.menu__list-item--collapsed .sidebar-icon-folder-closed { display: inline-block; }
.menu__list-item--collapsed .sidebar-icon-folder-open { display: none; }
.menu__list-item:not(.menu__list-item--collapsed) .sidebar-icon-folder-closed { display: none; }
.menu__list-item:not(.menu__list-item--collapsed) .sidebar-icon-folder-open { display: inline-block; }
π― Π‘ΠΏΠΎΡΠΎΠ± 2: CSS Data-Π°ΡΡΠΈΠ±ΡΡΡβ
ΠΠΎΠ»Π΅Π΅ ΠΏΡΠΎΡΡΠΎΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΡΠ΅ΡΠ΅Π· CSS:
1. CSS ΡΡΠΈΠ»ΠΈβ
/* src/css/custom.css */
[data-sidebar-icon]::before {
content: '';
display: inline-block;
width: 16px;
height: 16px;
margin-right: 8px;
background-size: contain;
vertical-align: middle;
}
[data-sidebar-icon="home"]::before {
background-image: url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj48cGF0aCBkPSJtMyA5IDkgLTcgOSA3djExYTJbUg0KMTEwIDBoLTRWMTBhMiAyIDAgMCAwIC0yIC0yaDJhMiAyIDAgMCAwIC0yIDJ2NGgtNFoiLz48L3N2Zz4=');
}
[data-sidebar-icon="book"]::before {
background-image: url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMiI+PHBhdGggZD0iTTIgM2g2YTQgNCAwIDAgMSA0IDR2MThsLTMtMy0zIDN2LTEuNWEyIDIgMCAwIDAtMi0yaDYiLz48L3N2Zz4=');
}
2. Sidebar ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡβ
// sidebars.js
const sidebars = {
tutorialSidebar: [
{
type: 'doc',
id: 'intro',
customProps: {
'data-sidebar-icon': 'home',
},
},
{
type: 'category',
label: 'Π ΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π°',
customProps: {
'data-sidebar-icon': 'book',
},
items: ['guides/getting-started'],
},
],
};
π Π‘ΠΏΠΎΡΠΎΠ± 3: Emoji ΠΈΠΊΠΎΠ½ΠΊΠΈβ
Π‘Π°ΠΌΡΠΉ ΠΏΡΠΎΡΡΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± - ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ emoji:
// sidebars.js
const sidebars = {
tutorialSidebar: [
{
type: 'category',
label: 'π ΠΠ»Π°Π²Π½Π°Ρ',
items: ['intro'],
},
{
type: 'category',
label: 'π Π ΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π°',
items: ['guides/getting-started'],
},
{
type: 'category',
label: 'βοΈ ΠΠ°ΡΡΡΠΎΠΉΠΊΠΈ',
items: ['settings/overview'],
},
],
};
π¨ Π‘ΡΠΈΠ»ΠΈΠ·Π°ΡΠΈΡ ΠΈΠΊΠΎΠ½ΠΎΠΊβ
Π’Π΅ΠΌΠ½Π°Ρ/ΡΠ²Π΅ΡΠ»Π°Ρ ΡΠ΅ΠΌΠ°β
/* ΠΠ°Π·ΠΎΠ²ΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π° Π΄Π»Ρ Lucide */
.sidebar-icon {
stroke: currentColor !important;
fill: none !important;
}
[data-theme='dark'] .sidebar-icon { /* ΡΠ²Π΅Ρ Π·Π°Π΄Π°ΡΡΡΡ ΡΠ΅ΠΌΠΎΠΉ */ }
[data-theme='light'] .sidebar-icon { /* ΡΠ²Π΅Ρ Π·Π°Π΄Π°ΡΡΡΡ ΡΠ΅ΠΌΠΎΠΉ */ }
π¦ ΠΠΎΡΡΡΠΏΠ½ΡΠ΅ ΠΈΠΊΠΎΠ½ΠΊΠΈ Lucideβ
ΠΠΎΠΏΡΠ»ΡΡΠ½ΡΠ΅ ΠΈΠΊΠΎΠ½ΠΊΠΈ Π΄Π»Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ:
- ΠΠ°Π²ΠΈΠ³Π°ΡΠΈΡ:
Home,ArrowLeft,ArrowRight,ChevronDown - ΠΠΎΠΊΡΠΌΠ΅Π½ΡΡ:
FileText,BookOpen,File,Folder - ΠΠ΅ΠΉΡΡΠ²ΠΈΡ:
Settings,Search,Edit,Save - Π‘ΠΎΡΡΠΎΡΠ½ΠΈΡ:
CheckCircle,AlertTriangle,Info,X - Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ°:
Code2,Terminal,GitBranch,Database - ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ:
Menu,Grid,List,Layout
ΠΠΎΠΈΡΠΊ ΠΈΠΊΠΎΠ½ΠΎΠΊβ
ΠΠΎΠ»Π½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π½Π° lucide.dev.
π§ Π‘ΠΎΠ²Π΅ΡΡ ΠΈ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΈβ
1. ΠΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡβ
// ΠΠΌΠΏΠΎΡΡ ΠΈΡΡΠΉΡΠ΅ ΡΠΎΠ»ΡΠΊΠΎ Π½ΡΠΆΠ½ΡΠ΅ ΠΈΠΊΠΎΠ½ΠΊΠΈ
import { Home, BookOpen, Settings } from 'lucide-react';
// ΠΠΌΠ΅ΡΡΠΎ ΠΈΠΌΠΏΠΎΡΡΠ° Π²ΡΠ΅Ρ
import * as Icons from 'lucide-react';
2. ΠΠΎΠ½ΡΠΈΡΡΠ΅Π½ΡΠ½ΠΎΡΡΡβ
// Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΠΌΠ°ΠΏΠΈΠ½Π³ Π΄Π»Ρ ΠΊΠΎΠ½ΡΠΈΡΡΠ΅Π½ΡΠ½ΠΎΡΡΠΈ
const ICON_MAPPING = {
intro: 'Home',
guide: 'BookOpen',
api: 'Code2',
settings: 'Settings',
};
3. Fallback ΠΈΠΊΠΎΠ½ΠΊΠΈβ
Π‘ΠΈΡΡΠ΅ΠΌΠ° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ fallback ΠΈΠΊΠΎΠ½ΠΊΠΈ:
// ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ fallback (ΡΠΆΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ)
// - ΠΠ°ΠΏΠΊΠΈ: Folder (Π·Π°ΠΊΡΡΡΠ°) / FolderOpen (ΠΎΡΠΊΡΡΡΠ°)
// - Π€Π°ΠΉΠ»Ρ: File
// ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ fallback Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ΅ SidebarIcon
const SidebarIcon = ({ iconName, fallback = 'Circle' }) => {
const IconComponent = Icons[iconName] || Icons[fallback];
return <IconComponent size={16} />;
};
4. Π Π°Π±ΠΎΡΠ° Ρ Π΄Π»ΠΈΠ½Π½ΡΠΌΠΈ Π½Π°Π·Π²Π°Π½ΠΈΡΠΌΠΈβ
Π‘ΠΈΡΡΠ΅ΠΌΠ° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ Π΄Π»ΠΈΠ½Π½ΡΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΡ Π±Π΅Π· ΡΡΠ΅ΡΠ±Π° Π΄Π»Ρ ΠΈΠΊΠΎΠ½ΠΎΠΊ:
// ΠΡΠΈΠΌΠ΅Ρ Ρ Π΄Π»ΠΈΠ½Π½ΡΠΌ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ
{
type: 'doc',
id: 'guides/comprehensive-guide',
label: 'ΠΡΠ΅Π½Ρ Π΄Π»ΠΈΠ½Π½ΠΎΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π°, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΡΡΡΡ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΡΠΎΠΊ Π² sidebar',
customProps: {
icon: 'BookOpen',
},
}
ΠΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ:
- β ΠΠΊΠΎΠ½ΠΊΠΈ ΡΠΎΡ ΡΠ°Π½ΡΡΡ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ 20x20px
- β ΠΠΊΠΎΠ½ΠΊΠΈ Π²ΡΡΠ°Π²Π½ΠΈΠ²Π°ΡΡΡΡ ΠΏΠΎ Π²Π΅ΡΡ Π½Π΅ΠΌΡ ΠΊΡΠ°Ρ ΡΠ΅ΠΊΡΡΠ°
- β Π’Π΅ΠΊΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΡΡΡ Ρ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΎΠΌ ΡΠ»ΠΎΠ²
- β ΠΠΊΠΎΠ½ΠΊΠΈ Π½Π΅ ΡΠΆΠΈΠΌΠ°ΡΡΡΡ ΠΏΡΠΈ Π»ΡΠ±ΠΎΠΉ Π΄Π»ΠΈΠ½Π΅ ΡΠ΅ΠΊΡΡΠ°
CSS ΡΡΠΈΠ»ΠΈ (Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ):
.sidebar-icon {
flex-shrink: 0 !important; /* ΠΠ΅ ΡΠΆΠΈΠΌΠ°Π΅ΡΡΡ */
align-self: center !important; /* Π¦Π΅Π½ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊ ΠΌΠ½ΠΎΠ³ΠΎΡΡΡΠΎΡΠ½ΠΎΠΌΡ ΡΠ΅ΠΊΡΡΡ */
min-width: 20px !important;
width: 20px !important;
height: 20px !important;
}
5. Π‘ΠΌΠ΅ΡΠ°Π½Π½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅β
// ΠΠΎΠΌΠ±ΠΈΠ½ΠΈΡΡΠΉΡΠ΅ ΠΊΠ°ΡΡΠΎΠΌΠ½ΡΠ΅ ΠΈΠΊΠΎΠ½ΠΊΠΈ Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ fallback
const sidebars = {
tutorialSidebar: [
// ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΈΠΊΠΎΠ½ΠΊΠ° File
'intro',
{
type: 'category',
label: 'API',
customProps: { icon: 'Code2' }, // ΠΠ°ΡΡΠΎΠΌΠ½Π°Ρ ΠΈΠΊΠΎΠ½ΠΊΠ°
items: [
'api/getting-started', // ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΈΠΊΠΎΠ½ΠΊΠ° File
{
type: 'doc',
id: 'api/authentication',
customProps: { icon: 'Lock' }, // ΠΠ°ΡΡΠΎΠΌΠ½Π°Ρ ΠΈΠΊΠΎΠ½ΠΊΠ°
},
],
},
],
};
β‘ Troubleshootingβ
Π§Π°ΡΡΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡβ
- ΠΠΊΠΎΠ½ΠΊΠ° Π½Π΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ: ΠΡΠΎΠ²Π΅ΡΡΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΡΡΡ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΠΈΠΌΠ΅Π½ΠΈ
- TypeScript ΠΎΡΠΈΠ±ΠΊΠΈ: ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅
as anyΠ΄Π»Ρ ΠΎΠ±Ρ ΠΎΠ΄Π° ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΠΈ - Π‘ΡΠΈΠ»ΠΈ Π½Π΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ: Π£Π±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ CSS Π·Π°Π³ΡΡΠΆΠ°Π΅ΡΡΡ ΠΏΠΎΡΠ»Π΅ Docusaurus ΡΡΠΈΠ»Π΅ΠΉ
- Fallback ΠΈΠΊΠΎΠ½ΠΊΠΈ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°ΡΡ: Π£Π±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ swizzled ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ
DocSidebarItemΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ - ΠΠ°ΠΏΠΊΠΈ Π½Π΅ ΠΌΠ΅Π½ΡΡΡ ΠΈΠΊΠΎΠ½ΠΊΠΈ: ΠΡΠΎΠ²Π΅ΡΡΡΠ΅, ΡΡΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅
collapsedΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ - ΠΠΊΠΎΠ½ΠΊΠΈ ΡΠΆΠΈΠΌΠ°ΡΡΡΡ ΠΏΡΠΈ Π΄Π»ΠΈΠ½Π½ΠΎΠΌ ΡΠ΅ΠΊΡΡΠ΅: Π‘ΠΈΡΡΠ΅ΠΌΠ° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ°Π΅Ρ ΡΠΆΠ°ΡΠΈΠ΅ ΠΈΠΊΠΎΠ½ΠΎΠΊ
ΠΡΠ»Π°Π΄ΠΊΠ°β
// ΠΠΎΠ±Π°Π²ΡΡΠ΅ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
console.log('Available icons:', Object.keys(Icons));
console.log('Looking for icon:', iconName);