@docusaurus/theme-classic 2.0.0-beta.8bda3b2db → 2.0.0-beta.9
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/README.md +1 -1
- package/codeTranslations/ar.json +12 -7
- package/codeTranslations/base.json +17 -7
- package/codeTranslations/bn.json +11 -5
- package/codeTranslations/cs.json +62 -0
- package/codeTranslations/da.json +8 -3
- package/codeTranslations/de.json +8 -3
- package/codeTranslations/es.json +15 -10
- package/codeTranslations/fa.json +31 -26
- package/codeTranslations/fil.json +8 -3
- package/codeTranslations/fr.json +8 -3
- package/codeTranslations/he.json +9 -4
- package/codeTranslations/hi.json +9 -4
- package/codeTranslations/ja.json +8 -3
- package/codeTranslations/ko.json +8 -3
- package/codeTranslations/pl.json +8 -3
- package/codeTranslations/pt-BR.json +16 -11
- package/codeTranslations/pt-PT.json +8 -3
- package/codeTranslations/ru.json +10 -5
- package/codeTranslations/sr.json +62 -0
- package/codeTranslations/tr.json +9 -4
- package/codeTranslations/vi.json +10 -5
- package/codeTranslations/zh-Hans.json +9 -4
- package/codeTranslations/zh-Hant.json +9 -4
- package/lib/__tests__/validateThemeConfig.test.js +277 -3
- package/lib/admonitions.css +35 -0
- package/lib/index.js +31 -8
- package/lib/prism-include-languages.js +9 -5
- package/lib/theme/AnnouncementBar/index.js +10 -16
- package/lib/theme/AnnouncementBar/styles.module.css +25 -30
- package/lib/theme/BackToTopButton/index.js +140 -0
- package/lib/theme/BackToTopButton/styles.module.css +42 -0
- package/lib/theme/BlogArchivePage/index.js +89 -0
- package/lib/theme/BlogLayout/index.js +51 -0
- package/lib/theme/BlogListPage/index.js +10 -21
- package/lib/theme/BlogPostAuthor/index.js +51 -0
- package/lib/theme/BlogPostAuthor/styles.module.css +12 -0
- package/lib/theme/BlogPostAuthors/index.js +47 -0
- package/lib/theme/BlogPostAuthors/styles.module.css +11 -0
- package/lib/theme/BlogPostItem/index.js +58 -67
- package/lib/theme/BlogPostPage/index.js +37 -24
- package/lib/theme/BlogSidebar/styles.module.css +2 -2
- package/lib/theme/BlogTagsListPage/index.js +8 -44
- package/lib/theme/BlogTagsPostsPage/index.js +24 -38
- package/lib/theme/CodeBlock/index.js +45 -41
- package/lib/theme/CodeBlock/styles.module.css +6 -9
- package/lib/theme/Details/index.js +30 -0
- package/lib/theme/Details/styles.module.css +13 -0
- package/lib/theme/DocItem/index.js +29 -45
- package/lib/theme/DocItem/styles.module.css +5 -9
- package/lib/theme/DocItemFooter/index.js +79 -0
- package/lib/theme/DocItemFooter/styles.module.css +18 -0
- package/lib/theme/DocPage/index.js +25 -49
- package/lib/theme/DocPage/styles.module.css +8 -23
- package/lib/theme/DocSidebar/index.js +45 -227
- package/lib/theme/DocSidebar/styles.module.css +0 -18
- package/lib/theme/DocSidebarItem/index.js +177 -0
- package/lib/theme/DocSidebarItem/styles.module.css +15 -0
- package/lib/theme/DocTagDocListPage/index.js +89 -0
- package/lib/theme/DocTagsListPage/index.js +44 -0
- package/lib/theme/{DocVersionSuggestions → DocVersionBanner}/index.js +37 -18
- package/lib/theme/EditThisPage/index.js +3 -1
- package/lib/theme/Footer/index.js +13 -4
- package/lib/theme/Heading/index.js +7 -9
- package/lib/theme/Heading/styles.css +4 -6
- package/lib/theme/Heading/styles.module.css +9 -5
- package/lib/theme/IconClose/index.js +31 -0
- package/lib/theme/LastUpdated/index.js +4 -2
- package/lib/theme/LayoutHead/index.js +13 -11
- package/lib/theme/LayoutProviders/index.js +11 -5
- package/lib/theme/Logo/index.js +14 -12
- package/lib/theme/MDXComponents/index.js +45 -4
- package/lib/theme/MDXComponents/styles.css +11 -0
- package/lib/theme/MDXPage/index.js +2 -1
- package/lib/theme/Navbar/index.js +164 -42
- package/lib/theme/Navbar/styles.module.css +10 -3
- package/lib/theme/NavbarItem/DefaultNavbarItem.js +27 -123
- package/lib/theme/NavbarItem/DocNavbarItem.js +6 -5
- package/lib/theme/NavbarItem/DocsVersionDropdownNavbarItem.js +19 -12
- package/lib/theme/NavbarItem/DropdownNavbarItem.js +155 -0
- package/lib/theme/NavbarItem/{LocaleDropdownNavbarItem.js → LocaleDropdownNavbarItem/index.js} +5 -6
- package/lib/theme/NavbarItem/LocaleDropdownNavbarItem/styles.module.css +11 -0
- package/lib/theme/NavbarItem/index.js +31 -11
- package/lib/theme/Seo/index.js +10 -7
- package/lib/theme/SkipToContent/index.js +9 -3
- package/lib/theme/SkipToContent/styles.module.css +1 -0
- package/lib/theme/TOC/index.js +9 -29
- package/lib/theme/TOC/styles.module.css +1 -1
- package/lib/theme/TOCCollapsible/index.js +53 -0
- package/lib/theme/TOCCollapsible/styles.module.css +50 -0
- package/lib/theme/TOCInline/index.js +7 -27
- package/lib/theme/TOCItems/index.js +78 -0
- package/lib/theme/Tabs/__tests__/index.test.js +123 -0
- package/lib/theme/Tabs/index.js +73 -50
- package/lib/theme/Tabs/styles.module.css +0 -13
- package/lib/theme/Tag/index.js +40 -0
- package/lib/theme/Tag/styles.module.css +70 -0
- package/lib/theme/TagsListByLetter/index.js +48 -0
- package/lib/theme/TagsListByLetter/styles.module.css +11 -0
- package/lib/theme/TagsListInline/index.js +44 -0
- package/lib/theme/TagsListInline/styles.module.css +15 -0
- package/lib/theme/ThemedImage/index.js +4 -5
- package/lib/theme/Toggle/index.js +23 -18
- package/lib/theme/Toggle/styles.module.css +91 -0
- package/lib/theme/UserPreferencesProvider/index.js +1 -9
- package/lib/theme/hooks/useHideableNavbar.js +14 -32
- package/lib/theme/hooks/useTabGroupChoice.js +2 -4
- package/lib/theme/hooks/useTheme.js +2 -2
- package/lib/theme/hooks/useWindowSize.js +33 -20
- package/lib/theme/prism-include-languages.js +4 -3
- package/lib/translations.js +4 -4
- package/lib/types.d.ts +338 -138
- package/lib/validateThemeConfig.js +226 -245
- package/lib-next/__tests__/validateThemeConfig.test.js +277 -3
- package/lib-next/admonitions.css +35 -0
- package/lib-next/index.js +33 -7
- package/lib-next/prism-include-languages.js +0 -2
- package/lib-next/theme/AnnouncementBar/index.js +9 -18
- package/lib-next/theme/AnnouncementBar/styles.module.css +25 -30
- package/lib-next/theme/BackToTopButton/index.js +131 -0
- package/lib-next/theme/BackToTopButton/styles.module.css +42 -0
- package/lib-next/theme/BlogArchivePage/index.js +80 -0
- package/lib-next/theme/BlogLayout/index.js +40 -0
- package/lib-next/theme/BlogListPage/index.js +16 -24
- package/lib-next/theme/BlogPostAuthor/index.js +46 -0
- package/lib-next/theme/BlogPostAuthor/styles.module.css +12 -0
- package/lib-next/theme/BlogPostAuthors/index.js +34 -0
- package/lib-next/theme/BlogPostAuthors/styles.module.css +11 -0
- package/lib-next/theme/BlogPostItem/index.js +79 -86
- package/lib-next/theme/BlogPostPage/index.js +70 -35
- package/lib-next/theme/BlogSidebar/styles.module.css +2 -2
- package/lib-next/theme/BlogTagsListPage/index.js +13 -54
- package/lib-next/theme/BlogTagsPostsPage/index.js +28 -38
- package/lib-next/theme/CodeBlock/index.js +54 -53
- package/lib-next/theme/CodeBlock/styles.module.css +6 -9
- package/lib-next/theme/Details/index.js +20 -0
- package/lib-next/theme/Details/styles.module.css +13 -0
- package/lib-next/theme/DocItem/index.js +46 -55
- package/lib-next/theme/DocItem/styles.module.css +5 -9
- package/lib-next/theme/DocItemFooter/index.js +79 -0
- package/lib-next/theme/DocItemFooter/styles.module.css +18 -0
- package/lib-next/theme/DocPage/index.js +25 -43
- package/lib-next/theme/DocPage/styles.module.css +8 -23
- package/lib-next/theme/DocSidebar/index.js +59 -288
- package/lib-next/theme/DocSidebar/styles.module.css +0 -18
- package/lib-next/theme/DocSidebarItem/index.js +181 -0
- package/lib-next/theme/DocSidebarItem/styles.module.css +15 -0
- package/lib-next/theme/DocTagDocListPage/index.js +89 -0
- package/lib-next/theme/DocTagsListPage/index.js +38 -0
- package/lib-next/theme/{DocVersionSuggestions → DocVersionBanner}/index.js +44 -36
- package/lib-next/theme/EditThisPage/index.js +6 -1
- package/lib-next/theme/Footer/index.js +24 -4
- package/lib-next/theme/Heading/index.js +10 -13
- package/lib-next/theme/Heading/styles.css +4 -6
- package/lib-next/theme/Heading/styles.module.css +9 -5
- package/lib-next/theme/IconClose/index.js +23 -0
- package/lib-next/theme/LastUpdated/index.js +3 -2
- package/lib-next/theme/LayoutHead/index.js +9 -15
- package/lib-next/theme/LayoutProviders/index.js +17 -6
- package/lib-next/theme/Logo/index.js +23 -19
- package/lib-next/theme/MDXComponents/index.js +34 -7
- package/lib-next/theme/MDXComponents/styles.css +11 -0
- package/lib-next/theme/MDXPage/index.js +10 -2
- package/lib-next/theme/Navbar/index.js +192 -56
- package/lib-next/theme/Navbar/styles.module.css +10 -3
- package/lib-next/theme/NavbarItem/DefaultNavbarItem.js +45 -147
- package/lib-next/theme/NavbarItem/DocNavbarItem.js +6 -5
- package/lib-next/theme/NavbarItem/DocsVersionDropdownNavbarItem.js +31 -19
- package/lib-next/theme/NavbarItem/DropdownNavbarItem.js +158 -0
- package/lib-next/theme/NavbarItem/{LocaleDropdownNavbarItem.js → LocaleDropdownNavbarItem/index.js} +4 -8
- package/lib-next/theme/NavbarItem/LocaleDropdownNavbarItem/styles.module.css +11 -0
- package/lib-next/theme/NavbarItem/index.js +25 -12
- package/lib-next/theme/Seo/index.js +11 -7
- package/lib-next/theme/SkipToContent/index.js +5 -6
- package/lib-next/theme/SkipToContent/styles.module.css +1 -0
- package/lib-next/theme/TOC/index.js +12 -36
- package/lib-next/theme/TOC/styles.module.css +1 -1
- package/lib-next/theme/TOCCollapsible/index.js +54 -0
- package/lib-next/theme/TOCCollapsible/styles.module.css +50 -0
- package/lib-next/theme/TOCInline/index.js +10 -28
- package/lib-next/theme/TOCItems/index.js +85 -0
- package/lib-next/theme/Tabs/__tests__/index.test.js +142 -0
- package/lib-next/theme/Tabs/index.js +91 -43
- package/lib-next/theme/Tabs/styles.module.css +0 -13
- package/lib-next/theme/Tag/index.js +27 -0
- package/lib-next/theme/Tag/styles.module.css +70 -0
- package/lib-next/theme/TagsListByLetter/index.js +42 -0
- package/lib-next/theme/TagsListByLetter/styles.module.css +11 -0
- package/lib-next/theme/TagsListInline/index.js +31 -0
- package/lib-next/theme/TagsListInline/styles.module.css +15 -0
- package/lib-next/theme/ThemedImage/index.js +5 -6
- package/lib-next/theme/Toggle/index.js +20 -15
- package/lib-next/theme/Toggle/styles.module.css +91 -0
- package/lib-next/theme/UserPreferencesProvider/index.js +0 -4
- package/lib-next/theme/hooks/useHideableNavbar.js +31 -44
- package/lib-next/theme/hooks/useTabGroupChoice.js +2 -4
- package/lib-next/theme/hooks/useTheme.js +2 -2
- package/lib-next/theme/hooks/useWindowSize.js +34 -20
- package/lib-next/theme/prism-include-languages.js +2 -1
- package/lib-next/translations.js +6 -10
- package/lib-next/types.d.ts +338 -138
- package/lib-next/validateThemeConfig.js +134 -110
- package/package.json +24 -19
- package/src/__tests__/validateThemeConfig.test.js +277 -3
- package/src/admonitions.css +35 -0
- package/src/index.ts +44 -14
- package/src/{prism-include-languages.js → prism-include-languages.ts} +0 -0
- package/src/theme/AnnouncementBar/index.tsx +10 -17
- package/src/theme/AnnouncementBar/styles.module.css +25 -30
- package/src/theme/BackToTopButton/index.tsx +142 -0
- package/src/theme/BackToTopButton/styles.module.css +42 -0
- package/src/theme/BlogArchivePage/index.tsx +91 -0
- package/src/theme/BlogLayout/index.tsx +44 -0
- package/src/theme/BlogListPage/index.tsx +17 -24
- package/src/theme/BlogPostAuthor/index.tsx +49 -0
- package/src/theme/BlogPostAuthor/styles.module.css +12 -0
- package/src/theme/BlogPostAuthors/index.tsx +36 -0
- package/src/theme/BlogPostAuthors/styles.module.css +11 -0
- package/src/theme/BlogPostItem/index.tsx +70 -80
- package/src/theme/BlogPostPage/index.tsx +72 -35
- package/src/theme/BlogSidebar/styles.module.css +2 -2
- package/src/theme/BlogTagsListPage/index.tsx +13 -56
- package/src/theme/BlogTagsPostsPage/index.tsx +28 -38
- package/src/theme/CodeBlock/index.tsx +70 -55
- package/src/theme/CodeBlock/styles.module.css +6 -9
- package/src/theme/Details/index.tsx +24 -0
- package/src/theme/Details/styles.module.css +13 -0
- package/src/theme/DocItem/index.tsx +49 -55
- package/src/theme/DocItem/styles.module.css +5 -9
- package/src/theme/DocItemFooter/index.tsx +91 -0
- package/src/theme/DocItemFooter/styles.module.css +18 -0
- package/src/theme/DocPage/index.tsx +24 -38
- package/src/theme/DocPage/styles.module.css +8 -23
- package/src/theme/DocSidebar/index.tsx +70 -300
- package/src/theme/DocSidebar/styles.module.css +0 -18
- package/src/theme/DocSidebarItem/index.tsx +206 -0
- package/src/theme/DocSidebarItem/styles.module.css +15 -0
- package/src/theme/DocTagDocListPage/index.tsx +89 -0
- package/src/theme/DocTagsListPage/index.tsx +41 -0
- package/src/theme/{DocVersionSuggestions → DocVersionBanner}/index.tsx +58 -44
- package/src/theme/EditThisPage/index.tsx +6 -1
- package/src/theme/Footer/index.tsx +26 -4
- package/src/theme/Heading/index.tsx +10 -13
- package/src/theme/Heading/styles.css +4 -6
- package/src/theme/Heading/styles.module.css +9 -5
- package/src/theme/IconClose/index.tsx +26 -0
- package/src/theme/LastUpdated/index.tsx +3 -2
- package/src/theme/LayoutHead/index.tsx +9 -9
- package/src/theme/LayoutProviders/index.tsx +17 -6
- package/src/theme/Logo/index.tsx +19 -15
- package/src/theme/MDXComponents/index.tsx +39 -5
- package/src/theme/MDXComponents/styles.css +11 -0
- package/src/theme/MDXPage/index.tsx +10 -2
- package/src/theme/Navbar/index.tsx +202 -61
- package/src/theme/Navbar/styles.module.css +10 -3
- package/src/theme/NavbarItem/DefaultNavbarItem.tsx +42 -154
- package/src/theme/NavbarItem/DocNavbarItem.tsx +11 -14
- package/src/theme/NavbarItem/DocsVersionDropdownNavbarItem.tsx +33 -21
- package/src/theme/NavbarItem/DocsVersionNavbarItem.tsx +7 -3
- package/src/theme/NavbarItem/DropdownNavbarItem.tsx +180 -0
- package/src/theme/NavbarItem/{LocaleDropdownNavbarItem.tsx → LocaleDropdownNavbarItem/index.tsx} +8 -7
- package/src/theme/NavbarItem/LocaleDropdownNavbarItem/styles.module.css +11 -0
- package/src/theme/NavbarItem/index.tsx +41 -16
- package/src/theme/Seo/index.tsx +7 -4
- package/src/theme/SkipToContent/index.tsx +5 -6
- package/src/theme/SkipToContent/styles.module.css +1 -0
- package/src/theme/TOC/index.tsx +12 -41
- package/src/theme/TOC/styles.module.css +1 -1
- package/src/theme/TOCCollapsible/index.tsx +58 -0
- package/src/theme/TOCCollapsible/styles.module.css +50 -0
- package/src/theme/TOCInline/index.tsx +13 -32
- package/src/theme/TOCItems/index.tsx +96 -0
- package/src/theme/Tabs/__tests__/index.test.tsx +129 -0
- package/src/theme/Tabs/index.tsx +93 -49
- package/src/theme/Tabs/styles.module.css +0 -13
- package/src/theme/Tag/index.tsx +31 -0
- package/src/theme/Tag/styles.module.css +70 -0
- package/src/theme/TagsListByLetter/index.tsx +45 -0
- package/src/theme/TagsListByLetter/styles.module.css +11 -0
- package/src/theme/TagsListInline/index.tsx +35 -0
- package/src/theme/TagsListInline/styles.module.css +15 -0
- package/src/theme/ThemedImage/index.tsx +6 -6
- package/src/theme/Toggle/index.tsx +20 -15
- package/src/theme/Toggle/styles.module.css +91 -0
- package/src/theme/UserPreferencesProvider/index.tsx +0 -5
- package/src/theme/hooks/useContextualSearchFilters.ts +1 -1
- package/src/theme/hooks/useHideableNavbar.ts +32 -45
- package/src/theme/hooks/useTabGroupChoice.ts +4 -4
- package/src/theme/hooks/useTheme.ts +2 -2
- package/src/theme/hooks/useWindowSize.ts +38 -20
- package/src/theme/prism-include-languages.ts +3 -2
- package/src/translations.ts +6 -10
- package/src/types.d.ts +338 -138
- package/src/{validateThemeConfig.js → validateThemeConfig.ts} +144 -90
- package/tsconfig.json +1 -2
- package/update-code-translations.js +10 -6
- package/update-code-translations.test.js +1 -1
- package/update.js +151 -0
- package/lib/theme/Toggle/styles.css +0 -103
- package/lib/theme/hooks/useAnnouncementBar.js +0 -63
- package/lib/theme/hooks/useScrollPosition.js +0 -49
- package/lib/theme/hooks/useTOCHighlight.js +0 -87
- package/lib-next/theme/Toggle/styles.css +0 -103
- package/lib-next/theme/hooks/useAnnouncementBar.js +0 -49
- package/lib-next/theme/hooks/useScrollPosition.js +0 -38
- package/lib-next/theme/hooks/useTOCHighlight.js +0 -84
- package/src/theme/Toggle/styles.css +0 -103
- package/src/theme/hooks/useAnnouncementBar.ts +0 -58
- package/src/theme/hooks/useScrollPosition.ts +0 -45
- package/src/theme/hooks/useTOCHighlight.ts +0 -98
|
@@ -18,51 +18,63 @@ import styles from './styles.module.css';
|
|
|
18
18
|
|
|
19
19
|
import {useThemeConfig, parseCodeBlockTitle} from '@docusaurus/theme-common';
|
|
20
20
|
|
|
21
|
-
const
|
|
21
|
+
const HighlightLinesRangeRegex = /{([\d,-]+)}/;
|
|
22
|
+
|
|
23
|
+
const HighlightLanguages = ['js', 'jsBlock', 'jsx', 'python', 'html'] as const;
|
|
24
|
+
type HighlightLanguage = typeof HighlightLanguages[number];
|
|
25
|
+
|
|
26
|
+
type HighlightLanguageConfig = {
|
|
27
|
+
start: string;
|
|
28
|
+
end: string;
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
// Supported types of highlight comments
|
|
32
|
+
const HighlightComments: Record<HighlightLanguage, HighlightLanguageConfig> = {
|
|
33
|
+
js: {
|
|
34
|
+
start: '\\/\\/',
|
|
35
|
+
end: '',
|
|
36
|
+
},
|
|
37
|
+
jsBlock: {
|
|
38
|
+
start: '\\/\\*',
|
|
39
|
+
end: '\\*\\/',
|
|
40
|
+
},
|
|
41
|
+
jsx: {
|
|
42
|
+
start: '\\{\\s*\\/\\*',
|
|
43
|
+
end: '\\*\\/\\s*\\}',
|
|
44
|
+
},
|
|
45
|
+
python: {
|
|
46
|
+
start: '#',
|
|
47
|
+
end: '',
|
|
48
|
+
},
|
|
49
|
+
html: {
|
|
50
|
+
start: '<!--',
|
|
51
|
+
end: '-->',
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
// Supported highlight directives
|
|
56
|
+
const HighlightDirectives = [
|
|
57
|
+
'highlight-next-line',
|
|
58
|
+
'highlight-start',
|
|
59
|
+
'highlight-end',
|
|
60
|
+
];
|
|
61
|
+
|
|
22
62
|
const getHighlightDirectiveRegex = (
|
|
23
|
-
languages
|
|
63
|
+
languages: readonly HighlightLanguage[] = HighlightLanguages,
|
|
24
64
|
) => {
|
|
25
|
-
// supported types of comments
|
|
26
|
-
const comments = {
|
|
27
|
-
js: {
|
|
28
|
-
start: '\\/\\/',
|
|
29
|
-
end: '',
|
|
30
|
-
},
|
|
31
|
-
jsBlock: {
|
|
32
|
-
start: '\\/\\*',
|
|
33
|
-
end: '\\*\\/',
|
|
34
|
-
},
|
|
35
|
-
jsx: {
|
|
36
|
-
start: '\\{\\s*\\/\\*',
|
|
37
|
-
end: '\\*\\/\\s*\\}',
|
|
38
|
-
},
|
|
39
|
-
python: {
|
|
40
|
-
start: '#',
|
|
41
|
-
end: '',
|
|
42
|
-
},
|
|
43
|
-
html: {
|
|
44
|
-
start: '<!--',
|
|
45
|
-
end: '-->',
|
|
46
|
-
},
|
|
47
|
-
};
|
|
48
|
-
// supported directives
|
|
49
|
-
const directives = [
|
|
50
|
-
'highlight-next-line',
|
|
51
|
-
'highlight-start',
|
|
52
|
-
'highlight-end',
|
|
53
|
-
].join('|');
|
|
54
65
|
// to be more reliable, the opening and closing comment must match
|
|
55
66
|
const commentPattern = languages
|
|
56
|
-
.map(
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
)
|
|
67
|
+
.map((lang) => {
|
|
68
|
+
const {start, end} = HighlightComments[lang];
|
|
69
|
+
return `(?:${start}\\s*(${HighlightDirectives.join('|')})\\s*${end})`;
|
|
70
|
+
})
|
|
60
71
|
.join('|');
|
|
61
72
|
// white space is allowed, but otherwise it should be on it's own line
|
|
62
73
|
return new RegExp(`^\\s*(?:${commentPattern})\\s*$`);
|
|
63
74
|
};
|
|
75
|
+
|
|
64
76
|
// select comment styles based on language
|
|
65
|
-
const highlightDirectiveRegex = (lang) => {
|
|
77
|
+
const highlightDirectiveRegex = (lang: string) => {
|
|
66
78
|
switch (lang) {
|
|
67
79
|
case 'js':
|
|
68
80
|
case 'javascript':
|
|
@@ -89,7 +101,7 @@ const highlightDirectiveRegex = (lang) => {
|
|
|
89
101
|
|
|
90
102
|
export default function CodeBlock({
|
|
91
103
|
children,
|
|
92
|
-
className:
|
|
104
|
+
className: blockClassName,
|
|
93
105
|
metastring,
|
|
94
106
|
title,
|
|
95
107
|
}: Props): JSX.Element {
|
|
@@ -119,23 +131,23 @@ export default function CodeBlock({
|
|
|
119
131
|
const prismTheme = usePrismTheme();
|
|
120
132
|
|
|
121
133
|
// In case interleaved Markdown (e.g. when using CodeBlock as standalone component).
|
|
122
|
-
const content = Array.isArray(children)
|
|
134
|
+
const content = Array.isArray(children)
|
|
135
|
+
? children.join('')
|
|
136
|
+
: (children as string);
|
|
123
137
|
|
|
124
|
-
if (metastring &&
|
|
138
|
+
if (metastring && HighlightLinesRangeRegex.test(metastring)) {
|
|
125
139
|
// Tested above
|
|
126
|
-
|
|
127
|
-
const highlightLinesRange = metastring.match(highlightLinesRangeRegex)![1];
|
|
140
|
+
const highlightLinesRange = metastring.match(HighlightLinesRangeRegex)![1];
|
|
128
141
|
highlightLines = rangeParser(highlightLinesRange).filter((n) => n > 0);
|
|
129
142
|
}
|
|
130
143
|
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
((languageClassName.replace(/language-/, '') as Language) as any);
|
|
144
|
+
const languageClassName = blockClassName
|
|
145
|
+
?.split(' ')
|
|
146
|
+
.find((str) => str.startsWith('language-'));
|
|
147
|
+
let language = languageClassName?.replace(/language-/, '') as Language;
|
|
136
148
|
|
|
137
149
|
if (!language && prism.defaultLanguage) {
|
|
138
|
-
language = prism.defaultLanguage;
|
|
150
|
+
language = prism.defaultLanguage as Language;
|
|
139
151
|
}
|
|
140
152
|
|
|
141
153
|
// only declaration OR directive highlight can be used for a block
|
|
@@ -145,7 +157,7 @@ export default function CodeBlock({
|
|
|
145
157
|
const directiveRegex = highlightDirectiveRegex(language);
|
|
146
158
|
// go through line by line
|
|
147
159
|
const lines = content.replace(/\n$/, '').split('\n');
|
|
148
|
-
let blockStart;
|
|
160
|
+
let blockStart: number;
|
|
149
161
|
// loop through lines
|
|
150
162
|
for (let index = 0; index < lines.length; ) {
|
|
151
163
|
const line = lines[index];
|
|
@@ -169,7 +181,7 @@ export default function CodeBlock({
|
|
|
169
181
|
break;
|
|
170
182
|
|
|
171
183
|
case 'highlight-end':
|
|
172
|
-
range += `${blockStart}-${lineNumber - 1},`;
|
|
184
|
+
range += `${blockStart!}-${lineNumber - 1},`;
|
|
173
185
|
break;
|
|
174
186
|
|
|
175
187
|
default:
|
|
@@ -200,7 +212,11 @@ export default function CodeBlock({
|
|
|
200
212
|
code={code}
|
|
201
213
|
language={language}>
|
|
202
214
|
{({className, style, tokens, getLineProps, getTokenProps}) => (
|
|
203
|
-
<div
|
|
215
|
+
<div
|
|
216
|
+
className={clsx(
|
|
217
|
+
styles.codeBlockContainer,
|
|
218
|
+
blockClassName?.replace(/language-[^ ]+/, ''),
|
|
219
|
+
)}>
|
|
204
220
|
{codeBlockTitle && (
|
|
205
221
|
<div style={style} className={styles.codeBlockTitle}>
|
|
206
222
|
{codeBlockTitle}
|
|
@@ -210,14 +226,12 @@ export default function CodeBlock({
|
|
|
210
226
|
<pre
|
|
211
227
|
/* eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex */
|
|
212
228
|
tabIndex={0}
|
|
213
|
-
className={clsx(className, styles.codeBlock, 'thin-scrollbar'
|
|
214
|
-
[styles.codeBlockWithTitle]: codeBlockTitle,
|
|
215
|
-
})}
|
|
229
|
+
className={clsx(className, styles.codeBlock, 'thin-scrollbar')}
|
|
216
230
|
style={style}>
|
|
217
231
|
<code className={styles.codeBlockLines}>
|
|
218
232
|
{tokens.map((line, i) => {
|
|
219
|
-
if (line.length === 1 && line[0].content === '') {
|
|
220
|
-
line[0].content = '
|
|
233
|
+
if (line.length === 1 && line[0].content === '\n') {
|
|
234
|
+
line[0].content = '';
|
|
221
235
|
}
|
|
222
236
|
|
|
223
237
|
const lineProps = getLineProps({line, key: i});
|
|
@@ -231,6 +245,7 @@ export default function CodeBlock({
|
|
|
231
245
|
{line.map((token, key) => (
|
|
232
246
|
<span key={key} {...getTokenProps({token, key})} />
|
|
233
247
|
))}
|
|
248
|
+
<br />
|
|
234
249
|
</span>
|
|
235
250
|
);
|
|
236
251
|
})}
|
|
@@ -7,6 +7,9 @@
|
|
|
7
7
|
|
|
8
8
|
.codeBlockContainer {
|
|
9
9
|
margin-bottom: var(--ifm-leading);
|
|
10
|
+
border-radius: var(--ifm-global-radius);
|
|
11
|
+
box-shadow: var(--ifm-global-shadow-lw);
|
|
12
|
+
overflow: hidden;
|
|
10
13
|
}
|
|
11
14
|
|
|
12
15
|
.codeBlockContent {
|
|
@@ -16,8 +19,6 @@
|
|
|
16
19
|
}
|
|
17
20
|
|
|
18
21
|
.codeBlockTitle {
|
|
19
|
-
border-top-left-radius: var(--ifm-global-radius);
|
|
20
|
-
border-top-right-radius: var(--ifm-global-radius);
|
|
21
22
|
border-bottom: 1px solid var(--ifm-color-emphasis-300);
|
|
22
23
|
font-size: var(--ifm-code-font-size);
|
|
23
24
|
font-weight: 500;
|
|
@@ -25,12 +26,9 @@
|
|
|
25
26
|
}
|
|
26
27
|
|
|
27
28
|
.codeBlock {
|
|
29
|
+
margin: 0;
|
|
28
30
|
padding: 0;
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
.codeBlockWithTitle {
|
|
32
|
-
border-top-left-radius: 0;
|
|
33
|
-
border-top-right-radius: 0;
|
|
31
|
+
border-radius: 0;
|
|
34
32
|
}
|
|
35
33
|
|
|
36
34
|
.copyButton {
|
|
@@ -54,11 +52,10 @@
|
|
|
54
52
|
|
|
55
53
|
.codeBlockLines {
|
|
56
54
|
font: inherit;
|
|
55
|
+
/*rtl:ignore*/
|
|
57
56
|
float: left;
|
|
58
57
|
min-width: 100%;
|
|
59
58
|
padding: var(--ifm-pre-padding);
|
|
60
|
-
display: flex;
|
|
61
|
-
flex-direction: column;
|
|
62
59
|
}
|
|
63
60
|
|
|
64
61
|
@media print {
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import React from 'react';
|
|
9
|
+
import clsx from 'clsx';
|
|
10
|
+
import {Details as DetailsGeneric} from '@docusaurus/theme-common';
|
|
11
|
+
import type {Props} from '@theme/Details';
|
|
12
|
+
import styles from './styles.module.css';
|
|
13
|
+
|
|
14
|
+
// Should we have a custom details/summary comp in Infima instead of reusing alert classes?
|
|
15
|
+
const InfimaClasses = 'alert alert--info';
|
|
16
|
+
|
|
17
|
+
export default function Details({...props}: Props): JSX.Element {
|
|
18
|
+
return (
|
|
19
|
+
<DetailsGeneric
|
|
20
|
+
{...props}
|
|
21
|
+
className={clsx(InfimaClasses, styles.details, props.className)}
|
|
22
|
+
/>
|
|
23
|
+
);
|
|
24
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
.details {
|
|
9
|
+
--docusaurus-details-decoration-color: var(--ifm-alert-border-color);
|
|
10
|
+
--docusaurus-details-transition: transform var(--ifm-transition-fast) ease;
|
|
11
|
+
margin: 0 0 var(--ifm-spacing-vertical);
|
|
12
|
+
border: 1px solid var(--ifm-alert-border-color);
|
|
13
|
+
}
|
|
@@ -6,49 +6,31 @@
|
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
8
|
import React from 'react';
|
|
9
|
+
import clsx from 'clsx';
|
|
10
|
+
import useWindowSize from '@theme/hooks/useWindowSize';
|
|
9
11
|
import DocPaginator from '@theme/DocPaginator';
|
|
10
|
-
import
|
|
12
|
+
import DocVersionBanner from '@theme/DocVersionBanner';
|
|
11
13
|
import Seo from '@theme/Seo';
|
|
12
|
-
import LastUpdated from '@theme/LastUpdated';
|
|
13
14
|
import type {Props} from '@theme/DocItem';
|
|
15
|
+
import DocItemFooter from '@theme/DocItemFooter';
|
|
14
16
|
import TOC from '@theme/TOC';
|
|
15
|
-
import
|
|
17
|
+
import TOCCollapsible from '@theme/TOCCollapsible';
|
|
16
18
|
import {MainHeading} from '@theme/Heading';
|
|
17
|
-
|
|
18
|
-
import clsx from 'clsx';
|
|
19
19
|
import styles from './styles.module.css';
|
|
20
|
-
import {
|
|
21
|
-
useActivePlugin,
|
|
22
|
-
useVersions,
|
|
23
|
-
useActiveVersion,
|
|
24
|
-
} from '@theme/hooks/useDocs';
|
|
20
|
+
import {ThemeClassNames} from '@docusaurus/theme-common';
|
|
25
21
|
|
|
26
|
-
function DocItem(props: Props): JSX.Element {
|
|
27
|
-
const {content: DocContent} = props;
|
|
22
|
+
export default function DocItem(props: Props): JSX.Element {
|
|
23
|
+
const {content: DocContent, versionMetadata} = props;
|
|
28
24
|
const {metadata, frontMatter} = DocContent;
|
|
29
25
|
const {
|
|
30
26
|
image,
|
|
31
27
|
keywords,
|
|
32
28
|
hide_title: hideTitle,
|
|
33
29
|
hide_table_of_contents: hideTableOfContents,
|
|
30
|
+
toc_min_heading_level: tocMinHeadingLevel,
|
|
31
|
+
toc_max_heading_level: tocMaxHeadingLevel,
|
|
34
32
|
} = frontMatter;
|
|
35
|
-
const {
|
|
36
|
-
description,
|
|
37
|
-
title,
|
|
38
|
-
editUrl,
|
|
39
|
-
lastUpdatedAt,
|
|
40
|
-
formattedLastUpdatedAt,
|
|
41
|
-
lastUpdatedBy,
|
|
42
|
-
} = metadata;
|
|
43
|
-
|
|
44
|
-
const {pluginId} = useActivePlugin({failfast: true});
|
|
45
|
-
const versions = useVersions(pluginId);
|
|
46
|
-
const version = useActiveVersion(pluginId);
|
|
47
|
-
|
|
48
|
-
// If site is not versioned or only one version is included
|
|
49
|
-
// we don't show the version badge
|
|
50
|
-
// See https://github.com/facebook/docusaurus/issues/3362
|
|
51
|
-
const showVersionBadge = versions.length > 1;
|
|
33
|
+
const {description, title} = metadata;
|
|
52
34
|
|
|
53
35
|
// We only add a title if:
|
|
54
36
|
// - user asks to hide it with frontmatter
|
|
@@ -56,6 +38,14 @@ function DocItem(props: Props): JSX.Element {
|
|
|
56
38
|
const shouldAddTitle =
|
|
57
39
|
!hideTitle && typeof DocContent.contentTitle === 'undefined';
|
|
58
40
|
|
|
41
|
+
const windowSize = useWindowSize();
|
|
42
|
+
|
|
43
|
+
const canRenderTOC =
|
|
44
|
+
!hideTableOfContents && DocContent.toc && DocContent.toc.length > 0;
|
|
45
|
+
|
|
46
|
+
const renderTocDesktop =
|
|
47
|
+
canRenderTOC && (windowSize === 'desktop' || windowSize === 'ssr');
|
|
48
|
+
|
|
59
49
|
return (
|
|
60
50
|
<>
|
|
61
51
|
<Seo {...{title, description, keywords, image}} />
|
|
@@ -65,16 +55,33 @@ function DocItem(props: Props): JSX.Element {
|
|
|
65
55
|
className={clsx('col', {
|
|
66
56
|
[styles.docItemCol]: !hideTableOfContents,
|
|
67
57
|
})}>
|
|
68
|
-
<
|
|
58
|
+
<DocVersionBanner versionMetadata={versionMetadata} />
|
|
69
59
|
<div className={styles.docItemContainer}>
|
|
70
60
|
<article>
|
|
71
|
-
{
|
|
72
|
-
<span
|
|
73
|
-
|
|
61
|
+
{versionMetadata.badge && (
|
|
62
|
+
<span
|
|
63
|
+
className={clsx(
|
|
64
|
+
ThemeClassNames.docs.docVersionBadge,
|
|
65
|
+
'badge badge--secondary',
|
|
66
|
+
)}>
|
|
67
|
+
Version: {versionMetadata.label}
|
|
74
68
|
</span>
|
|
75
69
|
)}
|
|
76
70
|
|
|
77
|
-
|
|
71
|
+
{canRenderTOC && (
|
|
72
|
+
<TOCCollapsible
|
|
73
|
+
toc={DocContent.toc}
|
|
74
|
+
minHeadingLevel={tocMinHeadingLevel}
|
|
75
|
+
maxHeadingLevel={tocMaxHeadingLevel}
|
|
76
|
+
className={clsx(
|
|
77
|
+
ThemeClassNames.docs.docTocMobile,
|
|
78
|
+
styles.tocMobile,
|
|
79
|
+
)}
|
|
80
|
+
/>
|
|
81
|
+
)}
|
|
82
|
+
|
|
83
|
+
<div
|
|
84
|
+
className={clsx(ThemeClassNames.docs.docMarkdown, 'markdown')}>
|
|
78
85
|
{/*
|
|
79
86
|
Title can be declared inside md content or declared through frontmatter and added manually
|
|
80
87
|
To make both cases consistent, the added title is added under the same div.markdown block
|
|
@@ -85,36 +92,23 @@ function DocItem(props: Props): JSX.Element {
|
|
|
85
92
|
<DocContent />
|
|
86
93
|
</div>
|
|
87
94
|
|
|
88
|
-
{
|
|
89
|
-
<footer className="row docusaurus-mt-lg">
|
|
90
|
-
<div className="col">
|
|
91
|
-
{editUrl && <EditThisPage editUrl={editUrl} />}
|
|
92
|
-
</div>
|
|
93
|
-
|
|
94
|
-
<div className={clsx('col', styles.lastUpdated)}>
|
|
95
|
-
{(lastUpdatedAt || lastUpdatedBy) && (
|
|
96
|
-
<LastUpdated
|
|
97
|
-
lastUpdatedAt={lastUpdatedAt}
|
|
98
|
-
formattedLastUpdatedAt={formattedLastUpdatedAt}
|
|
99
|
-
lastUpdatedBy={lastUpdatedBy}
|
|
100
|
-
/>
|
|
101
|
-
)}
|
|
102
|
-
</div>
|
|
103
|
-
</footer>
|
|
104
|
-
)}
|
|
95
|
+
<DocItemFooter {...props} />
|
|
105
96
|
</article>
|
|
106
97
|
|
|
107
98
|
<DocPaginator metadata={metadata} />
|
|
108
99
|
</div>
|
|
109
100
|
</div>
|
|
110
|
-
{
|
|
101
|
+
{renderTocDesktop && (
|
|
111
102
|
<div className="col col--3">
|
|
112
|
-
<TOC
|
|
103
|
+
<TOC
|
|
104
|
+
toc={DocContent.toc}
|
|
105
|
+
minHeadingLevel={tocMinHeadingLevel}
|
|
106
|
+
maxHeadingLevel={tocMaxHeadingLevel}
|
|
107
|
+
className={ThemeClassNames.docs.docTocDesktop}
|
|
108
|
+
/>
|
|
113
109
|
</div>
|
|
114
110
|
)}
|
|
115
111
|
</div>
|
|
116
112
|
</>
|
|
117
113
|
);
|
|
118
114
|
}
|
|
119
|
-
|
|
120
|
-
export default DocItem;
|
|
@@ -5,22 +5,18 @@
|
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
+
.docItemContainer article > *:first-child,
|
|
8
9
|
.docItemContainer header + * {
|
|
9
10
|
margin-top: 0;
|
|
10
11
|
}
|
|
11
12
|
|
|
12
|
-
|
|
13
|
-
margin-top: 0.2rem;
|
|
14
|
-
font-style: italic;
|
|
15
|
-
font-size: smaller;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
@media only screen and (min-width: 997px) {
|
|
13
|
+
@media (min-width: 997px) {
|
|
19
14
|
.docItemCol {
|
|
20
15
|
max-width: 75% !important;
|
|
21
16
|
}
|
|
22
17
|
|
|
23
|
-
|
|
24
|
-
|
|
18
|
+
/* Prevent hydration FOUC, as the mobile TOC needs to be server-rendered */
|
|
19
|
+
.tocMobile {
|
|
20
|
+
display: none;
|
|
25
21
|
}
|
|
26
22
|
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import React from 'react';
|
|
9
|
+
import clsx from 'clsx';
|
|
10
|
+
|
|
11
|
+
import LastUpdated from '@theme/LastUpdated';
|
|
12
|
+
import type {Props} from '@theme/DocItem';
|
|
13
|
+
import EditThisPage from '@theme/EditThisPage';
|
|
14
|
+
import TagsListInline, {
|
|
15
|
+
Props as TagsListInlineProps,
|
|
16
|
+
} from '@theme/TagsListInline';
|
|
17
|
+
|
|
18
|
+
import styles from './styles.module.css';
|
|
19
|
+
import {ThemeClassNames} from '@docusaurus/theme-common';
|
|
20
|
+
|
|
21
|
+
function TagsRow(props: TagsListInlineProps) {
|
|
22
|
+
return (
|
|
23
|
+
<div
|
|
24
|
+
className={clsx(
|
|
25
|
+
ThemeClassNames.docs.docFooterTagsRow,
|
|
26
|
+
'row margin-bottom--sm',
|
|
27
|
+
)}>
|
|
28
|
+
<div className="col">
|
|
29
|
+
<TagsListInline {...props} />
|
|
30
|
+
</div>
|
|
31
|
+
</div>
|
|
32
|
+
);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
type EditMetaRowProps = Pick<
|
|
36
|
+
Props['content']['metadata'],
|
|
37
|
+
'editUrl' | 'lastUpdatedAt' | 'lastUpdatedBy' | 'formattedLastUpdatedAt'
|
|
38
|
+
>;
|
|
39
|
+
function EditMetaRow({
|
|
40
|
+
editUrl,
|
|
41
|
+
lastUpdatedAt,
|
|
42
|
+
lastUpdatedBy,
|
|
43
|
+
formattedLastUpdatedAt,
|
|
44
|
+
}: EditMetaRowProps) {
|
|
45
|
+
return (
|
|
46
|
+
<div className={clsx(ThemeClassNames.docs.docFooterEditMetaRow, 'row')}>
|
|
47
|
+
<div className="col">{editUrl && <EditThisPage editUrl={editUrl} />}</div>
|
|
48
|
+
|
|
49
|
+
<div className={clsx('col', styles.lastUpdated)}>
|
|
50
|
+
{(lastUpdatedAt || lastUpdatedBy) && (
|
|
51
|
+
<LastUpdated
|
|
52
|
+
lastUpdatedAt={lastUpdatedAt}
|
|
53
|
+
formattedLastUpdatedAt={formattedLastUpdatedAt}
|
|
54
|
+
lastUpdatedBy={lastUpdatedBy}
|
|
55
|
+
/>
|
|
56
|
+
)}
|
|
57
|
+
</div>
|
|
58
|
+
</div>
|
|
59
|
+
);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export default function DocItemFooter(props: Props): JSX.Element {
|
|
63
|
+
const {content: DocContent} = props;
|
|
64
|
+
const {metadata} = DocContent;
|
|
65
|
+
const {editUrl, lastUpdatedAt, formattedLastUpdatedAt, lastUpdatedBy, tags} =
|
|
66
|
+
metadata;
|
|
67
|
+
|
|
68
|
+
const canDisplayTagsRow = tags.length > 0;
|
|
69
|
+
const canDisplayEditMetaRow = !!(editUrl || lastUpdatedAt || lastUpdatedBy);
|
|
70
|
+
|
|
71
|
+
const canDisplayFooter = canDisplayTagsRow || canDisplayEditMetaRow;
|
|
72
|
+
|
|
73
|
+
if (!canDisplayFooter) {
|
|
74
|
+
return <></>;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
return (
|
|
78
|
+
<footer
|
|
79
|
+
className={clsx(ThemeClassNames.docs.docFooter, 'docusaurus-mt-lg')}>
|
|
80
|
+
{canDisplayTagsRow && <TagsRow tags={tags} />}
|
|
81
|
+
{canDisplayEditMetaRow && (
|
|
82
|
+
<EditMetaRow
|
|
83
|
+
editUrl={editUrl}
|
|
84
|
+
lastUpdatedAt={lastUpdatedAt}
|
|
85
|
+
lastUpdatedBy={lastUpdatedBy}
|
|
86
|
+
formattedLastUpdatedAt={formattedLastUpdatedAt}
|
|
87
|
+
/>
|
|
88
|
+
)}
|
|
89
|
+
</footer>
|
|
90
|
+
);
|
|
91
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
.lastUpdated {
|
|
9
|
+
margin-top: 0.2rem;
|
|
10
|
+
font-style: italic;
|
|
11
|
+
font-size: smaller;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
@media (min-width: 997px) {
|
|
15
|
+
.lastUpdated {
|
|
16
|
+
text-align: right;
|
|
17
|
+
}
|
|
18
|
+
}
|