diff --git a/demo/src/Components/Toc/data.ts b/demo/src/Components/Toc/data.ts new file mode 100644 index 00000000..3d58bb88 --- /dev/null +++ b/demo/src/Components/Toc/data.ts @@ -0,0 +1,6 @@ +import singlePageSettings from './single-page-toc-items.json'; +import pageSettings from './page-toc-items.json'; + +export const getTocItems = (singlePage = false) => { + return singlePage ? singlePageSettings : pageSettings; +}; diff --git a/demo/src/Components/Toc/index.scss b/demo/src/Components/Toc/index.scss new file mode 100644 index 00000000..d6e03bb8 --- /dev/null +++ b/demo/src/Components/Toc/index.scss @@ -0,0 +1,2 @@ +@import '@diplodoc/components'; +@import '@diplodoc/components/themes/common'; diff --git a/demo/src/Components/Toc/index.stories.tsx b/demo/src/Components/Toc/index.stories.tsx new file mode 100644 index 00000000..f3417b3b --- /dev/null +++ b/demo/src/Components/Toc/index.stories.tsx @@ -0,0 +1,124 @@ +import React, {useEffect, useState} from 'react'; +import {Toc as Component, LabelProps, TocItem, TocLabel} from '@diplodoc/components'; +import cn from 'bem-cn-lite'; + +import {getTocItems} from './data'; +import './index.scss'; + +const layoutBlock = cn('Layout'); + +type Args = { + Title: string; + TocTitleIcon: string; + HideTocHeader: boolean; + SinglePage: boolean; + PdfLink: string; + LabelTitle: string; + LabelDescription: string; + LabelTheme: LabelProps['theme']; +}; + +const useSinglePage = (value: boolean) => { + const [singlePage, onChangeSinglePage] = useState(value); + + return { + singlePage, + onChangeSinglePage, + }; +}; + +const TocDemo = (args: Args) => { + const { + ['Title']: currentTitle, + ['TocTitleIcon']: currentTocTitleIcon, + ['HideTocHeader']: currentHideTocHeader, + ['PdfLink']: currentPdfLink, + ['SinglePage']: currentSinglePage, + ['LabelTitle']: currentLalbelTitle, + ['LabelDescription']: currentLabelDescription, + ['LabelTheme']: currentLabelTheme, + } = args; + const {singlePage, onChangeSinglePage} = useSinglePage(currentSinglePage); + + const router = {pathname: '/docs'}; + const label: TocLabel = { + title: currentLalbelTitle, + description: currentLabelDescription, + theme: currentLabelTheme, + }; + const items: TocItem[] = getTocItems(singlePage); + + useEffect(() => { + onChangeSinglePage(currentSinglePage); + }, [currentSinglePage, onChangeSinglePage]); + + return ( +
+ +
+ ); +}; + +export default { + title: 'Components/ToC', + component: TocDemo, + argTypes: { + Title: { + control: 'text', + }, + TocTitleIcon: { + control: 'text', + }, + LabelTitle: { + control: 'text', + }, + LabelDescription: { + control: 'text', + }, + LabelTheme: { + control: 'select', + options: [ + 'info', + 'normal', + 'danger', + 'warning', + 'success', + 'utility', + 'unknown', + 'clear', + ], + }, + HideTocHeader: { + control: 'boolean', + }, + SinglePage: { + control: 'boolean', + }, + PdfLink: { + control: 'text', + }, + }, +}; + +export const ToC = { + args: { + Title: 'Table of Contents', + TocTitleIcon: '📑', + LabelTitle: 'NEW', + LabelDescription: 'You can select another theme for the label', + LabelTheme: 'info', + HideTocHeader: false, + SinglePage: false, + PdfLink: 'https://doc.yandex-team.ru/help/diy/diy-guide.pdf', + }, +}; diff --git a/demo/src/Components/Toc/page-toc-items.json b/demo/src/Components/Toc/page-toc-items.json new file mode 100644 index 00000000..d18db947 --- /dev/null +++ b/demo/src/Components/Toc/page-toc-items.json @@ -0,0 +1,123 @@ +[ + { + "name": "Overview", + "href": "#overview", + "id": "e791c8fa03abd01b0a544fc7235022f7" + }, + { + "name": "Quick start", + "href": "#quick-start", + "id": "ed2bdc3c40406eceb65d4e3b6323a16c" + }, + { + "name": "Yandex Flavored Markdown", + "expanded": false, + "href": "#markdown", + "items": [ + { + "name": "Syntax", + "items": [ + { + "name": "Overview", + "href": "#syntax-overview", + "id": "cc3cd8ce896a9178d638c1dbf8129f11" + }, + { + "name": "Basic markup", + "href": "#basic-markup", + "id": "b637ef82e97958680314533737b36e57" + }, + { + "name": "Lists", + "href": "#lists", + "id": "3b02d2eff25874e2eb1e39518dadcedc" + }, + { + "name": "Tables", + "items": [ + { + "name": "GFM Tables", + "href": "#tables", + "id": "8f0ddfba89070063f0c69a44dedfca1c" + }, + { + "name": "Multiline tables", + "href": "#multi-tables", + "id": "4eeeb77ed9353b9679b245af8194ff43" + } + ], + "id": "4fea9780e4fd08a1c6bfc5707b4c7f01" + }, + { + "name": "Notes", + "href": "#notes", + "id": "18e6a43134b0088a6f1edd56a3c1b011" + } + ], + "id": "35a4c4af382fbf3b93bd7f3575492e64" + }, + { + "name": "Settings", + "href": "#settings", + "id": "2d73aa064983e9c736de14bc4db066d7" + } + ], + "id": "0306901f3d63c90a53cc752d61ddbce5" + }, + { + "name": "Contents", + "href": "#contents", + "id": "23ff2a1c8fdff8655b93f890e2436a26" + }, + { + "name": "Leading page", + "href": "#leading-page", + "id": "7d533f3687cba23f1f560e8ee749c50c" + }, + { + "name": "Page constructor", + "items": [ + { + "name": "Overview", + "href": "#page-constructor", + "id": "aa9dc8105b533c9e78a088a55d105659" + }, + { + "name": "Example 1", + "href": "#pc-example1", + "id": "74e29f97951dea8e3c14c00923e06a45" + }, + { + "name": "Example 2", + "href": "#pc-example2", + "id": "42c45ce086d9fd7c5f359bc7e1d62d81" + }, + { + "name": "Example 3 (fullScreen mode)", + "href": "#pc-example3", + "id": "91eb10b0f3da39a6ba9425da6fb831ff" + } + ], + "id": "0c87cd89568340c52388093d1055739a" + }, + { + "name": "Variable presets", + "href": "#presets", + "id": "71300809e72bfdbfd4f7f97dd8695dec" + }, + { + "name": "Configuration file", + "href": "#config", + "id": "b3b47b30afa8e07763e63ab90841780b" + }, + { + "name": "Reusing content", + "href": "#includes", + "id": "019aeaf91f8f7ca71382b94d36c3d443" + }, + { + "name": "Linter configuration file", + "href": "#lint", + "id": "c1683a4a7bf4514648de2c6a989b7398" + } +] diff --git a/demo/src/Components/Toc/single-page-toc-items.json b/demo/src/Components/Toc/single-page-toc-items.json new file mode 100644 index 00000000..27829cc7 --- /dev/null +++ b/demo/src/Components/Toc/single-page-toc-items.json @@ -0,0 +1,22 @@ +[ + { + "name": "Overview", + "href": "#overview", + "id": "e791c8fa03abd01b0a544fc7235022f7" + }, + { + "name": "Quick start", + "href": "#quick-start", + "id": "ed2bdc3c40406eceb65d4e3b6323a16c" + }, + { + "name": "Contents", + "href": "#contents", + "id": "23ff2a1c8fdff8655b93f890e2436a26" + }, + { + "name": "Leading page", + "href": "#leading-page", + "id": "7d533f3687cba23f1f560e8ee749c50c" + } +]