@brillout/docpress 0.8.14 → 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 +254 -177
- package/MenuModal.tsx +42 -48
- package/{Links.tsx → NavSecondaryContent.tsx} +5 -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 +2 -2
- package/dist/Layout.d.ts +10 -6
- package/dist/Layout.js +165 -120
- package/dist/MenuModal.js +34 -47
- package/dist/{Links.d.ts → NavSecondaryContent.d.ts} +3 -2
- package/dist/{Links.js → NavSecondaryContent.js} +5 -7
- 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 +1 -1
- 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 +1 -1
- package/global.d.ts +1 -1
- 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,15 +14,17 @@ 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 {
|
|
27
|
+
import { NavSecondaryContent } from './NavSecondaryContent';
|
|
26
28
|
import { closeMenuModal, openMenuModal, toggleMenuModal } from './MenuModal';
|
|
27
29
|
import { MenuModal } from './MenuModal';
|
|
28
30
|
import { autoScrollNav_SSR } from './autoScrollNav';
|
|
@@ -30,19 +32,20 @@ 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,30 +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',
|
|
71
|
-
_b['--
|
|
74
|
+
_b['--nav-head-height'] = "".concat(isLandingPage ? 70 : 60, "px"),
|
|
72
75
|
_b) },
|
|
73
76
|
React.createElement(MenuModal, { isTopNav: isLandingPage }),
|
|
74
77
|
React.createElement("div", { className: isLandingPage ? '' : 'doc-page', style: __assign({
|
|
75
78
|
// We don't add `container` to `body` nor `html` beacuse in Firefox it breaks the `position: fixed` of <MenuModal>
|
|
76
79
|
// https://stackoverflow.com/questions/74601420/css-container-inline-size-and-fixed-child
|
|
77
|
-
|
|
80
|
+
container: 'container-viewport / inline-size' }, whitespaceBuster1) },
|
|
81
|
+
React.createElement(NavHead, null),
|
|
82
|
+
content)));
|
|
78
83
|
}
|
|
79
84
|
function LayoutDocsPage(_a) {
|
|
80
85
|
var children = _a.children;
|
|
81
86
|
var pageContext = usePageContext();
|
|
82
|
-
var hideNavLeftAlways = pageContext.
|
|
87
|
+
var hideNavLeftAlways = pageContext.navItemsDetached && pageContext.navItemsDetached.length <= 1;
|
|
83
88
|
return (React.createElement(React.Fragment, null,
|
|
84
89
|
React.createElement("style", null, getStyle()),
|
|
85
|
-
React.createElement(NavMobile, null),
|
|
86
90
|
React.createElement("div", { style: __assign({ display: 'flex' }, whitespaceBuster2) },
|
|
87
91
|
React.createElement(NavLeft, null),
|
|
88
92
|
React.createElement("div", { className: "low-prio-grow", style: { width: 0, maxWidth: 50, background: 'var(--bg-color)' } }),
|
|
89
93
|
React.createElement(PageContent, null, children))));
|
|
90
94
|
function getStyle() {
|
|
91
|
-
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}"])),
|
|
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);
|
|
92
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"])));
|
|
93
97
|
if (!hideNavLeftAlways) {
|
|
94
|
-
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);
|
|
95
99
|
}
|
|
96
100
|
style += navLeftHide;
|
|
97
101
|
return style;
|
|
@@ -99,15 +103,8 @@ function LayoutDocsPage(_a) {
|
|
|
99
103
|
}
|
|
100
104
|
function LayoutLandingPage(_a) {
|
|
101
105
|
var children = _a.children;
|
|
102
|
-
var mobile = 800;
|
|
103
106
|
return (React.createElement(React.Fragment, null,
|
|
104
|
-
React.createElement("style", null, getStyle()),
|
|
105
|
-
React.createElement(NavTop, null),
|
|
106
|
-
React.createElement(NavMobile, null),
|
|
107
107
|
React.createElement(PageContent, null, children)));
|
|
108
|
-
function getStyle() {
|
|
109
|
-
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);
|
|
110
|
-
}
|
|
111
108
|
}
|
|
112
109
|
function PageContent(_a) {
|
|
113
110
|
var _b;
|
|
@@ -133,98 +130,157 @@ function PageContent(_a) {
|
|
|
133
130
|
children,
|
|
134
131
|
!isLandingPage && React.createElement(EditPageNote, { pageContext: pageContext }))));
|
|
135
132
|
}
|
|
136
|
-
function NavMobile() {
|
|
137
|
-
return (React.createElement("div", { id: "nav-mobile" },
|
|
138
|
-
React.createElement(NavigationHeader, { iconSize: 40, paddingLeft: 12, style: { justifyContent: 'center' } })));
|
|
139
|
-
}
|
|
140
|
-
function NavTop() {
|
|
141
|
-
var _a;
|
|
142
|
-
var pageContext2 = usePageContext2();
|
|
143
|
-
var paddingSize = 35;
|
|
144
|
-
var padding = "0 ".concat(paddingSize, "px");
|
|
145
|
-
var TopNavigation = pageContext2.config.TopNavigation || PassThrough;
|
|
146
|
-
return (React.createElement("div", { id: "top-navigation", className: "link-hover-animation", style: (_a = {
|
|
147
|
-
position: 'relative',
|
|
148
|
-
display: 'flex',
|
|
149
|
-
alignItems: 'center',
|
|
150
|
-
justifyContent: 'center',
|
|
151
|
-
textDecoration: 'none',
|
|
152
|
-
marginBottom: 'var(--block-margin)',
|
|
153
|
-
backgroundColor: 'var(--bg-color)'
|
|
154
|
-
},
|
|
155
|
-
_a['--padding-side'] = "".concat(paddingSize, "px"),
|
|
156
|
-
_a.fontSize = '1.06em',
|
|
157
|
-
_a.color = '#666',
|
|
158
|
-
_a) },
|
|
159
|
-
React.createElement("div", { style: { display: 'flex', alignItems: 'center', height: 70 } },
|
|
160
|
-
React.createElement(TopNavigation, null),
|
|
161
|
-
React.createElement(SearchLink, { style: { padding: padding } }),
|
|
162
|
-
React.createElement(MenuLink, { style: { padding: padding } }),
|
|
163
|
-
React.createElement(Links, { style: { display: 'inline-flex', padding: padding, marginLeft: -8 } }))));
|
|
164
|
-
}
|
|
165
133
|
function NavLeft() {
|
|
166
134
|
var pageContext = usePageContext();
|
|
167
|
-
var
|
|
168
|
-
var headerHeight = 60;
|
|
135
|
+
var navItemsAll = pageContext.navItemsAll, navItemsDetached = pageContext.navItemsDetached;
|
|
169
136
|
return (React.createElement(React.Fragment, null,
|
|
170
137
|
React.createElement("div", { id: "nav-left", className: "link-hover-animation", style: {
|
|
171
138
|
flexGrow: 1,
|
|
172
139
|
borderRight: 'var(--block-margin) solid white',
|
|
140
|
+
zIndex: 1,
|
|
173
141
|
} },
|
|
174
142
|
React.createElement("div", { style: {
|
|
175
143
|
position: 'sticky',
|
|
176
144
|
top: 0,
|
|
177
145
|
} },
|
|
178
|
-
React.createElement(
|
|
146
|
+
React.createElement(NavHead, { isNavLeft: true }),
|
|
179
147
|
React.createElement("div", { style: {
|
|
180
148
|
backgroundColor: 'var(--bg-color)',
|
|
181
149
|
display: 'flex',
|
|
182
150
|
justifyContent: 'flex-end',
|
|
183
151
|
} },
|
|
184
|
-
React.createElement("div", { id: "navigation-container", style:
|
|
185
|
-
|
|
186
|
-
|
|
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 })))))),
|
|
187
162
|
React.createElement("script", { dangerouslySetInnerHTML: { __html: autoScrollNav_SSR } })));
|
|
188
163
|
}
|
|
189
|
-
function
|
|
164
|
+
function NavHead(_a) {
|
|
190
165
|
var _b;
|
|
191
|
-
var
|
|
166
|
+
var isNavLeft = _a.isNavLeft;
|
|
167
|
+
var pageContext = usePageContext();
|
|
168
|
+
var pageContext2 = usePageContext2();
|
|
169
|
+
var projectName = pageContext.meta.projectName;
|
|
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
|
+
}
|
|
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;
|
|
192
255
|
var pageContext = usePageContext();
|
|
193
|
-
|
|
256
|
+
var iconSize = 39;
|
|
194
257
|
var projectName = pageContext.meta.projectName;
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
justifyContent: '
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
React.createElement("span", { style: {
|
|
218
|
-
marginLeft: "calc(var(--icon-text-padding) + 2px)",
|
|
219
|
-
fontSize: isProjectNameShort ? '1.65em' : '1.3em',
|
|
220
|
-
} }, projectName)),
|
|
221
|
-
React.createElement(SearchLink, { style: __assign(__assign({}, childrenStyle), { flexGrow: 0.5 }) }),
|
|
222
|
-
React.createElement(MenuLink, { style: __assign(__assign({}, childrenStyle), { flexGrow: 1 }) }))));
|
|
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;
|
|
223
280
|
}
|
|
224
281
|
var onMouseIgnore;
|
|
225
|
-
function MenuLink(
|
|
226
|
-
|
|
227
|
-
return (React.createElement("div", { style: __assign({ height: '100%', display: 'flex', alignItems: 'center', cursor: 'default' }, style), className: "colorize-on-hover menu-toggle", onClick: function (ev) {
|
|
282
|
+
function MenuLink(props) {
|
|
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) {
|
|
228
284
|
ev.preventDefault();
|
|
229
285
|
toggleMenuModal();
|
|
230
286
|
}, onMouseOver: function () {
|
|
@@ -239,31 +295,20 @@ function MenuLink(_a) {
|
|
|
239
295
|
onMouseIgnore = setTimeout(function () {
|
|
240
296
|
onMouseIgnore = undefined;
|
|
241
297
|
}, 1000);
|
|
242
|
-
} },
|
|
243
|
-
React.createElement(
|
|
244
|
-
|
|
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))));
|
|
245
306
|
}
|
|
246
307
|
function DocsIcon() {
|
|
247
|
-
return (React.createElement("span", { style: { marginRight: 'calc(var(--icon-text-padding) + 2px)'
|
|
308
|
+
return (React.createElement("span", { style: { marginRight: 'calc(var(--icon-text-padding) + 2px)' }, className: "decolorize-6" }, "\uD83D\uDCDA"));
|
|
248
309
|
}
|
|
249
|
-
/* TODO/now: use for mobile
|
|
250
310
|
function MenuIcon() {
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
style={{ marginRight: 'calc(var(--icon-text-padding) + 2px)', lineHeight: 0, width: '1.3em' }}
|
|
254
|
-
className="decolorize-6"
|
|
255
|
-
viewBox="0 0 448 512"
|
|
256
|
-
>
|
|
257
|
-
<path
|
|
258
|
-
fill="currentColor"
|
|
259
|
-
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"
|
|
260
|
-
></path>
|
|
261
|
-
</svg>
|
|
262
|
-
)
|
|
263
|
-
}
|
|
264
|
-
*/
|
|
265
|
-
function Style(_a) {
|
|
266
|
-
var children = _a.children;
|
|
267
|
-
return React.createElement("style", { dangerouslySetInnerHTML: { __html: children } });
|
|
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" },
|
|
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" })));
|
|
268
313
|
}
|
|
269
|
-
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.js
CHANGED
|
@@ -10,20 +10,19 @@ import React from 'react';
|
|
|
10
10
|
import { usePageContext } from './renderer/usePageContext';
|
|
11
11
|
import { NavigationContent } from './navigation/Navigation';
|
|
12
12
|
import { css } from './utils/css';
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import { isBrowser } from './utils/isBrowser';
|
|
13
|
+
import { containerQueryMobileLayout, containerQueryMobileMenu } from './Layout';
|
|
14
|
+
import { NavSecondaryContent } from './NavSecondaryContent';
|
|
16
15
|
import { getViewportWidth } from './utils/getViewportWidth';
|
|
17
|
-
|
|
16
|
+
import { Style } from './utils/Style';
|
|
18
17
|
function MenuModal(_a) {
|
|
19
18
|
var isTopNav = _a.isTopNav;
|
|
20
19
|
return (React.createElement(React.Fragment, null,
|
|
21
|
-
React.createElement(
|
|
20
|
+
React.createElement(Style, null, getStyle()),
|
|
22
21
|
React.createElement("div", { id: "menu-modal", className: "link-hover-animation add-transition", style: {
|
|
23
22
|
position: isTopNav ? 'absolute' : 'fixed',
|
|
24
23
|
width: '100%',
|
|
25
|
-
height: 'calc(100vh - var(--
|
|
26
|
-
top: 'var(--
|
|
24
|
+
height: 'calc(100vh - var(--nav-head-height))',
|
|
25
|
+
top: 'var(--nav-head-height)',
|
|
27
26
|
left: 0,
|
|
28
27
|
zIndex: 9999,
|
|
29
28
|
overflow: 'scroll',
|
|
@@ -34,37 +33,43 @@ function MenuModal(_a) {
|
|
|
34
33
|
// Place <LinksBottom /> to the bottom
|
|
35
34
|
display: 'flex',
|
|
36
35
|
flexDirection: 'column',
|
|
37
|
-
minHeight: 'calc(100vh - var(--
|
|
36
|
+
minHeight: 'calc(100vh - var(--nav-head-height))',
|
|
38
37
|
justifyContent: 'space-between',
|
|
39
38
|
// We don't set `container` to parent beacuse of a Chrome bug (showing a blank <MenuModal>)
|
|
40
|
-
|
|
39
|
+
container: 'container-viewport / inline-size',
|
|
41
40
|
} },
|
|
42
|
-
React.createElement(Nav, null)
|
|
41
|
+
React.createElement(Nav, null),
|
|
42
|
+
React.createElement(NavSecondary, { className: "show-only-for-mobile" })),
|
|
43
|
+
React.createElement(CloseButton, { className: "show-only-for-mobile" }))));
|
|
43
44
|
}
|
|
44
45
|
function Nav() {
|
|
45
46
|
var pageContext = usePageContext();
|
|
46
47
|
var navItems = pageContext.navItemsAll;
|
|
47
48
|
return React.createElement(NavigationContent, { columnLayout: true, navItems: navItems });
|
|
48
49
|
}
|
|
49
|
-
function
|
|
50
|
-
|
|
50
|
+
function NavSecondary(_a) {
|
|
51
|
+
var className = _a.className;
|
|
52
|
+
return (React.createElement("div", { className: className, style: {
|
|
51
53
|
display: 'flex',
|
|
52
54
|
justifyContent: 'center',
|
|
55
|
+
marginTop: 20,
|
|
53
56
|
} },
|
|
54
|
-
React.createElement(
|
|
57
|
+
React.createElement(NavSecondaryContent, { style: { height: 70 } })));
|
|
55
58
|
}
|
|
56
59
|
function getStyle() {
|
|
57
|
-
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(min-width: ", "px) {\n #menu-modal .nav-item-level-3 {\n display: none;\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(min-width: ", "px) {\n #menu-modal .nav-item-level-3 {\n display: none;\n }\n}\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);
|
|
58
61
|
}
|
|
59
|
-
function CloseButton() {
|
|
60
|
-
|
|
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 },
|
|
61
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" },
|
|
62
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' } }),
|
|
63
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" }))));
|
|
64
68
|
}
|
|
65
69
|
function toggleMenuModal() {
|
|
66
70
|
document.documentElement.classList.toggle('menu-modal-show');
|
|
67
|
-
if (document.documentElement.classList.contains('menu-modal-show') &&
|
|
71
|
+
if (document.documentElement.classList.contains('menu-modal-show') &&
|
|
72
|
+
getViewportWidth() < containerQueryMobileLayout) {
|
|
68
73
|
autoScroll();
|
|
69
74
|
}
|
|
70
75
|
}
|
|
@@ -75,46 +80,28 @@ function autoScroll() {
|
|
|
75
80
|
var navLink = navLinks[0];
|
|
76
81
|
if (!navLink)
|
|
77
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;
|
|
78
86
|
navLink.scrollIntoView({
|
|
79
87
|
behavior: 'instant',
|
|
80
88
|
block: 'center',
|
|
81
89
|
inline: 'start',
|
|
82
90
|
});
|
|
83
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;
|
|
100
|
+
}
|
|
84
101
|
function openMenuModal() {
|
|
85
102
|
document.documentElement.classList.add('menu-modal-show');
|
|
86
103
|
}
|
|
87
104
|
function closeMenuModal() {
|
|
88
105
|
document.documentElement.classList.remove('menu-modal-show');
|
|
89
106
|
}
|
|
90
|
-
function initCloseListeners() {
|
|
91
|
-
if (!isBrowser())
|
|
92
|
-
return;
|
|
93
|
-
document.addEventListener('click', onLinkClick);
|
|
94
|
-
// It's redundant (and onLinkClick() is enough), but just to be sure.
|
|
95
|
-
addEventListener('hashchange', closeMenuModal);
|
|
96
|
-
}
|
|
97
|
-
function onLinkClick(ev) {
|
|
98
|
-
if (ev.altKey || ev.ctrlKey || ev.metaKey || ev.shiftKey)
|
|
99
|
-
return;
|
|
100
|
-
var linkTag = findLinkTag(ev.target);
|
|
101
|
-
if (!linkTag)
|
|
102
|
-
return;
|
|
103
|
-
var href = linkTag.getAttribute('href');
|
|
104
|
-
if (!href)
|
|
105
|
-
return;
|
|
106
|
-
if (!href.startsWith('/') && !href.startsWith('#'))
|
|
107
|
-
return;
|
|
108
|
-
closeMenuModal();
|
|
109
|
-
}
|
|
110
|
-
function findLinkTag(target) {
|
|
111
|
-
while (target.tagName !== 'A') {
|
|
112
|
-
var parentNode = target.parentNode;
|
|
113
|
-
if (!parentNode) {
|
|
114
|
-
return null;
|
|
115
|
-
}
|
|
116
|
-
target = parentNode;
|
|
117
|
-
}
|
|
118
|
-
return target;
|
|
119
|
-
}
|
|
120
107
|
var templateObject_1;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { NavSecondaryContent };
|
|
2
2
|
import React from 'react';
|
|
3
3
|
import '@docsearch/css';
|
|
4
|
-
declare function
|
|
4
|
+
declare function NavSecondaryContent(props: {
|
|
5
5
|
style?: React.CSSProperties;
|
|
6
|
+
className?: string;
|
|
6
7
|
}): React.JSX.Element;
|
|
@@ -9,8 +9,7 @@ var __assign = (this && this.__assign) || function () {
|
|
|
9
9
|
};
|
|
10
10
|
return __assign.apply(this, arguments);
|
|
11
11
|
};
|
|
12
|
-
|
|
13
|
-
export { Links };
|
|
12
|
+
export { NavSecondaryContent };
|
|
14
13
|
import React from 'react';
|
|
15
14
|
import iconGithub from './icons/github.svg';
|
|
16
15
|
import iconTwitter from './icons/twitter.svg';
|
|
@@ -19,12 +18,11 @@ import iconChangelog from './icons/changelog.svg';
|
|
|
19
18
|
import iconLanguages from './icons/languages.svg';
|
|
20
19
|
import { usePageContext } from './renderer/usePageContext';
|
|
21
20
|
import '@docsearch/css';
|
|
22
|
-
function
|
|
23
|
-
var style = _a.style;
|
|
21
|
+
function NavSecondaryContent(props) {
|
|
24
22
|
var pageContext = usePageContext();
|
|
25
|
-
var
|
|
23
|
+
var _a = pageContext.config, projectInfo = _a.projectInfo, i18n = _a.i18n;
|
|
26
24
|
var iconI18n = !i18n ? null : (React.createElement(LinkIcon, { className: "decolorize-4", icon: iconLanguages, href: '/languages', style: { height: 21, position: 'relative', top: 0, left: 0 } }));
|
|
27
|
-
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) }),
|
|
28
26
|
iconI18n,
|
|
29
27
|
projectInfo.discordInvite && (React.createElement(LinkIcon, { className: "decolorize-6", icon: iconDiscord, href: projectInfo.discordInvite })),
|
|
30
28
|
React.createElement(LinkIcon, { className: "decolorize-4", icon: iconTwitter, href: projectInfo.twitterProfile }),
|
|
@@ -37,7 +35,7 @@ function ChangelogButton() {
|
|
|
37
35
|
return (React.createElement("a", { href: "".concat(projectInfo.githubRepository, "/blob/main/CHANGELOG.md"), className: "colorize-on-hover", style: {
|
|
38
36
|
display: 'flex',
|
|
39
37
|
alignItems: 'center',
|
|
40
|
-
padding:
|
|
38
|
+
padding: '0 5px',
|
|
41
39
|
height: '100%',
|
|
42
40
|
} },
|
|
43
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;
|