@docusaurus/theme-classic 2.0.0-beta.8e9b829d9 → 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 -6
- package/codeTranslations/base.json +12 -0
- package/codeTranslations/bn.json +6 -0
- package/codeTranslations/cs.json +62 -0
- package/codeTranslations/da.json +6 -0
- package/codeTranslations/de.json +8 -2
- package/codeTranslations/es.json +10 -4
- package/codeTranslations/fa.json +9 -3
- package/codeTranslations/fil.json +6 -0
- package/codeTranslations/fr.json +6 -0
- package/codeTranslations/he.json +6 -0
- package/codeTranslations/hi.json +6 -0
- package/codeTranslations/ja.json +6 -0
- package/codeTranslations/ko.json +6 -0
- package/codeTranslations/pl.json +6 -0
- package/codeTranslations/pt-BR.json +8 -2
- package/codeTranslations/pt-PT.json +6 -0
- package/codeTranslations/ru.json +6 -0
- package/codeTranslations/sr.json +62 -0
- package/codeTranslations/tr.json +9 -3
- package/codeTranslations/vi.json +10 -4
- package/codeTranslations/zh-Hans.json +6 -0
- package/codeTranslations/zh-Hant.json +6 -0
- package/lib/__tests__/validateThemeConfig.test.js +154 -4
- package/lib/index.js +2 -3
- package/lib/prism-include-languages.js +9 -5
- package/lib/theme/AnnouncementBar/index.js +8 -12
- package/lib/theme/AnnouncementBar/styles.module.css +23 -32
- package/lib/theme/BackToTopButton/index.js +27 -13
- package/lib/theme/BackToTopButton/styles.module.css +17 -14
- package/lib/theme/BlogArchivePage/index.js +89 -0
- package/lib/theme/BlogLayout/index.js +2 -6
- package/lib/theme/BlogListPage/index.js +1 -1
- 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 +33 -4
- package/lib/theme/BlogSidebar/styles.module.css +2 -2
- package/lib/theme/BlogTagsListPage/index.js +3 -28
- package/lib/theme/BlogTagsPostsPage/index.js +5 -8
- package/lib/theme/CodeBlock/index.js +44 -37
- package/lib/theme/CodeBlock/styles.module.css +1 -2
- package/lib/theme/DocItem/index.js +15 -40
- package/lib/theme/DocItem/styles.module.css +2 -12
- package/lib/theme/DocItemFooter/index.js +79 -0
- package/lib/theme/DocItemFooter/styles.module.css +18 -0
- package/lib/theme/DocPage/index.js +18 -13
- package/lib/theme/DocSidebar/index.js +11 -16
- package/lib/theme/DocSidebarItem/index.js +12 -10
- package/lib/theme/DocTagDocListPage/index.js +89 -0
- package/lib/theme/DocTagsListPage/index.js +44 -0
- package/lib/theme/DocVersionBanner/index.js +6 -4
- package/lib/theme/EditThisPage/index.js +3 -1
- package/lib/theme/Footer/index.js +5 -3
- 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 +7 -5
- package/lib/theme/Logo/index.js +14 -12
- package/lib/theme/MDXComponents/index.js +27 -1
- package/lib/theme/MDXComponents/styles.css +11 -0
- package/lib/theme/MDXPage/index.js +2 -1
- package/lib/theme/Navbar/index.js +20 -3
- package/lib/theme/Navbar/styles.module.css +5 -1
- package/lib/theme/NavbarItem/DefaultNavbarItem.js +12 -4
- package/lib/theme/NavbarItem/DocNavbarItem.js +5 -3
- package/lib/theme/NavbarItem/DocsVersionDropdownNavbarItem.js +7 -1
- package/lib/theme/NavbarItem/DropdownNavbarItem.js +3 -3
- package/lib/theme/NavbarItem/{LocaleDropdownNavbarItem.js → LocaleDropdownNavbarItem/index.js} +3 -4
- package/lib/theme/NavbarItem/LocaleDropdownNavbarItem/styles.module.css +11 -0
- package/lib/theme/NavbarItem/index.js +5 -0
- package/lib/theme/Seo/index.js +10 -7
- package/lib/theme/TOC/index.js +9 -30
- package/lib/theme/TOC/styles.module.css +1 -1
- package/lib/theme/TOCCollapsible/index.js +5 -3
- 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 +3 -5
- package/lib/theme/Toggle/index.js +23 -18
- package/lib/theme/Toggle/styles.module.css +91 -0
- package/lib/theme/hooks/useHideableNavbar.js +14 -31
- package/lib/theme/hooks/useTheme.js +2 -2
- package/lib/theme/hooks/useWindowSize.js +2 -7
- package/lib/theme/prism-include-languages.js +4 -3
- package/lib/translations.js +4 -4
- package/lib/types.d.ts +216 -105
- package/lib/validateThemeConfig.js +215 -254
- package/lib-next/__tests__/validateThemeConfig.test.js +154 -4
- package/lib-next/index.js +1 -2
- package/lib-next/prism-include-languages.js +0 -2
- package/lib-next/theme/AnnouncementBar/index.js +7 -12
- package/lib-next/theme/AnnouncementBar/styles.module.css +23 -32
- package/lib-next/theme/BackToTopButton/index.js +37 -17
- package/lib-next/theme/BackToTopButton/styles.module.css +17 -14
- package/lib-next/theme/BlogArchivePage/index.js +80 -0
- package/lib-next/theme/BlogLayout/index.js +4 -7
- package/lib-next/theme/BlogListPage/index.js +1 -0
- 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 +55 -8
- package/lib-next/theme/BlogSidebar/styles.module.css +2 -2
- package/lib-next/theme/BlogTagsListPage/index.js +7 -39
- package/lib-next/theme/BlogTagsPostsPage/index.js +3 -4
- package/lib-next/theme/CodeBlock/index.js +53 -49
- package/lib-next/theme/CodeBlock/styles.module.css +1 -2
- package/lib-next/theme/DocItem/index.js +27 -45
- package/lib-next/theme/DocItem/styles.module.css +2 -12
- 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 +18 -14
- package/lib-next/theme/DocSidebar/index.js +18 -15
- package/lib-next/theme/DocSidebarItem/index.js +31 -11
- package/lib-next/theme/DocTagDocListPage/index.js +89 -0
- package/lib-next/theme/DocTagsListPage/index.js +38 -0
- package/lib-next/theme/DocVersionBanner/index.js +16 -9
- package/lib-next/theme/EditThisPage/index.js +6 -1
- package/lib-next/theme/Footer/index.js +14 -3
- 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 +8 -5
- package/lib-next/theme/Logo/index.js +23 -19
- package/lib-next/theme/MDXComponents/index.js +20 -1
- 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 +27 -3
- package/lib-next/theme/Navbar/styles.module.css +5 -1
- package/lib-next/theme/NavbarItem/DefaultNavbarItem.js +15 -4
- package/lib-next/theme/NavbarItem/DocNavbarItem.js +5 -3
- package/lib-next/theme/NavbarItem/DocsVersionDropdownNavbarItem.js +12 -4
- package/lib-next/theme/NavbarItem/DropdownNavbarItem.js +4 -6
- package/lib-next/theme/NavbarItem/{LocaleDropdownNavbarItem.js → LocaleDropdownNavbarItem/index.js} +2 -6
- package/lib-next/theme/NavbarItem/LocaleDropdownNavbarItem/styles.module.css +11 -0
- package/lib-next/theme/NavbarItem/index.js +2 -0
- package/lib-next/theme/Seo/index.js +11 -7
- 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 +12 -3
- 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 +3 -3
- package/lib-next/theme/Toggle/index.js +20 -15
- package/lib-next/theme/Toggle/styles.module.css +91 -0
- package/lib-next/theme/hooks/useHideableNavbar.js +31 -47
- package/lib-next/theme/hooks/useTheme.js +2 -2
- package/lib-next/theme/hooks/useWindowSize.js +2 -6
- package/lib-next/theme/prism-include-languages.js +2 -1
- package/lib-next/translations.js +6 -10
- package/lib-next/types.d.ts +216 -105
- package/lib-next/validateThemeConfig.js +40 -36
- package/package.json +23 -19
- package/src/__tests__/validateThemeConfig.test.js +154 -4
- package/src/index.ts +11 -9
- package/src/{prism-include-languages.js → prism-include-languages.ts} +0 -0
- package/src/theme/AnnouncementBar/index.tsx +8 -12
- package/src/theme/AnnouncementBar/styles.module.css +23 -32
- package/src/theme/BackToTopButton/index.tsx +39 -17
- package/src/theme/BackToTopButton/styles.module.css +17 -14
- package/src/theme/BlogArchivePage/index.tsx +91 -0
- package/src/theme/BlogLayout/index.tsx +4 -8
- package/src/theme/BlogListPage/index.tsx +1 -0
- 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 +57 -8
- package/src/theme/BlogSidebar/styles.module.css +2 -2
- package/src/theme/BlogTagsListPage/index.tsx +7 -41
- package/src/theme/BlogTagsPostsPage/index.tsx +3 -4
- package/src/theme/CodeBlock/index.tsx +63 -47
- package/src/theme/CodeBlock/styles.module.css +1 -2
- package/src/theme/DocItem/index.tsx +27 -46
- package/src/theme/DocItem/styles.module.css +2 -12
- package/src/theme/DocItemFooter/index.tsx +91 -0
- package/src/theme/DocItemFooter/styles.module.css +18 -0
- package/src/theme/DocPage/index.tsx +16 -12
- package/src/theme/DocSidebar/index.tsx +20 -16
- package/src/theme/DocSidebarItem/index.tsx +29 -10
- package/src/theme/DocTagDocListPage/index.tsx +89 -0
- package/src/theme/DocTagsListPage/index.tsx +41 -0
- package/src/theme/DocVersionBanner/index.tsx +26 -15
- package/src/theme/EditThisPage/index.tsx +6 -1
- package/src/theme/Footer/index.tsx +16 -3
- 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 +8 -5
- package/src/theme/Logo/index.tsx +19 -15
- package/src/theme/MDXComponents/index.tsx +20 -1
- package/src/theme/MDXComponents/styles.css +11 -0
- package/src/theme/MDXPage/index.tsx +10 -2
- package/src/theme/Navbar/index.tsx +26 -2
- package/src/theme/Navbar/styles.module.css +5 -1
- package/src/theme/NavbarItem/DefaultNavbarItem.tsx +15 -4
- package/src/theme/NavbarItem/DocNavbarItem.tsx +9 -5
- package/src/theme/NavbarItem/DocsVersionDropdownNavbarItem.tsx +15 -6
- package/src/theme/NavbarItem/DocsVersionNavbarItem.tsx +7 -3
- package/src/theme/NavbarItem/DropdownNavbarItem.tsx +4 -6
- package/src/theme/NavbarItem/{LocaleDropdownNavbarItem.tsx → LocaleDropdownNavbarItem/index.tsx} +6 -5
- package/src/theme/NavbarItem/LocaleDropdownNavbarItem/styles.module.css +11 -0
- package/src/theme/NavbarItem/index.tsx +6 -1
- package/src/theme/Seo/index.tsx +7 -4
- package/src/theme/TOC/index.tsx +13 -38
- package/src/theme/TOC/styles.module.css +1 -1
- package/src/theme/TOCCollapsible/index.tsx +8 -2
- 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 +3 -3
- package/src/theme/Toggle/index.tsx +20 -15
- package/src/theme/Toggle/styles.module.css +91 -0
- package/src/theme/hooks/useContextualSearchFilters.ts +1 -1
- package/src/theme/hooks/useHideableNavbar.ts +32 -47
- package/src/theme/hooks/useTabGroupChoice.ts +2 -2
- package/src/theme/hooks/useTheme.ts +2 -2
- package/src/theme/hooks/useWindowSize.ts +2 -7
- package/src/theme/prism-include-languages.ts +3 -2
- package/src/translations.ts +6 -10
- package/src/types.d.ts +216 -105
- package/src/{validateThemeConfig.js → validateThemeConfig.ts} +46 -12
- package/tsconfig.json +0 -1
- package/update-code-translations.js +5 -4
- 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/useScrollPosition.js +0 -51
- package/lib/theme/hooks/useTOCHighlight.js +0 -87
- package/lib-next/theme/Toggle/styles.css +0 -103
- package/lib-next/theme/hooks/useScrollPosition.js +0 -42
- package/lib-next/theme/hooks/useTOCHighlight.js +0 -84
- package/src/theme/Toggle/styles.css +0 -103
- package/src/theme/hooks/useScrollPosition.ts +0 -52
- package/src/theme/hooks/useTOCHighlight.ts +0 -98
|
@@ -5,7 +5,8 @@
|
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
import {Joi, URISchema} from '@docusaurus/utils-validation';
|
|
9
|
+
import type {ThemeConfig, Validate, ValidationResult} from '@docusaurus/types';
|
|
9
10
|
|
|
10
11
|
const DEFAULT_DOCS_CONFIG = {
|
|
11
12
|
versionPersistence: 'localStorage',
|
|
@@ -40,6 +41,10 @@ const DEFAULT_CONFIG = {
|
|
|
40
41
|
items: [],
|
|
41
42
|
},
|
|
42
43
|
hideableSidebar: false,
|
|
44
|
+
tableOfContents: {
|
|
45
|
+
minHeadingLevel: 2,
|
|
46
|
+
maxHeadingLevel: 3,
|
|
47
|
+
},
|
|
43
48
|
};
|
|
44
49
|
exports.DEFAULT_CONFIG = DEFAULT_CONFIG;
|
|
45
50
|
|
|
@@ -79,10 +84,9 @@ const DocItemSchema = NavbarItemBaseSchema.append({
|
|
|
79
84
|
type: Joi.string().equal('doc').required(),
|
|
80
85
|
docId: Joi.string().required(),
|
|
81
86
|
docsPluginId: Joi.string(),
|
|
82
|
-
activeSidebarClassName: Joi.string().default('navbar__link--active'),
|
|
83
87
|
});
|
|
84
88
|
|
|
85
|
-
const itemWithType = (type) => {
|
|
89
|
+
const itemWithType = (type: string | undefined) => {
|
|
86
90
|
// because equal(undefined) is not supported :/
|
|
87
91
|
const typeSchema = type
|
|
88
92
|
? Joi.string().required().equal(type)
|
|
@@ -96,7 +100,7 @@ const itemWithType = (type) => {
|
|
|
96
100
|
|
|
97
101
|
const DropdownSubitemSchema = Joi.object({
|
|
98
102
|
position: Joi.forbidden(),
|
|
99
|
-
}).when({
|
|
103
|
+
}).when('.', {
|
|
100
104
|
switch: [
|
|
101
105
|
{
|
|
102
106
|
is: itemWithType('docsVersion'),
|
|
@@ -151,7 +155,7 @@ const SearchItemSchema = Joi.object({
|
|
|
151
155
|
|
|
152
156
|
const NavbarItemSchema = Joi.object({
|
|
153
157
|
position: NavbarItemPosition,
|
|
154
|
-
}).when({
|
|
158
|
+
}).when('.', {
|
|
155
159
|
switch: [
|
|
156
160
|
{
|
|
157
161
|
is: itemWithType('docsVersion'),
|
|
@@ -179,7 +183,7 @@ const NavbarItemSchema = Joi.object({
|
|
|
179
183
|
},
|
|
180
184
|
{
|
|
181
185
|
is: itemWithType(undefined),
|
|
182
|
-
then: Joi.object().when({
|
|
186
|
+
then: Joi.object().when('.', {
|
|
183
187
|
// Dropdown item can be specified without type field
|
|
184
188
|
is: Joi.object({
|
|
185
189
|
items: Joi.array().required(),
|
|
@@ -247,12 +251,12 @@ const CustomCssSchema = Joi.alternatives()
|
|
|
247
251
|
|
|
248
252
|
const ThemeConfigSchema = Joi.object({
|
|
249
253
|
// TODO temporary (@alpha-58)
|
|
250
|
-
disableDarkMode: Joi.any().forbidden(
|
|
254
|
+
disableDarkMode: Joi.any().forbidden().messages({
|
|
251
255
|
'any.unknown':
|
|
252
256
|
'disableDarkMode theme config is deprecated. Please use the new colorMode attribute. You likely want: config.themeConfig.colorMode.disableSwitch = true',
|
|
253
257
|
}),
|
|
254
258
|
// TODO temporary (@alpha-58)
|
|
255
|
-
defaultDarkMode: Joi.any().forbidden(
|
|
259
|
+
defaultDarkMode: Joi.any().forbidden().messages({
|
|
256
260
|
'any.unknown':
|
|
257
261
|
'defaultDarkMode theme config is deprecated. Please use the new colorMode attribute. You likely want: config.themeConfig.colorMode.defaultMode = "dark"',
|
|
258
262
|
}),
|
|
@@ -265,7 +269,7 @@ const ThemeConfigSchema = Joi.object({
|
|
|
265
269
|
.default(DEFAULT_CONFIG.metadatas),
|
|
266
270
|
announcementBar: Joi.object({
|
|
267
271
|
id: Joi.string().default('announcement-bar'),
|
|
268
|
-
content: Joi.string(),
|
|
272
|
+
content: Joi.string().required(),
|
|
269
273
|
backgroundColor: Joi.string(),
|
|
270
274
|
textColor: Joi.string(),
|
|
271
275
|
isCloseable: Joi.bool().default(true),
|
|
@@ -286,6 +290,8 @@ const ThemeConfigSchema = Joi.object({
|
|
|
286
290
|
alt: Joi.string().allow(''),
|
|
287
291
|
src: Joi.string().required(),
|
|
288
292
|
srcDark: Joi.string(),
|
|
293
|
+
width: Joi.alternatives().try(Joi.string(), Joi.number()),
|
|
294
|
+
height: Joi.alternatives().try(Joi.string(), Joi.number()),
|
|
289
295
|
href: Joi.string(),
|
|
290
296
|
target: Joi.string(),
|
|
291
297
|
}),
|
|
@@ -296,6 +302,9 @@ const ThemeConfigSchema = Joi.object({
|
|
|
296
302
|
alt: Joi.string().allow(''),
|
|
297
303
|
src: Joi.string(),
|
|
298
304
|
srcDark: Joi.string(),
|
|
305
|
+
// TODO infer this from reading the image
|
|
306
|
+
width: Joi.alternatives().try(Joi.string(), Joi.number()),
|
|
307
|
+
height: Joi.alternatives().try(Joi.string(), Joi.number()),
|
|
299
308
|
href: Joi.string(),
|
|
300
309
|
}),
|
|
301
310
|
copyright: Joi.string(),
|
|
@@ -329,9 +338,34 @@ const ThemeConfigSchema = Joi.object({
|
|
|
329
338
|
'any.unknown':
|
|
330
339
|
'The themeConfig.sidebarCollapsible has been moved to docs plugin options. See: https://docusaurus.io/docs/api/plugins/@docusaurus/plugin-content-docs',
|
|
331
340
|
}),
|
|
341
|
+
tableOfContents: Joi.object({
|
|
342
|
+
minHeadingLevel: Joi.number()
|
|
343
|
+
.default(DEFAULT_CONFIG.tableOfContents.minHeadingLevel)
|
|
344
|
+
.when('maxHeadingLevel', {
|
|
345
|
+
is: Joi.exist(),
|
|
346
|
+
then: Joi.number()
|
|
347
|
+
.integer()
|
|
348
|
+
.min(2)
|
|
349
|
+
.max(6)
|
|
350
|
+
.max(Joi.ref('maxHeadingLevel')),
|
|
351
|
+
otherwise: Joi.number().integer().min(2).max(6),
|
|
352
|
+
}),
|
|
353
|
+
maxHeadingLevel: Joi.number()
|
|
354
|
+
.integer()
|
|
355
|
+
.min(2)
|
|
356
|
+
.max(6)
|
|
357
|
+
.default(DEFAULT_CONFIG.tableOfContents.maxHeadingLevel),
|
|
358
|
+
}).default(DEFAULT_CONFIG.tableOfContents),
|
|
332
359
|
});
|
|
333
|
-
exports.ThemeConfigSchema = ThemeConfigSchema;
|
|
334
360
|
|
|
335
|
-
|
|
361
|
+
export {ThemeConfigSchema};
|
|
362
|
+
|
|
363
|
+
export function validateThemeConfig({
|
|
364
|
+
validate,
|
|
365
|
+
themeConfig,
|
|
366
|
+
}: {
|
|
367
|
+
validate: Validate<ThemeConfig>;
|
|
368
|
+
themeConfig: ThemeConfig;
|
|
369
|
+
}): ValidationResult<ThemeConfig> {
|
|
336
370
|
return validate(ThemeConfigSchema, themeConfig);
|
|
337
|
-
}
|
|
371
|
+
}
|
package/tsconfig.json
CHANGED
|
@@ -14,6 +14,7 @@ const {mapValues, pickBy, difference, orderBy} = require('lodash');
|
|
|
14
14
|
const CodeDirPaths = [
|
|
15
15
|
path.join(__dirname, 'lib-next'),
|
|
16
16
|
// TODO other themes should rather define their own translations in the future?
|
|
17
|
+
path.join(__dirname, '..', 'docusaurus-theme-common', 'lib'),
|
|
17
18
|
path.join(__dirname, '..', 'docusaurus-theme-search-algolia', 'src', 'theme'),
|
|
18
19
|
path.join(__dirname, '..', 'docusaurus-theme-live-codeblock', 'src', 'theme'),
|
|
19
20
|
path.join(__dirname, '..', 'docusaurus-plugin-pwa', 'src', 'theme'),
|
|
@@ -45,7 +46,7 @@ function logSection(title) {
|
|
|
45
46
|
}
|
|
46
47
|
|
|
47
48
|
function logKeys(keys) {
|
|
48
|
-
return `Keys:\n- ${keys.join('\n- ')}
|
|
49
|
+
return `Keys:\n- ${keys.join('\n- ')}`;
|
|
49
50
|
}
|
|
50
51
|
|
|
51
52
|
async function extractThemeCodeMessages() {
|
|
@@ -56,9 +57,9 @@ async function extractThemeCodeMessages() {
|
|
|
56
57
|
// eslint-disable-next-line global-require
|
|
57
58
|
} = require('@docusaurus/core/lib/server/translations/translationsExtractor');
|
|
58
59
|
|
|
59
|
-
const filePaths = (
|
|
60
|
-
|
|
61
|
-
)
|
|
60
|
+
const filePaths = (await globSourceCodeFilePaths(CodeDirPaths)).filter(
|
|
61
|
+
(filePath) => ['.js', '.jsx'].includes(path.extname(filePath)),
|
|
62
|
+
);
|
|
62
63
|
|
|
63
64
|
const filesExtractedTranslations = await extractAllSourceCodeFileTranslations(
|
|
64
65
|
filePaths,
|
|
@@ -14,7 +14,7 @@ const {mapValues, pickBy} = require('lodash');
|
|
|
14
14
|
jest.setTimeout(15000);
|
|
15
15
|
|
|
16
16
|
describe('update-code-translations', () => {
|
|
17
|
-
test(`to have base.json contain all the translations extracted from the theme. Please run "yarn workspace @docusaurus/theme-classic update-code-translations" to keep base.json up-to-date.`, async () => {
|
|
17
|
+
test(`to have base.json contain EXACTLY all the translations extracted from the theme. Please run "yarn workspace @docusaurus/theme-classic update-code-translations" to keep base.json up-to-date.`, async () => {
|
|
18
18
|
const baseMessages = pickBy(
|
|
19
19
|
JSON.parse(
|
|
20
20
|
await fs.readFile(
|
package/update.js
ADDED
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
const chalk = require('chalk');
|
|
2
|
+
const path = require('path');
|
|
3
|
+
const fs = require('fs-extra');
|
|
4
|
+
const globby = require('globby');
|
|
5
|
+
const {mapValues, pickBy, difference, orderBy} = require('lodash');
|
|
6
|
+
|
|
7
|
+
async function extractThemeCodeMessages(dirPath) {
|
|
8
|
+
// Unsafe import, should we create a package for the translationsExtractor ?
|
|
9
|
+
const {
|
|
10
|
+
globSourceCodeFilePaths,
|
|
11
|
+
extractAllSourceCodeFileTranslations,
|
|
12
|
+
// eslint-disable-next-line global-require
|
|
13
|
+
} = require('@docusaurus/core/lib/server/translations/translationsExtractor');
|
|
14
|
+
|
|
15
|
+
const filePaths = (await globSourceCodeFilePaths([dirPath])).filter(
|
|
16
|
+
(filePath) => ['.js', '.jsx'].includes(path.extname(filePath)),
|
|
17
|
+
);
|
|
18
|
+
|
|
19
|
+
const filesExtractedTranslations = await extractAllSourceCodeFileTranslations(
|
|
20
|
+
filePaths,
|
|
21
|
+
{
|
|
22
|
+
presets: [require.resolve('@docusaurus/core/lib/babel/preset')],
|
|
23
|
+
},
|
|
24
|
+
);
|
|
25
|
+
|
|
26
|
+
filesExtractedTranslations.forEach((fileExtractedTranslations) => {
|
|
27
|
+
fileExtractedTranslations.warnings.forEach((warning) => {
|
|
28
|
+
throw new Error(`
|
|
29
|
+
Please make sure all theme translations are static!
|
|
30
|
+
Some warnings were found!
|
|
31
|
+
|
|
32
|
+
${warning}
|
|
33
|
+
`);
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
const translations = filesExtractedTranslations.reduce(
|
|
38
|
+
(acc, extractedTranslations) => {
|
|
39
|
+
return {...acc, ...extractedTranslations.translations};
|
|
40
|
+
},
|
|
41
|
+
{},
|
|
42
|
+
);
|
|
43
|
+
|
|
44
|
+
return translations;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function sortObjectKeys(obj) {
|
|
48
|
+
let keys = Object.keys(obj);
|
|
49
|
+
// keys = orderBy(keys, [(k) => removeDescriptionSuffix(k)]);
|
|
50
|
+
return keys.reduce((acc, key) => {
|
|
51
|
+
acc[key] = obj[key];
|
|
52
|
+
return acc;
|
|
53
|
+
}, {});
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
async function writeMessagesFile(filePath, messages) {
|
|
57
|
+
const sortedMessages = sortObjectKeys(messages);
|
|
58
|
+
const content = `${JSON.stringify(sortedMessages, null, 2)}\n`; // \n makes prettier happy
|
|
59
|
+
await fs.outputFile(filePath, content);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
async function main() {
|
|
63
|
+
const codeTranslationsDir = path.join(__dirname, 'src', 'codeTranslations');
|
|
64
|
+
const baseFile = path.join(codeTranslationsDir, 'base.json');
|
|
65
|
+
const localesFiles = (await globby(codeTranslationsDir)).filter(
|
|
66
|
+
(filepath) => path.extname(filepath) === '.json',
|
|
67
|
+
// (filepath) => filepath.endsWith('base.json'),
|
|
68
|
+
);
|
|
69
|
+
let baseMessages = JSON.parse(await fs.readFile(baseFile));
|
|
70
|
+
|
|
71
|
+
const targetDirs = [
|
|
72
|
+
path.join(
|
|
73
|
+
__dirname,
|
|
74
|
+
'..',
|
|
75
|
+
'docusaurus-theme-search-algolia',
|
|
76
|
+
'src',
|
|
77
|
+
// 'theme',
|
|
78
|
+
),
|
|
79
|
+
path.join(
|
|
80
|
+
__dirname,
|
|
81
|
+
'..',
|
|
82
|
+
'docusaurus-theme-live-codeblock',
|
|
83
|
+
'src',
|
|
84
|
+
// 'theme',
|
|
85
|
+
),
|
|
86
|
+
path.join(__dirname, '..', 'docusaurus-plugin-pwa', 'src'),
|
|
87
|
+
];
|
|
88
|
+
|
|
89
|
+
const convertToObject = (array) =>
|
|
90
|
+
array.reduce((acc, [key, value]) => {
|
|
91
|
+
return {...acc, ...{[key]: value}};
|
|
92
|
+
}, {});
|
|
93
|
+
|
|
94
|
+
const removePluginMessages = (content, keys) =>
|
|
95
|
+
Object.entries(content).filter(([key]) => !keys.includes(key));
|
|
96
|
+
|
|
97
|
+
for (const targetDir of targetDirs) {
|
|
98
|
+
console.log(targetDir);
|
|
99
|
+
|
|
100
|
+
const pluginExtractedTranslations = await extractThemeCodeMessages(
|
|
101
|
+
targetDir,
|
|
102
|
+
);
|
|
103
|
+
|
|
104
|
+
for (const localeFile of localesFiles) {
|
|
105
|
+
console.log(localeFile);
|
|
106
|
+
|
|
107
|
+
const targetFile = JSON.parse(await fs.readFile(localeFile));
|
|
108
|
+
const destFile = path.join(
|
|
109
|
+
targetDir,
|
|
110
|
+
'codeTranslations',
|
|
111
|
+
path.basename(localeFile),
|
|
112
|
+
);
|
|
113
|
+
|
|
114
|
+
const pluginMessages = Object.entries(targetFile).filter(
|
|
115
|
+
([key, value]) => {
|
|
116
|
+
return Object.keys(pluginExtractedTranslations).filter((message) =>
|
|
117
|
+
key.startsWith(message),
|
|
118
|
+
).length;
|
|
119
|
+
},
|
|
120
|
+
);
|
|
121
|
+
|
|
122
|
+
const pluginMessagesKeys = pluginMessages.map(([key]) => key);
|
|
123
|
+
|
|
124
|
+
console.log(1, pluginMessagesKeys);
|
|
125
|
+
|
|
126
|
+
// await writeMessagesFile(destFile, convertToObject(pluginMessages));
|
|
127
|
+
|
|
128
|
+
const newTargetFile = removePluginMessages(
|
|
129
|
+
targetFile,
|
|
130
|
+
pluginMessagesKeys,
|
|
131
|
+
);
|
|
132
|
+
|
|
133
|
+
baseMessages = pickBy(
|
|
134
|
+
baseMessages,
|
|
135
|
+
(_, key) => !pluginMessagesKeys.includes(key),
|
|
136
|
+
);
|
|
137
|
+
// await writeMessagesFile(localeFile, convertToObject(newTargetFile));
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
// console.log(baseMessages);
|
|
142
|
+
// await writeMessagesFile(baseFile, baseMessages);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
function run() {
|
|
146
|
+
main().then(() => {
|
|
147
|
+
console.log(1);
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
exports.run = run;
|
|
@@ -1,103 +0,0 @@
|
|
|
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
|
-
/**
|
|
9
|
-
* Styles for React Toggle
|
|
10
|
-
* copied over because we want to allow user to swizzle it and modify the css
|
|
11
|
-
* and also to make sure its compatible with our dark mode
|
|
12
|
-
* https://github.com/aaronshaf/react-toggle/blob/master/style.css
|
|
13
|
-
*/
|
|
14
|
-
.react-toggle {
|
|
15
|
-
touch-action: pan-x;
|
|
16
|
-
position: relative;
|
|
17
|
-
cursor: pointer;
|
|
18
|
-
user-select: none;
|
|
19
|
-
-webkit-tap-highlight-color: transparent;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
.react-toggle-screenreader-only {
|
|
23
|
-
border: 0;
|
|
24
|
-
clip: rect(0 0 0 0);
|
|
25
|
-
height: 1px;
|
|
26
|
-
margin: -1px;
|
|
27
|
-
overflow: hidden;
|
|
28
|
-
position: absolute;
|
|
29
|
-
width: 1px;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
.react-toggle--disabled {
|
|
33
|
-
cursor: not-allowed;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
.react-toggle-track {
|
|
37
|
-
width: 50px;
|
|
38
|
-
height: 24px;
|
|
39
|
-
border-radius: 30px;
|
|
40
|
-
background-color: #4d4d4d;
|
|
41
|
-
transition: all 0.2s ease;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
.react-toggle-track-check {
|
|
45
|
-
position: absolute;
|
|
46
|
-
width: 14px;
|
|
47
|
-
height: 10px;
|
|
48
|
-
top: 0px;
|
|
49
|
-
bottom: 0px;
|
|
50
|
-
margin: auto 0;
|
|
51
|
-
left: 8px;
|
|
52
|
-
opacity: 0;
|
|
53
|
-
transition: opacity 0.25s ease;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
[data-theme='dark'] .react-toggle .react-toggle-track-check,
|
|
57
|
-
.react-toggle--checked .react-toggle-track-check {
|
|
58
|
-
opacity: 1;
|
|
59
|
-
transition: opacity 0.25s ease;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
.react-toggle-track-x {
|
|
63
|
-
position: absolute;
|
|
64
|
-
width: 10px;
|
|
65
|
-
height: 10px;
|
|
66
|
-
top: 0px;
|
|
67
|
-
bottom: 0px;
|
|
68
|
-
margin: auto 0;
|
|
69
|
-
right: 10px;
|
|
70
|
-
opacity: 1;
|
|
71
|
-
transition: opacity 0.25s ease;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
[data-theme='dark'] .react-toggle .react-toggle-track-x,
|
|
75
|
-
.react-toggle--checked .react-toggle-track-x {
|
|
76
|
-
opacity: 0;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
.react-toggle-thumb {
|
|
80
|
-
position: absolute;
|
|
81
|
-
top: 1px;
|
|
82
|
-
left: 1px;
|
|
83
|
-
width: 22px;
|
|
84
|
-
height: 22px;
|
|
85
|
-
border: 1px solid #4d4d4d;
|
|
86
|
-
border-radius: 50%;
|
|
87
|
-
background-color: #fafafa;
|
|
88
|
-
transition: all 0.25s ease;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
[data-theme='dark'] .react-toggle .react-toggle-thumb,
|
|
92
|
-
.react-toggle--checked .react-toggle-thumb {
|
|
93
|
-
left: 27px;
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
.react-toggle--focus .react-toggle-thumb,
|
|
97
|
-
.react-toggle:hover .react-toggle-thumb {
|
|
98
|
-
box-shadow: 0px 0px 2px 3px var(--ifm-color-primary);
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
.react-toggle:active:not(.react-toggle--disabled) .react-toggle-thumb {
|
|
102
|
-
box-shadow: 0px 0px 5px 5px var(--ifm-color-primary);
|
|
103
|
-
}
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = void 0;
|
|
7
|
-
|
|
8
|
-
var _react = require("react");
|
|
9
|
-
|
|
10
|
-
var _ExecutionEnvironment = _interopRequireDefault(require("@docusaurus/ExecutionEnvironment"));
|
|
11
|
-
|
|
12
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
16
|
-
*
|
|
17
|
-
* This source code is licensed under the MIT license found in the
|
|
18
|
-
* LICENSE file in the root directory of this source tree.
|
|
19
|
-
*/
|
|
20
|
-
const getScrollPosition = () => {
|
|
21
|
-
return _ExecutionEnvironment.default.canUseDOM ? {
|
|
22
|
-
scrollX: window.pageXOffset,
|
|
23
|
-
scrollY: window.pageYOffset
|
|
24
|
-
} : null;
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
const useScrollPosition = (effect, deps = []) => {
|
|
28
|
-
const lastPositionRef = (0, _react.useRef)(getScrollPosition());
|
|
29
|
-
|
|
30
|
-
const handleScroll = () => {
|
|
31
|
-
const currentPosition = getScrollPosition();
|
|
32
|
-
|
|
33
|
-
if (effect) {
|
|
34
|
-
effect(currentPosition, lastPositionRef.current);
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
lastPositionRef.current = currentPosition;
|
|
38
|
-
};
|
|
39
|
-
|
|
40
|
-
(0, _react.useEffect)(() => {
|
|
41
|
-
const opts = {
|
|
42
|
-
passive: true
|
|
43
|
-
};
|
|
44
|
-
handleScroll();
|
|
45
|
-
window.addEventListener('scroll', handleScroll, opts);
|
|
46
|
-
return () => window.removeEventListener('scroll', handleScroll, opts);
|
|
47
|
-
}, deps);
|
|
48
|
-
};
|
|
49
|
-
|
|
50
|
-
var _default = useScrollPosition;
|
|
51
|
-
exports.default = _default;
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = void 0;
|
|
7
|
-
|
|
8
|
-
var _react = require("react");
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
12
|
-
*
|
|
13
|
-
* This source code is licensed under the MIT license found in the
|
|
14
|
-
* LICENSE file in the root directory of this source tree.
|
|
15
|
-
*/
|
|
16
|
-
function useTOCHighlight(linkClassName, linkActiveClassName, topOffset) {
|
|
17
|
-
const [lastActiveLink, setLastActiveLink] = (0, _react.useState)(undefined);
|
|
18
|
-
(0, _react.useEffect)(() => {
|
|
19
|
-
function setActiveLink() {
|
|
20
|
-
function getActiveHeaderAnchor() {
|
|
21
|
-
const headersAnchors = Array.from(document.getElementsByClassName('anchor'));
|
|
22
|
-
const firstAnchorUnderViewportTop = headersAnchors.find(anchor => {
|
|
23
|
-
const {
|
|
24
|
-
top
|
|
25
|
-
} = anchor.getBoundingClientRect();
|
|
26
|
-
return top >= topOffset;
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
if (firstAnchorUnderViewportTop) {
|
|
30
|
-
// If first anchor in viewport is under a certain threshold, we consider it's not the active anchor.
|
|
31
|
-
// In such case, the active anchor is the previous one (if it exists), that may be above the viewport
|
|
32
|
-
if (firstAnchorUnderViewportTop.getBoundingClientRect().top >= topOffset) {
|
|
33
|
-
const previousAnchor = headersAnchors[headersAnchors.indexOf(firstAnchorUnderViewportTop) - 1];
|
|
34
|
-
return previousAnchor !== null && previousAnchor !== void 0 ? previousAnchor : firstAnchorUnderViewportTop;
|
|
35
|
-
} // If the anchor is at the top of the viewport, we consider it's the first anchor
|
|
36
|
-
else {
|
|
37
|
-
return firstAnchorUnderViewportTop;
|
|
38
|
-
}
|
|
39
|
-
} // no anchor under viewport top? (ie we are at the bottom of the page)
|
|
40
|
-
else {
|
|
41
|
-
// highlight the last anchor found
|
|
42
|
-
return headersAnchors[headersAnchors.length - 1];
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
const activeHeaderAnchor = getActiveHeaderAnchor();
|
|
47
|
-
|
|
48
|
-
if (activeHeaderAnchor) {
|
|
49
|
-
let index = 0;
|
|
50
|
-
let itemHighlighted = false; // @ts-expect-error: Must be <a> tags.
|
|
51
|
-
|
|
52
|
-
const links = document.getElementsByClassName(linkClassName);
|
|
53
|
-
|
|
54
|
-
while (index < links.length && !itemHighlighted) {
|
|
55
|
-
const link = links[index];
|
|
56
|
-
const {
|
|
57
|
-
href
|
|
58
|
-
} = link;
|
|
59
|
-
const anchorValue = decodeURIComponent(href.substring(href.indexOf('#') + 1));
|
|
60
|
-
|
|
61
|
-
if (activeHeaderAnchor.id === anchorValue) {
|
|
62
|
-
if (lastActiveLink) {
|
|
63
|
-
lastActiveLink.classList.remove(linkActiveClassName);
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
link.classList.add(linkActiveClassName);
|
|
67
|
-
setLastActiveLink(link);
|
|
68
|
-
itemHighlighted = true;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
index += 1;
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
document.addEventListener('scroll', setActiveLink);
|
|
77
|
-
document.addEventListener('resize', setActiveLink);
|
|
78
|
-
setActiveLink();
|
|
79
|
-
return () => {
|
|
80
|
-
document.removeEventListener('scroll', setActiveLink);
|
|
81
|
-
document.removeEventListener('resize', setActiveLink);
|
|
82
|
-
};
|
|
83
|
-
});
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
var _default = useTOCHighlight;
|
|
87
|
-
exports.default = _default;
|
|
@@ -1,103 +0,0 @@
|
|
|
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
|
-
/**
|
|
9
|
-
* Styles for React Toggle
|
|
10
|
-
* copied over because we want to allow user to swizzle it and modify the css
|
|
11
|
-
* and also to make sure its compatible with our dark mode
|
|
12
|
-
* https://github.com/aaronshaf/react-toggle/blob/master/style.css
|
|
13
|
-
*/
|
|
14
|
-
.react-toggle {
|
|
15
|
-
touch-action: pan-x;
|
|
16
|
-
position: relative;
|
|
17
|
-
cursor: pointer;
|
|
18
|
-
user-select: none;
|
|
19
|
-
-webkit-tap-highlight-color: transparent;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
.react-toggle-screenreader-only {
|
|
23
|
-
border: 0;
|
|
24
|
-
clip: rect(0 0 0 0);
|
|
25
|
-
height: 1px;
|
|
26
|
-
margin: -1px;
|
|
27
|
-
overflow: hidden;
|
|
28
|
-
position: absolute;
|
|
29
|
-
width: 1px;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
.react-toggle--disabled {
|
|
33
|
-
cursor: not-allowed;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
.react-toggle-track {
|
|
37
|
-
width: 50px;
|
|
38
|
-
height: 24px;
|
|
39
|
-
border-radius: 30px;
|
|
40
|
-
background-color: #4d4d4d;
|
|
41
|
-
transition: all 0.2s ease;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
.react-toggle-track-check {
|
|
45
|
-
position: absolute;
|
|
46
|
-
width: 14px;
|
|
47
|
-
height: 10px;
|
|
48
|
-
top: 0px;
|
|
49
|
-
bottom: 0px;
|
|
50
|
-
margin: auto 0;
|
|
51
|
-
left: 8px;
|
|
52
|
-
opacity: 0;
|
|
53
|
-
transition: opacity 0.25s ease;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
[data-theme='dark'] .react-toggle .react-toggle-track-check,
|
|
57
|
-
.react-toggle--checked .react-toggle-track-check {
|
|
58
|
-
opacity: 1;
|
|
59
|
-
transition: opacity 0.25s ease;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
.react-toggle-track-x {
|
|
63
|
-
position: absolute;
|
|
64
|
-
width: 10px;
|
|
65
|
-
height: 10px;
|
|
66
|
-
top: 0px;
|
|
67
|
-
bottom: 0px;
|
|
68
|
-
margin: auto 0;
|
|
69
|
-
right: 10px;
|
|
70
|
-
opacity: 1;
|
|
71
|
-
transition: opacity 0.25s ease;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
[data-theme='dark'] .react-toggle .react-toggle-track-x,
|
|
75
|
-
.react-toggle--checked .react-toggle-track-x {
|
|
76
|
-
opacity: 0;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
.react-toggle-thumb {
|
|
80
|
-
position: absolute;
|
|
81
|
-
top: 1px;
|
|
82
|
-
left: 1px;
|
|
83
|
-
width: 22px;
|
|
84
|
-
height: 22px;
|
|
85
|
-
border: 1px solid #4d4d4d;
|
|
86
|
-
border-radius: 50%;
|
|
87
|
-
background-color: #fafafa;
|
|
88
|
-
transition: all 0.25s ease;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
[data-theme='dark'] .react-toggle .react-toggle-thumb,
|
|
92
|
-
.react-toggle--checked .react-toggle-thumb {
|
|
93
|
-
left: 27px;
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
.react-toggle--focus .react-toggle-thumb,
|
|
97
|
-
.react-toggle:hover .react-toggle-thumb {
|
|
98
|
-
box-shadow: 0px 0px 2px 3px var(--ifm-color-primary);
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
.react-toggle:active:not(.react-toggle--disabled) .react-toggle-thumb {
|
|
102
|
-
box-shadow: 0px 0px 5px 5px var(--ifm-color-primary);
|
|
103
|
-
}
|