@brillout/docpress 0.8.13 → 0.8.15
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/Layout.tsx +279 -171
- package/MenuModal.tsx +55 -56
- package/{Links.tsx → NavSecondaryContent.tsx} +6 -8
- package/components/HorizontalLine.tsx +4 -3
- package/config/resolveHeadingsData.ts +7 -10
- package/css/code/block.css +5 -5
- package/css/code/inline.css +1 -1
- package/css/colorize-on-hover.css +20 -9
- package/dist/Layout.d.ts +10 -6
- package/dist/Layout.js +181 -102
- package/dist/MenuModal.d.ts +5 -1
- package/dist/MenuModal.js +44 -60
- package/dist/{Links.d.ts → NavSecondaryContent.d.ts} +3 -2
- package/dist/{Links.js → NavSecondaryContent.js} +5 -6
- package/dist/components/HorizontalLine.d.ts +1 -1
- package/dist/components/HorizontalLine.js +3 -2
- package/dist/config/resolveHeadingsData.d.ts +3 -4
- package/dist/config/resolveHeadingsData.js +5 -8
- package/dist/config/resolvePageContext.d.ts +2 -3
- package/dist/docsearch/SearchLink.js +2 -3
- package/dist/navigation/Collapsible.d.ts +10 -0
- package/dist/navigation/Collapsible.js +35 -0
- package/dist/navigation/Navigation.d.ts +0 -3
- package/dist/navigation/Navigation.js +106 -55
- package/dist/renderer/determineNavItemsColumnLayout.d.ts +3 -0
- package/dist/renderer/{determineColumnEntries.js → determineNavItemsColumnLayout.js} +34 -28
- package/dist/renderer/usePageContext.d.ts +2 -2
- package/dist/renderer/usePageContext.js +2 -4
- package/dist/utils/Style.d.ts +5 -0
- package/dist/utils/Style.js +6 -0
- package/dist/utils/cls.d.ts +3 -0
- package/dist/utils/cls.js +5 -0
- package/dist/utils/throttle.d.ts +1 -0
- package/dist/utils/throttle.js +14 -0
- package/docsearch/SearchLink.tsx +4 -13
- package/global.d.ts +1 -1
- package/initKeyBindings.ts +1 -6
- package/navigation/Collapsible.css +11 -0
- package/navigation/Collapsible.tsx +64 -0
- package/navigation/Navigation.css +12 -6
- package/navigation/Navigation.tsx +191 -80
- package/package.json +1 -1
- package/renderer/{determineColumnEntries.ts → determineNavItemsColumnLayout.ts} +35 -29
- package/renderer/initOnNavigation.ts +37 -0
- package/renderer/onRenderClient.tsx +2 -0
- package/renderer/usePageContext.tsx +2 -5
- package/utils/Style.tsx +7 -0
- package/utils/cls.ts +8 -0
- package/utils/throttle.ts +10 -0
- package/dist/renderer/determineColumnEntries.d.ts +0 -3
package/dist/Layout.js
CHANGED
|
@@ -14,35 +14,38 @@ var __assign = (this && this.__assign) || function () {
|
|
|
14
14
|
return __assign.apply(this, arguments);
|
|
15
15
|
};
|
|
16
16
|
export { Layout };
|
|
17
|
-
export {
|
|
18
|
-
export {
|
|
19
|
-
export {
|
|
17
|
+
export { containerQueryMobileLayout };
|
|
18
|
+
export { containerQueryMobileMenu };
|
|
19
|
+
export { navLeftWidthMin };
|
|
20
|
+
export { navLeftWidthMax };
|
|
21
|
+
export { unexpandNav };
|
|
20
22
|
import React from 'react';
|
|
21
23
|
import { NavigationContent } from './navigation/Navigation';
|
|
22
24
|
import { EditPageNote } from './components/EditPageNote';
|
|
23
25
|
import { parseTitle } from './parseTitle';
|
|
24
26
|
import { usePageContext, usePageContext2 } from './renderer/usePageContext';
|
|
25
|
-
import {
|
|
26
|
-
import { toggleMenuModal } from './MenuModal';
|
|
27
|
+
import { NavSecondaryContent } from './NavSecondaryContent';
|
|
28
|
+
import { closeMenuModal, openMenuModal, toggleMenuModal } from './MenuModal';
|
|
27
29
|
import { MenuModal } from './MenuModal';
|
|
28
30
|
import { autoScrollNav_SSR } from './autoScrollNav';
|
|
29
31
|
import { SearchLink } from './docsearch/SearchLink';
|
|
30
32
|
import { navigate } from 'vike/client/router';
|
|
31
33
|
import { css } from './utils/css';
|
|
32
34
|
import { PassThrough } from './utils/PassTrough';
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
var navWidthMax = 370;
|
|
36
|
-
var navWidthMin = 300;
|
|
37
|
-
var navWidth = {
|
|
38
|
-
minWidth: navWidthMin,
|
|
39
|
-
maxWidth: navWidthMax,
|
|
40
|
-
width: '100%',
|
|
41
|
-
};
|
|
35
|
+
import { Style } from './utils/Style';
|
|
36
|
+
import { cls } from './utils/cls';
|
|
42
37
|
var blockMargin = 3;
|
|
38
|
+
var mainViewPadding = 20;
|
|
39
|
+
var mainViewWidthMax = 800;
|
|
40
|
+
var navLeftWidthMax = 370;
|
|
41
|
+
var navLeftWidthMin = 300;
|
|
42
|
+
// 840 = 800 + 20 * 2
|
|
43
43
|
var mainViewMax = mainViewWidthMax + mainViewPadding * 2;
|
|
44
|
-
var
|
|
45
|
-
|
|
44
|
+
var containerQueryMobileMenu = 1000;
|
|
45
|
+
// 1143 = 840 + 300
|
|
46
|
+
var containerQueryMobileLayout = mainViewMax + navLeftWidthMin;
|
|
47
|
+
// 1213 = 840 + 370 + 3
|
|
48
|
+
var containerQueryExtraSpace = mainViewMax + navLeftWidthMax + blockMargin;
|
|
46
49
|
// Avoid whitespace at the bottom of pages with almost no content
|
|
47
50
|
var whitespaceBuster1 = {
|
|
48
51
|
minHeight: '100vh',
|
|
@@ -68,29 +71,31 @@ function Layout(_a) {
|
|
|
68
71
|
_b['--bg-color'] = '#f5f5f7',
|
|
69
72
|
_b['--block-margin'] = "".concat(blockMargin, "px"),
|
|
70
73
|
_b['--icon-text-padding'] = '8px',
|
|
74
|
+
_b['--nav-head-height'] = "".concat(isLandingPage ? 70 : 60, "px"),
|
|
71
75
|
_b) },
|
|
72
|
-
React.createElement(MenuModal,
|
|
76
|
+
React.createElement(MenuModal, { isTopNav: isLandingPage }),
|
|
73
77
|
React.createElement("div", { className: isLandingPage ? '' : 'doc-page', style: __assign({
|
|
74
78
|
// We don't add `container` to `body` nor `html` beacuse in Firefox it breaks the `position: fixed` of <MenuModal>
|
|
75
79
|
// https://stackoverflow.com/questions/74601420/css-container-inline-size-and-fixed-child
|
|
76
|
-
|
|
80
|
+
container: 'container-viewport / inline-size' }, whitespaceBuster1) },
|
|
81
|
+
React.createElement(NavHead, null),
|
|
82
|
+
content)));
|
|
77
83
|
}
|
|
78
84
|
function LayoutDocsPage(_a) {
|
|
79
85
|
var children = _a.children;
|
|
80
86
|
var pageContext = usePageContext();
|
|
81
|
-
var hideNavLeftAlways = pageContext.
|
|
87
|
+
var hideNavLeftAlways = pageContext.navItemsDetached && pageContext.navItemsDetached.length <= 1;
|
|
82
88
|
return (React.createElement(React.Fragment, null,
|
|
83
89
|
React.createElement("style", null, getStyle()),
|
|
84
|
-
React.createElement(NavMobile, null),
|
|
85
90
|
React.createElement("div", { style: __assign({ display: 'flex' }, whitespaceBuster2) },
|
|
86
91
|
React.createElement(NavLeft, null),
|
|
87
92
|
React.createElement("div", { className: "low-prio-grow", style: { width: 0, maxWidth: 50, background: 'var(--bg-color)' } }),
|
|
88
93
|
React.createElement(PageContent, null, children))));
|
|
89
94
|
function getStyle() {
|
|
90
|
-
var style = css(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n@container(min-width: ", "px) {\n .low-prio-grow {\n flex-grow: 1;\n }\n #navigation-container {\n width: ", "px !important;\n }\n}"], ["\n@container(min-width: ", "px) {\n .low-prio-grow {\n flex-grow: 1;\n }\n #navigation-container {\n width: ", "px !important;\n }\n}"])),
|
|
91
|
-
var navLeftHide = css(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n#nav-left {\n display: none;\n}\n.page-wrapper {\n --main-view-padding: 10px !important;\n flex-grow: 1;\n align-items: center;\n}\n.page-content {\n margin: auto;\n}\n"], ["\n#nav-left {\n display: none;\n}\n.page-wrapper {\n --main-view-padding: 10px !important;\n flex-grow: 1;\n align-items: center;\n}\n.page-content {\n margin: auto;\n}\n"])));
|
|
95
|
+
var style = css(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n@container container-viewport (min-width: ", "px) {\n .low-prio-grow {\n flex-grow: 1;\n }\n #navigation-container {\n width: ", "px !important;\n }\n}"], ["\n@container container-viewport (min-width: ", "px) {\n .low-prio-grow {\n flex-grow: 1;\n }\n #navigation-container {\n width: ", "px !important;\n }\n}"])), containerQueryExtraSpace, navLeftWidthMax);
|
|
96
|
+
var navLeftHide = css(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n#nav-left {\n display: none;\n}\n.page-wrapper {\n --main-view-padding: 10px !important;\n flex-grow: 1;\n align-items: center;\n}\n.page-content {\n margin: auto;\n}\n#menu-modal {\n position: absolute !important;\n}\n"], ["\n#nav-left {\n display: none;\n}\n.page-wrapper {\n --main-view-padding: 10px !important;\n flex-grow: 1;\n align-items: center;\n}\n.page-content {\n margin: auto;\n}\n#menu-modal {\n position: absolute !important;\n}\n"])));
|
|
92
97
|
if (!hideNavLeftAlways) {
|
|
93
|
-
navLeftHide = css(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n@container(max-width: ", "px) {\n ", "\n}\n@container(min-width: ", "px) {\n
|
|
98
|
+
navLeftHide = css(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n@container container-viewport (max-width: ", "px) {\n ", "\n}\n@container container-viewport (min-width: ", "px) {\n .nav-head-top {\n display: none !important;\n }\n}\n"], ["\n@container container-viewport (max-width: ", "px) {\n ", "\n}\n@container container-viewport (min-width: ", "px) {\n .nav-head-top {\n display: none !important;\n }\n}\n"])), containerQueryMobileLayout - 1, navLeftHide, containerQueryMobileLayout);
|
|
94
99
|
}
|
|
95
100
|
style += navLeftHide;
|
|
96
101
|
return style;
|
|
@@ -98,15 +103,8 @@ function LayoutDocsPage(_a) {
|
|
|
98
103
|
}
|
|
99
104
|
function LayoutLandingPage(_a) {
|
|
100
105
|
var children = _a.children;
|
|
101
|
-
var mobile = 800;
|
|
102
106
|
return (React.createElement(React.Fragment, null,
|
|
103
|
-
React.createElement("style", null, getStyle()),
|
|
104
|
-
React.createElement(NavTop, null),
|
|
105
|
-
React.createElement(NavMobile, null),
|
|
106
107
|
React.createElement(PageContent, null, children)));
|
|
107
|
-
function getStyle() {
|
|
108
|
-
return css(templateObject_4 || (templateObject_4 = __makeTemplateObject(["\n@container(min-width: ", "px) {\n #nav-mobile {\n display: none !important;\n }\n}\n@container(max-width: ", "px) {\n #top-navigation {\n display: none !important;\n }\n"], ["\n@container(min-width: ", "px) {\n #nav-mobile {\n display: none !important;\n }\n}\n@container(max-width: ", "px) {\n #top-navigation {\n display: none !important;\n }\n"])), mobile, mobile - 1);
|
|
109
|
-
}
|
|
110
108
|
}
|
|
111
109
|
function PageContent(_a) {
|
|
112
110
|
var _b;
|
|
@@ -132,104 +130,185 @@ function PageContent(_a) {
|
|
|
132
130
|
children,
|
|
133
131
|
!isLandingPage && React.createElement(EditPageNote, { pageContext: pageContext }))));
|
|
134
132
|
}
|
|
135
|
-
function NavMobile() {
|
|
136
|
-
return (React.createElement("div", { id: "nav-mobile" },
|
|
137
|
-
React.createElement(NavigationHeader, { headerHeight: 70, iconSize: 40, paddingLeft: 12, style: { justifyContent: 'center' } })));
|
|
138
|
-
}
|
|
139
|
-
function NavTop() {
|
|
140
|
-
var _a;
|
|
141
|
-
var pageContext2 = usePageContext2();
|
|
142
|
-
var paddingSize = 35;
|
|
143
|
-
var padding = "0 ".concat(paddingSize, "px");
|
|
144
|
-
var TopNavigation = pageContext2.config.TopNavigation || PassThrough;
|
|
145
|
-
return (React.createElement("div", { id: "top-navigation", className: "link-hover-animation", style: (_a = {
|
|
146
|
-
position: 'relative',
|
|
147
|
-
display: 'flex',
|
|
148
|
-
alignItems: 'center',
|
|
149
|
-
justifyContent: 'center',
|
|
150
|
-
textDecoration: 'none',
|
|
151
|
-
marginBottom: 'var(--block-margin)',
|
|
152
|
-
backgroundColor: 'var(--bg-color)'
|
|
153
|
-
},
|
|
154
|
-
_a['--padding-side'] = "".concat(paddingSize, "px"),
|
|
155
|
-
_a.fontSize = '1.06em',
|
|
156
|
-
_a.color = '#666',
|
|
157
|
-
_a) },
|
|
158
|
-
React.createElement("div", { style: { display: 'flex', alignItems: 'center', height: 70 } },
|
|
159
|
-
React.createElement(TopNavigation, null),
|
|
160
|
-
React.createElement(SearchLink, { style: { padding: padding } }),
|
|
161
|
-
React.createElement(MenuLink, { style: { padding: padding } }),
|
|
162
|
-
React.createElement(Links, { style: { display: 'inline-flex', padding: padding, marginLeft: -8 } }))));
|
|
163
|
-
}
|
|
164
133
|
function NavLeft() {
|
|
165
134
|
var pageContext = usePageContext();
|
|
166
|
-
var
|
|
167
|
-
var headerHeight = 60;
|
|
135
|
+
var navItemsAll = pageContext.navItemsAll, navItemsDetached = pageContext.navItemsDetached;
|
|
168
136
|
return (React.createElement(React.Fragment, null,
|
|
169
137
|
React.createElement("div", { id: "nav-left", className: "link-hover-animation", style: {
|
|
170
138
|
flexGrow: 1,
|
|
171
139
|
borderRight: 'var(--block-margin) solid white',
|
|
140
|
+
zIndex: 1,
|
|
172
141
|
} },
|
|
173
142
|
React.createElement("div", { style: {
|
|
174
143
|
position: 'sticky',
|
|
175
144
|
top: 0,
|
|
176
145
|
} },
|
|
177
|
-
React.createElement(
|
|
146
|
+
React.createElement(NavHead, { isNavLeft: true }),
|
|
178
147
|
React.createElement("div", { style: {
|
|
179
148
|
backgroundColor: 'var(--bg-color)',
|
|
180
149
|
display: 'flex',
|
|
181
150
|
justifyContent: 'flex-end',
|
|
182
151
|
} },
|
|
183
|
-
React.createElement("div", { id: "navigation-container", style:
|
|
184
|
-
|
|
185
|
-
|
|
152
|
+
React.createElement("div", { id: "navigation-container", style: {
|
|
153
|
+
top: 0,
|
|
154
|
+
height: "calc(100vh - var(--nav-head-height) - var(--block-margin))",
|
|
155
|
+
overflowY: 'auto',
|
|
156
|
+
overscrollBehavior: 'contain',
|
|
157
|
+
paddingBottom: 40,
|
|
158
|
+
minWidth: navLeftWidthMin,
|
|
159
|
+
maxWidth: navLeftWidthMax,
|
|
160
|
+
width: '100%',
|
|
161
|
+
} }, navItemsDetached ? (React.createElement(NavigationContent, { navItems: navItemsDetached })) : (React.createElement(NavigationContent, { navItems: navItemsAll, showOnlyRelevant: true })))))),
|
|
186
162
|
React.createElement("script", { dangerouslySetInnerHTML: { __html: autoScrollNav_SSR } })));
|
|
187
163
|
}
|
|
188
|
-
function
|
|
164
|
+
function NavHead(_a) {
|
|
189
165
|
var _b;
|
|
190
|
-
var
|
|
166
|
+
var isNavLeft = _a.isNavLeft;
|
|
191
167
|
var pageContext = usePageContext();
|
|
192
|
-
|
|
168
|
+
var pageContext2 = usePageContext2();
|
|
193
169
|
var projectName = pageContext.meta.projectName;
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
170
|
+
var isLandingPage = pageContext.isLandingPage;
|
|
171
|
+
var linkStyle = {
|
|
172
|
+
height: '100%',
|
|
173
|
+
padding: '0 var(--padding-side)',
|
|
174
|
+
justifyContent: 'center',
|
|
175
|
+
};
|
|
176
|
+
var TopNavigation = pageContext2.config.TopNavigation || PassThrough;
|
|
177
|
+
var navSecondaryContent = (React.createElement("div", { className: isNavLeft ? 'show-on-nav-hover add-transition' : 'hide-on-shrink', style: __assign({ padding: 0, display: 'flex', height: '100%' }, (!isNavLeft
|
|
178
|
+
? {}
|
|
179
|
+
: {
|
|
180
|
+
position: 'absolute',
|
|
181
|
+
left: '100%',
|
|
182
|
+
top: 0,
|
|
183
|
+
paddingLeft: 'var(--block-margin)',
|
|
184
|
+
'--padding-side': '20px',
|
|
185
|
+
width: mainViewMax, // guaranteed real estate
|
|
186
|
+
})) },
|
|
187
|
+
React.createElement(TopNavigation, null),
|
|
188
|
+
React.createElement(NavSecondaryContent, { style: {
|
|
189
|
+
display: 'inline-flex',
|
|
190
|
+
fontSize: '1.06em',
|
|
191
|
+
padding: '0 var(--padding-side)',
|
|
192
|
+
marginLeft: -8,
|
|
193
|
+
} })));
|
|
194
|
+
return (React.createElement("div", { className: cls(['nav-head-full-width', !isNavLeft && 'nav-head-top', 'link-hover-animation']), style: {
|
|
195
|
+
display: 'flex',
|
|
196
|
+
justifyContent: isNavLeft ? 'flex-end' : 'center',
|
|
197
|
+
backgroundColor: 'var(--bg-color)',
|
|
198
|
+
borderBottom: 'var(--block-margin) solid white',
|
|
199
|
+
position: 'relative',
|
|
200
|
+
} },
|
|
201
|
+
isNavLeft && React.createElement(NavHeaderLeftFullWidthBackground, null),
|
|
202
|
+
React.createElement("div", { style: {
|
|
203
|
+
container: 'container-nav-head / inline-size',
|
|
204
|
+
width: '100%',
|
|
205
|
+
minWidth: isNavLeft && navLeftWidthMin,
|
|
206
|
+
maxWidth: isNavLeft && navLeftWidthMax,
|
|
207
|
+
} },
|
|
208
|
+
React.createElement("div", { className: "nav-head-content", style: (_b = {
|
|
209
|
+
width: '100%',
|
|
210
|
+
height: 'var(--nav-head-height)',
|
|
211
|
+
fontSize: "min(16.96px, ".concat(isProjectNameShort(projectName) ? '4.8cqw' : '4.5cqw', ")"),
|
|
212
|
+
color: '#666'
|
|
213
|
+
},
|
|
214
|
+
_b['--icon-text-padding'] = 'min(8px, 1.8cqw)',
|
|
215
|
+
_b.display = 'flex',
|
|
216
|
+
_b.justifyContent = 'center',
|
|
217
|
+
_b) },
|
|
218
|
+
React.createElement(NavLogo, { className: "grow-half" }),
|
|
219
|
+
React.createElement(SearchLink, { className: "grow-half", style: linkStyle }),
|
|
220
|
+
React.createElement(MenuLink, { className: "grow-full", style: linkStyle }),
|
|
221
|
+
navSecondaryContent)),
|
|
222
|
+
getStyle()));
|
|
223
|
+
function getStyle() {
|
|
224
|
+
var style = css(templateObject_4 || (templateObject_4 = __makeTemplateObject(["\n@container container-nav-head (max-width: 550px) {\n .grow-full {\n flex-grow: 1;\n }\n .grow-half {\n flex-grow: 0.5;\n }\n .nav-head-content {\n --padding-side: 0px;\n }\n .nav-logo {\n padding-left: 15px;\n margin-left: -10px;\n }\n}\n@container container-nav-head (min-width: 501px) {\n .nav-head-content {\n --padding-side: 35px;\n }\n .nav-logo {\n padding: 0 var(--padding-side);\n }\n}\n@media(max-width: ", "px) {\n .hide-on-shrink {\n display: none !important;\n }\n}\n"], ["\n@container container-nav-head (max-width: 550px) {\n .grow-full {\n flex-grow: 1;\n }\n .grow-half {\n flex-grow: 0.5;\n }\n .nav-head-content {\n --padding-side: 0px;\n }\n .nav-logo {\n padding-left: 15px;\n margin-left: -10px;\n }\n}\n@container container-nav-head (min-width: 501px) {\n .nav-head-content {\n --padding-side: 35px;\n }\n .nav-logo {\n padding: 0 var(--padding-side);\n }\n}\n@media(max-width: ", "px) {\n .hide-on-shrink {\n display: none !important;\n }\n}\n"])), containerQueryMobileMenu);
|
|
225
|
+
if (isLandingPage)
|
|
226
|
+
style += css(templateObject_5 || (templateObject_5 = __makeTemplateObject(["\n@media(min-width: ", "px) {\n .nav-logo {\n display: none !important;\n }\n}\n"], ["\n@media(min-width: ", "px) {\n .nav-logo {\n display: none !important;\n }\n}\n"])), containerQueryMobileMenu + 1);
|
|
227
|
+
if (isNavLeft) {
|
|
228
|
+
style += css(templateObject_6 || (templateObject_6 = __makeTemplateObject(["\n\n.show-on-nav-hover {\n opacity: 0;\n transition-property: opacity;\n pointer-events: none;\n}\nhtml:not(.unexpand-nav) :has(.nav-head-full-width:hover) .show-on-nav-hover,\nhtml:not(.unexpand-nav) :has(.show-on-nav-hover:hover) .show-on-nav-hover,\nhtml:not(.unexpand-nav).menu-modal-show .show-on-nav-hover {\n opacity: 1;\n pointer-events: all;\n}\n"], ["\n\n.show-on-nav-hover {\n opacity: 0;\n transition-property: opacity;\n pointer-events: none;\n}\nhtml:not(.unexpand-nav) :has(.nav-head-full-width:hover) .show-on-nav-hover,\nhtml:not(.unexpand-nav) :has(.show-on-nav-hover:hover) .show-on-nav-hover,\nhtml:not(.unexpand-nav).menu-modal-show .show-on-nav-hover {\n opacity: 1;\n pointer-events: all;\n}\n"])));
|
|
229
|
+
}
|
|
230
|
+
return React.createElement(Style, null, style);
|
|
231
|
+
}
|
|
222
232
|
}
|
|
233
|
+
function unexpandNav() {
|
|
234
|
+
document.documentElement.classList.add('unexpand-nav');
|
|
235
|
+
// Using setTimeout() because requestAnimationFrame() doesn't delay enough
|
|
236
|
+
setTimeout(function () {
|
|
237
|
+
document.documentElement.classList.remove('unexpand-nav');
|
|
238
|
+
}, 1000);
|
|
239
|
+
}
|
|
240
|
+
function NavHeaderLeftFullWidthBackground() {
|
|
241
|
+
return (React.createElement("div", { className: "show-on-nav-hover add-transition", style: {
|
|
242
|
+
height: '100%',
|
|
243
|
+
width: '100vw',
|
|
244
|
+
zIndex: -1,
|
|
245
|
+
background: 'var(--bg-color)',
|
|
246
|
+
position: 'absolute',
|
|
247
|
+
left: 0,
|
|
248
|
+
top: 0,
|
|
249
|
+
boxSizing: 'content-box',
|
|
250
|
+
borderBottom: 'var(--block-margin) solid white',
|
|
251
|
+
} }));
|
|
252
|
+
}
|
|
253
|
+
function NavLogo(_a) {
|
|
254
|
+
var className = _a.className;
|
|
255
|
+
var pageContext = usePageContext();
|
|
256
|
+
var iconSize = 39;
|
|
257
|
+
var projectName = pageContext.meta.projectName;
|
|
258
|
+
return (React.createElement("a", { className: cls(['nav-logo', className]), style: {
|
|
259
|
+
display: 'flex',
|
|
260
|
+
alignItems: 'center',
|
|
261
|
+
color: 'inherit',
|
|
262
|
+
height: '100%',
|
|
263
|
+
justifyContent: 'flex-start',
|
|
264
|
+
}, href: "/" },
|
|
265
|
+
React.createElement("img", { src: pageContext.meta.faviconUrl, height: iconSize, width: iconSize, onContextMenu: function (ev) {
|
|
266
|
+
if (!pageContext.config.pressKit)
|
|
267
|
+
return; // no /press page
|
|
268
|
+
if (window.location.pathname === '/press')
|
|
269
|
+
return;
|
|
270
|
+
ev.preventDefault();
|
|
271
|
+
navigate('/press#logo');
|
|
272
|
+
} }),
|
|
273
|
+
React.createElement("span", { style: {
|
|
274
|
+
marginLeft: "calc(var(--icon-text-padding) + 2px)",
|
|
275
|
+
fontSize: isProjectNameShort(projectName) ? '1.65em' : '1.3em',
|
|
276
|
+
} }, projectName)));
|
|
277
|
+
}
|
|
278
|
+
function isProjectNameShort(projectName) {
|
|
279
|
+
return projectName.length <= 4;
|
|
280
|
+
}
|
|
281
|
+
var onMouseIgnore;
|
|
223
282
|
function MenuLink(props) {
|
|
224
|
-
return (React.createElement("
|
|
283
|
+
return (React.createElement("div", __assign({}, props, { style: __assign({ height: '100%', display: 'flex', alignItems: 'center', cursor: 'default', userSelect: 'none' }, props.style), className: ['colorize-on-hover menu-toggle', props.className].filter(Boolean).join(' '), onClick: function (ev) {
|
|
225
284
|
ev.preventDefault();
|
|
226
285
|
toggleMenuModal();
|
|
227
|
-
},
|
|
228
|
-
|
|
229
|
-
|
|
286
|
+
}, onMouseOver: function () {
|
|
287
|
+
if (onMouseIgnore)
|
|
288
|
+
return;
|
|
289
|
+
openMenuModal();
|
|
290
|
+
}, onMouseLeave: function () {
|
|
291
|
+
if (onMouseIgnore)
|
|
292
|
+
return;
|
|
293
|
+
closeMenuModal();
|
|
294
|
+
}, onTouchStart: function () {
|
|
295
|
+
onMouseIgnore = setTimeout(function () {
|
|
296
|
+
onMouseIgnore = undefined;
|
|
297
|
+
}, 1000);
|
|
298
|
+
} }),
|
|
299
|
+
React.createElement("span", { className: "text-docs" },
|
|
300
|
+
React.createElement(DocsIcon, null),
|
|
301
|
+
" Docs"),
|
|
302
|
+
React.createElement("span", { className: "text-menu" },
|
|
303
|
+
React.createElement(MenuIcon, null),
|
|
304
|
+
" Menu"),
|
|
305
|
+
React.createElement(Style, null, css(templateObject_7 || (templateObject_7 = __makeTemplateObject(["\n@media(max-width: ", "px) {\n .text-docs {\n display: none;\n }\n}\n@media(min-width: ", "px) {\n .text-menu {\n display: none;\n }\n}\n"], ["\n@media(max-width: ", "px) {\n .text-docs {\n display: none;\n }\n}\n@media(min-width: ", "px) {\n .text-menu {\n display: none;\n }\n}\n"])), containerQueryMobileMenu, containerQueryMobileMenu + 1))));
|
|
306
|
+
}
|
|
307
|
+
function DocsIcon() {
|
|
308
|
+
return (React.createElement("span", { style: { marginRight: 'calc(var(--icon-text-padding) + 2px)' }, className: "decolorize-6" }, "\uD83D\uDCDA"));
|
|
230
309
|
}
|
|
231
310
|
function MenuIcon() {
|
|
232
|
-
return (React.createElement("svg", { style: { marginRight: 'calc(var(--icon-text-padding) + 2px)',
|
|
311
|
+
return (React.createElement("svg", { style: { marginRight: 'calc(var(--icon-text-padding) + 2px)', verticalAlign: 'top', width: '1.3em' }, className: "decolorize-6", viewBox: "0 0 448 512" },
|
|
233
312
|
React.createElement("path", { fill: "currentColor", d: "M436 124H12c-6.627 0-12-5.373-12-12V80c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12z" })));
|
|
234
313
|
}
|
|
235
|
-
var templateObject_1, templateObject_2, templateObject_3, templateObject_4;
|
|
314
|
+
var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5, templateObject_6, templateObject_7;
|
package/dist/MenuModal.d.ts
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
export { MenuModal };
|
|
2
2
|
export { toggleMenuModal };
|
|
3
|
+
export { openMenuModal };
|
|
3
4
|
export { closeMenuModal };
|
|
4
5
|
import React from 'react';
|
|
5
|
-
declare function MenuModal(
|
|
6
|
+
declare function MenuModal({ isTopNav }: {
|
|
7
|
+
isTopNav: boolean;
|
|
8
|
+
}): React.JSX.Element;
|
|
6
9
|
declare function toggleMenuModal(): void;
|
|
10
|
+
declare function openMenuModal(): void;
|
|
7
11
|
declare function closeMenuModal(): void;
|
package/dist/MenuModal.js
CHANGED
|
@@ -4,73 +4,72 @@ var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cook
|
|
|
4
4
|
};
|
|
5
5
|
export { MenuModal };
|
|
6
6
|
export { toggleMenuModal };
|
|
7
|
+
export { openMenuModal };
|
|
7
8
|
export { closeMenuModal };
|
|
8
9
|
import React from 'react';
|
|
9
10
|
import { usePageContext } from './renderer/usePageContext';
|
|
10
11
|
import { NavigationContent } from './navigation/Navigation';
|
|
11
12
|
import { css } from './utils/css';
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import { isBrowser } from './utils/isBrowser';
|
|
13
|
+
import { containerQueryMobileLayout, containerQueryMobileMenu } from './Layout';
|
|
14
|
+
import { NavSecondaryContent } from './NavSecondaryContent';
|
|
15
15
|
import { getViewportWidth } from './utils/getViewportWidth';
|
|
16
|
-
|
|
17
|
-
function MenuModal() {
|
|
16
|
+
import { Style } from './utils/Style';
|
|
17
|
+
function MenuModal(_a) {
|
|
18
|
+
var isTopNav = _a.isTopNav;
|
|
18
19
|
return (React.createElement(React.Fragment, null,
|
|
19
|
-
React.createElement(
|
|
20
|
-
React.createElement("div", { id: "menu-modal", className: "link-hover-animation", style: {
|
|
21
|
-
position: 'fixed',
|
|
20
|
+
React.createElement(Style, null, getStyle()),
|
|
21
|
+
React.createElement("div", { id: "menu-modal", className: "link-hover-animation add-transition", style: {
|
|
22
|
+
position: isTopNav ? 'absolute' : 'fixed',
|
|
22
23
|
width: '100%',
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
* - https://stackoverflow.com/questions/37112218/css3-100vh-not-constant-in-mobile-browser/72245072#72245072
|
|
26
|
-
height: '100dh',
|
|
27
|
-
/*/
|
|
28
|
-
height: '100vh',
|
|
29
|
-
maxHeight: '100dvh',
|
|
30
|
-
//*/
|
|
31
|
-
top: 0,
|
|
24
|
+
height: 'calc(100vh - var(--nav-head-height))',
|
|
25
|
+
top: 'var(--nav-head-height)',
|
|
32
26
|
left: 0,
|
|
33
27
|
zIndex: 9999,
|
|
34
28
|
overflow: 'scroll',
|
|
35
|
-
background: '#
|
|
36
|
-
|
|
29
|
+
background: '#ededef',
|
|
30
|
+
transitionProperty: 'opacity',
|
|
31
|
+
}, onMouseOver: openMenuModal, onMouseLeave: closeMenuModal },
|
|
37
32
|
React.createElement("div", { style: {
|
|
38
33
|
// Place <LinksBottom /> to the bottom
|
|
39
34
|
display: 'flex',
|
|
40
35
|
flexDirection: 'column',
|
|
41
|
-
minHeight: '
|
|
36
|
+
minHeight: 'calc(100vh - var(--nav-head-height))',
|
|
42
37
|
justifyContent: 'space-between',
|
|
43
38
|
// We don't set `container` to parent beacuse of a Chrome bug (showing a blank <MenuModal>)
|
|
44
|
-
|
|
39
|
+
container: 'container-viewport / inline-size',
|
|
45
40
|
} },
|
|
46
41
|
React.createElement(Nav, null),
|
|
47
|
-
React.createElement(
|
|
48
|
-
React.createElement(CloseButton,
|
|
42
|
+
React.createElement(NavSecondary, { className: "show-only-for-mobile" })),
|
|
43
|
+
React.createElement(CloseButton, { className: "show-only-for-mobile" }))));
|
|
49
44
|
}
|
|
50
45
|
function Nav() {
|
|
51
46
|
var pageContext = usePageContext();
|
|
52
47
|
var navItems = pageContext.navItemsAll;
|
|
53
48
|
return React.createElement(NavigationContent, { columnLayout: true, navItems: navItems });
|
|
54
49
|
}
|
|
55
|
-
function
|
|
56
|
-
|
|
50
|
+
function NavSecondary(_a) {
|
|
51
|
+
var className = _a.className;
|
|
52
|
+
return (React.createElement("div", { className: className, style: {
|
|
57
53
|
display: 'flex',
|
|
58
54
|
justifyContent: 'center',
|
|
55
|
+
marginTop: 20,
|
|
59
56
|
} },
|
|
60
|
-
React.createElement(
|
|
57
|
+
React.createElement(NavSecondaryContent, { style: { height: 70 } })));
|
|
61
58
|
}
|
|
62
59
|
function getStyle() {
|
|
63
|
-
return css(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\nhtml:not(.menu-modal-show) #menu-modal {\n
|
|
60
|
+
return css(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\nhtml:not(.menu-modal-show) #menu-modal {\n opacity: 0;\n pointer-events: none;\n}\n// disable scroll of main view\nhtml.menu-modal-show {\n overflow: hidden !important;\n}\n@container container-viewport (min-width: ", "px) {\n #menu-modal .nav-item-level-3 {\n display: none;\n }\n}\n@media(max-width: ", "px) {\n #menu-modal {\n --nav-head-height: 0px !important;\n }\n}\n@media(min-width: ", "px) {\n .show-only-for-mobile {\n display: none !important;\n }\n}\n"], ["\nhtml:not(.menu-modal-show) #menu-modal {\n opacity: 0;\n pointer-events: none;\n}\n// disable scroll of main view\nhtml.menu-modal-show {\n overflow: hidden !important;\n}\n@container container-viewport (min-width: ", "px) {\n #menu-modal .nav-item-level-3 {\n display: none;\n }\n}\n@media(max-width: ", "px) {\n #menu-modal {\n --nav-head-height: 0px !important;\n }\n}\n@media(min-width: ", "px) {\n .show-only-for-mobile {\n display: none !important;\n }\n}\n"])), containerQueryMobileLayout, containerQueryMobileMenu, containerQueryMobileMenu + 1);
|
|
64
61
|
}
|
|
65
|
-
function CloseButton() {
|
|
66
|
-
|
|
62
|
+
function CloseButton(_a) {
|
|
63
|
+
var className = _a.className;
|
|
64
|
+
return (React.createElement("div", { className: className, onClick: toggleMenuModal, style: { position: 'fixed', top: 0, right: 0, zIndex: 10, padding: 11, cursor: 'pointer' }, "aria-label": 'Escape\nCtrl\xa0+\xa0M', "data-label-shift": true },
|
|
67
65
|
React.createElement("svg", { width: "48.855", height: "48.855", version: "1.1", viewBox: "0 0 22.901 22.901", xmlns: "http://www.w3.org/2000/svg" },
|
|
68
66
|
React.createElement("circle", { cx: "11.45", cy: "11.45", r: "10.607", fill: "#ececec", stroke: "#666", strokeDashoffset: "251.44", strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: "1.6875", style: { paintOrder: 'normal' } }),
|
|
69
67
|
React.createElement("path", { d: "m7.5904 6.2204 3.86 3.86 3.84-3.84a0.92 0.92 0 0 1 0.66-0.29 1 1 0 0 1 1 1 0.9 0.9 0 0 1-0.27 0.66l-3.89 3.84 3.89 3.89a0.9 0.9 0 0 1 0.27 0.61 1 1 0 0 1-1 1 0.92 0.92 0 0 1-0.69-0.27l-3.81-3.86-3.85 3.85a0.92 0.92 0 0 1-0.65 0.28 1 1 0 0 1-1-1 0.9 0.9 0 0 1 0.27-0.66l3.89-3.84-3.89-3.89a0.9 0.9 0 0 1-0.27-0.61 1 1 0 0 1 1-1c0.24 3e-3 0.47 0.1 0.64 0.27z", fill: "#666", stroke: "#666", strokeWidth: ".11719" }))));
|
|
70
68
|
}
|
|
71
69
|
function toggleMenuModal() {
|
|
72
70
|
document.documentElement.classList.toggle('menu-modal-show');
|
|
73
|
-
if (document.documentElement.classList.contains('menu-modal-show') &&
|
|
71
|
+
if (document.documentElement.classList.contains('menu-modal-show') &&
|
|
72
|
+
getViewportWidth() < containerQueryMobileLayout) {
|
|
74
73
|
autoScroll();
|
|
75
74
|
}
|
|
76
75
|
}
|
|
@@ -81,43 +80,28 @@ function autoScroll() {
|
|
|
81
80
|
var navLink = navLinks[0];
|
|
82
81
|
if (!navLink)
|
|
83
82
|
return;
|
|
83
|
+
// None of the following seemes to be working: https://stackoverflow.com/questions/19669786/check-if-element-is-visible-in-dom
|
|
84
|
+
if (findCollapsibleEl(navLink).classList.contains('collapsible-collapsed'))
|
|
85
|
+
return;
|
|
84
86
|
navLink.scrollIntoView({
|
|
85
87
|
behavior: 'instant',
|
|
86
88
|
block: 'center',
|
|
87
89
|
inline: 'start',
|
|
88
90
|
});
|
|
89
91
|
}
|
|
90
|
-
function
|
|
91
|
-
|
|
92
|
+
function findCollapsibleEl(navLink) {
|
|
93
|
+
var parentEl = navLink;
|
|
94
|
+
while (parentEl) {
|
|
95
|
+
if (parentEl.classList.contains('collapsible'))
|
|
96
|
+
return parentEl;
|
|
97
|
+
parentEl = parentEl.parentElement;
|
|
98
|
+
}
|
|
99
|
+
return null;
|
|
92
100
|
}
|
|
93
|
-
function
|
|
94
|
-
|
|
95
|
-
return;
|
|
96
|
-
document.addEventListener('click', onLinkClick);
|
|
97
|
-
// It's redundant (and onLinkClick() is enough), but just to be sure.
|
|
98
|
-
addEventListener('hashchange', closeMenuModal);
|
|
101
|
+
function openMenuModal() {
|
|
102
|
+
document.documentElement.classList.add('menu-modal-show');
|
|
99
103
|
}
|
|
100
|
-
function
|
|
101
|
-
|
|
102
|
-
return;
|
|
103
|
-
var linkTag = findLinkTag(ev.target);
|
|
104
|
-
if (!linkTag)
|
|
105
|
-
return;
|
|
106
|
-
var href = linkTag.getAttribute('href');
|
|
107
|
-
if (!href)
|
|
108
|
-
return;
|
|
109
|
-
if (!href.startsWith('/') && !href.startsWith('#'))
|
|
110
|
-
return;
|
|
111
|
-
closeMenuModal();
|
|
112
|
-
}
|
|
113
|
-
function findLinkTag(target) {
|
|
114
|
-
while (target.tagName !== 'A') {
|
|
115
|
-
var parentNode = target.parentNode;
|
|
116
|
-
if (!parentNode) {
|
|
117
|
-
return null;
|
|
118
|
-
}
|
|
119
|
-
target = parentNode;
|
|
120
|
-
}
|
|
121
|
-
return target;
|
|
104
|
+
function closeMenuModal() {
|
|
105
|
+
document.documentElement.classList.remove('menu-modal-show');
|
|
122
106
|
}
|
|
123
107
|
var templateObject_1;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
export { NavSecondaryContent };
|
|
1
2
|
import React from 'react';
|
|
2
3
|
import '@docsearch/css';
|
|
3
|
-
|
|
4
|
-
declare function Links({ style }: {
|
|
4
|
+
declare function NavSecondaryContent(props: {
|
|
5
5
|
style?: React.CSSProperties;
|
|
6
|
+
className?: string;
|
|
6
7
|
}): React.JSX.Element;
|
|
@@ -9,6 +9,7 @@ var __assign = (this && this.__assign) || function () {
|
|
|
9
9
|
};
|
|
10
10
|
return __assign.apply(this, arguments);
|
|
11
11
|
};
|
|
12
|
+
export { NavSecondaryContent };
|
|
12
13
|
import React from 'react';
|
|
13
14
|
import iconGithub from './icons/github.svg';
|
|
14
15
|
import iconTwitter from './icons/twitter.svg';
|
|
@@ -17,13 +18,11 @@ import iconChangelog from './icons/changelog.svg';
|
|
|
17
18
|
import iconLanguages from './icons/languages.svg';
|
|
18
19
|
import { usePageContext } from './renderer/usePageContext';
|
|
19
20
|
import '@docsearch/css';
|
|
20
|
-
|
|
21
|
-
function Links(_a) {
|
|
22
|
-
var style = _a.style;
|
|
21
|
+
function NavSecondaryContent(props) {
|
|
23
22
|
var pageContext = usePageContext();
|
|
24
|
-
var
|
|
23
|
+
var _a = pageContext.config, projectInfo = _a.projectInfo, i18n = _a.i18n;
|
|
25
24
|
var iconI18n = !i18n ? null : (React.createElement(LinkIcon, { className: "decolorize-4", icon: iconLanguages, href: '/languages', style: { height: 21, position: 'relative', top: 0, left: 0 } }));
|
|
26
|
-
return (React.createElement("div", { style: __assign({ display: 'flex', alignItems: 'center'
|
|
25
|
+
return (React.createElement("div", __assign({}, props, { style: __assign({ display: 'flex', alignItems: 'center' }, props.style) }),
|
|
27
26
|
iconI18n,
|
|
28
27
|
projectInfo.discordInvite && (React.createElement(LinkIcon, { className: "decolorize-6", icon: iconDiscord, href: projectInfo.discordInvite })),
|
|
29
28
|
React.createElement(LinkIcon, { className: "decolorize-4", icon: iconTwitter, href: projectInfo.twitterProfile }),
|
|
@@ -36,7 +35,7 @@ function ChangelogButton() {
|
|
|
36
35
|
return (React.createElement("a", { href: "".concat(projectInfo.githubRepository, "/blob/main/CHANGELOG.md"), className: "colorize-on-hover", style: {
|
|
37
36
|
display: 'flex',
|
|
38
37
|
alignItems: 'center',
|
|
39
|
-
padding:
|
|
38
|
+
padding: '0 5px',
|
|
40
39
|
height: '100%',
|
|
41
40
|
} },
|
|
42
41
|
React.createElement("div", { className: "button", style: {
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
1
|
export { HorizontalLine };
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { cls } from '../utils/cls';
|
|
3
4
|
function HorizontalLine(_a) {
|
|
4
5
|
var primary = _a.primary;
|
|
5
|
-
return (React.createElement("div", { className:
|
|
6
|
+
return (React.createElement("div", { className: cls(primary && 'primary'), style: { textAlign: 'center' } },
|
|
6
7
|
React.createElement("hr", { style: {
|
|
7
8
|
display: 'inline-block',
|
|
8
9
|
margin: 0,
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
export { resolveHeadingsData };
|
|
2
|
-
import type { NavItem
|
|
2
|
+
import type { NavItem } from '../navigation/Navigation';
|
|
3
3
|
import type { LinkData } from '../components';
|
|
4
4
|
import type { PageContextOriginal } from './resolvePageContext';
|
|
5
5
|
declare function resolveHeadingsData(pageContext: PageContextOriginal): {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
navItemsAll: NavItemAll[];
|
|
6
|
+
navItemsAll: NavItem[];
|
|
7
|
+
navItemsDetached: NavItem[] | undefined;
|
|
9
8
|
linksAll: LinkData[];
|
|
10
9
|
isLandingPage: boolean;
|
|
11
10
|
pageTitle: string | null;
|