@brillout/docpress 0.15.13-commit-9b3f898 → 0.15.13-commit-39924f0
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 +20 -37
- package/MenuModal/toggleMenuModal.ts +35 -8
- package/MenuModal.tsx +3 -3
- package/package.json +1 -1
- package/utils/getViewportWidth.ts +2 -2
package/Layout.tsx
CHANGED
|
@@ -15,7 +15,12 @@ import { getNavItemsWithComputed, NavItem, NavItemComponent } from './NavItemCom
|
|
|
15
15
|
import { parseMarkdownMini } from './parseMarkdownMini'
|
|
16
16
|
import { usePageContext } from './renderer/usePageContext'
|
|
17
17
|
import { ExternalLinks } from './ExternalLinks'
|
|
18
|
-
import {
|
|
18
|
+
import {
|
|
19
|
+
closeMenuModalOnMouseLeaveToggle,
|
|
20
|
+
ignoreHoverOnTouchStart,
|
|
21
|
+
openMenuModalOnMouseEnter,
|
|
22
|
+
toggleMenuModal,
|
|
23
|
+
} from './MenuModal/toggleMenuModal'
|
|
19
24
|
import { MenuModal } from './MenuModal'
|
|
20
25
|
import { autoScrollNav_SSR } from './autoScrollNav'
|
|
21
26
|
import { initializeJsToggle_SSR } from './code-blocks/hooks/useSelectCodeLang'
|
|
@@ -280,8 +285,8 @@ function NavHead({ isNavLeft }: { isNavLeft?: true }) {
|
|
|
280
285
|
style={{
|
|
281
286
|
display: 'inline-flex',
|
|
282
287
|
fontSize: '1.06em',
|
|
283
|
-
|
|
284
|
-
|
|
288
|
+
paddingRight: 'var(--main-view-padding)',
|
|
289
|
+
paddingLeft: 'var(--padding-side)',
|
|
285
290
|
}}
|
|
286
291
|
/>
|
|
287
292
|
</div>
|
|
@@ -321,7 +326,7 @@ function NavHead({ isNavLeft }: { isNavLeft?: true }) {
|
|
|
321
326
|
justifyContent: 'center',
|
|
322
327
|
}}
|
|
323
328
|
>
|
|
324
|
-
{!hideNavHeadLogo && <NavHeadLogo />}
|
|
329
|
+
{!hideNavHeadLogo && <NavHeadLogo isNavLeft={isNavLeft} />}
|
|
325
330
|
<div className="desktop-grow" style={{ display: 'none' }} />
|
|
326
331
|
{algolia && <SearchLink className="always-shown" style={menuLinkStyle} />}
|
|
327
332
|
<MenuToggleMain className="always-shown nav-head-menu-toggle" style={menuLinkStyle} />
|
|
@@ -338,10 +343,6 @@ function getStyleNav() {
|
|
|
338
343
|
style += css`
|
|
339
344
|
@container container-viewport (max-width: ${viewMobile}px) {
|
|
340
345
|
.nav-head:not(.is-nav-left) {
|
|
341
|
-
.nav-head-logo {
|
|
342
|
-
always-shown: flex-start !important;
|
|
343
|
-
padding-left: var(--main-view-padding);
|
|
344
|
-
}
|
|
345
346
|
.nav-head-menu-toggle {
|
|
346
347
|
justify-content: flex-end !important;
|
|
347
348
|
padding-right: var(--main-view-padding) !important;
|
|
@@ -373,9 +374,6 @@ function getStyleNav() {
|
|
|
373
374
|
--icon-text-padding: 8px;
|
|
374
375
|
--padding-side: 20px;
|
|
375
376
|
}
|
|
376
|
-
.nav-head-logo {
|
|
377
|
-
padding: 0 var(--padding-side);
|
|
378
|
-
}
|
|
379
377
|
}
|
|
380
378
|
}`
|
|
381
379
|
|
|
@@ -385,10 +383,7 @@ function getStyleNav() {
|
|
|
385
383
|
.nav-head:not(.is-nav-left) {
|
|
386
384
|
.nav-head-content {
|
|
387
385
|
--icon-text-padding: min(8px, 0.5cqw);
|
|
388
|
-
--padding-side: min(20px, 1.
|
|
389
|
-
}
|
|
390
|
-
.nav-head-logo {
|
|
391
|
-
padding: 0 var(--padding-side);
|
|
386
|
+
--padding-side: min(20px, 1.2cqw);
|
|
392
387
|
}
|
|
393
388
|
&.has-max-width {
|
|
394
389
|
.desktop-grow {
|
|
@@ -423,10 +418,6 @@ function getStyleNav() {
|
|
|
423
418
|
flex-grow: 1;
|
|
424
419
|
}
|
|
425
420
|
}
|
|
426
|
-
.nav-head-logo {
|
|
427
|
-
padding-left: 15px;
|
|
428
|
-
margin-left: -15px;
|
|
429
|
-
}
|
|
430
421
|
}
|
|
431
422
|
.show-on-nav-hover {
|
|
432
423
|
opacity: 0;
|
|
@@ -512,7 +503,7 @@ function NavHeadLeftFullWidthBackground() {
|
|
|
512
503
|
)
|
|
513
504
|
}
|
|
514
505
|
|
|
515
|
-
function NavHeadLogo({
|
|
506
|
+
function NavHeadLogo({ isNavLeft }: { isNavLeft?: true }) {
|
|
516
507
|
const pageContext = usePageContext()
|
|
517
508
|
|
|
518
509
|
const { navLogo } = pageContext.globalContext.config.docpress
|
|
@@ -546,12 +537,17 @@ function NavHeadLogo({ className }: { className?: string }) {
|
|
|
546
537
|
|
|
547
538
|
return (
|
|
548
539
|
<a
|
|
549
|
-
className={cls(['nav-head-logo', className])}
|
|
550
540
|
style={{
|
|
551
541
|
display: 'flex',
|
|
552
542
|
alignItems: 'center',
|
|
553
543
|
height: '100%',
|
|
554
544
|
color: 'inherit',
|
|
545
|
+
...(!isNavLeft
|
|
546
|
+
? {
|
|
547
|
+
paddingLeft: 'var(--main-view-padding)',
|
|
548
|
+
paddingRight: 'var(--padding-side)',
|
|
549
|
+
}
|
|
550
|
+
: {}),
|
|
555
551
|
}}
|
|
556
552
|
href="/"
|
|
557
553
|
onContextMenu={!navLogo ? undefined : onContextMenu}
|
|
@@ -571,7 +567,6 @@ function isProjectNameShort(name: string) {
|
|
|
571
567
|
return name.length <= 4
|
|
572
568
|
}
|
|
573
569
|
|
|
574
|
-
let onMouseIgnore: ReturnType<typeof setTimeout> | undefined
|
|
575
570
|
type PropsDiv = React.HTMLProps<HTMLDivElement>
|
|
576
571
|
function MenuToggleMain(props: PropsDiv) {
|
|
577
572
|
return (
|
|
@@ -616,20 +611,12 @@ function MenuToggle({ menuId, ...props }: PropsDiv & { menuId: number }) {
|
|
|
616
611
|
toggleMenuModal(menuId)
|
|
617
612
|
}}
|
|
618
613
|
onMouseEnter={() => {
|
|
619
|
-
|
|
620
|
-
if (isMobileNav()) return
|
|
621
|
-
openMenuModal(menuId)
|
|
614
|
+
openMenuModalOnMouseEnter(menuId)
|
|
622
615
|
}}
|
|
623
616
|
onMouseLeave={() => {
|
|
624
|
-
|
|
625
|
-
if (isMobileNav()) return
|
|
626
|
-
coseMenuModalOnMouseLeave(menuId)
|
|
627
|
-
}}
|
|
628
|
-
onTouchStart={() => {
|
|
629
|
-
onMouseIgnore = setTimeout(() => {
|
|
630
|
-
onMouseIgnore = undefined
|
|
631
|
-
}, 1000)
|
|
617
|
+
closeMenuModalOnMouseLeaveToggle(menuId)
|
|
632
618
|
}}
|
|
619
|
+
onTouchStart={ignoreHoverOnTouchStart}
|
|
633
620
|
>
|
|
634
621
|
<Style>{getAnimation()}</Style>
|
|
635
622
|
{props.children}
|
|
@@ -737,7 +724,3 @@ function MenuIcon() {
|
|
|
737
724
|
</svg>
|
|
738
725
|
)
|
|
739
726
|
}
|
|
740
|
-
|
|
741
|
-
function isMobileNav() {
|
|
742
|
-
return window.innerWidth <= viewTablet
|
|
743
|
-
}
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
export { toggleMenuModal }
|
|
2
|
-
export { openMenuModal }
|
|
3
|
-
export { keepMenuModalOpen }
|
|
4
2
|
export { closeMenuModal }
|
|
5
|
-
|
|
3
|
+
// Hover handling
|
|
4
|
+
export { ignoreHoverOnTouchStart }
|
|
5
|
+
export { openMenuModalOnMouseEnter }
|
|
6
|
+
export { keepMenuModalOpenOnMouseOver }
|
|
7
|
+
export { closeMenuModalOnMouseLeave }
|
|
8
|
+
export { closeMenuModalOnMouseLeaveToggle }
|
|
6
9
|
|
|
7
10
|
import { viewTablet } from '../Layout'
|
|
8
11
|
import { getHydrationPromise } from '../renderer/getHydrationPromise'
|
|
@@ -11,9 +14,6 @@ import { isBrowser } from '../utils/isBrowser'
|
|
|
11
14
|
|
|
12
15
|
initScrollListener()
|
|
13
16
|
|
|
14
|
-
function keepMenuModalOpen() {
|
|
15
|
-
open()
|
|
16
|
-
}
|
|
17
17
|
function openMenuModal(menuNavigationId: number) {
|
|
18
18
|
open(menuNavigationId)
|
|
19
19
|
}
|
|
@@ -72,7 +72,8 @@ let toggleLock:
|
|
|
72
72
|
timeoutAction: NodeJS.Timeout
|
|
73
73
|
}
|
|
74
74
|
| undefined
|
|
75
|
-
function
|
|
75
|
+
function closeMenuModalOnMouseLeaveToggle(menuId: number) {
|
|
76
|
+
if (ignoreHover()) return
|
|
76
77
|
clearTimeout(toggleLock?.timeoutAction)
|
|
77
78
|
const timeoutAction = setTimeout(action, 100)
|
|
78
79
|
toggleLock = {
|
|
@@ -111,7 +112,7 @@ function toggleMenuModal(menuId: number) {
|
|
|
111
112
|
closeMenuModal()
|
|
112
113
|
} else {
|
|
113
114
|
openMenuModal(menuId)
|
|
114
|
-
if (
|
|
115
|
+
if (isMobileNav()) autoScroll()
|
|
115
116
|
}
|
|
116
117
|
}
|
|
117
118
|
|
|
@@ -137,3 +138,29 @@ function findCollapsibleEl(navLink: HTMLElement | undefined) {
|
|
|
137
138
|
}
|
|
138
139
|
return null
|
|
139
140
|
}
|
|
141
|
+
|
|
142
|
+
function closeMenuModalOnMouseLeave() {
|
|
143
|
+
if (ignoreHover()) return
|
|
144
|
+
closeMenuModal()
|
|
145
|
+
}
|
|
146
|
+
function keepMenuModalOpenOnMouseOver() {
|
|
147
|
+
if (ignoreHover()) return
|
|
148
|
+
open()
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
let isTouchStart: ReturnType<typeof setTimeout> | undefined
|
|
152
|
+
function ignoreHoverOnTouchStart() {
|
|
153
|
+
isTouchStart = setTimeout(() => {
|
|
154
|
+
isTouchStart = undefined
|
|
155
|
+
}, 1000)
|
|
156
|
+
}
|
|
157
|
+
function openMenuModalOnMouseEnter(menuId: number) {
|
|
158
|
+
if (ignoreHover()) return
|
|
159
|
+
openMenuModal(menuId)
|
|
160
|
+
}
|
|
161
|
+
function ignoreHover() {
|
|
162
|
+
return isTouchStart || isMobileNav()
|
|
163
|
+
}
|
|
164
|
+
function isMobileNav() {
|
|
165
|
+
return getViewportWidth() <= viewTablet
|
|
166
|
+
}
|
package/MenuModal.tsx
CHANGED
|
@@ -7,7 +7,7 @@ import { viewDesktop, viewTablet } from './Layout'
|
|
|
7
7
|
import { ExternalLinks } from './ExternalLinks'
|
|
8
8
|
import { Style } from './utils/Style'
|
|
9
9
|
import { NavigationWithColumnLayout } from './MenuModal/NavigationWithColumnLayout'
|
|
10
|
-
import { closeMenuModal,
|
|
10
|
+
import { closeMenuModal, closeMenuModalOnMouseLeave, keepMenuModalOpenOnMouseOver } from './MenuModal/toggleMenuModal'
|
|
11
11
|
import { EditLink } from './EditLink'
|
|
12
12
|
|
|
13
13
|
function MenuModal({ isTopNav }: { isTopNav: boolean }) {
|
|
@@ -27,8 +27,8 @@ function MenuModal({ isTopNav }: { isTopNav: boolean }) {
|
|
|
27
27
|
transitionProperty: 'opacity',
|
|
28
28
|
transitionTimingFunction: 'ease',
|
|
29
29
|
}}
|
|
30
|
-
onMouseOver={
|
|
31
|
-
onMouseLeave={
|
|
30
|
+
onMouseOver={keepMenuModalOpenOnMouseOver}
|
|
31
|
+
onMouseLeave={closeMenuModalOnMouseLeave}
|
|
32
32
|
>
|
|
33
33
|
<div
|
|
34
34
|
id="menu-modal-scroll-container"
|
package/package.json
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export function getViewportWidth(): number {
|
|
2
|
-
//
|
|
3
|
-
return document.documentElement.
|
|
2
|
+
// Width without scrollbar
|
|
3
|
+
return document.documentElement.scrollWidth
|
|
4
4
|
}
|