@azerion/bunosaurus-theme-common 0.0.0-stage → 4.0.0
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 +2 -2
- package/lib/components/Collapsible/index.d.ts +59 -0
- package/lib/components/Collapsible/index.d.ts.map +1 -0
- package/lib/components/Collapsible/index.js +145 -0
- package/lib/components/Collapsible/index.js.map +1 -0
- package/lib/components/Details/index.d.ts +20 -0
- package/lib/components/Details/index.d.ts.map +1 -0
- package/lib/components/Details/index.js +86 -0
- package/lib/components/Details/index.js.map +1 -0
- package/lib/components/Details/styles.module.css +66 -0
- package/lib/components/ThemedComponent/index.d.ts +31 -0
- package/lib/components/ThemedComponent/index.d.ts.map +1 -0
- package/lib/components/ThemedComponent/index.js +47 -0
- package/lib/components/ThemedComponent/index.js.map +1 -0
- package/lib/components/ThemedComponent/styles.module.css +26 -0
- package/lib/contexts/announcementBar.d.ts +21 -0
- package/lib/contexts/announcementBar.d.ts.map +1 -0
- package/lib/contexts/announcementBar.js +72 -0
- package/lib/contexts/announcementBar.js.map +1 -0
- package/lib/contexts/colorMode.d.ts +23 -0
- package/lib/contexts/colorMode.d.ts.map +1 -0
- package/lib/contexts/colorMode.js +163 -0
- package/lib/contexts/colorMode.js.map +1 -0
- package/lib/contexts/navbarMobileSidebar.d.ts +31 -0
- package/lib/contexts/navbarMobileSidebar.d.ts.map +1 -0
- package/lib/contexts/navbarMobileSidebar.js +65 -0
- package/lib/contexts/navbarMobileSidebar.js.map +1 -0
- package/lib/contexts/navbarSecondaryMenu/content.d.ts +37 -0
- package/lib/contexts/navbarSecondaryMenu/content.d.ts.map +1 -0
- package/lib/contexts/navbarSecondaryMenu/content.js +50 -0
- package/lib/contexts/navbarSecondaryMenu/content.js.map +1 -0
- package/lib/contexts/navbarSecondaryMenu/display.d.ts +24 -0
- package/lib/contexts/navbarSecondaryMenu/display.d.ts.map +1 -0
- package/lib/contexts/navbarSecondaryMenu/display.js +62 -0
- package/lib/contexts/navbarSecondaryMenu/display.js.map +1 -0
- package/lib/hooks/useBackToTopButton.d.ts +27 -0
- package/lib/hooks/useBackToTopButton.d.ts.map +1 -0
- package/lib/hooks/useBackToTopButton.js +50 -0
- package/lib/hooks/useBackToTopButton.js.map +1 -0
- package/lib/hooks/useCodeWordWrap.d.ts +15 -0
- package/lib/hooks/useCodeWordWrap.d.ts.map +1 -0
- package/lib/hooks/useCodeWordWrap.js +67 -0
- package/lib/hooks/useCodeWordWrap.js.map +1 -0
- package/lib/hooks/useHideableNavbar.d.ts +17 -0
- package/lib/hooks/useHideableNavbar.d.ts.map +1 -0
- package/lib/hooks/useHideableNavbar.js +65 -0
- package/lib/hooks/useHideableNavbar.js.map +1 -0
- package/lib/hooks/useLockBodyScroll.d.ts +12 -0
- package/lib/hooks/useLockBodyScroll.d.ts.map +1 -0
- package/lib/hooks/useLockBodyScroll.js +20 -0
- package/lib/hooks/useLockBodyScroll.js.map +1 -0
- package/lib/hooks/useMutationObserver.d.ts +4 -0
- package/lib/hooks/useMutationObserver.d.ts.map +1 -0
- package/lib/hooks/useMutationObserver.js +29 -0
- package/lib/hooks/useMutationObserver.js.map +1 -0
- package/lib/hooks/usePrismTheme.d.ts +13 -0
- package/lib/hooks/usePrismTheme.d.ts.map +1 -0
- package/lib/hooks/usePrismTheme.js +21 -0
- package/lib/hooks/usePrismTheme.js.map +1 -0
- package/lib/hooks/useTOCHighlight.d.ts +25 -0
- package/lib/hooks/useTOCHighlight.d.ts.map +1 -0
- package/lib/hooks/useTOCHighlight.js +130 -0
- package/lib/hooks/useTOCHighlight.js.map +1 -0
- package/lib/hooks/useWindowSize.d.ts +27 -0
- package/lib/hooks/useWindowSize.d.ts.map +1 -0
- package/lib/hooks/useWindowSize.js +49 -0
- package/lib/hooks/useWindowSize.js.map +1 -0
- package/lib/index.d.ts +30 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +37 -0
- package/lib/index.js.map +1 -0
- package/lib/internal.d.ts +35 -0
- package/lib/internal.d.ts.map +1 -0
- package/lib/internal.js +45 -0
- package/lib/internal.js.map +1 -0
- package/lib/translations/blogTranslations.d.ts +20 -0
- package/lib/translations/blogTranslations.d.ts.map +1 -0
- package/lib/translations/blogTranslations.js +52 -0
- package/lib/translations/blogTranslations.js.map +1 -0
- package/lib/translations/contentVisibilityTranslations.d.ts +12 -0
- package/lib/translations/contentVisibilityTranslations.d.ts.map +1 -0
- package/lib/translations/contentVisibilityTranslations.js +30 -0
- package/lib/translations/contentVisibilityTranslations.js.map +1 -0
- package/lib/translations/docsTranslations.d.ts +8 -0
- package/lib/translations/docsTranslations.d.ts.map +1 -0
- package/lib/translations/docsTranslations.js +17 -0
- package/lib/translations/docsTranslations.js.map +1 -0
- package/lib/utils/IntlUtils.d.ts +2 -0
- package/lib/utils/IntlUtils.d.ts.map +1 -0
- package/lib/utils/IntlUtils.js +20 -0
- package/lib/utils/IntlUtils.js.map +1 -0
- package/lib/utils/ThemeClassNames.d.ts +99 -0
- package/lib/utils/ThemeClassNames.d.ts.map +1 -0
- package/lib/utils/ThemeClassNames.js +107 -0
- package/lib/utils/ThemeClassNames.js.map +1 -0
- package/lib/utils/accessibilityUtils.d.ts +8 -0
- package/lib/utils/accessibilityUtils.d.ts.map +1 -0
- package/lib/utils/accessibilityUtils.js +10 -0
- package/lib/utils/accessibilityUtils.js.map +1 -0
- package/lib/utils/admonitionUtils.d.ts +12 -0
- package/lib/utils/admonitionUtils.d.ts.map +1 -0
- package/lib/utils/admonitionUtils.js +32 -0
- package/lib/utils/admonitionUtils.js.map +1 -0
- package/lib/utils/anchorUtils.d.ts +16 -0
- package/lib/utils/anchorUtils.d.ts.map +1 -0
- package/lib/utils/anchorUtils.js +26 -0
- package/lib/utils/anchorUtils.js.map +1 -0
- package/lib/utils/anchorUtils.module.css +14 -0
- package/lib/utils/codeBlockUtils.d.ts +101 -0
- package/lib/utils/codeBlockUtils.d.ts.map +1 -0
- package/lib/utils/codeBlockUtils.js +310 -0
- package/lib/utils/codeBlockUtils.js.map +1 -0
- package/lib/utils/emojiUtils.d.ts +20 -0
- package/lib/utils/emojiUtils.d.ts.map +1 -0
- package/lib/utils/emojiUtils.js +32 -0
- package/lib/utils/emojiUtils.js.map +1 -0
- package/lib/utils/errorBoundaryUtils.d.ts +31 -0
- package/lib/utils/errorBoundaryUtils.d.ts.map +1 -0
- package/lib/utils/errorBoundaryUtils.js +48 -0
- package/lib/utils/errorBoundaryUtils.js.map +1 -0
- package/lib/utils/errorBoundaryUtils.module.css +16 -0
- package/lib/utils/footerUtils.d.ts +13 -0
- package/lib/utils/footerUtils.d.ts.map +1 -0
- package/lib/utils/footerUtils.js +14 -0
- package/lib/utils/footerUtils.js.map +1 -0
- package/lib/utils/historyUtils.d.ts +39 -0
- package/lib/utils/historyUtils.d.ts.map +1 -0
- package/lib/utils/historyUtils.js +148 -0
- package/lib/utils/historyUtils.js.map +1 -0
- package/lib/utils/jsUtils.d.ts +24 -0
- package/lib/utils/jsUtils.d.ts.map +1 -0
- package/lib/utils/jsUtils.js +43 -0
- package/lib/utils/jsUtils.js.map +1 -0
- package/lib/utils/metadataUtils.d.ts +38 -0
- package/lib/utils/metadataUtils.d.ts.map +1 -0
- package/lib/utils/metadataUtils.js +87 -0
- package/lib/utils/metadataUtils.js.map +1 -0
- package/lib/utils/navbarUtils.d.ts +21 -0
- package/lib/utils/navbarUtils.d.ts.map +1 -0
- package/lib/utils/navbarUtils.js +35 -0
- package/lib/utils/navbarUtils.js.map +1 -0
- package/lib/utils/reactUtils.d.ts +60 -0
- package/lib/utils/reactUtils.d.ts.map +1 -0
- package/lib/utils/reactUtils.js +91 -0
- package/lib/utils/reactUtils.js.map +1 -0
- package/lib/utils/regexpUtils.d.ts +12 -0
- package/lib/utils/regexpUtils.d.ts.map +1 -0
- package/lib/utils/regexpUtils.js +18 -0
- package/lib/utils/regexpUtils.js.map +1 -0
- package/lib/utils/routesUtils.d.ts +26 -0
- package/lib/utils/routesUtils.d.ts.map +1 -0
- package/lib/utils/routesUtils.js +54 -0
- package/lib/utils/routesUtils.js.map +1 -0
- package/lib/utils/scrollUtils.d.ts +83 -0
- package/lib/utils/scrollUtils.d.ts.map +1 -0
- package/lib/utils/scrollUtils.js +201 -0
- package/lib/utils/scrollUtils.js.map +1 -0
- package/lib/utils/searchUtils.d.ts +8 -0
- package/lib/utils/searchUtils.d.ts.map +1 -0
- package/lib/utils/searchUtils.js +8 -0
- package/lib/utils/searchUtils.js.map +1 -0
- package/lib/utils/skipToContentUtils.d.ts +20 -0
- package/lib/utils/skipToContentUtils.d.ts.map +1 -0
- package/lib/utils/skipToContentUtils.js +75 -0
- package/lib/utils/skipToContentUtils.js.map +1 -0
- package/lib/utils/storageUtils.d.ts +36 -0
- package/lib/utils/storageUtils.d.ts.map +1 -0
- package/lib/utils/storageUtils.js +193 -0
- package/lib/utils/storageUtils.js.map +1 -0
- package/lib/utils/tabsUtils.d.ts +55 -0
- package/lib/utils/tabsUtils.d.ts.map +1 -0
- package/lib/utils/tabsUtils.js +179 -0
- package/lib/utils/tabsUtils.js.map +1 -0
- package/lib/utils/tagsUtils.d.ts +20 -0
- package/lib/utils/tagsUtils.d.ts.map +1 -0
- package/lib/utils/tagsUtils.js +41 -0
- package/lib/utils/tagsUtils.js.map +1 -0
- package/lib/utils/titleFormatterUtils.d.ts +59 -0
- package/lib/utils/titleFormatterUtils.d.ts.map +1 -0
- package/lib/utils/titleFormatterUtils.js +49 -0
- package/lib/utils/titleFormatterUtils.js.map +1 -0
- package/lib/utils/tocUtils.d.ts +36 -0
- package/lib/utils/tocUtils.d.ts.map +1 -0
- package/lib/utils/tocUtils.js +84 -0
- package/lib/utils/tocUtils.js.map +1 -0
- package/lib/utils/useAlternatePageUtils.d.ts +32 -0
- package/lib/utils/useAlternatePageUtils.d.ts.map +1 -0
- package/lib/utils/useAlternatePageUtils.js +42 -0
- package/lib/utils/useAlternatePageUtils.js.map +1 -0
- package/lib/utils/useLocalPathname.d.ts +13 -0
- package/lib/utils/useLocalPathname.d.ts.map +1 -0
- package/lib/utils/useLocalPathname.js +19 -0
- package/lib/utils/useLocalPathname.js.map +1 -0
- package/lib/utils/useLocationChange.d.ts +17 -0
- package/lib/utils/useLocationChange.d.ts.map +1 -0
- package/lib/utils/useLocationChange.js +31 -0
- package/lib/utils/useLocationChange.js.map +1 -0
- package/lib/utils/usePluralForm.d.ts +21 -0
- package/lib/utils/usePluralForm.d.ts.map +1 -0
- package/lib/utils/usePluralForm.js +93 -0
- package/lib/utils/usePluralForm.js.map +1 -0
- package/lib/utils/useThemeConfig.d.ts +120 -0
- package/lib/utils/useThemeConfig.d.ts.map +1 -0
- package/lib/utils/useThemeConfig.js +14 -0
- package/lib/utils/useThemeConfig.js.map +1 -0
- package/package.json +58 -4
- package/src/components/Collapsible/index.tsx +250 -0
- package/src/components/Details/index.tsx +130 -0
- package/src/components/Details/styles.module.css +66 -0
- package/src/components/ThemedComponent/index.tsx +75 -0
- package/src/components/ThemedComponent/styles.module.css +26 -0
- package/src/contexts/announcementBar.tsx +117 -0
- package/src/contexts/colorMode.tsx +257 -0
- package/src/contexts/navbarMobileSidebar.tsx +119 -0
- package/src/contexts/navbarSecondaryMenu/content.tsx +100 -0
- package/src/contexts/navbarSecondaryMenu/display.tsx +102 -0
- package/src/hooks/useBackToTopButton.ts +73 -0
- package/src/hooks/useCodeWordWrap.ts +107 -0
- package/src/hooks/useHideableNavbar.ts +81 -0
- package/src/hooks/useLockBodyScroll.ts +21 -0
- package/src/hooks/useMutationObserver.ts +38 -0
- package/src/hooks/usePrismTheme.ts +24 -0
- package/src/hooks/useTOCHighlight.ts +189 -0
- package/src/hooks/useWindowSize.ts +67 -0
- package/src/index.ts +112 -0
- package/src/internal.ts +107 -0
- package/src/translations/blogTranslations.tsx +89 -0
- package/src/translations/contentVisibilityTranslations.tsx +51 -0
- package/src/translations/docsTranslations.tsx +28 -0
- package/src/types.d.ts +8 -0
- package/src/utils/IntlUtils.ts +27 -0
- package/src/utils/ThemeClassNames.ts +119 -0
- package/src/utils/accessibilityUtils.ts +10 -0
- package/src/utils/admonitionUtils.tsx +44 -0
- package/src/utils/anchorUtils.module.css +14 -0
- package/src/utils/anchorUtils.ts +31 -0
- package/src/utils/codeBlockUtils.tsx +494 -0
- package/src/utils/emojiUtils.ts +40 -0
- package/src/utils/errorBoundaryUtils.module.css +16 -0
- package/src/utils/errorBoundaryUtils.tsx +71 -0
- package/src/utils/footerUtils.ts +18 -0
- package/src/utils/historyUtils.ts +199 -0
- package/src/utils/jsUtils.ts +54 -0
- package/src/utils/metadataUtils.tsx +145 -0
- package/src/utils/navbarUtils.tsx +45 -0
- package/src/utils/reactUtils.tsx +120 -0
- package/src/utils/regexpUtils.ts +24 -0
- package/src/utils/routesUtils.ts +75 -0
- package/src/utils/scrollUtils.tsx +303 -0
- package/src/utils/searchUtils.ts +8 -0
- package/src/utils/skipToContentUtils.tsx +108 -0
- package/src/utils/storageUtils.ts +260 -0
- package/src/utils/tabsUtils.tsx +307 -0
- package/src/utils/tagsUtils.tsx +61 -0
- package/src/utils/titleFormatterUtils.tsx +120 -0
- package/src/utils/tocUtils.ts +119 -0
- package/src/utils/useAlternatePageUtils.ts +80 -0
- package/src/utils/useLocalPathname.ts +22 -0
- package/src/utils/useLocationChange.ts +41 -0
- package/src/utils/usePluralForm.ts +131 -0
- package/src/utils/useThemeConfig.ts +147 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"colorMode.d.ts","sourceRoot":"","sources":["../../src/contexts/colorMode.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAc,EAMZ,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAOf,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;AAIzC,KAAK,eAAe,GAAG,SAAS,GAAG,IAAI,CAAC;AAyBxC,KAAK,YAAY,GAAG;IAClB,gCAAgC;IAChC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,uCAAuC;IACvC,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;IAC1C,0BAA0B;IAC1B,QAAQ,CAAC,YAAY,EAAE,CAAC,SAAS,EAAE,eAAe,KAAK,IAAI,CAAC;CAC7D,CAAC;AAqLF,wBAAgB,iBAAiB,CAAC,EAChC,QAAQ,GACT,EAAE;IACD,QAAQ,EAAE,SAAS,CAAC;CACrB,GAAG,SAAS,CAGZ;AAED,wBAAgB,YAAY,IAAI,YAAY,CAS3C"}
|
|
@@ -0,0 +1,163 @@
|
|
|
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
|
+
import React, { useState, useCallback, useEffect, useContext, useMemo, } from 'react';
|
|
8
|
+
import useIsBrowser from '@docusaurus/useIsBrowser';
|
|
9
|
+
import { ReactContextError } from '../utils/reactUtils';
|
|
10
|
+
import { createStorageSlot } from '../utils/storageUtils';
|
|
11
|
+
import { useThemeConfig } from '../utils/useThemeConfig';
|
|
12
|
+
function getSystemColorMode() {
|
|
13
|
+
return window.matchMedia('(prefers-color-scheme: dark)').matches
|
|
14
|
+
? 'dark'
|
|
15
|
+
: 'light';
|
|
16
|
+
}
|
|
17
|
+
function subscribeToMedia(query, listener) {
|
|
18
|
+
const mql = window.matchMedia(query);
|
|
19
|
+
mql.addEventListener('change', listener);
|
|
20
|
+
return () => mql.removeEventListener('change', listener);
|
|
21
|
+
}
|
|
22
|
+
function subscribeToSystemColorModeChange(onChange) {
|
|
23
|
+
return subscribeToMedia('(prefers-color-scheme: dark)', () => onChange(getSystemColorMode()));
|
|
24
|
+
}
|
|
25
|
+
const Context = React.createContext(undefined);
|
|
26
|
+
const ColorModeStorageKey = 'theme';
|
|
27
|
+
const ColorModeStorage = createStorageSlot(ColorModeStorageKey);
|
|
28
|
+
// We use data-theme-choice="system", not an absent attribute
|
|
29
|
+
// This is easier to handle for users with CSS
|
|
30
|
+
const SystemAttribute = 'system';
|
|
31
|
+
// Ensure to always return a valid colorMode even if input is invalid
|
|
32
|
+
const coerceToColorMode = (colorMode) => colorMode === 'dark' ? 'dark' : 'light';
|
|
33
|
+
const coerceToColorModeChoice = (colorMode) => colorMode === null || colorMode === SystemAttribute
|
|
34
|
+
? null
|
|
35
|
+
: coerceToColorMode(colorMode);
|
|
36
|
+
const ColorModeAttribute = {
|
|
37
|
+
get: () => {
|
|
38
|
+
return coerceToColorMode(document.documentElement.getAttribute('data-theme'));
|
|
39
|
+
},
|
|
40
|
+
set: (colorMode) => {
|
|
41
|
+
document.documentElement.setAttribute('data-theme', coerceToColorMode(colorMode));
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
const ColorModeChoiceAttribute = {
|
|
45
|
+
get: () => {
|
|
46
|
+
return coerceToColorModeChoice(document.documentElement.getAttribute('data-theme-choice'));
|
|
47
|
+
},
|
|
48
|
+
set: (colorMode) => {
|
|
49
|
+
document.documentElement.setAttribute('data-theme-choice', coerceToColorModeChoice(colorMode) ?? SystemAttribute);
|
|
50
|
+
},
|
|
51
|
+
};
|
|
52
|
+
const persistColorModeChoice = (newColorMode) => {
|
|
53
|
+
if (newColorMode === null) {
|
|
54
|
+
ColorModeStorage.del();
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
ColorModeStorage.set(coerceToColorMode(newColorMode));
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
// The color mode state is initialized in useEffect on purpose
|
|
61
|
+
// to avoid a React hydration mismatch errors
|
|
62
|
+
// The useColorMode() hook value lags behind on purpose
|
|
63
|
+
// This helps users avoid hydration mismatch errors in their code
|
|
64
|
+
// See also https://github.com/facebook/docusaurus/issues/7986
|
|
65
|
+
function useColorModeState() {
|
|
66
|
+
const { colorMode: { defaultMode }, } = useThemeConfig();
|
|
67
|
+
const isBrowser = useIsBrowser();
|
|
68
|
+
// Since the provider may unmount/remount on client navigation, we need to
|
|
69
|
+
// reinitialize the state with the correct values to avoid visual glitches.
|
|
70
|
+
// See also https://github.com/facebook/docusaurus/issues/11399#issuecomment-3279181314
|
|
71
|
+
const [colorMode, setColorModeState] = useState(isBrowser ? ColorModeAttribute.get() : defaultMode);
|
|
72
|
+
const [colorModeChoice, setColorModeChoiceState] = useState(isBrowser ? ColorModeChoiceAttribute.get() : null);
|
|
73
|
+
useEffect(() => {
|
|
74
|
+
setColorModeState(ColorModeAttribute.get());
|
|
75
|
+
setColorModeChoiceState(ColorModeChoiceAttribute.get());
|
|
76
|
+
}, []);
|
|
77
|
+
return {
|
|
78
|
+
colorMode,
|
|
79
|
+
setColorModeState,
|
|
80
|
+
colorModeChoice,
|
|
81
|
+
setColorModeChoiceState,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
function useContextValue() {
|
|
85
|
+
const { colorMode: { defaultMode, disableSwitch, respectPrefersColorScheme }, } = useThemeConfig();
|
|
86
|
+
const { colorMode, setColorModeState, colorModeChoice, setColorModeChoiceState, } = useColorModeState();
|
|
87
|
+
useEffect(() => {
|
|
88
|
+
// A site is deployed without disableSwitch
|
|
89
|
+
// => User visits the site and has a persisted value
|
|
90
|
+
// => Site later enabled disableSwitch
|
|
91
|
+
// => Clear the previously stored value to apply the site's setting
|
|
92
|
+
if (disableSwitch) {
|
|
93
|
+
ColorModeStorage.del();
|
|
94
|
+
}
|
|
95
|
+
}, [disableSwitch]);
|
|
96
|
+
const setColorMode = useCallback((newColorModeChoice, options = {}) => {
|
|
97
|
+
const { persist = true } = options;
|
|
98
|
+
// Reset to system/default color mode
|
|
99
|
+
if (newColorModeChoice === null) {
|
|
100
|
+
// Set the effective color
|
|
101
|
+
const newColorMode = respectPrefersColorScheme
|
|
102
|
+
? getSystemColorMode()
|
|
103
|
+
: defaultMode;
|
|
104
|
+
ColorModeAttribute.set(newColorMode);
|
|
105
|
+
setColorModeState(newColorMode);
|
|
106
|
+
// Set the chosen color
|
|
107
|
+
ColorModeChoiceAttribute.set(null);
|
|
108
|
+
setColorModeChoiceState(null);
|
|
109
|
+
}
|
|
110
|
+
// Happy case, when an explicit color is provided
|
|
111
|
+
else {
|
|
112
|
+
ColorModeAttribute.set(newColorModeChoice);
|
|
113
|
+
ColorModeChoiceAttribute.set(newColorModeChoice);
|
|
114
|
+
setColorModeState(newColorModeChoice);
|
|
115
|
+
setColorModeChoiceState(newColorModeChoice);
|
|
116
|
+
}
|
|
117
|
+
if (persist) {
|
|
118
|
+
persistColorModeChoice(newColorModeChoice);
|
|
119
|
+
}
|
|
120
|
+
}, [
|
|
121
|
+
setColorModeState,
|
|
122
|
+
setColorModeChoiceState,
|
|
123
|
+
respectPrefersColorScheme,
|
|
124
|
+
defaultMode,
|
|
125
|
+
]);
|
|
126
|
+
// Synchronize theme color/choice mode with browser storage
|
|
127
|
+
useEffect(() => {
|
|
128
|
+
return ColorModeStorage.listen((e) => {
|
|
129
|
+
setColorMode(coerceToColorModeChoice(e.newValue));
|
|
130
|
+
});
|
|
131
|
+
}, [setColorMode]);
|
|
132
|
+
// Synchronize theme color with system color
|
|
133
|
+
useEffect(() => {
|
|
134
|
+
if (colorModeChoice !== null || !respectPrefersColorScheme) {
|
|
135
|
+
return undefined;
|
|
136
|
+
}
|
|
137
|
+
return subscribeToSystemColorModeChange((newSystemColorMode) => {
|
|
138
|
+
// Note: we don't use "setColorMode" on purpose
|
|
139
|
+
// The system changes should never be considered an explicit theme choice
|
|
140
|
+
// They only affect the "effective" color, and should never be persisted
|
|
141
|
+
// Note: this listener also fire when printing, see https://github.com/facebook/docusaurus/pull/6490
|
|
142
|
+
setColorModeState(newSystemColorMode);
|
|
143
|
+
ColorModeAttribute.set(newSystemColorMode);
|
|
144
|
+
});
|
|
145
|
+
}, [respectPrefersColorScheme, colorModeChoice, setColorModeState]);
|
|
146
|
+
return useMemo(() => ({
|
|
147
|
+
colorMode,
|
|
148
|
+
colorModeChoice,
|
|
149
|
+
setColorMode,
|
|
150
|
+
}), [colorMode, colorModeChoice, setColorMode]);
|
|
151
|
+
}
|
|
152
|
+
export function ColorModeProvider({ children, }) {
|
|
153
|
+
const value = useContextValue();
|
|
154
|
+
return <Context value={value}>{children}</Context>;
|
|
155
|
+
}
|
|
156
|
+
export function useColorMode() {
|
|
157
|
+
const context = useContext(Context);
|
|
158
|
+
if (context == null) {
|
|
159
|
+
throw new ReactContextError('ColorModeProvider', 'Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.');
|
|
160
|
+
}
|
|
161
|
+
return context;
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=colorMode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"colorMode.js","sourceRoot":"","sources":["../../src/contexts/colorMode.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,EACZ,QAAQ,EACR,WAAW,EACX,SAAS,EACT,UAAU,EACV,OAAO,GAER,MAAM,OAAO,CAAC;AACf,OAAO,YAAY,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAC,iBAAiB,EAAC,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAC,iBAAiB,EAAC,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAC,cAAc,EAAC,MAAM,yBAAyB,CAAC;AASvD,SAAS,kBAAkB;IACzB,OAAO,MAAM,CAAC,UAAU,CAAC,8BAA8B,CAAC,CAAC,OAAO;QAC9D,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,OAAO,CAAC;AACd,CAAC;AAED,SAAS,gBAAgB,CACvB,KAAa,EACb,QAA8C;IAE9C,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACrC,GAAG,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACzC,OAAO,GAAG,EAAE,CAAC,GAAG,CAAC,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,gCAAgC,CACvC,QAAiD;IAEjD,OAAO,gBAAgB,CAAC,8BAA8B,EAAE,GAAG,EAAE,CAC3D,QAAQ,CAAC,kBAAkB,EAAE,CAAC,CAC/B,CAAC;AACJ,CAAC;AAWD,MAAM,OAAO,GAAG,KAAK,CAAC,aAAa,CAA2B,SAAS,CAAC,CAAC;AAEzE,MAAM,mBAAmB,GAAG,OAAO,CAAC;AACpC,MAAM,gBAAgB,GAAG,iBAAiB,CAAC,mBAAmB,CAAC,CAAC;AAEhE,6DAA6D;AAC7D,8CAA8C;AAC9C,MAAM,eAAe,GAAG,QAAQ,CAAC;AAEjC,qEAAqE;AACrE,MAAM,iBAAiB,GAAG,CAAC,SAAwB,EAAa,EAAE,CAChE,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;AAC1C,MAAM,uBAAuB,GAAG,CAAC,SAAwB,EAAmB,EAAE,CAC5E,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,eAAe;IACjD,CAAC,CAAC,IAAI;IACN,CAAC,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;AAEnC,MAAM,kBAAkB,GAAG;IACzB,GAAG,EAAE,GAAG,EAAE;QACR,OAAO,iBAAiB,CACtB,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC,YAAY,CAAC,CACpD,CAAC;IACJ,CAAC;IACD,GAAG,EAAE,CAAC,SAAoB,EAAE,EAAE;QAC5B,QAAQ,CAAC,eAAe,CAAC,YAAY,CACnC,YAAY,EACZ,iBAAiB,CAAC,SAAS,CAAC,CAC7B,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,MAAM,wBAAwB,GAAG;IAC/B,GAAG,EAAE,GAAG,EAAE;QACR,OAAO,uBAAuB,CAC5B,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAC3D,CAAC;IACJ,CAAC;IACD,GAAG,EAAE,CAAC,SAA0B,EAAE,EAAE;QAClC,QAAQ,CAAC,eAAe,CAAC,YAAY,CACnC,mBAAmB,EACnB,uBAAuB,CAAC,SAAS,CAAC,IAAI,eAAe,CACtD,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,MAAM,sBAAsB,GAAG,CAAC,YAA6B,EAAE,EAAE;IAC/D,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;QAC1B,gBAAgB,CAAC,GAAG,EAAE,CAAC;IACzB,CAAC;SAAM,CAAC;QACN,gBAAgB,CAAC,GAAG,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC,CAAC;IACxD,CAAC;AACH,CAAC,CAAC;AAEF,8DAA8D;AAC9D,6CAA6C;AAC7C,uDAAuD;AACvD,iEAAiE;AACjE,8DAA8D;AAC9D,SAAS,iBAAiB;IACxB,MAAM,EACJ,SAAS,EAAE,EAAC,WAAW,EAAC,GACzB,GAAG,cAAc,EAAE,CAAC;IACrB,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IAEjC,0EAA0E;IAC1E,2EAA2E;IAC3E,uFAAuF;IACvF,MAAM,CAAC,SAAS,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAC7C,SAAS,CAAC,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,WAAW,CACnD,CAAC;IACF,MAAM,CAAC,eAAe,EAAE,uBAAuB,CAAC,GAAG,QAAQ,CACzD,SAAS,CAAC,CAAC,CAAC,wBAAwB,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAClD,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE;QACb,iBAAiB,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,CAAC;QAC5C,uBAAuB,CAAC,wBAAwB,CAAC,GAAG,EAAE,CAAC,CAAC;IAC1D,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO;QACL,SAAS;QACT,iBAAiB;QACjB,eAAe;QACf,uBAAuB;KACf,CAAC;AACb,CAAC;AAED,SAAS,eAAe;IACtB,MAAM,EACJ,SAAS,EAAE,EAAC,WAAW,EAAE,aAAa,EAAE,yBAAyB,EAAC,GACnE,GAAG,cAAc,EAAE,CAAC;IACrB,MAAM,EACJ,SAAS,EACT,iBAAiB,EACjB,eAAe,EACf,uBAAuB,GACxB,GAAG,iBAAiB,EAAE,CAAC;IAExB,SAAS,CAAC,GAAG,EAAE;QACb,2CAA2C;QAC3C,oDAAoD;QACpD,sCAAsC;QACtC,mEAAmE;QACnE,IAAI,aAAa,EAAE,CAAC;YAClB,gBAAgB,CAAC,GAAG,EAAE,CAAC;QACzB,CAAC;IACH,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;IAEpB,MAAM,YAAY,GAAG,WAAW,CAC9B,CACE,kBAAmC,EACnC,OAAO,GAAwB,EAAE,EACjC,EAAE;QACF,MAAM,EAAC,OAAO,GAAG,IAAI,EAAC,GAAG,OAAO,CAAC;QAEjC,qCAAqC;QACrC,IAAI,kBAAkB,KAAK,IAAI,EAAE,CAAC;YAChC,0BAA0B;YAC1B,MAAM,YAAY,GAAG,yBAAyB;gBAC5C,CAAC,CAAC,kBAAkB,EAAE;gBACtB,CAAC,CAAC,WAAW,CAAC;YAChB,kBAAkB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YACrC,iBAAiB,CAAC,YAAY,CAAC,CAAC;YAChC,uBAAuB;YACvB,wBAAwB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACnC,uBAAuB,CAAC,IAAI,CAAC,CAAC;QAChC,CAAC;QACD,iDAAiD;aAC5C,CAAC;YACJ,kBAAkB,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;YAC3C,wBAAwB,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;YACjD,iBAAiB,CAAC,kBAAkB,CAAC,CAAC;YACtC,uBAAuB,CAAC,kBAAkB,CAAC,CAAC;QAC9C,CAAC;QAED,IAAI,OAAO,EAAE,CAAC;YACZ,sBAAsB,CAAC,kBAAkB,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC,EACD;QACE,iBAAiB;QACjB,uBAAuB;QACvB,yBAAyB;QACzB,WAAW;KACZ,CACF,CAAC;IAEF,2DAA2D;IAC3D,SAAS,CAAC,GAAG,EAAE;QACb,OAAO,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;YACnC,YAAY,CAAC,uBAAuB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IAEnB,4CAA4C;IAC5C,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,eAAe,KAAK,IAAI,IAAI,CAAC,yBAAyB,EAAE,CAAC;YAC3D,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,gCAAgC,CAAC,CAAC,kBAAkB,EAAE,EAAE;YAC7D,+CAA+C;YAC/C,yEAAyE;YACzE,wEAAwE;YACxE,oGAAoG;YACpG,iBAAiB,CAAC,kBAAkB,CAAC,CAAC;YACtC,kBAAkB,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,yBAAyB,EAAE,eAAe,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAEpE,OAAO,OAAO,CACZ,GAAG,EAAE,CAAC,CAAC;QACL,SAAS;QACT,eAAe;QACf,YAAY;KACb,CAAC,EACF,CAAC,SAAS,EAAE,eAAe,EAAE,YAAY,CAAC,CAC3C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,EAChC,QAAQ,GAGT;IACC,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;IAChC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;IACpC,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;QACpB,MAAM,IAAI,iBAAiB,CACzB,mBAAmB,EACnB,gFAAgF,CACjF,CAAC;IACJ,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
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
|
+
import { type ReactNode } from 'react';
|
|
8
|
+
type ContextValue = {
|
|
9
|
+
/**
|
|
10
|
+
* Mobile sidebar should be disabled in case it's empty, i.e. no secondary
|
|
11
|
+
* menu + no navbar items). If disabled, the toggle button should not be
|
|
12
|
+
* displayed at all.
|
|
13
|
+
*/
|
|
14
|
+
disabled: boolean;
|
|
15
|
+
/**
|
|
16
|
+
* Signals whether the actual sidebar should be displayed (contrary to
|
|
17
|
+
* `disabled` which is about the toggle button). Sidebar should not visible
|
|
18
|
+
* until user interaction to avoid SSR rendering.
|
|
19
|
+
*/
|
|
20
|
+
shouldRender: boolean;
|
|
21
|
+
/** The displayed state. Can be toggled with the `toggle` callback. */
|
|
22
|
+
shown: boolean;
|
|
23
|
+
/** Toggle the `shown` attribute. */
|
|
24
|
+
toggle: () => void;
|
|
25
|
+
};
|
|
26
|
+
export declare function NavbarMobileSidebarProvider({ children, }: {
|
|
27
|
+
children: ReactNode;
|
|
28
|
+
}): ReactNode;
|
|
29
|
+
export declare function useNavbarMobileSidebar(): ContextValue;
|
|
30
|
+
export {};
|
|
31
|
+
//# sourceMappingURL=navbarMobileSidebar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"navbarMobileSidebar.d.ts","sourceRoot":"","sources":["../../src/contexts/navbarMobileSidebar.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAc,EAKZ,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAOf,KAAK,YAAY,GAAG;IAClB;;;;OAIG;IACH,QAAQ,EAAE,OAAO,CAAC;IAClB;;;;OAIG;IACH,YAAY,EAAE,OAAO,CAAC;IACtB,sEAAsE;IACtE,KAAK,EAAE,OAAO,CAAC;IACf,oCAAoC;IACpC,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB,CAAC;AA6CF,wBAAgB,2BAA2B,CAAC,EAC1C,QAAQ,GACT,EAAE;IACD,QAAQ,EAAE,SAAS,CAAC;CACrB,GAAG,SAAS,CAwBZ;AAED,wBAAgB,sBAAsB,IAAI,YAAY,CAMrD"}
|
|
@@ -0,0 +1,65 @@
|
|
|
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
|
+
import React, { useCallback, useEffect, useState, useMemo, } from 'react';
|
|
8
|
+
import { useNavbarSecondaryMenuContent } from './navbarSecondaryMenu/content';
|
|
9
|
+
import { useWindowSize } from '../hooks/useWindowSize';
|
|
10
|
+
import { useHistoryPopHandler } from '../utils/historyUtils';
|
|
11
|
+
import { useThemeConfig } from '../utils/useThemeConfig';
|
|
12
|
+
import { ReactContextError } from '../utils/reactUtils';
|
|
13
|
+
const Context = React.createContext(undefined);
|
|
14
|
+
function useIsNavbarMobileSidebarDisabled() {
|
|
15
|
+
const secondaryMenuContent = useNavbarSecondaryMenuContent();
|
|
16
|
+
const { items } = useThemeConfig().navbar;
|
|
17
|
+
return items.length === 0 && !secondaryMenuContent.component;
|
|
18
|
+
}
|
|
19
|
+
function useContextValue() {
|
|
20
|
+
const disabled = useIsNavbarMobileSidebarDisabled();
|
|
21
|
+
const windowSize = useWindowSize();
|
|
22
|
+
const shouldRender = !disabled && windowSize === 'mobile';
|
|
23
|
+
const [shown, setShown] = useState(false);
|
|
24
|
+
const toggle = useCallback(() => {
|
|
25
|
+
setShown((s) => !s);
|
|
26
|
+
}, []);
|
|
27
|
+
useEffect(() => {
|
|
28
|
+
if (windowSize === 'desktop') {
|
|
29
|
+
setShown(false);
|
|
30
|
+
}
|
|
31
|
+
}, [windowSize]);
|
|
32
|
+
return useMemo(() => ({ disabled, shouldRender, toggle, shown }), [disabled, shouldRender, toggle, shown]);
|
|
33
|
+
}
|
|
34
|
+
// A component hook wrapper enables conditional rendering
|
|
35
|
+
// See reason here: https://github.com/facebook/docusaurus/issues/10988
|
|
36
|
+
function OnHistoryPop({ handler, }) {
|
|
37
|
+
useHistoryPopHandler(handler);
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
export function NavbarMobileSidebarProvider({ children, }) {
|
|
41
|
+
const value = useContextValue();
|
|
42
|
+
return (<>
|
|
43
|
+
{
|
|
44
|
+
// Close mobile sidebar on navigation pop
|
|
45
|
+
// Most likely firing when using the Android back button (but not only)
|
|
46
|
+
// Important: we can only have a single history blocker at a time
|
|
47
|
+
// That's why this needs to be rendered conditionally
|
|
48
|
+
// See bug report https://github.com/facebook/docusaurus/issues/10988
|
|
49
|
+
value.shown && (<OnHistoryPop handler={() => {
|
|
50
|
+
value.toggle();
|
|
51
|
+
// Prevent pop navigation; seems desirable enough
|
|
52
|
+
// See https://github.com/facebook/docusaurus/pull/5462#issuecomment-911699846
|
|
53
|
+
return false;
|
|
54
|
+
}}/>)}
|
|
55
|
+
<Context value={value}>{children}</Context>
|
|
56
|
+
</>);
|
|
57
|
+
}
|
|
58
|
+
export function useNavbarMobileSidebar() {
|
|
59
|
+
const context = React.useContext(Context);
|
|
60
|
+
if (context === undefined) {
|
|
61
|
+
throw new ReactContextError('NavbarMobileSidebarProvider');
|
|
62
|
+
}
|
|
63
|
+
return context;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=navbarMobileSidebar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"navbarMobileSidebar.js","sourceRoot":"","sources":["../../src/contexts/navbarMobileSidebar.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
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
|
+
import { type ReactNode, type ComponentType } from 'react';
|
|
8
|
+
export type NavbarSecondaryMenuComponent<Props> = ComponentType<Props>;
|
|
9
|
+
/** @internal */
|
|
10
|
+
export type Content = {
|
|
11
|
+
component: NavbarSecondaryMenuComponent<object>;
|
|
12
|
+
props: object;
|
|
13
|
+
} | {
|
|
14
|
+
component: null;
|
|
15
|
+
props: null;
|
|
16
|
+
};
|
|
17
|
+
/** @internal */
|
|
18
|
+
export declare function NavbarSecondaryMenuContentProvider({ children, }: {
|
|
19
|
+
children: ReactNode;
|
|
20
|
+
}): ReactNode;
|
|
21
|
+
/** @internal */
|
|
22
|
+
export declare function useNavbarSecondaryMenuContent(): Content;
|
|
23
|
+
/**
|
|
24
|
+
* This component renders nothing by itself, but it fills the placeholder in the
|
|
25
|
+
* generic secondary menu layout. This reduces coupling between the main layout
|
|
26
|
+
* and the specific page.
|
|
27
|
+
*
|
|
28
|
+
* This kind of feature is often called portal/teleport/gateway/outlet...
|
|
29
|
+
* Various unmaintained React libs exist. Most up-to-date one:
|
|
30
|
+
* https://github.com/gregberge/react-teleporter
|
|
31
|
+
* Not sure any of those is safe regarding concurrent mode.
|
|
32
|
+
*/
|
|
33
|
+
export declare function NavbarSecondaryMenuFiller<P extends object>({ component, props, }: {
|
|
34
|
+
component: NavbarSecondaryMenuComponent<P>;
|
|
35
|
+
props: P;
|
|
36
|
+
}): ReactNode;
|
|
37
|
+
//# sourceMappingURL=content.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"content.d.ts","sourceRoot":"","sources":["../../../src/contexts/navbarSecondaryMenu/content.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAc,EAIZ,KAAK,SAAS,EACd,KAAK,aAAa,EACnB,MAAM,OAAO,CAAC;AAUf,MAAM,MAAM,4BAA4B,CAAC,KAAK,IAAI,aAAa,CAAC,KAAK,CAAC,CAAC;AAEvE,gBAAgB;AAChB,MAAM,MAAM,OAAO,GACf;IACE,SAAS,EAAE,4BAA4B,CAAC,MAAM,CAAC,CAAC;IAChD,KAAK,EAAE,MAAM,CAAC;CACf,GACD;IAAC,SAAS,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,IAAI,CAAA;CAAC,CAAC;AASnC,gBAAgB;AAChB,wBAAgB,kCAAkC,CAAC,EACjD,QAAQ,GACT,EAAE;IACD,QAAQ,EAAE,SAAS,CAAC;CACrB,GAAG,SAAS,CAMZ;AAED,gBAAgB;AAChB,wBAAgB,6BAA6B,IAAI,OAAO,CAMvD;AAED;;;;;;;;;GASG;AACH,wBAAgB,yBAAyB,CAAC,CAAC,SAAS,MAAM,EAAE,EAC1D,SAAS,EACT,KAAK,GACN,EAAE;IACD,SAAS,EAAE,4BAA4B,CAAC,CAAC,CAAC,CAAC;IAC3C,KAAK,EAAE,CAAC,CAAC;CACV,GAAG,SAAS,CAqBZ"}
|
|
@@ -0,0 +1,50 @@
|
|
|
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
|
+
import React, { useState, useContext, useEffect, } from 'react';
|
|
8
|
+
import { ReactContextError, useShallowMemoObject } from '../../utils/reactUtils';
|
|
9
|
+
const Context = React.createContext(null);
|
|
10
|
+
/** @internal */
|
|
11
|
+
export function NavbarSecondaryMenuContentProvider({ children, }) {
|
|
12
|
+
const value = useState({ component: null, props: null });
|
|
13
|
+
return (
|
|
14
|
+
// @ts-expect-error: this context is hard to type
|
|
15
|
+
<Context value={value}>{children}</Context>);
|
|
16
|
+
}
|
|
17
|
+
/** @internal */
|
|
18
|
+
export function useNavbarSecondaryMenuContent() {
|
|
19
|
+
const value = useContext(Context);
|
|
20
|
+
if (!value) {
|
|
21
|
+
throw new ReactContextError('NavbarSecondaryMenuContentProvider');
|
|
22
|
+
}
|
|
23
|
+
return value[0];
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* This component renders nothing by itself, but it fills the placeholder in the
|
|
27
|
+
* generic secondary menu layout. This reduces coupling between the main layout
|
|
28
|
+
* and the specific page.
|
|
29
|
+
*
|
|
30
|
+
* This kind of feature is often called portal/teleport/gateway/outlet...
|
|
31
|
+
* Various unmaintained React libs exist. Most up-to-date one:
|
|
32
|
+
* https://github.com/gregberge/react-teleporter
|
|
33
|
+
* Not sure any of those is safe regarding concurrent mode.
|
|
34
|
+
*/
|
|
35
|
+
export function NavbarSecondaryMenuFiller({ component, props, }) {
|
|
36
|
+
const context = useContext(Context);
|
|
37
|
+
if (!context) {
|
|
38
|
+
throw new ReactContextError('NavbarSecondaryMenuContentProvider');
|
|
39
|
+
}
|
|
40
|
+
const [, setContent] = context;
|
|
41
|
+
// To avoid useless context re-renders, props are memoized shallowly
|
|
42
|
+
const memoizedProps = useShallowMemoObject(props);
|
|
43
|
+
useEffect(() => {
|
|
44
|
+
// @ts-expect-error: this context is hard to type
|
|
45
|
+
setContent({ component, props: memoizedProps });
|
|
46
|
+
}, [setContent, component, memoizedProps]);
|
|
47
|
+
useEffect(() => () => setContent({ component: null, props: null }), [setContent]);
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=content.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"content.js","sourceRoot":"","sources":["../../../src/contexts/navbarSecondaryMenu/content.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,EACZ,QAAQ,EACR,UAAU,EACV,SAAS,GAGV,MAAM,OAAO,CAAC;AACf,OAAO,EAAC,iBAAiB,EAAE,oBAAoB,EAAC,MAAM,wBAAwB,CAAC;AAwB/E,MAAM,OAAO,GAAG,KAAK,CAAC,aAAa,CAAsB,IAAI,CAAC,CAAC;AAE/D,gBAAgB;AAChB,MAAM,UAAU,kCAAkC,CAAC,EACjD,QAAQ,GAGT;IACC,MAAM,KAAK,GAAG,QAAQ,CAAC,EAAC,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAC,CAAC,CAAC;IACvD,OAAO;IACL,iDAAiD;IACjD,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAC5C,CAAC;AACJ,CAAC;AAED,gBAAgB;AAChB,MAAM,UAAU,6BAA6B;IAC3C,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;IAClC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,iBAAiB,CAAC,oCAAoC,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,yBAAyB,CAAmB,EAC1D,SAAS,EACT,KAAK,GAIN;IACC,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;IACpC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,iBAAiB,CAAC,oCAAoC,CAAC,CAAC;IACpE,CAAC;IACD,MAAM,CAAC,EAAE,UAAU,CAAC,GAAG,OAAO,CAAC;IAE/B,oEAAoE;IACpE,MAAM,aAAa,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAElD,SAAS,CAAC,GAAG,EAAE;QACb,iDAAiD;QACjD,UAAU,CAAC,EAAC,SAAS,EAAE,KAAK,EAAE,aAAa,EAAC,CAAC,CAAC;IAChD,CAAC,EAAE,CAAC,UAAU,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;IAE3C,SAAS,CACP,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,EAAC,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAC,CAAC,EACtD,CAAC,UAAU,CAAC,CACb,CAAC;IAEF,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -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
|
+
import { type ReactNode } from 'react';
|
|
8
|
+
/** @internal */
|
|
9
|
+
export declare function NavbarSecondaryMenuDisplayProvider({ children, }: {
|
|
10
|
+
children: ReactNode;
|
|
11
|
+
}): ReactNode;
|
|
12
|
+
/** Wires the logic for rendering the mobile navbar secondary menu. */
|
|
13
|
+
export declare function useNavbarSecondaryMenu(): {
|
|
14
|
+
/** Whether secondary menu is displayed. */
|
|
15
|
+
shown: boolean;
|
|
16
|
+
/**
|
|
17
|
+
* Hide the secondary menu; fired either when hiding the entire sidebar, or
|
|
18
|
+
* when going back to the primary menu.
|
|
19
|
+
*/
|
|
20
|
+
hide: () => void;
|
|
21
|
+
/** The content returned from the current secondary menu filler. */
|
|
22
|
+
content: ReactNode;
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=display.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"display.d.ts","sourceRoot":"","sources":["../../../src/contexts/navbarSecondaryMenu/display.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAc,EAMZ,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AA6Cf,gBAAgB;AAChB,wBAAgB,kCAAkC,CAAC,EACjD,QAAQ,GACT,EAAE;IACD,QAAQ,EAAE,SAAS,CAAC;CACrB,GAAG,SAAS,CAGZ;AAUD,sEAAsE;AACtE,wBAAgB,sBAAsB,IAAI;IACxC,2CAA2C;IAC3C,KAAK,EAAE,OAAO,CAAC;IACf;;;OAGG;IACH,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,mEAAmE;IACnE,OAAO,EAAE,SAAS,CAAC;CACpB,CAaA"}
|
|
@@ -0,0 +1,62 @@
|
|
|
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
|
+
import React, { useState, useContext, useEffect, useMemo, useCallback, } from 'react';
|
|
8
|
+
import { ReactContextError, usePrevious } from '../../utils/reactUtils';
|
|
9
|
+
import { useNavbarMobileSidebar } from '../navbarMobileSidebar';
|
|
10
|
+
import { useNavbarSecondaryMenuContent } from './content';
|
|
11
|
+
const Context = React.createContext(null);
|
|
12
|
+
function useContextValue() {
|
|
13
|
+
const mobileSidebar = useNavbarMobileSidebar();
|
|
14
|
+
const content = useNavbarSecondaryMenuContent();
|
|
15
|
+
const [shown, setShown] = useState(false);
|
|
16
|
+
const hasContent = content.component !== null;
|
|
17
|
+
const previousHasContent = usePrevious(hasContent);
|
|
18
|
+
// When content is become available for the first time (set in useEffect)
|
|
19
|
+
// we set this content to be shown!
|
|
20
|
+
useEffect(() => {
|
|
21
|
+
const contentBecameAvailable = hasContent && !previousHasContent;
|
|
22
|
+
if (contentBecameAvailable) {
|
|
23
|
+
setShown(true);
|
|
24
|
+
}
|
|
25
|
+
}, [hasContent, previousHasContent]);
|
|
26
|
+
// On sidebar close, secondary menu is set to be shown on next re-opening
|
|
27
|
+
// (if any secondary menu content available)
|
|
28
|
+
useEffect(() => {
|
|
29
|
+
if (!hasContent) {
|
|
30
|
+
setShown(false);
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
if (!mobileSidebar.shown) {
|
|
34
|
+
setShown(true);
|
|
35
|
+
}
|
|
36
|
+
}, [mobileSidebar.shown, hasContent]);
|
|
37
|
+
return useMemo(() => [shown, setShown], [shown]);
|
|
38
|
+
}
|
|
39
|
+
/** @internal */
|
|
40
|
+
export function NavbarSecondaryMenuDisplayProvider({ children, }) {
|
|
41
|
+
const value = useContextValue();
|
|
42
|
+
return <Context value={value}>{children}</Context>;
|
|
43
|
+
}
|
|
44
|
+
function renderElement(content) {
|
|
45
|
+
if (content.component) {
|
|
46
|
+
const Comp = content.component;
|
|
47
|
+
return <Comp {...content.props}/>;
|
|
48
|
+
}
|
|
49
|
+
return undefined;
|
|
50
|
+
}
|
|
51
|
+
/** Wires the logic for rendering the mobile navbar secondary menu. */
|
|
52
|
+
export function useNavbarSecondaryMenu() {
|
|
53
|
+
const value = useContext(Context);
|
|
54
|
+
if (!value) {
|
|
55
|
+
throw new ReactContextError('NavbarSecondaryMenuDisplayProvider');
|
|
56
|
+
}
|
|
57
|
+
const [shown, setShown] = value;
|
|
58
|
+
const hide = useCallback(() => setShown(false), [setShown]);
|
|
59
|
+
const content = useNavbarSecondaryMenuContent();
|
|
60
|
+
return useMemo(() => ({ shown, hide, content: renderElement(content) }), [hide, content, shown]);
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=display.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"display.js","sourceRoot":"","sources":["../../../src/contexts/navbarSecondaryMenu/display.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,EACZ,QAAQ,EACR,UAAU,EACV,SAAS,EACT,OAAO,EACP,WAAW,GAEZ,MAAM,OAAO,CAAC;AACf,OAAO,EAAC,iBAAiB,EAAE,WAAW,EAAC,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAC,sBAAsB,EAAC,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAC,6BAA6B,EAAe,MAAM,WAAW,CAAC;AAOtE,MAAM,OAAO,GAAG,KAAK,CAAC,aAAa,CAAsB,IAAI,CAAC,CAAC;AAE/D,SAAS,eAAe;IACtB,MAAM,aAAa,GAAG,sBAAsB,EAAE,CAAC;IAC/C,MAAM,OAAO,GAAG,6BAA6B,EAAE,CAAC;IAEhD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAE1C,MAAM,UAAU,GAAG,OAAO,CAAC,SAAS,KAAK,IAAI,CAAC;IAC9C,MAAM,kBAAkB,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;IAEnD,yEAAyE;IACzE,mCAAmC;IACnC,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,sBAAsB,GAAG,UAAU,IAAI,CAAC,kBAAkB,CAAC;QACjE,IAAI,sBAAsB,EAAE,CAAC;YAC3B,QAAQ,CAAC,IAAI,CAAC,CAAC;QACjB,CAAC;IACH,CAAC,EAAE,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAErC,yEAAyE;IACzE,4CAA4C;IAC5C,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,QAAQ,CAAC,KAAK,CAAC,CAAC;YAChB,OAAO;QACT,CAAC;QACD,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;YACzB,QAAQ,CAAC,IAAI,CAAC,CAAC;QACjB,CAAC;IACH,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC;IAEtC,OAAO,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;AACnD,CAAC;AAED,gBAAgB;AAChB,MAAM,UAAU,kCAAkC,CAAC,EACjD,QAAQ,GAGT;IACC,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;IAChC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;AACrD,CAAC;AAED,SAAS,aAAa,CAAC,OAAgB;IACrC,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACtB,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC;QAC/B,OAAO,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,EAAG,CAAC;IACrC,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,sBAAsB;IAWpC,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;IAClC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,iBAAiB,CAAC,oCAAoC,CAAC,CAAC;IACpE,CAAC;IACD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC;IAChC,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC5D,MAAM,OAAO,GAAG,6BAA6B,EAAE,CAAC;IAEhD,OAAO,OAAO,CACZ,GAAG,EAAE,CAAC,CAAC,EAAC,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC,EAAC,CAAC,EACtD,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CACvB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
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
|
+
/** Wires the logic for the back to top button. */
|
|
8
|
+
export declare function useBackToTopButton({ threshold, }: {
|
|
9
|
+
/**
|
|
10
|
+
* The minimum vertical scroll position, above which a scroll-up would not
|
|
11
|
+
* cause `shown` to become `true`. This is because BTT is only useful if the
|
|
12
|
+
* user is far down the page.
|
|
13
|
+
*/
|
|
14
|
+
threshold: number;
|
|
15
|
+
}): {
|
|
16
|
+
/**
|
|
17
|
+
* Whether the button should be displayed. We only show if the user has
|
|
18
|
+
* scrolled up and is on a vertical position greater than `threshold`.
|
|
19
|
+
*/
|
|
20
|
+
shown: boolean;
|
|
21
|
+
/**
|
|
22
|
+
* A (memoized) handle for starting the scroll, which you can directly plug
|
|
23
|
+
* into the props.
|
|
24
|
+
*/
|
|
25
|
+
scrollToTop: () => void;
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=useBackToTopButton.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useBackToTopButton.d.ts","sourceRoot":"","sources":["../../src/hooks/useBackToTopButton.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,kDAAkD;AAClD,wBAAgB,kBAAkB,CAAC,EACjC,SAAS,GACV,EAAE;IACD;;;;OAIG;IACH,SAAS,EAAE,MAAM,CAAC;CACnB,GAAG;IACF;;;OAGG;IACH,KAAK,EAAE,OAAO,CAAC;IACf;;;OAGG;IACH,WAAW,EAAE,MAAM,IAAI,CAAC;CACzB,CAwCA"}
|
|
@@ -0,0 +1,50 @@
|
|
|
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
|
+
import { useRef, useState } from 'react';
|
|
8
|
+
import { useScrollPosition, useSmoothScrollTo } from '../utils/scrollUtils';
|
|
9
|
+
import { useLocationChange } from '../utils/useLocationChange';
|
|
10
|
+
/** Wires the logic for the back to top button. */
|
|
11
|
+
export function useBackToTopButton({ threshold, }) {
|
|
12
|
+
const [shown, setShown] = useState(false);
|
|
13
|
+
const isFocusedAnchor = useRef(false);
|
|
14
|
+
const { startScroll, cancelScroll } = useSmoothScrollTo();
|
|
15
|
+
useScrollPosition(({ scrollY: scrollTop }, lastPosition) => {
|
|
16
|
+
const lastScrollTop = lastPosition?.scrollY;
|
|
17
|
+
// Component is just being mounted. Not really a scroll event from the user.
|
|
18
|
+
// Ignore it.
|
|
19
|
+
if (!lastScrollTop) {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
if (isFocusedAnchor.current) {
|
|
23
|
+
// This scroll position change is triggered by navigating to an anchor.
|
|
24
|
+
// Ignore it.
|
|
25
|
+
isFocusedAnchor.current = false;
|
|
26
|
+
}
|
|
27
|
+
else if (scrollTop >= lastScrollTop) {
|
|
28
|
+
// The user has scrolled down to "fight against" the animation. Cancel any
|
|
29
|
+
// animation under progress.
|
|
30
|
+
cancelScroll();
|
|
31
|
+
setShown(false);
|
|
32
|
+
}
|
|
33
|
+
else if (scrollTop < threshold) {
|
|
34
|
+
// Scrolled to the minimum position; hide the button.
|
|
35
|
+
setShown(false);
|
|
36
|
+
}
|
|
37
|
+
else if (scrollTop + window.innerHeight <
|
|
38
|
+
document.documentElement.scrollHeight) {
|
|
39
|
+
setShown(true);
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
useLocationChange((locationChangeEvent) => {
|
|
43
|
+
if (locationChangeEvent.location.hash) {
|
|
44
|
+
isFocusedAnchor.current = true;
|
|
45
|
+
setShown(false);
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
return { shown, scrollToTop: () => startScroll(0) };
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=useBackToTopButton.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useBackToTopButton.js","sourceRoot":"","sources":["../../src/hooks/useBackToTopButton.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAC,MAAM,EAAE,QAAQ,EAAC,MAAM,OAAO,CAAC;AACvC,OAAO,EAAC,iBAAiB,EAAE,iBAAiB,EAAC,MAAM,sBAAsB,CAAC;AAC1E,OAAO,EAAC,iBAAiB,EAAC,MAAM,4BAA4B,CAAC;AAE7D,kDAAkD;AAClD,MAAM,UAAU,kBAAkB,CAAC,EACjC,SAAS,GAQV;IAYC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC1C,MAAM,eAAe,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACtC,MAAM,EAAC,WAAW,EAAE,YAAY,EAAC,GAAG,iBAAiB,EAAE,CAAC;IAExD,iBAAiB,CAAC,CAAC,EAAC,OAAO,EAAE,SAAS,EAAC,EAAE,YAAY,EAAE,EAAE;QACvD,MAAM,aAAa,GAAG,YAAY,EAAE,OAAO,CAAC;QAC5C,4EAA4E;QAC5E,aAAa;QACb,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,OAAO;QACT,CAAC;QACD,IAAI,eAAe,CAAC,OAAO,EAAE,CAAC;YAC5B,uEAAuE;YACvE,aAAa;YACb,eAAe,CAAC,OAAO,GAAG,KAAK,CAAC;QAClC,CAAC;aAAM,IAAI,SAAS,IAAI,aAAa,EAAE,CAAC;YACtC,0EAA0E;YAC1E,4BAA4B;YAC5B,YAAY,EAAE,CAAC;YACf,QAAQ,CAAC,KAAK,CAAC,CAAC;QAClB,CAAC;aAAM,IAAI,SAAS,GAAG,SAAS,EAAE,CAAC;YACjC,qDAAqD;YACrD,QAAQ,CAAC,KAAK,CAAC,CAAC;QAClB,CAAC;aAAM,IACL,SAAS,GAAG,MAAM,CAAC,WAAW;YAC9B,QAAQ,CAAC,eAAe,CAAC,YAAY,EACrC,CAAC;YACD,QAAQ,CAAC,IAAI,CAAC,CAAC;QACjB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,iBAAiB,CAAC,CAAC,mBAAmB,EAAE,EAAE;QACxC,IAAI,mBAAmB,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YACtC,eAAe,CAAC,OAAO,GAAG,IAAI,CAAC;YAC/B,QAAQ,CAAC,KAAK,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,EAAC,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,EAAC,CAAC;AACpD,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
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
|
+
import type { RefObject } from 'react';
|
|
8
|
+
export type WordWrap = {
|
|
9
|
+
readonly codeBlockRef: RefObject<HTMLPreElement | null>;
|
|
10
|
+
readonly isEnabled: boolean;
|
|
11
|
+
readonly isCodeScrollable: boolean;
|
|
12
|
+
readonly toggle: () => void;
|
|
13
|
+
};
|
|
14
|
+
export declare function useCodeWordWrap(): WordWrap;
|
|
15
|
+
//# sourceMappingURL=useCodeWordWrap.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useCodeWordWrap.d.ts","sourceRoot":"","sources":["../../src/hooks/useCodeWordWrap.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,OAAO,CAAC;AAgDrC,MAAM,MAAM,QAAQ,GAAG;IACrB,QAAQ,CAAC,YAAY,EAAE,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IACxD,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC;CAC7B,CAAC;AAEF,wBAAgB,eAAe,IAAI,QAAQ,CA6C1C"}
|