@docusaurus/theme-common 2.0.0-beta.15d451942 → 2.0.0-beta.16
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/lib/components/Collapsible/index.d.ts +36 -0
- package/lib/components/Collapsible/index.d.ts.map +1 -0
- package/lib/components/Collapsible/index.js +144 -0
- package/lib/components/Collapsible/index.js.map +1 -0
- package/lib/components/Details/index.d.ts +12 -0
- package/lib/components/Details/index.d.ts.map +1 -0
- package/lib/components/Details/index.js +66 -0
- package/lib/components/Details/index.js.map +1 -0
- package/lib/components/Details/styles.module.css +58 -0
- package/lib/{utils/useChangeRoute.d.ts → hooks/styles.css} +4 -1
- package/lib/hooks/useHideableNavbar.d.ts +13 -0
- package/lib/hooks/useHideableNavbar.d.ts.map +1 -0
- package/lib/hooks/useHideableNavbar.js +59 -0
- package/lib/hooks/useHideableNavbar.js.map +1 -0
- package/lib/hooks/useKeyboardNavigation.d.ts +10 -0
- package/lib/hooks/useKeyboardNavigation.d.ts.map +1 -0
- package/lib/hooks/useKeyboardNavigation.js +31 -0
- package/lib/hooks/useKeyboardNavigation.js.map +1 -0
- package/{src/utils/docsUtils.ts → lib/hooks/useLockBodyScroll.d.ts} +2 -5
- package/lib/hooks/useLockBodyScroll.d.ts.map +1 -0
- package/lib/hooks/useLockBodyScroll.js +16 -0
- package/lib/hooks/useLockBodyScroll.js.map +1 -0
- package/lib/hooks/usePrismTheme.d.ts +9 -0
- package/lib/hooks/usePrismTheme.d.ts.map +1 -0
- package/lib/hooks/usePrismTheme.js +18 -0
- package/lib/hooks/usePrismTheme.js.map +1 -0
- package/lib/hooks/useSearchPage.d.ts +14 -0
- package/lib/hooks/useSearchPage.d.ts.map +1 -0
- package/lib/hooks/useSearchPage.js +43 -0
- package/lib/hooks/useSearchPage.js.map +1 -0
- package/lib/hooks/useWindowSize.d.ts +15 -0
- package/lib/hooks/useWindowSize.d.ts.map +1 -0
- package/lib/hooks/useWindowSize.js +56 -0
- package/lib/hooks/useWindowSize.js.map +1 -0
- package/lib/index.d.ts +35 -4
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +29 -3
- package/lib/index.js.map +1 -0
- package/lib/utils/ThemeClassNames.d.ts +40 -12
- package/lib/utils/ThemeClassNames.d.ts.map +1 -0
- package/lib/utils/ThemeClassNames.js +41 -3
- package/lib/utils/ThemeClassNames.js.map +1 -0
- package/lib/utils/announcementBarUtils.d.ts +18 -0
- package/lib/utils/announcementBarUtils.d.ts.map +1 -0
- package/lib/utils/announcementBarUtils.js +71 -0
- package/lib/utils/announcementBarUtils.js.map +1 -0
- package/lib/utils/codeBlockUtils.d.ts +10 -0
- package/lib/utils/codeBlockUtils.d.ts.map +1 -0
- package/lib/utils/codeBlockUtils.js +125 -2
- package/lib/utils/codeBlockUtils.js.map +1 -0
- package/lib/utils/colorModeUtils.d.ts +18 -0
- package/lib/utils/colorModeUtils.d.ts.map +1 -0
- package/lib/utils/colorModeUtils.js +106 -0
- package/lib/utils/colorModeUtils.js.map +1 -0
- package/lib/utils/docSidebarItemsExpandedState.d.ts +17 -0
- package/lib/utils/docSidebarItemsExpandedState.d.ts.map +1 -0
- package/lib/utils/docSidebarItemsExpandedState.js +22 -0
- package/lib/utils/docSidebarItemsExpandedState.js.map +1 -0
- package/lib/utils/docsPreferredVersion/DocsPreferredVersionProvider.d.ts +3 -2
- package/lib/utils/docsPreferredVersion/DocsPreferredVersionProvider.d.ts.map +1 -0
- package/lib/utils/docsPreferredVersion/DocsPreferredVersionProvider.js +8 -11
- package/lib/utils/docsPreferredVersion/DocsPreferredVersionProvider.js.map +1 -0
- package/lib/utils/docsPreferredVersion/DocsPreferredVersionStorage.d.ts +2 -1
- package/lib/utils/docsPreferredVersion/DocsPreferredVersionStorage.d.ts.map +1 -0
- package/lib/utils/docsPreferredVersion/DocsPreferredVersionStorage.js +2 -3
- package/lib/utils/docsPreferredVersion/DocsPreferredVersionStorage.js.map +1 -0
- package/lib/utils/docsPreferredVersion/useDocsPreferredVersion.d.ts +12 -3
- package/lib/utils/docsPreferredVersion/useDocsPreferredVersion.d.ts.map +1 -0
- package/lib/utils/docsPreferredVersion/useDocsPreferredVersion.js +3 -3
- package/lib/utils/docsPreferredVersion/useDocsPreferredVersion.js.map +1 -0
- package/lib/utils/docsUtils.d.ts +26 -0
- package/lib/utils/docsUtils.d.ts.map +1 -0
- package/lib/utils/docsUtils.js +136 -1
- package/lib/utils/docsUtils.js.map +1 -0
- package/lib/utils/generalUtils.d.ts +7 -0
- package/lib/utils/generalUtils.d.ts.map +1 -0
- package/lib/utils/generalUtils.js +3 -2
- package/lib/utils/generalUtils.js.map +1 -0
- package/lib/utils/historyUtils.d.ts +23 -0
- package/lib/utils/historyUtils.d.ts.map +1 -0
- package/lib/utils/historyUtils.js +41 -0
- package/lib/utils/historyUtils.js.map +1 -0
- package/lib/utils/jsUtils.d.ts +23 -0
- package/lib/utils/jsUtils.d.ts.map +1 -0
- package/lib/utils/jsUtils.js +29 -0
- package/lib/utils/jsUtils.js.map +1 -0
- package/lib/utils/mobileSecondaryMenu.d.ts +21 -0
- package/lib/utils/mobileSecondaryMenu.d.ts.map +1 -0
- package/lib/utils/mobileSecondaryMenu.js +50 -0
- package/lib/utils/mobileSecondaryMenu.js.map +1 -0
- package/lib/utils/pathUtils.d.ts +1 -0
- package/lib/utils/pathUtils.d.ts.map +1 -0
- package/lib/utils/pathUtils.js +6 -2
- package/lib/utils/pathUtils.js.map +1 -0
- package/lib/utils/reactUtils.d.ts +28 -0
- package/lib/utils/reactUtils.d.ts.map +1 -0
- package/lib/utils/reactUtils.js +36 -0
- package/lib/utils/reactUtils.js.map +1 -0
- package/lib/utils/regexpUtils.d.ts +11 -0
- package/lib/utils/regexpUtils.d.ts.map +1 -0
- package/lib/utils/regexpUtils.js +17 -0
- package/lib/utils/regexpUtils.js.map +1 -0
- package/lib/utils/routesUtils.d.ts +11 -0
- package/lib/utils/routesUtils.d.ts.map +1 -0
- package/lib/utils/routesUtils.js +33 -0
- package/lib/utils/routesUtils.js.map +1 -0
- package/lib/utils/scrollUtils.d.ts +53 -0
- package/lib/utils/scrollUtils.d.ts.map +1 -0
- package/lib/utils/scrollUtils.js +136 -0
- package/lib/utils/scrollUtils.js.map +1 -0
- package/lib/utils/searchUtils.d.ts +1 -0
- package/lib/utils/searchUtils.d.ts.map +1 -0
- package/lib/utils/searchUtils.js +1 -0
- package/lib/utils/searchUtils.js.map +1 -0
- package/lib/utils/storageUtils.d.ts +5 -0
- package/lib/utils/storageUtils.d.ts.map +1 -0
- package/lib/utils/storageUtils.js +41 -16
- package/lib/utils/storageUtils.js.map +1 -0
- package/lib/utils/tabGroupChoiceUtils.d.ts +19 -0
- package/lib/utils/tabGroupChoiceUtils.d.ts.map +1 -0
- package/lib/utils/tabGroupChoiceUtils.js +54 -0
- package/lib/utils/tabGroupChoiceUtils.js.map +1 -0
- package/lib/utils/tagsUtils.d.ts +19 -0
- package/lib/utils/tagsUtils.d.ts.map +1 -0
- package/lib/utils/tagsUtils.js +34 -0
- package/lib/utils/tagsUtils.js.map +1 -0
- package/lib/utils/tocUtils.d.ts +20 -0
- package/lib/utils/tocUtils.d.ts.map +1 -0
- package/lib/utils/tocUtils.js +73 -0
- package/lib/utils/tocUtils.js.map +1 -0
- package/lib/utils/useAlternatePageUtils.d.ts +1 -0
- package/lib/utils/useAlternatePageUtils.d.ts.map +1 -0
- package/lib/utils/useAlternatePageUtils.js +3 -1
- package/lib/utils/useAlternatePageUtils.js.map +1 -0
- package/lib/utils/useContextualSearchFilters.d.ts +12 -0
- package/lib/utils/useContextualSearchFilters.d.ts.map +1 -0
- package/lib/utils/useContextualSearchFilters.js +37 -0
- package/lib/utils/useContextualSearchFilters.js.map +1 -0
- package/lib/utils/useLocalPathname.d.ts +8 -0
- package/lib/utils/useLocalPathname.d.ts.map +1 -0
- package/lib/utils/useLocalPathname.js +17 -0
- package/lib/utils/useLocalPathname.js.map +1 -0
- package/lib/utils/useLocationChange.d.ts +15 -0
- package/lib/utils/useLocationChange.d.ts.map +1 -0
- package/lib/utils/useLocationChange.js +27 -0
- package/lib/utils/useLocationChange.js.map +1 -0
- package/lib/utils/usePluralForm.d.ts +1 -0
- package/lib/utils/usePluralForm.d.ts.map +1 -0
- package/lib/utils/usePluralForm.js +29 -25
- package/lib/utils/usePluralForm.js.map +1 -0
- package/lib/utils/usePrevious.d.ts +8 -0
- package/lib/utils/usePrevious.d.ts.map +1 -0
- package/lib/utils/usePrevious.js +16 -0
- package/lib/utils/usePrevious.js.map +1 -0
- package/lib/utils/useTOCHighlight.d.ts +14 -0
- package/lib/utils/useTOCHighlight.d.ts.map +1 -0
- package/lib/utils/useTOCHighlight.js +128 -0
- package/lib/utils/useTOCHighlight.js.map +1 -0
- package/lib/utils/useThemeConfig.d.ts +36 -11
- package/lib/utils/useThemeConfig.d.ts.map +1 -0
- package/lib/utils/useThemeConfig.js +1 -0
- package/lib/utils/useThemeConfig.js.map +1 -0
- package/package.json +19 -13
- package/src/components/Collapsible/index.tsx +247 -0
- package/src/components/Details/index.tsx +102 -0
- package/src/components/Details/styles.module.css +58 -0
- package/src/hooks/styles.css +10 -0
- package/src/hooks/useHideableNavbar.ts +77 -0
- package/src/hooks/useKeyboardNavigation.ts +37 -0
- package/src/hooks/useLockBodyScroll.ts +18 -0
- package/src/hooks/usePrismTheme.ts +20 -0
- package/src/hooks/useSearchPage.ts +66 -0
- package/src/hooks/useWindowSize.ts +70 -0
- package/src/index.ts +102 -4
- package/src/types.d.ts +0 -2
- package/src/utils/ThemeClassNames.ts +46 -4
- package/src/utils/announcementBarUtils.tsx +121 -0
- package/src/utils/codeBlockUtils.ts +153 -2
- package/src/utils/colorModeUtils.tsx +156 -0
- package/src/utils/docSidebarItemsExpandedState.tsx +41 -0
- package/src/utils/docsPreferredVersion/DocsPreferredVersionProvider.tsx +16 -14
- package/src/utils/docsPreferredVersion/DocsPreferredVersionStorage.ts +3 -4
- package/src/utils/docsPreferredVersion/useDocsPreferredVersion.ts +18 -14
- package/src/utils/docsUtils.tsx +230 -0
- package/src/utils/generalUtils.ts +3 -2
- package/src/utils/historyUtils.ts +51 -0
- package/src/utils/jsUtils.ts +36 -0
- package/src/utils/mobileSecondaryMenu.tsx +115 -0
- package/src/utils/pathUtils.ts +6 -4
- package/src/utils/reactUtils.tsx +43 -0
- package/src/utils/regexpUtils.ts +23 -0
- package/src/utils/routesUtils.ts +39 -0
- package/src/utils/scrollUtils.tsx +237 -0
- package/src/utils/storageUtils.ts +40 -15
- package/src/utils/tabGroupChoiceUtils.tsx +90 -0
- package/src/utils/tagsUtils.ts +48 -0
- package/src/utils/tocUtils.ts +108 -0
- package/src/utils/useAlternatePageUtils.ts +13 -4
- package/src/utils/useContextualSearchFilters.ts +53 -0
- package/src/utils/useLocalPathname.ts +20 -0
- package/src/utils/useLocationChange.ts +39 -0
- package/src/utils/usePluralForm.ts +35 -28
- package/src/utils/usePrevious.ts +19 -0
- package/src/utils/useTOCHighlight.ts +183 -0
- package/src/utils/useThemeConfig.ts +38 -11
- package/lib/.tsbuildinfo +0 -4159
- package/lib/utils/useChangeRoute.js +0 -18
- package/src/utils/__tests__/codeBlockUtils.test.ts +0 -54
- package/src/utils/__tests__/pathUtils.test.ts +0 -32
- package/src/utils/useChangeRoute.ts +0 -21
- package/tsconfig.json +0 -10
|
@@ -0,0 +1,36 @@
|
|
|
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, { type Dispatch, type SetStateAction, type ReactNode } from 'react';
|
|
8
|
+
export declare type UseCollapsibleConfig = {
|
|
9
|
+
initialState: boolean | (() => boolean);
|
|
10
|
+
};
|
|
11
|
+
export declare type UseCollapsibleReturns = {
|
|
12
|
+
collapsed: boolean;
|
|
13
|
+
setCollapsed: Dispatch<SetStateAction<boolean>>;
|
|
14
|
+
toggleCollapsed: () => void;
|
|
15
|
+
};
|
|
16
|
+
export declare function useCollapsible({ initialState, }: UseCollapsibleConfig): UseCollapsibleReturns;
|
|
17
|
+
declare type CollapsibleAnimationConfig = {
|
|
18
|
+
duration?: number;
|
|
19
|
+
easing?: string;
|
|
20
|
+
};
|
|
21
|
+
declare type CollapsibleElementType = React.ElementType<Pick<React.HTMLAttributes<unknown>, 'className' | 'onTransitionEnd' | 'style'>>;
|
|
22
|
+
declare type CollapsibleBaseProps = {
|
|
23
|
+
as?: CollapsibleElementType;
|
|
24
|
+
collapsed: boolean;
|
|
25
|
+
children: ReactNode;
|
|
26
|
+
animation?: CollapsibleAnimationConfig;
|
|
27
|
+
onCollapseTransitionEnd?: (collapsed: boolean) => void;
|
|
28
|
+
className?: string;
|
|
29
|
+
disableSSRStyle?: boolean;
|
|
30
|
+
};
|
|
31
|
+
declare type CollapsibleProps = CollapsibleBaseProps & {
|
|
32
|
+
lazy: boolean;
|
|
33
|
+
};
|
|
34
|
+
export declare function Collapsible({ lazy, ...props }: CollapsibleProps): JSX.Element;
|
|
35
|
+
export {};
|
|
36
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Collapsible/index.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,EAMZ,KAAK,QAAQ,EACb,KAAK,cAAc,EACnB,KAAK,SAAS,EAEf,MAAM,OAAO,CAAC;AAIf,oBAAY,oBAAoB,GAAG;IACjC,YAAY,EAAE,OAAO,GAAG,CAAC,MAAM,OAAO,CAAC,CAAC;CACzC,CAAC;AAEF,oBAAY,qBAAqB,GAAG;IAClC,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;IAChD,eAAe,EAAE,MAAM,IAAI,CAAC;CAC7B,CAAC;AAGF,wBAAgB,cAAc,CAAC,EAC7B,YAAY,GACb,EAAE,oBAAoB,GAAG,qBAAqB,CAY9C;AAgCD,aAAK,0BAA0B,GAAG;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAoEF,aAAK,sBAAsB,GAAG,KAAK,CAAC,WAAW,CAC7C,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,iBAAiB,GAAG,OAAO,CAAC,CAC/E,CAAC;AAWF,aAAK,oBAAoB,GAAG;IAC1B,EAAE,CAAC,EAAE,sBAAsB,CAAC;IAC5B,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,0BAA0B,CAAC;IACvC,uBAAuB,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;IACvD,SAAS,CAAC,EAAE,MAAM,CAAC;IAKnB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;AA2DF,aAAK,gBAAgB,GAAG,oBAAoB,GAAG;IAM7C,IAAI,EAAE,OAAO,CAAC;CACf,CAAC;AAEF,wBAAgB,WAAW,CAAC,EAAC,IAAI,EAAE,GAAG,KAAK,EAAC,EAAE,gBAAgB,GAAG,GAAG,CAAC,OAAO,CAG3E"}
|
|
@@ -0,0 +1,144 @@
|
|
|
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 ExecutionEnvironment from '@docusaurus/ExecutionEnvironment';
|
|
8
|
+
import React, { useState, useEffect, useRef, useCallback, useLayoutEffect, } from 'react';
|
|
9
|
+
const DefaultAnimationEasing = 'ease-in-out';
|
|
10
|
+
// This hook just define the state
|
|
11
|
+
export function useCollapsible({ initialState, }) {
|
|
12
|
+
const [collapsed, setCollapsed] = useState(initialState !== null && initialState !== void 0 ? initialState : false);
|
|
13
|
+
const toggleCollapsed = useCallback(() => {
|
|
14
|
+
setCollapsed((expanded) => !expanded);
|
|
15
|
+
}, []);
|
|
16
|
+
return {
|
|
17
|
+
collapsed,
|
|
18
|
+
setCollapsed,
|
|
19
|
+
toggleCollapsed,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
const CollapsedStyles = {
|
|
23
|
+
display: 'none',
|
|
24
|
+
overflow: 'hidden',
|
|
25
|
+
height: '0px',
|
|
26
|
+
};
|
|
27
|
+
const ExpandedStyles = {
|
|
28
|
+
display: 'block',
|
|
29
|
+
overflow: 'visible',
|
|
30
|
+
height: 'auto',
|
|
31
|
+
};
|
|
32
|
+
function applyCollapsedStyle(el, collapsed) {
|
|
33
|
+
const collapsedStyles = collapsed ? CollapsedStyles : ExpandedStyles;
|
|
34
|
+
el.style.display = collapsedStyles.display;
|
|
35
|
+
el.style.overflow = collapsedStyles.overflow;
|
|
36
|
+
el.style.height = collapsedStyles.height;
|
|
37
|
+
}
|
|
38
|
+
/*
|
|
39
|
+
Lex111: Dynamic transition duration is used in Material design, this technique
|
|
40
|
+
is good for a large number of items.
|
|
41
|
+
https://material.io/archive/guidelines/motion/duration-easing.html#duration-easing-dynamic-durations
|
|
42
|
+
https://github.com/mui-org/material-ui/blob/e724d98eba018e55e1a684236a2037e24bcf050c/packages/material-ui/src/styles/createTransitions.js#L40-L43
|
|
43
|
+
*/
|
|
44
|
+
function getAutoHeightDuration(height) {
|
|
45
|
+
const constant = height / 36;
|
|
46
|
+
return Math.round((4 + 15 * constant ** 0.25 + constant / 5) * 10);
|
|
47
|
+
}
|
|
48
|
+
function useCollapseAnimation({ collapsibleRef, collapsed, animation, }) {
|
|
49
|
+
const mounted = useRef(false);
|
|
50
|
+
useEffect(() => {
|
|
51
|
+
const el = collapsibleRef.current;
|
|
52
|
+
function getTransitionStyles() {
|
|
53
|
+
var _a, _b;
|
|
54
|
+
const height = el.scrollHeight;
|
|
55
|
+
const duration = (_a = animation === null || animation === void 0 ? void 0 : animation.duration) !== null && _a !== void 0 ? _a : getAutoHeightDuration(height);
|
|
56
|
+
const easing = (_b = animation === null || animation === void 0 ? void 0 : animation.easing) !== null && _b !== void 0 ? _b : DefaultAnimationEasing;
|
|
57
|
+
return {
|
|
58
|
+
transition: `height ${duration}ms ${easing}`,
|
|
59
|
+
height: `${height}px`,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
function applyTransitionStyles() {
|
|
63
|
+
const transitionStyles = getTransitionStyles();
|
|
64
|
+
el.style.transition = transitionStyles.transition;
|
|
65
|
+
el.style.height = transitionStyles.height;
|
|
66
|
+
}
|
|
67
|
+
// On mount, we just apply styles, no animated transition
|
|
68
|
+
if (!mounted.current) {
|
|
69
|
+
applyCollapsedStyle(el, collapsed);
|
|
70
|
+
mounted.current = true;
|
|
71
|
+
return undefined;
|
|
72
|
+
}
|
|
73
|
+
el.style.willChange = 'height';
|
|
74
|
+
function startAnimation() {
|
|
75
|
+
const animationFrame = requestAnimationFrame(() => {
|
|
76
|
+
// When collapsing
|
|
77
|
+
if (collapsed) {
|
|
78
|
+
applyTransitionStyles();
|
|
79
|
+
requestAnimationFrame(() => {
|
|
80
|
+
el.style.height = CollapsedStyles.height;
|
|
81
|
+
el.style.overflow = CollapsedStyles.overflow;
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
// When expanding
|
|
85
|
+
else {
|
|
86
|
+
el.style.display = 'block';
|
|
87
|
+
requestAnimationFrame(() => {
|
|
88
|
+
applyTransitionStyles();
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
return () => cancelAnimationFrame(animationFrame);
|
|
93
|
+
}
|
|
94
|
+
return startAnimation();
|
|
95
|
+
}, [collapsibleRef, collapsed, animation]);
|
|
96
|
+
}
|
|
97
|
+
// Prevent hydration layout shift before animations are handled imperatively
|
|
98
|
+
// with JS
|
|
99
|
+
function getSSRStyle(collapsed) {
|
|
100
|
+
if (ExecutionEnvironment.canUseDOM) {
|
|
101
|
+
return undefined;
|
|
102
|
+
}
|
|
103
|
+
return collapsed ? CollapsedStyles : ExpandedStyles;
|
|
104
|
+
}
|
|
105
|
+
function CollapsibleBase({ as: As = 'div', collapsed, children, animation, onCollapseTransitionEnd, className, disableSSRStyle, }) {
|
|
106
|
+
// any because TS is a pain for HTML element refs, see https://twitter.com/sebastienlorber/status/1412784677795110914
|
|
107
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
108
|
+
const collapsibleRef = useRef(null);
|
|
109
|
+
useCollapseAnimation({ collapsibleRef, collapsed, animation });
|
|
110
|
+
return (React.createElement(As
|
|
111
|
+
// @ts-expect-error: the "too complicated type" is produced from
|
|
112
|
+
// "CollapsibleElementType" being a huge union
|
|
113
|
+
, {
|
|
114
|
+
// @ts-expect-error: the "too complicated type" is produced from
|
|
115
|
+
// "CollapsibleElementType" being a huge union
|
|
116
|
+
ref: collapsibleRef, style: disableSSRStyle ? undefined : getSSRStyle(collapsed), onTransitionEnd: (e) => {
|
|
117
|
+
if (e.propertyName !== 'height') {
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
applyCollapsedStyle(collapsibleRef.current, collapsed);
|
|
121
|
+
onCollapseTransitionEnd === null || onCollapseTransitionEnd === void 0 ? void 0 : onCollapseTransitionEnd(collapsed);
|
|
122
|
+
}, className: className }, children));
|
|
123
|
+
}
|
|
124
|
+
function CollapsibleLazy({ collapsed, ...props }) {
|
|
125
|
+
const [mounted, setMounted] = useState(!collapsed);
|
|
126
|
+
useLayoutEffect(() => {
|
|
127
|
+
if (!collapsed) {
|
|
128
|
+
setMounted(true);
|
|
129
|
+
}
|
|
130
|
+
}, [collapsed]);
|
|
131
|
+
// lazyCollapsed updated in effect so that first expansion transition can work
|
|
132
|
+
const [lazyCollapsed, setLazyCollapsed] = useState(collapsed);
|
|
133
|
+
useLayoutEffect(() => {
|
|
134
|
+
if (mounted) {
|
|
135
|
+
setLazyCollapsed(collapsed);
|
|
136
|
+
}
|
|
137
|
+
}, [mounted, collapsed]);
|
|
138
|
+
return mounted ? (React.createElement(CollapsibleBase, { ...props, collapsed: lazyCollapsed })) : null;
|
|
139
|
+
}
|
|
140
|
+
export function Collapsible({ lazy, ...props }) {
|
|
141
|
+
const Comp = lazy ? CollapsibleLazy : CollapsibleBase;
|
|
142
|
+
return React.createElement(Comp, { ...props });
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/Collapsible/index.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
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 ComponentProps, type ReactElement } from 'react';
|
|
8
|
+
export declare type DetailsProps = {
|
|
9
|
+
summary?: ReactElement;
|
|
10
|
+
} & ComponentProps<'details'>;
|
|
11
|
+
export default function Details({ summary, children, ...props }: DetailsProps): JSX.Element;
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Details/index.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAc,EACZ,KAAK,cAAc,EACnB,KAAK,YAAY,EAGlB,MAAM,OAAO,CAAC;AAoBf,oBAAY,YAAY,GAAG;IACzB,OAAO,CAAC,EAAE,YAAY,CAAC;CACxB,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;AAE9B,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,EAC9B,OAAO,EACP,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,YAAY,GAAG,GAAG,CAAC,OAAO,CA6D5B"}
|
|
@@ -0,0 +1,66 @@
|
|
|
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, { useRef, useState, } from 'react';
|
|
8
|
+
import useIsBrowser from '@docusaurus/useIsBrowser';
|
|
9
|
+
import clsx from 'clsx';
|
|
10
|
+
import { useCollapsible, Collapsible } from '../Collapsible';
|
|
11
|
+
import styles from './styles.module.css';
|
|
12
|
+
function isInSummary(node) {
|
|
13
|
+
if (!node) {
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
return node.tagName === 'SUMMARY' || isInSummary(node.parentElement);
|
|
17
|
+
}
|
|
18
|
+
function hasParent(node, parent) {
|
|
19
|
+
if (!node) {
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
return node === parent || hasParent(node.parentElement, parent);
|
|
23
|
+
}
|
|
24
|
+
export default function Details({ summary, children, ...props }) {
|
|
25
|
+
const isBrowser = useIsBrowser();
|
|
26
|
+
const detailsRef = useRef(null);
|
|
27
|
+
const { collapsed, setCollapsed } = useCollapsible({
|
|
28
|
+
initialState: !props.open,
|
|
29
|
+
});
|
|
30
|
+
// Use a separate prop because it must be set only after animation completes
|
|
31
|
+
// Otherwise close anim won't work
|
|
32
|
+
const [open, setOpen] = useState(props.open);
|
|
33
|
+
return (
|
|
34
|
+
// eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-noninteractive-element-interactions
|
|
35
|
+
React.createElement("details", { ...props, ref: detailsRef, open: open, "data-collapsed": collapsed, className: clsx(styles.details, { [styles.isBrowser]: isBrowser }, props.className), onMouseDown: (e) => {
|
|
36
|
+
const target = e.target;
|
|
37
|
+
// Prevent a double-click to highlight summary text
|
|
38
|
+
if (isInSummary(target) && e.detail > 1) {
|
|
39
|
+
e.preventDefault();
|
|
40
|
+
}
|
|
41
|
+
}, onClick: (e) => {
|
|
42
|
+
e.stopPropagation(); // For isolation of multiple nested details/summary
|
|
43
|
+
const target = e.target;
|
|
44
|
+
const shouldToggle = isInSummary(target) && hasParent(target, detailsRef.current);
|
|
45
|
+
if (!shouldToggle) {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
e.preventDefault();
|
|
49
|
+
if (collapsed) {
|
|
50
|
+
setCollapsed(false);
|
|
51
|
+
setOpen(true);
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
setCollapsed(true);
|
|
55
|
+
// setOpen(false); // Don't do this, it breaks close animation!
|
|
56
|
+
}
|
|
57
|
+
} },
|
|
58
|
+
summary,
|
|
59
|
+
React.createElement(Collapsible, { lazy: false, collapsed: collapsed, disableSSRStyle // Allows component to work fine even with JS disabled!
|
|
60
|
+
: true, onCollapseTransitionEnd: (newCollapsed) => {
|
|
61
|
+
setCollapsed(newCollapsed);
|
|
62
|
+
setOpen(!newCollapsed);
|
|
63
|
+
} },
|
|
64
|
+
React.createElement("div", { className: styles.collapsibleContent }, children))));
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/Details/index.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,EAGZ,MAAM,EACN,QAAQ,GACT,MAAM,OAAO,CAAC;AACf,OAAO,YAAY,MAAM,0BAA0B,CAAC;AACpD,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAC,cAAc,EAAE,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAC3D,OAAO,MAAM,MAAM,qBAAqB,CAAC;AAEzC,SAAS,WAAW,CAAC,IAAwB;IAC3C,IAAI,CAAC,IAAI,EAAE;QACT,OAAO,KAAK,CAAC;KACd;IACD,OAAO,IAAI,CAAC,OAAO,KAAK,SAAS,IAAI,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACvE,CAAC;AAED,SAAS,SAAS,CAAC,IAAwB,EAAE,MAAmB;IAC9D,IAAI,CAAC,IAAI,EAAE;QACT,OAAO,KAAK,CAAC;KACd;IACD,OAAO,IAAI,KAAK,MAAM,IAAI,SAAS,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;AAClE,CAAC;AAMD,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,EAC9B,OAAO,EACP,QAAQ,EACR,GAAG,KAAK,EACK;IACb,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IACjC,MAAM,UAAU,GAAG,MAAM,CAAqB,IAAI,CAAC,CAAC;IAEpD,MAAM,EAAC,SAAS,EAAE,YAAY,EAAC,GAAG,cAAc,CAAC;QAC/C,YAAY,EAAE,CAAC,KAAK,CAAC,IAAI;KAC1B,CAAC,CAAC;IACH,4EAA4E;IAC5E,kCAAkC;IAClC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAE7C,OAAO;IACL,kHAAkH;IAClH,oCACM,KAAK,EACT,GAAG,EAAE,UAAU,EACf,IAAI,EAAE,IAAI,oBACM,SAAS,EACzB,SAAS,EAAE,IAAI,CACb,MAAM,CAAC,OAAO,EACd,EAAC,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,SAAS,EAAC,EAC/B,KAAK,CAAC,SAAS,CAChB,EACD,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE;YACjB,MAAM,MAAM,GAAG,CAAC,CAAC,MAAqB,CAAC;YACvC,mDAAmD;YACnD,IAAI,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;gBACvC,CAAC,CAAC,cAAc,EAAE,CAAC;aACpB;QACH,CAAC,EACD,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;YACb,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,mDAAmD;YACxE,MAAM,MAAM,GAAG,CAAC,CAAC,MAAqB,CAAC;YACvC,MAAM,YAAY,GAChB,WAAW,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC,OAAQ,CAAC,CAAC;YAChE,IAAI,CAAC,YAAY,EAAE;gBACjB,OAAO;aACR;YACD,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,IAAI,SAAS,EAAE;gBACb,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpB,OAAO,CAAC,IAAI,CAAC,CAAC;aACf;iBAAM;gBACL,YAAY,CAAC,IAAI,CAAC,CAAC;gBACnB,+DAA+D;aAChE;QACH,CAAC;QACA,OAAO;QAER,oBAAC,WAAW,IACV,IAAI,EAAE,KAAK,EACX,SAAS,EAAE,SAAS,EACpB,eAAe,CAAC,uDAAuD;oBACvE,uBAAuB,EAAE,CAAC,YAAY,EAAE,EAAE;gBACxC,YAAY,CAAC,YAAY,CAAC,CAAC;gBAC3B,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC;YACzB,CAAC;YACD,6BAAK,SAAS,EAAE,MAAM,CAAC,kBAAkB,IAAG,QAAQ,CAAO,CAC/C,CACN,CACX,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
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
|
+
CSS variables, meant to be overridden by final theme
|
|
10
|
+
*/
|
|
11
|
+
.details {
|
|
12
|
+
--docusaurus-details-summary-arrow-size: 0.38rem;
|
|
13
|
+
--docusaurus-details-transition: transform 200ms ease;
|
|
14
|
+
--docusaurus-details-decoration-color: grey;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.details > summary {
|
|
18
|
+
position: relative;
|
|
19
|
+
cursor: pointer;
|
|
20
|
+
list-style: none;
|
|
21
|
+
padding-left: 1rem;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/* TODO: deprecation, need to remove this after Safari will support `::marker` */
|
|
25
|
+
.details > summary::-webkit-details-marker {
|
|
26
|
+
display: none;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.details > summary::before {
|
|
30
|
+
position: absolute;
|
|
31
|
+
top: 0.45rem;
|
|
32
|
+
left: 0;
|
|
33
|
+
|
|
34
|
+
/* CSS-only Arrow */
|
|
35
|
+
content: '';
|
|
36
|
+
border-width: var(--docusaurus-details-summary-arrow-size);
|
|
37
|
+
border-style: solid;
|
|
38
|
+
border-color: transparent transparent transparent
|
|
39
|
+
var(--docusaurus-details-decoration-color);
|
|
40
|
+
|
|
41
|
+
/* Arrow rotation anim */
|
|
42
|
+
transform: rotate(0deg);
|
|
43
|
+
transition: var(--docusaurus-details-transition);
|
|
44
|
+
transform-origin: calc(var(--docusaurus-details-summary-arrow-size) / 2) 50%;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/* When JS disabled/failed to load: we use the open property for arrow animation: */
|
|
48
|
+
.details[open]:not(.isBrowser) > summary::before,
|
|
49
|
+
/* When JS works: we use the data-attribute for arrow animation */
|
|
50
|
+
.details[data-collapsed='false'].isBrowser > summary::before {
|
|
51
|
+
transform: rotate(90deg);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
.collapsibleContent {
|
|
55
|
+
margin-top: 1rem;
|
|
56
|
+
border-top: 1px solid var(--docusaurus-details-decoration-color);
|
|
57
|
+
padding-top: 1rem;
|
|
58
|
+
}
|
|
@@ -4,4 +4,7 @@
|
|
|
4
4
|
* This source code is licensed under the MIT license found in the
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*/
|
|
7
|
-
|
|
7
|
+
|
|
8
|
+
body:not(.navigation-with-keyboard) *:not(input):focus {
|
|
9
|
+
outline: none;
|
|
10
|
+
}
|
|
@@ -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
|
+
declare type UseHideableNavbarReturns = {
|
|
8
|
+
readonly navbarRef: (node: HTMLElement | null) => void;
|
|
9
|
+
readonly isNavbarVisible: boolean;
|
|
10
|
+
};
|
|
11
|
+
export default function useHideableNavbar(hideOnScroll: boolean): UseHideableNavbarReturns;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=useHideableNavbar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useHideableNavbar.d.ts","sourceRoot":"","sources":["../../src/hooks/useHideableNavbar.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,aAAK,wBAAwB,GAAG;IAC9B,QAAQ,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAC;IACvD,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;CACnC,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,iBAAiB,CACvC,YAAY,EAAE,OAAO,GACpB,wBAAwB,CA0D1B"}
|
|
@@ -0,0 +1,59 @@
|
|
|
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 { useState, useCallback, useRef } from 'react';
|
|
8
|
+
import { useLocationChange } from '../utils/useLocationChange';
|
|
9
|
+
import { useScrollPosition } from '../utils/scrollUtils';
|
|
10
|
+
export default function useHideableNavbar(hideOnScroll) {
|
|
11
|
+
const [isNavbarVisible, setIsNavbarVisible] = useState(hideOnScroll);
|
|
12
|
+
const isFocusedAnchor = useRef(false);
|
|
13
|
+
const navbarHeight = useRef(0);
|
|
14
|
+
const navbarRef = useCallback((node) => {
|
|
15
|
+
if (node !== null) {
|
|
16
|
+
navbarHeight.current = node.getBoundingClientRect().height;
|
|
17
|
+
}
|
|
18
|
+
}, []);
|
|
19
|
+
useScrollPosition((currentPosition, lastPosition) => {
|
|
20
|
+
if (!hideOnScroll) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
const scrollTop = currentPosition.scrollY;
|
|
24
|
+
// It needed for mostly to handle rubber band scrolling
|
|
25
|
+
if (scrollTop < navbarHeight.current) {
|
|
26
|
+
setIsNavbarVisible(true);
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
if (isFocusedAnchor.current) {
|
|
30
|
+
isFocusedAnchor.current = false;
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
const lastScrollTop = lastPosition === null || lastPosition === void 0 ? void 0 : lastPosition.scrollY;
|
|
34
|
+
const documentHeight = document.documentElement.scrollHeight - navbarHeight.current;
|
|
35
|
+
const windowHeight = window.innerHeight;
|
|
36
|
+
if (lastScrollTop && scrollTop >= lastScrollTop) {
|
|
37
|
+
setIsNavbarVisible(false);
|
|
38
|
+
}
|
|
39
|
+
else if (scrollTop + windowHeight < documentHeight) {
|
|
40
|
+
setIsNavbarVisible(true);
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
useLocationChange((locationChangeEvent) => {
|
|
44
|
+
if (!hideOnScroll) {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
if (locationChangeEvent.location.hash) {
|
|
48
|
+
isFocusedAnchor.current = true;
|
|
49
|
+
setIsNavbarVisible(false);
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
setIsNavbarVisible(true);
|
|
53
|
+
});
|
|
54
|
+
return {
|
|
55
|
+
navbarRef,
|
|
56
|
+
isNavbarVisible,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=useHideableNavbar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useHideableNavbar.js","sourceRoot":"","sources":["../../src/hooks/useHideableNavbar.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAC,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAC,MAAM,OAAO,CAAC;AACpD,OAAO,EAAC,iBAAiB,EAAC,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAC,iBAAiB,EAAC,MAAM,sBAAsB,CAAC;AAOvD,MAAM,CAAC,OAAO,UAAU,iBAAiB,CACvC,YAAqB;IAErB,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC;IACrE,MAAM,eAAe,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACtC,MAAM,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAC/B,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,IAAwB,EAAE,EAAE;QACzD,IAAI,IAAI,KAAK,IAAI,EAAE;YACjB,YAAY,CAAC,OAAO,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC,MAAM,CAAC;SAC5D;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,iBAAiB,CAAC,CAAC,eAAe,EAAE,YAAY,EAAE,EAAE;QAClD,IAAI,CAAC,YAAY,EAAE;YACjB,OAAO;SACR;QAED,MAAM,SAAS,GAAG,eAAe,CAAC,OAAO,CAAC;QAE1C,uDAAuD;QACvD,IAAI,SAAS,GAAG,YAAY,CAAC,OAAO,EAAE;YACpC,kBAAkB,CAAC,IAAI,CAAC,CAAC;YACzB,OAAO;SACR;QAED,IAAI,eAAe,CAAC,OAAO,EAAE;YAC3B,eAAe,CAAC,OAAO,GAAG,KAAK,CAAC;YAChC,OAAO;SACR;QAED,MAAM,aAAa,GAAG,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,OAAO,CAAC;QAC5C,MAAM,cAAc,GAClB,QAAQ,CAAC,eAAe,CAAC,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC;QAC/D,MAAM,YAAY,GAAG,MAAM,CAAC,WAAW,CAAC;QAExC,IAAI,aAAa,IAAI,SAAS,IAAI,aAAa,EAAE;YAC/C,kBAAkB,CAAC,KAAK,CAAC,CAAC;SAC3B;aAAM,IAAI,SAAS,GAAG,YAAY,GAAG,cAAc,EAAE;YACpD,kBAAkB,CAAC,IAAI,CAAC,CAAC;SAC1B;IACH,CAAC,CAAC,CAAC;IAEH,iBAAiB,CAAC,CAAC,mBAAmB,EAAE,EAAE;QACxC,IAAI,CAAC,YAAY,EAAE;YACjB,OAAO;SACR;QAED,IAAI,mBAAmB,CAAC,QAAQ,CAAC,IAAI,EAAE;YACrC,eAAe,CAAC,OAAO,GAAG,IAAI,CAAC;YAC/B,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAC1B,OAAO;SACR;QAED,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,SAAS;QACT,eAAe;KAChB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
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 './styles.css';
|
|
8
|
+
export declare const keyboardFocusedClassName = "navigation-with-keyboard";
|
|
9
|
+
export default function useKeyboardNavigation(): void;
|
|
10
|
+
//# sourceMappingURL=useKeyboardNavigation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useKeyboardNavigation.d.ts","sourceRoot":"","sources":["../../src/hooks/useKeyboardNavigation.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,cAAc,CAAC;AAEtB,eAAO,MAAM,wBAAwB,6BAA6B,CAAC;AAInE,MAAM,CAAC,OAAO,UAAU,qBAAqB,IAAI,IAAI,CAqBpD"}
|
|
@@ -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 { useEffect } from 'react';
|
|
8
|
+
import './styles.css';
|
|
9
|
+
export const keyboardFocusedClassName = 'navigation-with-keyboard';
|
|
10
|
+
// This hook detect keyboard focus indicator to not show outline for mouse users
|
|
11
|
+
// Inspired by https://hackernoon.com/removing-that-ugly-focus-ring-and-keeping-it-too-6c8727fefcd2
|
|
12
|
+
export default function useKeyboardNavigation() {
|
|
13
|
+
useEffect(() => {
|
|
14
|
+
function handleOutlineStyles(e) {
|
|
15
|
+
if (e.type === 'keydown' && e.key === 'Tab') {
|
|
16
|
+
document.body.classList.add(keyboardFocusedClassName);
|
|
17
|
+
}
|
|
18
|
+
if (e.type === 'mousedown') {
|
|
19
|
+
document.body.classList.remove(keyboardFocusedClassName);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
document.addEventListener('keydown', handleOutlineStyles);
|
|
23
|
+
document.addEventListener('mousedown', handleOutlineStyles);
|
|
24
|
+
return () => {
|
|
25
|
+
document.body.classList.remove(keyboardFocusedClassName);
|
|
26
|
+
document.removeEventListener('keydown', handleOutlineStyles);
|
|
27
|
+
document.removeEventListener('mousedown', handleOutlineStyles);
|
|
28
|
+
};
|
|
29
|
+
}, []);
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=useKeyboardNavigation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useKeyboardNavigation.js","sourceRoot":"","sources":["../../src/hooks/useKeyboardNavigation.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAC,SAAS,EAAC,MAAM,OAAO,CAAC;AAEhC,OAAO,cAAc,CAAC;AAEtB,MAAM,CAAC,MAAM,wBAAwB,GAAG,0BAA0B,CAAC;AAEnE,gFAAgF;AAChF,mGAAmG;AACnG,MAAM,CAAC,OAAO,UAAU,qBAAqB;IAC3C,SAAS,CAAC,GAAG,EAAE;QACb,SAAS,mBAAmB,CAAC,CAA6B;YACxD,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,IAAK,CAAmB,CAAC,GAAG,KAAK,KAAK,EAAE;gBAC9D,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;aACvD;YAED,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,EAAE;gBAC1B,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC;aAC1D;QACH,CAAC;QAED,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;QAC1D,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,mBAAmB,CAAC,CAAC;QAE5D,OAAO,GAAG,EAAE;YACV,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC;YACzD,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;YAC7D,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,mBAAmB,CAAC,CAAC;QACjE,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;AACT,CAAC"}
|
|
@@ -4,8 +4,5 @@
|
|
|
4
4
|
* This source code is licensed under the MIT license found in the
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*/
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
// TODO not ideal, see also "useDocs"
|
|
11
|
-
export const isDocsPluginEnabled: boolean = !!useAllDocsData;
|
|
7
|
+
export default function useLockBodyScroll(lock?: boolean): void;
|
|
8
|
+
//# sourceMappingURL=useLockBodyScroll.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useLockBodyScroll.d.ts","sourceRoot":"","sources":["../../src/hooks/useLockBodyScroll.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,IAAI,GAAE,OAAc,GAAG,IAAI,CAQpE"}
|
|
@@ -0,0 +1,16 @@
|
|
|
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 { useEffect } from 'react';
|
|
8
|
+
export default function useLockBodyScroll(lock = true) {
|
|
9
|
+
useEffect(() => {
|
|
10
|
+
document.body.style.overflow = lock ? 'hidden' : 'visible';
|
|
11
|
+
return () => {
|
|
12
|
+
document.body.style.overflow = 'visible';
|
|
13
|
+
};
|
|
14
|
+
}, [lock]);
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=useLockBodyScroll.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useLockBodyScroll.js","sourceRoot":"","sources":["../../src/hooks/useLockBodyScroll.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAC,SAAS,EAAC,MAAM,OAAO,CAAC;AAEhC,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,OAAgB,IAAI;IAC5D,SAAS,CAAC,GAAG,EAAE;QACb,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;QAE3D,OAAO,GAAG,EAAE;YACV,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,SAAS,CAAC;QAC3C,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
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 defaultTheme from 'prism-react-renderer/themes/palenight';
|
|
8
|
+
export default function usePrismTheme(): typeof defaultTheme;
|
|
9
|
+
//# sourceMappingURL=usePrismTheme.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usePrismTheme.d.ts","sourceRoot":"","sources":["../../src/hooks/usePrismTheme.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,YAAY,MAAM,uCAAuC,CAAC;AAIjE,MAAM,CAAC,OAAO,UAAU,aAAa,IAAI,OAAO,YAAY,CAQ3D"}
|
|
@@ -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
|
+
import defaultTheme from 'prism-react-renderer/themes/palenight';
|
|
8
|
+
import { useColorMode } from '../utils/colorModeUtils';
|
|
9
|
+
import { useThemeConfig } from '../utils/useThemeConfig';
|
|
10
|
+
export default function usePrismTheme() {
|
|
11
|
+
const { prism } = useThemeConfig();
|
|
12
|
+
const { isDarkTheme } = useColorMode();
|
|
13
|
+
const lightModeTheme = prism.theme || defaultTheme;
|
|
14
|
+
const darkModeTheme = prism.darkTheme || lightModeTheme;
|
|
15
|
+
const prismTheme = isDarkTheme ? darkModeTheme : lightModeTheme;
|
|
16
|
+
return prismTheme;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=usePrismTheme.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usePrismTheme.js","sourceRoot":"","sources":["../../src/hooks/usePrismTheme.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,YAAY,MAAM,uCAAuC,CAAC;AACjE,OAAO,EAAC,YAAY,EAAC,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAC,cAAc,EAAC,MAAM,yBAAyB,CAAC;AAEvD,MAAM,CAAC,OAAO,UAAU,aAAa;IACnC,MAAM,EAAC,KAAK,EAAC,GAAG,cAAc,EAAE,CAAC;IACjC,MAAM,EAAC,WAAW,EAAC,GAAG,YAAY,EAAE,CAAC;IACrC,MAAM,cAAc,GAAG,KAAK,CAAC,KAAK,IAAI,YAAY,CAAC;IACnD,MAAM,aAAa,GAAG,KAAK,CAAC,SAAS,IAAI,cAAc,CAAC;IACxD,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,cAAc,CAAC;IAEhE,OAAO,UAAU,CAAC;AACpB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
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
|
+
interface UseSearchPageReturn {
|
|
8
|
+
searchQuery: string;
|
|
9
|
+
setSearchQuery: (newSearchQuery: string) => void;
|
|
10
|
+
generateSearchPageLink: (targetSearchQuery: string) => string;
|
|
11
|
+
}
|
|
12
|
+
export default function useSearchPage(): UseSearchPageReturn;
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=useSearchPage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSearchPage.d.ts","sourceRoot":"","sources":["../../src/hooks/useSearchPage.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,UAAU,mBAAmB;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,sBAAsB,EAAE,CAAC,iBAAiB,EAAE,MAAM,KAAK,MAAM,CAAC;CAC/D;AAED,MAAM,CAAC,OAAO,UAAU,aAAa,IAAI,mBAAmB,CA8C3D"}
|
|
@@ -0,0 +1,43 @@
|
|
|
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 { useHistory } from '@docusaurus/router';
|
|
8
|
+
import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
|
|
9
|
+
import { useCallback, useEffect, useState } from 'react';
|
|
10
|
+
const SEARCH_PARAM_QUERY = 'q';
|
|
11
|
+
export default function useSearchPage() {
|
|
12
|
+
const history = useHistory();
|
|
13
|
+
const { siteConfig: { baseUrl }, } = useDocusaurusContext();
|
|
14
|
+
const [searchQuery, setSearchQueryState] = useState('');
|
|
15
|
+
// Init search query just after React hydration
|
|
16
|
+
useEffect(() => {
|
|
17
|
+
var _a;
|
|
18
|
+
const searchQueryStringValue = (_a = new URLSearchParams(window.location.search).get(SEARCH_PARAM_QUERY)) !== null && _a !== void 0 ? _a : '';
|
|
19
|
+
setSearchQueryState(searchQueryStringValue);
|
|
20
|
+
}, []);
|
|
21
|
+
const setSearchQuery = useCallback((newSearchQuery) => {
|
|
22
|
+
const searchParams = new URLSearchParams(window.location.search);
|
|
23
|
+
if (newSearchQuery) {
|
|
24
|
+
searchParams.set(SEARCH_PARAM_QUERY, newSearchQuery);
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
searchParams.delete(SEARCH_PARAM_QUERY);
|
|
28
|
+
}
|
|
29
|
+
history.replace({
|
|
30
|
+
search: searchParams.toString(),
|
|
31
|
+
});
|
|
32
|
+
setSearchQueryState(newSearchQuery);
|
|
33
|
+
}, [history]);
|
|
34
|
+
const generateSearchPageLink = useCallback((targetSearchQuery) =>
|
|
35
|
+
// Refer to https://github.com/facebook/docusaurus/pull/2838
|
|
36
|
+
`${baseUrl}search?q=${encodeURIComponent(targetSearchQuery)}`, [baseUrl]);
|
|
37
|
+
return {
|
|
38
|
+
searchQuery,
|
|
39
|
+
setSearchQuery,
|
|
40
|
+
generateSearchPageLink,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=useSearchPage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSearchPage.js","sourceRoot":"","sources":["../../src/hooks/useSearchPage.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAC,UAAU,EAAC,MAAM,oBAAoB,CAAC;AAC9C,OAAO,oBAAoB,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAC,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAC,MAAM,OAAO,CAAC;AAEvD,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAQ/B,MAAM,CAAC,OAAO,UAAU,aAAa;IACnC,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,MAAM,EACJ,UAAU,EAAE,EAAC,OAAO,EAAC,GACtB,GAAG,oBAAoB,EAAE,CAAC;IAE3B,MAAM,CAAC,WAAW,EAAE,mBAAmB,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAExD,+CAA+C;IAC/C,SAAS,CAAC,GAAG,EAAE;;QACb,MAAM,sBAAsB,GAC1B,MAAA,IAAI,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,kBAAkB,CAAC,mCAAI,EAAE,CAAC;QAE5E,mBAAmB,CAAC,sBAAsB,CAAC,CAAC;IAC9C,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,cAAc,GAAG,WAAW,CAChC,CAAC,cAAsB,EAAE,EAAE;QACzB,MAAM,YAAY,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAEjE,IAAI,cAAc,EAAE;YAClB,YAAY,CAAC,GAAG,CAAC,kBAAkB,EAAE,cAAc,CAAC,CAAC;SACtD;aAAM;YACL,YAAY,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;SACzC;QAED,OAAO,CAAC,OAAO,CAAC;YACd,MAAM,EAAE,YAAY,CAAC,QAAQ,EAAE;SAChC,CAAC,CAAC;QACH,mBAAmB,CAAC,cAAc,CAAC,CAAC;IACtC,CAAC,EACD,CAAC,OAAO,CAAC,CACV,CAAC;IAEF,MAAM,sBAAsB,GAAG,WAAW,CACxC,CAAC,iBAAyB,EAAE,EAAE;IAC5B,4DAA4D;IAC5D,GAAG,OAAO,YAAY,kBAAkB,CAAC,iBAAiB,CAAC,EAAE,EAC/D,CAAC,OAAO,CAAC,CACV,CAAC;IAEF,OAAO;QACL,WAAW;QACX,cAAc;QACd,sBAAsB;KACvB,CAAC;AACJ,CAAC"}
|