@xyd-js/theme-poetry 0.1.0-xyd.16 → 0.1.0-xyd.3
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/package.json +7 -34
- package/rollup.config.js +77 -0
- package/src/components/Layouts/Layout.styles.tsx +145 -0
- package/src/components/Layouts/Layout.tsx +116 -0
- package/src/components/Layouts/index.ts +5 -0
- package/src/index.css +67 -0
- package/src/index.ts +1 -0
- package/src/override.css +7 -0
- package/src/theme.tsx +78 -0
- package/src/vars.css +5 -0
- package/tsconfig.json +37 -0
- package/dist/index.css +0 -1
- package/dist/index.d.ts +0 -19
- package/dist/index.js +0 -130
- package/dist/index.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xyd-js/theme-poetry",
|
|
3
|
-
"version": "0.1.0-xyd.
|
|
3
|
+
"version": "0.1.0-xyd.3",
|
|
4
4
|
"description": "",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -12,46 +12,19 @@
|
|
|
12
12
|
"import": "./dist/index.js"
|
|
13
13
|
}
|
|
14
14
|
},
|
|
15
|
-
"files": [
|
|
16
|
-
"dist",
|
|
17
|
-
"public",
|
|
18
|
-
"package.json"
|
|
19
|
-
],
|
|
20
15
|
"dependencies": {
|
|
21
|
-
"@
|
|
22
|
-
"@
|
|
23
|
-
"@xyd-js/xtokens": "0.1.0-xyd.1",
|
|
24
|
-
"@xyd-js/atlas": "0.1.0-xyd.7"
|
|
16
|
+
"@xyd-js/xtokens": "0.1.0-xyd.0",
|
|
17
|
+
"@xyd-js/components": "0.1.0-xyd.0"
|
|
25
18
|
},
|
|
26
19
|
"peerDependencies": {
|
|
27
|
-
"
|
|
28
|
-
"react-dom": "^19.0.0",
|
|
29
|
-
"react-router": "^7.1.1",
|
|
30
|
-
"@xyd-js/components": "0.1.0-xyd.1",
|
|
31
|
-
"@xyd-js/framework": "0.1.0-xyd.21"
|
|
20
|
+
"@xyd-js/framework": "0.1.0-xyd.4"
|
|
32
21
|
},
|
|
33
22
|
"devDependencies": {
|
|
34
|
-
"@babel/preset-typescript": "^7.26.0",
|
|
35
|
-
"@babel/preset-react": "^7.26.0",
|
|
36
|
-
"@babel/preset-env": "^7.26.0",
|
|
37
|
-
"@babel/preset-flow": "^7.25.9",
|
|
38
|
-
"@rollup/plugin-alias": "^5.1.1",
|
|
39
|
-
"@rollup/plugin-babel": "^6.0.4",
|
|
40
|
-
"@rollup/plugin-commonjs": "^28.0.1",
|
|
41
|
-
"@rollup/plugin-node-resolve": "^15.3.0",
|
|
42
|
-
"@rollup/plugin-typescript": "^12.1.1",
|
|
43
|
-
"@wyw-in-js/rollup": "^0.5.5",
|
|
44
|
-
"@wyw-in-js/vite": "^0.5.5",
|
|
45
23
|
"autoprefixer": "^10.4.20",
|
|
46
|
-
"postcss": "^8.4.
|
|
24
|
+
"postcss": "^8.4.49",
|
|
47
25
|
"postcss-import": "^16.1.0",
|
|
48
|
-
"
|
|
49
|
-
"rollup-plugin-
|
|
50
|
-
"rollup-plugin-dts": "^6.1.1",
|
|
51
|
-
"rollup-plugin-postcss": "^4.0.2",
|
|
52
|
-
"rollup-plugin-terser": "^7.0.2",
|
|
53
|
-
"tsup": "^8.3.0",
|
|
54
|
-
"rimraf": "^3.0.2"
|
|
26
|
+
"postcss-url": "^10.1.3",
|
|
27
|
+
"rollup-plugin-postcss": "^4.0.2"
|
|
55
28
|
},
|
|
56
29
|
"scripts": {
|
|
57
30
|
"clean": "rimraf build",
|
package/rollup.config.js
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import {createRequire} from "module";
|
|
2
|
+
|
|
3
|
+
import resolve from '@rollup/plugin-node-resolve';
|
|
4
|
+
import commonjs from '@rollup/plugin-commonjs';
|
|
5
|
+
import typescript from '@rollup/plugin-typescript';
|
|
6
|
+
import dts from 'rollup-plugin-dts';
|
|
7
|
+
import postcss from 'rollup-plugin-postcss';
|
|
8
|
+
import postcssImport from 'postcss-import';
|
|
9
|
+
import wyw from '@wyw-in-js/rollup';
|
|
10
|
+
|
|
11
|
+
const require = createRequire(import.meta.url);
|
|
12
|
+
const {dependencies} = require('./package.json', {assert: {type: 'json'}});
|
|
13
|
+
|
|
14
|
+
// unify theme build system
|
|
15
|
+
const external = [
|
|
16
|
+
...Object.keys(dependencies),
|
|
17
|
+
'react',
|
|
18
|
+
'react-router',
|
|
19
|
+
|
|
20
|
+
// TODO: another `@xyd` packages?
|
|
21
|
+
'@xyd-js/framework/react'
|
|
22
|
+
];
|
|
23
|
+
|
|
24
|
+
export default [
|
|
25
|
+
{
|
|
26
|
+
input: {
|
|
27
|
+
index: './src/index.ts'
|
|
28
|
+
},
|
|
29
|
+
output: [
|
|
30
|
+
{
|
|
31
|
+
dir: 'dist',
|
|
32
|
+
format: 'esm',
|
|
33
|
+
sourcemap: true,
|
|
34
|
+
entryFileNames: '[name].js'
|
|
35
|
+
}
|
|
36
|
+
],
|
|
37
|
+
plugins: [
|
|
38
|
+
wyw({
|
|
39
|
+
include: ['**/*.{ts,tsx}'],
|
|
40
|
+
babelOptions: {
|
|
41
|
+
presets: [
|
|
42
|
+
'@babel/preset-typescript',
|
|
43
|
+
'@babel/preset-react'
|
|
44
|
+
],
|
|
45
|
+
},
|
|
46
|
+
}),
|
|
47
|
+
resolve(),
|
|
48
|
+
commonjs(),
|
|
49
|
+
typescript({
|
|
50
|
+
tsconfig: './tsconfig.json',
|
|
51
|
+
}),
|
|
52
|
+
postcss({
|
|
53
|
+
extensions: ['.css'],
|
|
54
|
+
plugins: [postcssImport()],
|
|
55
|
+
extract: true, // Extract CSS into a separate file
|
|
56
|
+
minimize: true, // Minify the CSS
|
|
57
|
+
}),
|
|
58
|
+
],
|
|
59
|
+
external
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
input: './src/index.ts',
|
|
63
|
+
output: {
|
|
64
|
+
file: 'dist/index.d.ts',
|
|
65
|
+
format: 'es',
|
|
66
|
+
},
|
|
67
|
+
plugins: [
|
|
68
|
+
dts({
|
|
69
|
+
respectExternal: true, // Ignore unresolved imports
|
|
70
|
+
}),
|
|
71
|
+
],
|
|
72
|
+
external: [
|
|
73
|
+
...external,
|
|
74
|
+
/\.css$/ // Mark CSS imports as external
|
|
75
|
+
],
|
|
76
|
+
},
|
|
77
|
+
];
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import {css} from "@linaria/core";
|
|
2
|
+
|
|
3
|
+
const globalPageGutter = '8px';
|
|
4
|
+
export const globalHeaderHeight = '46px';
|
|
5
|
+
const globalHeaderWarningHeight = "0px";
|
|
6
|
+
const contentTopSpace = "12px";
|
|
7
|
+
|
|
8
|
+
const globalHeaderHeightWithSub = '90px';
|
|
9
|
+
|
|
10
|
+
const cubicMove = "cubic-bezier(.65, 0, .35, 1)";
|
|
11
|
+
const sidebarWidth = "450px";
|
|
12
|
+
|
|
13
|
+
// TODO: better solution - design tokens
|
|
14
|
+
export const globals = css`
|
|
15
|
+
:global() {
|
|
16
|
+
:root {
|
|
17
|
+
--xyd-navbar-height: ${globalHeaderHeight};
|
|
18
|
+
--xyd-sidebar-width: ${sidebarWidth};
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
`;
|
|
22
|
+
|
|
23
|
+
export const $layout = {
|
|
24
|
+
host: css`
|
|
25
|
+
width: 100%;
|
|
26
|
+
`,
|
|
27
|
+
header: css`
|
|
28
|
+
display: flex;
|
|
29
|
+
justify-content: space-between;
|
|
30
|
+
align-items: center;
|
|
31
|
+
|
|
32
|
+
position: fixed;
|
|
33
|
+
top: ${globalHeaderWarningHeight};
|
|
34
|
+
right: ${globalPageGutter};
|
|
35
|
+
left: ${globalPageGutter};
|
|
36
|
+
|
|
37
|
+
height: ${globalHeaderHeight};
|
|
38
|
+
`,
|
|
39
|
+
header$$sub: css`
|
|
40
|
+
flex-direction: column;
|
|
41
|
+
height: ${globalHeaderHeightWithSub};
|
|
42
|
+
transition: transform 200ms;
|
|
43
|
+
`,
|
|
44
|
+
header$$hideMain: css`
|
|
45
|
+
transform: translateY(calc(-${globalHeaderHeight} + 3px));
|
|
46
|
+
`,
|
|
47
|
+
main: css`
|
|
48
|
+
position: fixed;
|
|
49
|
+
top: calc(${globalHeaderHeight} + ${globalHeaderWarningHeight});
|
|
50
|
+
bottom: ${globalPageGutter};
|
|
51
|
+
left: ${globalPageGutter};
|
|
52
|
+
right: ${globalPageGutter};
|
|
53
|
+
}`,
|
|
54
|
+
main$$sub: css`
|
|
55
|
+
top: calc(${globalHeaderHeightWithSub} + ${globalHeaderWarningHeight});
|
|
56
|
+
transition: top 200ms;
|
|
57
|
+
`,
|
|
58
|
+
sidebar: css`
|
|
59
|
+
flex-direction: column;
|
|
60
|
+
position: absolute;
|
|
61
|
+
top: 0;
|
|
62
|
+
left: 0;
|
|
63
|
+
bottom: 0;
|
|
64
|
+
right: 0;
|
|
65
|
+
z-index: 101;
|
|
66
|
+
width: ${sidebarWidth};
|
|
67
|
+
border: 0;
|
|
68
|
+
padding: ${contentTopSpace} 0 0;
|
|
69
|
+
overflow: visible;
|
|
70
|
+
background: none;
|
|
71
|
+
border-radius: 0;
|
|
72
|
+
opacity: 1;
|
|
73
|
+
visibility: visible;
|
|
74
|
+
transition: opacity .3s ${cubicMove};
|
|
75
|
+
`,
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export const $page = {
|
|
79
|
+
host: css`
|
|
80
|
+
position: absolute;
|
|
81
|
+
top: ${contentTopSpace};
|
|
82
|
+
right: 0;
|
|
83
|
+
bottom: 0;
|
|
84
|
+
z-index: 201;
|
|
85
|
+
background: #fff;
|
|
86
|
+
|
|
87
|
+
overflow: hidden;
|
|
88
|
+
transition: opacity .3s ${cubicMove};
|
|
89
|
+
|
|
90
|
+
left: ${sidebarWidth};
|
|
91
|
+
`,
|
|
92
|
+
scroll: css`
|
|
93
|
+
overflow: scroll;
|
|
94
|
+
height: 100%;
|
|
95
|
+
|
|
96
|
+
`,
|
|
97
|
+
container: css`
|
|
98
|
+
padding: 0;
|
|
99
|
+
width: 100%;
|
|
100
|
+
//position: relative; TODO: unset if during client render?
|
|
101
|
+
min-height: 100%;
|
|
102
|
+
|
|
103
|
+
max-width: 100%;
|
|
104
|
+
margin: 0 auto;
|
|
105
|
+
font-size: 15px;
|
|
106
|
+
line-height: 24px;
|
|
107
|
+
`,
|
|
108
|
+
articleContainer: css`
|
|
109
|
+
width: 980px;
|
|
110
|
+
padding: 40px 56px;
|
|
111
|
+
padding-left: 0;
|
|
112
|
+
padding-top: 20px;
|
|
113
|
+
margin: 0 auto;
|
|
114
|
+
margin-left: 100px;
|
|
115
|
+
max-width: 100%;
|
|
116
|
+
`,
|
|
117
|
+
articleContainer$$fullWidth: css`
|
|
118
|
+
width: 1200px;
|
|
119
|
+
`,
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
export const $article = {
|
|
123
|
+
host: css`
|
|
124
|
+
display: flex;
|
|
125
|
+
gap: 30px;
|
|
126
|
+
width: 100%;
|
|
127
|
+
align-items: flex-start;;
|
|
128
|
+
`,
|
|
129
|
+
content: css`
|
|
130
|
+
flex: 1 1 0;
|
|
131
|
+
overflow: hidden;
|
|
132
|
+
`,
|
|
133
|
+
nav: css`
|
|
134
|
+
position: sticky;
|
|
135
|
+
top: 30px;
|
|
136
|
+
width: 180px;
|
|
137
|
+
margin-top: 0;
|
|
138
|
+
margin-left: 50px;
|
|
139
|
+
padding-left: 16px;
|
|
140
|
+
flex: none;
|
|
141
|
+
`,
|
|
142
|
+
nav$$equal: css`
|
|
143
|
+
flex: 1;
|
|
144
|
+
`
|
|
145
|
+
}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import React, {useEffect, useState} from "react"
|
|
2
|
+
|
|
3
|
+
import {$layout, $page, $article, globalHeaderHeight} from "./Layout.styles"
|
|
4
|
+
|
|
5
|
+
export interface LayoutProps {
|
|
6
|
+
header: React.ReactNode;
|
|
7
|
+
aside: React.ReactNode;
|
|
8
|
+
content: React.ReactNode;
|
|
9
|
+
contentNav: React.ReactNode;
|
|
10
|
+
subheader?: boolean;
|
|
11
|
+
kind?: "fullwidth" | "equal"
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
// TODO: move scroller to xyd-foo
|
|
15
|
+
export function Layout(props: LayoutProps) {
|
|
16
|
+
const [hideMainHeader, setHideMainHeader] = useState(false)
|
|
17
|
+
const [scrollTop, setScrollTop] = useState(0)
|
|
18
|
+
const [controlScrollPos, setControlScrollPos] = useState(0)
|
|
19
|
+
|
|
20
|
+
useEffect(() => {
|
|
21
|
+
if (scrollTop === controlScrollPos) {
|
|
22
|
+
return
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const checkpoint = parseInt(globalHeaderHeight, 10) / 2
|
|
26
|
+
const diff = scrollTop - controlScrollPos
|
|
27
|
+
const reversePosDiff = Math.abs(scrollTop - controlScrollPos)
|
|
28
|
+
|
|
29
|
+
if (diff > checkpoint) {
|
|
30
|
+
setHideMainHeader(true)
|
|
31
|
+
} else if (reversePosDiff > checkpoint) {
|
|
32
|
+
setHideMainHeader(false)
|
|
33
|
+
}
|
|
34
|
+
}, [
|
|
35
|
+
scrollTop,
|
|
36
|
+
controlScrollPos,
|
|
37
|
+
]);
|
|
38
|
+
|
|
39
|
+
function onScroll(e: Event) {
|
|
40
|
+
if (!(e.target instanceof HTMLElement)) {
|
|
41
|
+
return
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
const scroll = e.target?.scrollTop
|
|
45
|
+
setScrollTop(scroll)
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
function onScrollFinish(e: Event) {
|
|
49
|
+
if (!(e.target instanceof HTMLElement)) {
|
|
50
|
+
return
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
setControlScrollPos(e.target?.scrollTop)
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// TODO: by ref?
|
|
57
|
+
// TODO: MOVE SOMEWHERE ELSE BECAUSE IT DECREASE PERFORMANCE (RERENDER)
|
|
58
|
+
useEffect(() => {
|
|
59
|
+
// return // TODO: UNCOMMENT
|
|
60
|
+
|
|
61
|
+
if (!props.subheader) {
|
|
62
|
+
return
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
document.querySelector(`.${$page.scroll}`)?.addEventListener("scroll", onScroll)
|
|
66
|
+
document.querySelector(`.${$page.scroll}`)?.addEventListener("scrollend", onScrollFinish)
|
|
67
|
+
|
|
68
|
+
return () => {
|
|
69
|
+
document.querySelector(`.${$page.scroll}`)?.removeEventListener("scroll", onScroll)
|
|
70
|
+
document.querySelector(`.${$page.scroll}`)?.removeEventListener("scrollend", onScrollFinish)
|
|
71
|
+
}
|
|
72
|
+
}, []);
|
|
73
|
+
|
|
74
|
+
return <div className={$layout.host}>
|
|
75
|
+
<header className={`
|
|
76
|
+
${$layout.header}
|
|
77
|
+
${props.subheader && $layout.header$$sub}
|
|
78
|
+
${hideMainHeader && $layout.header$$hideMain}
|
|
79
|
+
`}>
|
|
80
|
+
{props.header}
|
|
81
|
+
</header>
|
|
82
|
+
<main className={`
|
|
83
|
+
${$layout.main}
|
|
84
|
+
${!hideMainHeader && props.subheader && $layout.main$$sub}
|
|
85
|
+
`}>
|
|
86
|
+
<aside className={$layout.sidebar}>
|
|
87
|
+
{props.aside}
|
|
88
|
+
</aside>
|
|
89
|
+
<div className={$page.host}>
|
|
90
|
+
<div className={$page.scroll}>
|
|
91
|
+
<div className={$page.container}>
|
|
92
|
+
<div className={`
|
|
93
|
+
${$page.articleContainer}
|
|
94
|
+
${props.kind == "fullwidth" && $page.articleContainer$$fullWidth}
|
|
95
|
+
${props.kind == "equal" && $page.articleContainer$$fullWidth}
|
|
96
|
+
`}>
|
|
97
|
+
<article className={$article.host}>
|
|
98
|
+
<section className={$article.content}>
|
|
99
|
+
{props.content}
|
|
100
|
+
</section>
|
|
101
|
+
{
|
|
102
|
+
props.contentNav && <nav className={`
|
|
103
|
+
${$article.nav}
|
|
104
|
+
${props.kind == "equal" && $article.nav$$equal}
|
|
105
|
+
`}>
|
|
106
|
+
{props.contentNav}
|
|
107
|
+
</nav>
|
|
108
|
+
}
|
|
109
|
+
</article>
|
|
110
|
+
</div>
|
|
111
|
+
</div>
|
|
112
|
+
</div>
|
|
113
|
+
</div>
|
|
114
|
+
</main>
|
|
115
|
+
</div>
|
|
116
|
+
}
|
package/src/index.css
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
@import "vars.css";
|
|
2
|
+
|
|
3
|
+
@font-face {
|
|
4
|
+
font-family: 'Mona Sans';
|
|
5
|
+
src: url('../public/fonts/MonaSans/Mona-Sans.woff2') format('woff2 supports variations'),
|
|
6
|
+
url('../public/fonts/MonaSans/Mona-Sans.woff2') format('woff2-variations');
|
|
7
|
+
font-weight: 200 900;
|
|
8
|
+
font-stretch: 75% 125%;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
html {
|
|
12
|
+
font-family: 'Mona Sans', serif;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
body {
|
|
16
|
+
margin: 0;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
ol, ul, menu {
|
|
20
|
+
list-style: none;
|
|
21
|
+
margin: 0;
|
|
22
|
+
padding: 0;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
button, input:where([type=button]), input:where([type=reset]), input:where([type=submit]) {
|
|
26
|
+
-webkit-appearance: button;
|
|
27
|
+
background-color: transparent;
|
|
28
|
+
background-image: none;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
button, [role=button] {
|
|
32
|
+
cursor: pointer;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
button, select {
|
|
36
|
+
text-transform: none;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
button, input, optgroup, select, textarea {
|
|
40
|
+
font-family: inherit;
|
|
41
|
+
font-feature-settings: inherit;
|
|
42
|
+
font-variation-settings: inherit;
|
|
43
|
+
font-size: 100%;
|
|
44
|
+
font-weight: inherit;
|
|
45
|
+
line-height: inherit;
|
|
46
|
+
letter-spacing: inherit;
|
|
47
|
+
color: inherit;
|
|
48
|
+
margin: 0;
|
|
49
|
+
padding: 0;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
a {
|
|
53
|
+
color: inherit;
|
|
54
|
+
text-decoration: inherit;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
*, :before, :after {
|
|
58
|
+
box-sizing: border-box;
|
|
59
|
+
border-width: 0;
|
|
60
|
+
border-style: solid;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
p {
|
|
64
|
+
padding: 0;
|
|
65
|
+
margin: 0;
|
|
66
|
+
}
|
|
67
|
+
|
package/src/index.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {default} from "./theme"
|
package/src/override.css
ADDED
package/src/theme.tsx
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import React from "react"
|
|
2
|
+
|
|
3
|
+
import {helperContent} from "@xyd-js/components/content"
|
|
4
|
+
import type {
|
|
5
|
+
ITheme
|
|
6
|
+
} from "@xyd-js/framework"
|
|
7
|
+
import {
|
|
8
|
+
FwNav,
|
|
9
|
+
FwToc,
|
|
10
|
+
FwNavLinks,
|
|
11
|
+
|
|
12
|
+
FwSidebarGroups,
|
|
13
|
+
} from "@xyd-js/framework/react"
|
|
14
|
+
|
|
15
|
+
import {Layout} from "./components/Layouts";
|
|
16
|
+
|
|
17
|
+
import "@xyd-js/ui/index.css";
|
|
18
|
+
import "@xyd-js/components/index.css";
|
|
19
|
+
// TODO: what about atlas? it's loaded by plugin - probably we need better mechanism for loading css
|
|
20
|
+
import '@xyd-js/atlas/index.css';
|
|
21
|
+
|
|
22
|
+
import './index.css';
|
|
23
|
+
import './override.css';
|
|
24
|
+
|
|
25
|
+
const {Content} = helperContent()
|
|
26
|
+
|
|
27
|
+
export interface ThemeSettings {
|
|
28
|
+
hideToc?: boolean // TODO: better prop name?
|
|
29
|
+
sidebar?: {
|
|
30
|
+
onePathBehaviour?: boolean
|
|
31
|
+
clientSideRouting?: boolean
|
|
32
|
+
}
|
|
33
|
+
contentNav?: React.ReactNode
|
|
34
|
+
layout?: {
|
|
35
|
+
kind?: "fullwidth" | "equal"
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export interface ThemeProps extends ITheme<ThemeSettings> {
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export default function ThemePoetry(props: ThemeProps) {
|
|
43
|
+
return <Layout
|
|
44
|
+
header={<Navbar/>}
|
|
45
|
+
aside={<Sidebar themeSettings={props.themeSettings}/>}
|
|
46
|
+
content={<>
|
|
47
|
+
{/*TODO: optional breadcrumbs*/}
|
|
48
|
+
{/*{props.breadcrumbs ? <FwBreadcrumbs/> : undefined}*/}
|
|
49
|
+
<Content>
|
|
50
|
+
{props.children}
|
|
51
|
+
</Content>
|
|
52
|
+
|
|
53
|
+
<FwNavLinks/>
|
|
54
|
+
</>
|
|
55
|
+
}
|
|
56
|
+
contentNav={
|
|
57
|
+
props.themeSettings?.hideToc
|
|
58
|
+
? null
|
|
59
|
+
: props.themeSettings?.contentNav ? props.themeSettings.contentNav : <FwToc/>
|
|
60
|
+
}
|
|
61
|
+
kind={props.themeSettings?.layout?.kind || undefined}
|
|
62
|
+
/>
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// TODO: finish search
|
|
66
|
+
function Navbar() {
|
|
67
|
+
return <>
|
|
68
|
+
<FwNav kind="middle"/>
|
|
69
|
+
</>
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// TODO: onePathBehaviour does not work - fix that
|
|
73
|
+
function Sidebar({themeSettings}: { themeSettings?: ThemeSettings }) {
|
|
74
|
+
return <FwSidebarGroups
|
|
75
|
+
onePathBehaviour={themeSettings?.sidebar?.onePathBehaviour}
|
|
76
|
+
clientSideRouting={themeSettings?.sidebar?.clientSideRouting}
|
|
77
|
+
/>
|
|
78
|
+
}
|
package/src/vars.css
ADDED
package/tsconfig.json
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"esModuleInterop": true,
|
|
4
|
+
"module": "esnext",
|
|
5
|
+
"moduleResolution": "bundler",
|
|
6
|
+
"target": "ES6",
|
|
7
|
+
"lib": [
|
|
8
|
+
"dom",
|
|
9
|
+
"dom.iterable",
|
|
10
|
+
"esnext"
|
|
11
|
+
],
|
|
12
|
+
"allowJs": true,
|
|
13
|
+
"skipLibCheck": true,
|
|
14
|
+
"strict": false,
|
|
15
|
+
"noEmit": true,
|
|
16
|
+
"incremental": false,
|
|
17
|
+
"resolveJsonModule": true,
|
|
18
|
+
"isolatedModules": true,
|
|
19
|
+
"jsx": "react",
|
|
20
|
+
"plugins": [
|
|
21
|
+
{
|
|
22
|
+
"name": "next"
|
|
23
|
+
}
|
|
24
|
+
],
|
|
25
|
+
"strictNullChecks": true
|
|
26
|
+
},
|
|
27
|
+
"include": [
|
|
28
|
+
"packages/css/src",
|
|
29
|
+
"next-env.d.ts",
|
|
30
|
+
"**/*.ts",
|
|
31
|
+
"**/*.tsx",
|
|
32
|
+
".next/types/**/*.ts"
|
|
33
|
+
],
|
|
34
|
+
"exclude": [
|
|
35
|
+
"node_modules"
|
|
36
|
+
]
|
|
37
|
+
}
|
package/dist/index.css
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
:root{--xyd-sidebar-width:450px}.h1rnwuz9{width:100%}.h132y9go{-webkit-box-pack:justify;-ms-flex-pack:space-between;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;height:46px;-webkit-justify-content:space-between;justify-content:space-between;left:8px;position:fixed;right:8px;top:0}.h1ulv53s{-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;height:90px;-webkit-transition:-webkit-transform .2s;transition:transform .2s}.h1xdz7qg{-webkit-transform:translateY(-43px);-moz-transform:translateY(-43px);-ms-transform:translateY(-43px);transform:translateY(-43px)}.mk7pvq{bottom:8px;left:8px;position:fixed;right:8px;top:46px}.m8kgblw{top:90px;-webkit-transition:top .2s;transition:top .2s}.sh5saf3{background:none;border:0;border-radius:0;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;left:0;opacity:1;overflow:visible;padding:12px 0 0;top:0;visibility:visible;width:450px;z-index:101}.h14fb2m2,.sh5saf3{bottom:0;position:absolute;right:0;-webkit-transition:opacity .3s cubic-bezier(.65,0,.35,1);transition:opacity .3s cubic-bezier(.65,0,.35,1)}.h14fb2m2{background:#fff;left:450px;overflow:hidden;top:12px;z-index:201}.skdd2lx{height:100%;overflow:scroll}.c3f1387{font-size:15px;line-height:24px;margin:0 auto;max-width:100%;min-height:100%;padding:0;width:100%}.a85a4w5{margin:0 auto 0 100px;max-width:100%;padding:20px 56px 40px 0;width:980px}.asxdsuf{width:1200px}.hl7s9k1{-webkit-box-align:flex-start;-ms-flex-align:flex-start;-webkit-align-items:flex-start;align-items:flex-start;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;gap:30px;width:100%}.ctha5be{-webkit-flex:1 1 0;-ms-flex:1 1 0;flex:1 1 0;overflow:hidden}.nhz4uc{-webkit-flex:none;-ms-flex:none;flex:none;margin-left:50px;margin-top:0;padding-left:16px;position:-webkit-sticky;position:sticky;top:30px;width:180px}.n16jquc6{-webkit-flex:1;-ms-flex:1;flex:1}.h1vu90xp{background:transparent;display:flex;position:sticky;top:0;width:100%;z-index:20}.s1i2i14o{background-color:#fff;height:100%;pointer-events:none;position:absolute;width:100%;z-index:-1}.n1oemxra{align-items:center;display:flex;gap:8px;height:var(--xyd-navbar-height);justify-content:flex-end;padding-left:calc(max(env(safe-area-inset-left), 16px));padding-right:calc(max(env(safe-area-inset-right), 16px));width:100%}.ny6xn1c{align-items:center;display:grid;grid-template-columns:1fr 1fr 1fr}.hj2rxb1{gap:8px}.hcz0c13,.hj2rxb1{align-items:center;display:flex;justify-content:center}.hcz0c13{color:#4b5563;font-size:14px;padding:6px 16px;position:relative;white-space:nowrap}.hcz0c13:hover{color:#1f2937}.hcz0c13[data-state=active]{background:#f9f9f9;border-radius:8px;font-weight:700}.t1lsj05a{align-items:center;display:flex;inset:0;justify-content:center;position:absolute;text-align:center}.t138ur9z{font-weight:500;visibility:hidden}.hso30gp{align-items:center;display:flex;margin-right:auto}.hptag3l{background:#f9f9f9;border-radius:.5rem;display:flex;flex-direction:column;height:100%}.uead4fo{height:100%;overflow-x:hidden;overflow-y:auto;padding:1rem}.h1hrlfak{border-top:1px solid #ededed;box-shadow:0 -2px 10px hsla(0,0%,93%,.1);padding:1rem}.i1btwdcv{color:#6e6e80;padding:2px}.i1801o7t,.i1btwdcv{display:flex;width:100%}.i1801o7t{align-items:center;font-size:14px;gap:7px;padding:4px 8px}.i1801o7t:hover{background:#ececf1;border-radius:4px;color:#111827}.i1801o7t:hover svg{fill:#111827}.i1801o7t svg{fill:#6e6e80;font-size:18px;height:18px;width:18px}.hs1gieu{color:#6e6e80;font-size:14px}.l1s9ffav{display:flex;font-weight:500;padding:2px;width:100%}.l1041tva{background:#fff;border-radius:4px;color:#7051d4}.l1hsy03l{background:unset;color:#111827;font-weight:500}.lz6cy9y{display:flex;padding:4px 8px;width:100%}.lz6cy9y:hover{background:#ececf1;border-radius:4px;color:#111827}.hnhdi2c{margin-left:8px}.hj0z21i{color:#111827;font-size:12px;font-weight:600;letter-spacing:1px;line-height:16px;margin-bottom:6px;margin-top:16px;padding-left:10px}.c12fwmxc{overflow:hidden;transform:translateZ(0);transition:all .3s ease-in-out}.bfe0v98{opacity:0;transition:opacity .5s ease-in-out}.oza7km2{opacity:1}.h4ah3ok{align-items:center;background-color:#f6f6f7;border-radius:.5rem;display:flex;flex-direction:row;height:44px;margin-top:3px;padding:0 .25rem;width:100%}.p1ncaln9{color:#44474a;font-size:12px;font-weight:600;padding-left:.5rem;padding-right:1.5rem;position:relative;text-transform:uppercase}.p1ncaln9:after{background:#d2d5d8;border-radius:1px;content:" ";height:.75rem;position:absolute;right:.5rem;top:50%;transform:translateY(-50%);width:2px}.u3wpqhn{flex-direction:row}.lc3ej8u,.u3wpqhn{display:flex;height:100%}.lc3ej8u{align-items:center;position:relative}.lc3ej8u[data-state=active]{font-weight:500}.lc3ej8u[data-state=active] a{color:#202223}.lc3ej8u[data-state=active] a:after{background-color:#7051d4;border-radius:1px;bottom:0;content:" ";height:2px;left:0;position:absolute;width:100%}.l1taqsnk{color:#4b5563;display:block;height:100%;line-height:2.75rem;padding:0 .5rem}.l1taqsnk:hover{color:#202223}.h19g75q2{padding-left:16px;position:relative}.ueg7kxf{list-style:none;margin:0;padding:0}.lagigsw{line-height:1.5;margin:0 0 10px;padding:0;position:relative}.lylqcp3{text-wrap:pretty;color:#6e6e80;display:inline-block;font-size:14px;line-height:1.4;transition:color .15s ease}.l16swvpi{color:#353740;font-weight:500}.ht0m6aa{background-color:#ececf1;bottom:0}.ht0m6aa,.sfp1vxs{left:0;position:absolute;top:0;width:2px}.sfp1vxs{background-color:#353740;height:var(--active-track-height);transform:translateY(var(--active-track-top));transition:height .4s cubic-bezier(.19,1,.22,1),transform .4s cubic-bezier(.19,1,.22,1)}.hfzpnxu{display:flex;flex-direction:column;min-height:100vh}.h1k4ds7x{-webkit-backdrop-filter:sepia(10%);backdrop-filter:sepia(10%);background:radial-gradient(circle,hsla(0,0%,9%,.3) 1px,transparent 0);background-size:30px 30px;flex:1;padding:60px}.h1x4dha7{background:repeating-linear-gradient(90deg,hsla(0,0%,9%,.1),hsla(0,0%,9%,.1) 1px,transparent 0,transparent 50px),repeating-linear-gradient(180deg,hsla(0,0%,9%,.1),hsla(0,0%,9%,.1) 1px,transparent 0,transparent 50px)}.broqp2l{display:flex;flex-direction:column;gap:80px;margin:0 auto;width:1200px}@media (max-width:1200px){.broqp2l{padding:0 20px;width:100%}}@media (max-width:768px){.broqp2l{padding:0 10px;width:100%}}.hfe0p8m{display:grid;gap:30px;grid-template-columns:repeat(2,500px);justify-content:center}@media (max-width:1200px){.hfe0p8m{grid-template-columns:repeat(2,1fr)}}@media (max-width:768px){.hfe0p8m{grid-template-columns:1fr}}.hn2r3b2{background-color:#f7f7f8;border:1px solid transparent;border-radius:20px;color:#3c3c43;display:inline-block;font-size:14px;font-weight:600;line-height:38px;padding:0 20px;text-align:center;transition:color .25s,border-color .25s,background-color .25s;white-space:nowrap}.hn2r3b2:hover{background:#e3e3e6}.hgvnekf{background-color:#7051d4;color:#fff}.hgvnekf:hover{background-color:#5f3bd3}.h1vf00q{background-color:#fff;border-top:1px solid #f0f0f0;padding:32px;position:relative}.c1ny3ybl{margin:0 auto;max-width:1200px;text-align:center}.t1ahtzu3{color:rgba(60,60,67,.78);font-size:14px;font-weight:500;line-height:24px}.h1vbgqbd{padding:20px}.c1qluffv{align-items:center;display:flex;gap:80px;justify-content:center}.h7zyorj{gap:40px}.h10nnuqu,.h7zyorj{align-items:center;display:flex;flex-direction:column;justify-content:center}.h10nnuqu{-webkit-text-fill-color:transparent;animation:wave-h10nnuqu 5s infinite;background:-webkit-linear-gradient(120deg,var(--headingEffect-color-tertiary) 20%,var(--headingEffect-color-tertiary) 30%,var(--headingEffect-color-secondary) 60%,var(--headingEffect-color-primary) 75%,var(--headingEffect-color-primary) 85%);-webkit-background-clip:text;background-clip:text;-webkit-background-position:50% 50%;background-position:50% 50%;background-size:200% 200%}@keyframes wave-h10nnuqu{0%{-webkit-background-position:50% 50%;background-position:50% 50%}50%{-webkit-background-position:0 50%;background-position:0 50%}to{-webkit-background-position:50% 50%;background-position:50% 50%}}.h1xgyvqe{align-items:center;display:flex;flex-direction:column;justify-content:center}.t1rx1fna{font-size:76px;font-weight:900;letter-spacing:3px;margin:0;text-align:center}.s9nduqh{color:#3c3c43;font-size:46px;font-weight:600;text-align:center}.hth6on8{display:flex;gap:10px;justify-content:center}.hth6on8,.hutvd2b{align-items:center}.hutvd2b{display:inline-flex;font-style:normal;font-weight:500;letter-spacing:normal;line-height:1rem;text-transform:none;white-space:nowrap}.hg9oorb{background-color:#f8d047;color:#000}.h6jev6x{background-color:#1fa6f2;color:#fff}.h1uvewli{border-radius:6px;font-size:12px;gap:3px;height:18px;padding:0 6px}.i1mcrm8o{position:relative}.hwgsk4h{align-items:center;color:#6b7280;display:flex;font-size:.875rem;gap:.25rem;line-height:1.25rem;margin-top:.375rem;overflow:hidden}.i1b95bxl{shrink:0;width:.875rem}.i1a3fa93{transition-duration:.3s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);white-space:nowrap}.i1dl7ywj{color:#000;font-weight:700}.hilz89t{background:linear-gradient(238deg,hsla(240,7%,97%,.5),#f7f7f8);border:.5px solid #ececf1;border-radius:8px;display:flex;overflow:hidden;padding:16px 20px 20px;position:relative;transition:box-shadow .2s ease-in-out,background-image .2s ease;z-index:0}.hilz89t:hover{background:linear-gradient(238deg,hsla(0,0%,100%,.5),#fafafa)}.h1rnhmpa{padding:21px 25px 25px}.lajci2p{height:100%;width:100%}.iezrce7{align-items:flex-start;border-radius:8px;cursor:pointer;display:flex;transition:opacity .15s}.iezrce7:hover [data-pointer=true]{opacity:1;transform:translate(0)}.i1vhi0b8{height:100%;width:100%}.i1m2lps9{align-items:center;background:linear-gradient(238deg,hsla(0,0%,100%,.5),#fafafa);border:1px solid #ececf1;border-radius:8px;box-sizing:border-box;color:#353740;display:flex;flex-shrink:0;font-size:24px;height:48px;justify-content:center;line-height:0px;transition:background .2s ease;width:48px}.r1new93p{display:flex;flex-direction:column;gap:4px;padding-left:16px}.t1u3d3ty{align-items:center;color:#202123;display:flex;font-weight:400;transition:color .15s}.t4udf3g{font-size:16px;line-height:20px}.t1icpluq{font-size:18px}.badgd67{color:#6e6e80;font-size:14px;font-weight:400;line-height:20px;overflow:hidden;text-overflow:ellipsis;white-space:normal}.bcjznmh{font-size:16px}.p13ekkiz{display:flex;opacity:0;transform:translate(-4px);transition:opacity .15s ease-in-out,transform .15s ease-in-out}.h15733ml,.p13ekkiz{justify-content:center}.h15733ml{display:grid;gap:30px;grid-template-columns:1fr 1fr}.h1tn40xd{scroll-snap-margin-top:30px;color:#202123;cursor:pointer;display:inline-block;font-weight:300;line-height:40px;margin:0;padding:0 24px 0 0;position:relative;scroll-margin-top:30px}.h1tn40xd:hover svg{opacity:1}.hnf4kng{font-size:36px}.h1vdtsi8,.hnf4kng code{font-size:30px}.h1vdtsi8 code{font-size:24px}.hz5xehg{font-size:26px}.hptgzam,.hz5xehg code{font-size:22px}.h11bbv2f,.hptgzam code{font-size:18px}.h11bbv2f code{font-size:14px}.hcoksa6{font-size:16px}.hcoksa6 code{font-size:12px}.l17d6dy1{color:#7051d4;margin-top:-6px;opacity:0;position:absolute;right:0;top:50%;transition:opacity .15s ease}.h3kfd8c{counter-reset:ordered-listitem;display:flex;flex-direction:column;gap:6px;list-style:none;padding-left:0}.l1et872q{line-height:1.5;padding-left:32px;position:relative}.l1et872q:after{background:#ececf1;border-radius:12px;color:#353740;content:counter(ordered-listitem);counter-increment:ordered-listitem;font-size:12px;font-weight:500;height:24px;left:0;line-height:24px;position:absolute;text-align:center;top:0;width:24px}.hh8vcxa{max-width:100%;position:relative}.b2p5907{align-items:center;display:flex}.coeb6fw{margin-top:16px}.h196u2m6{background-color:#fff;box-shadow:0 1px 2px 0 rgba(0,0,0,.05);padding:8px}.i1hlflsk{height:16px;width:16px}.hownbu8{flex-grow:1;overflow-x:auto}.cuwerl2{background-color:#f3f4f6;border-radius:8px;display:inline-flex;gap:4px;margin-left:4px;padding:4px}.hlivi01{border-radius:.375rem;color:#6b7280;font-size:.875rem;font-weight:500;line-height:1.25rem;padding:.5rem 1rem;transition-duration:.3s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);white-space:nowrap}.hlivi01:hover{color:#111827}._5m9mpz,.hlivi01[data-state=active]{background-color:#fff;box-shadow:0 1px 2px 0 rgba(0,0,0,.05);color:#111827}.h1w59zdn{background:linear-gradient(45deg,#f7f7f8,#f7f7f8);border:.5px solid #ececf1;border-radius:6px;display:inline-block;font-size:14px;font-weight:500;line-height:1.6em;margin:0 3px;padding:0 .3em}.h1wifk81{border-color:#d1d5db;color:#374151;font-style:italic;margin:0}.h1ej4n95{border-color:hsla(0,0%,90%,.7)}.h1vb39qj{background-color:#f6f8fa;border:0;border-radius:6px;margin-top:0;overflow:auto;padding:16px}.h1bta36o{align-items:center;background-color:#fff;border-bottom:1px solid hsl(212,15%,84%);display:flex;height:42px;z-index:99}.uxs4bf1{color:hsl(212,15%,48%);display:flex;gap:10px;list-style:none;padding:0;white-space:nowrap}.ifn7ecb,.uxs4bf1{height:100%}.ifn7ecb[data-state=active] a{border-bottom-color:#7051d4}.i441kmn{border-bottom:3px solid transparent;display:inline-flex;height:100%;padding:10px;-webkit-text-decoration:none;text-decoration:none}.hwmojve{border-top:1px solid #ececf1}.hwmojve[open] summary svg[data-icon=true]{transform:rotate(90deg)}.h1an07j0{background-color:#f7f7f8;border:1px solid #ececf1;border-radius:8px}.sbneplt{align-items:center;cursor:pointer;display:flex;flex-direction:row;font-size:18px;font-variant-numeric:tabular-nums;font-weight:500;justify-content:flex-start;line-height:1.4;list-style:none;padding:16px 14px 16px 0;transition:color .3s}.sbneplt:hover{color:#565869}.s1d31n8s{cursor:pointer;justify-content:space-between;padding:20px 24px}.s1d31n8s,.s2p0kpw{align-items:center;display:flex}.s2p0kpw{margin-bottom:8px}.snk81qf{color:#6e6e80;font-size:12px;font-weight:700;letter-spacing:.08em;line-height:16px;margin-left:8px;text-transform:uppercase}.lyq3zec{flex:1 1 auto}.iq0a0s6{align-items:center;display:flex;flex:0 0 auto;font-size:16px;justify-content:center;padding-right:6px}.c1ligx2c{padding:0 24px 20px}.c89yndk code{background:#fff}.h1xhrk1{border-top-width:1px;justify-content:space-between;margin-bottom:2rem;margin-top:2rem;padding-top:2rem}.h1xhrk1,.l1elq7ab{align-items:center;display:flex}.l1elq7ab{font-size:1rem;font-weight:500;gap:.25rem;line-height:1.5rem;max-width:50%;padding-bottom:1rem;padding-top:1rem;transition-duration:.3s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.i1mmatje{display:inline;flex-shrink:0;height:1.25rem}.h14vj3ri{border-collapse:collapse;border-radius:3px;display:block;overflow-x:scroll}.t1l6tz9b{background:rgba(234,238,242,.5);border-color:#d1d5db;border-width:1px;font-weight:600;margin:0;padding:.5rem 1rem}.thzxr0l{border-color:#d1d5db;border-top-width:1px;margin:0;padding:0}.t1g1altt{border-color:#d1d5db;border-width:1px;margin:0;padding:.5rem 1rem}.hhnegou{align-items:center;border:1px solid #ececf1;border-radius:8px;display:inline-flex;min-width:275px;padding:8px 12px;position:relative;text-align:center;width:100%}._1ja9964{background-color:#f7f7f8;border-color:#ececf1}.h1lyih3m{align-self:flex-start;color:#6e6e80;display:inline-flex;flex:0 0 auto;font-size:20px;margin-right:14px;margin-top:2px}.h1gzjc3x{color:#353740;flex:1 1 auto;text-align:left}.boe1v8p{font-size:14px;line-height:20px}:root{--xyd-navbar-height:46px;--xyd-global-page-gutter:8px}.h8dr7e{width:100%}.h1ezaz84{align-items:center;display:flex;height:46px;justify-content:space-between;left:8px;position:fixed;right:8px;top:0}.h17wz13c{flex-direction:column;height:90px;transition:transform .2s}.h1bgh3rd{transform:translateY(-43px)}.mxu2emt{bottom:8px;left:8px;position:fixed;right:8px;top:46px}.mslox5x{top:90px;transition:top .2s}.s1i19hnd{background:none;border:0;border-radius:0;flex-direction:column;left:0;opacity:1;overflow:visible;padding:12px 0 0;top:0;visibility:visible;width:210px;z-index:101}.h13sn67b,.s1i19hnd{bottom:0;position:absolute;right:0;transition:opacity .3s cubic-bezier(.65,0,.35,1)}.h13sn67b{background:#fff;left:210px;overflow:hidden;top:12px;z-index:201}.s1k9r3in{height:100%;overflow:scroll}.c1t0msup{font-size:15px;line-height:24px;min-height:100%;padding:0;width:100%}.apqkghd,.c1t0msup{margin:0 auto;max-width:100%}.apqkghd{padding:20px 56px 40px;width:980px}.a10qws06{width:1200px}.h3zl32q{align-items:flex-start;display:flex;gap:30px;width:100%}.c1cmkhbs{flex:1 1 0;overflow:hidden}.n1rrfk2r{flex:none;margin-left:50px;margin-top:0;padding-left:16px;position:sticky;top:30px;width:180px}.htyux6{color:#7051d4}.h1dmvxug{border:1px solid #ececf1;border-radius:16px;min-width:0;overflow:hidden}.h1pb9ov9{background:linear-gradient(45deg,#f7f7f8,#f7f7f8)!important;border-bottom:0;border-top-left-radius:10px;border-top-right-radius:10px;display:flex;flex:1 1 0%;min-width:0}.laeqccf{display:flex;flex-grow:1;gap:8px;justify-content:end;padding:0 10px}.brmq4h0{all:unset;align-items:center;border-radius:6px;color:#353740;cursor:pointer;display:flex;font-size:14px;justify-content:center;padding:6px}.brmq4h0[data-state=active]{border-bottom:1px solid #7051d4;border-bottom-left-radius:0;border-bottom-right-radius:0;color:#7051d4}.brmq4h0:hover{background:#e3e3eb;transition:.1s ease-in}.dht44{align-items:center;color:#353740;display:flex;font-size:14px;gap:4px;margin-left:4px;margin-right:4px}.d3qz0ka{border-radius:4px;display:flex;flex:1 1 0%;gap:16px;padding-left:16px;padding-right:16px}.cjcdygz{align-items:center;display:flex;padding-left:8px;padding-right:8px}.hmi9h9e{color:#7051d4;font-size:18px;font-weight:300;margin-top:-18px}.hyawwu4{border-color:transparent;border-left-width:4px;display:flex;margin:4px 0}.l1i5ism5{flex:1 1 0%}._1fnx2sm{background-color:#eef2ff;border-color:#60a5fa}.h83ezas{margin:0 12px 0 4px;opacity:.5;-webkit-user-select:none;-moz-user-select:none;user-select:none}.hwih9s3{background:linear-gradient(45deg,#f7f7f8,#f7f7f8)!important;border-bottom-left-radius:10px;border-bottom-right-radius:10px;border-top:1px solid #ececf1;font-size:12px;line-height:20px;margin:0;max-height:400px;overflow-y:scroll;padding:8px 16px;white-space:pre-wrap;word-break:break-all}.h1sbwmbs{max-height:100%}.h1seqss5{display:flex;flex-direction:column;gap:24px}.h1hvsyfb{all:unset;align-items:center;border-radius:6px;cursor:pointer;display:flex;justify-content:center;padding:6px}.h1hvsyfb:hover{background:#e3e3eb;transition:.1s ease-in}.h9tkkeg{font-size:30px;font-weight:400}.c1q2rf33{background:linear-gradient(45deg,#f7f7f8,#f7f7f8);border:1px solid var(--atlas-comp-apiref-item-border-color);border-radius:8px;font-size:13px;padding:8px}.lhk53ap{color:var(--atlas-comp-apiref-item-navbar-color);margin-right:4px}.h1t46rpg{display:flex;flex-direction:column;gap:16px;padding-bottom:25px}.gq5m3p7{align-items:normal;display:grid;gap:100px;grid-template-columns:repeat(2,minmax(0,1fr))}.i1lmmgv6{display:flex;flex-direction:column;gap:25px;margin-bottom:25px}.hpmrvhc{font-size:15px;font-weight:600}.l8q9wny{-webkit-text-decoration:none;text-decoration:none}.h1b8wz9m{-webkit-box-flex-wrap:wrap;border:none;display:flex;flex-direction:column;flex-wrap:wrap;gap:16px;list-style:none}.h1ayic9k,.h1b8wz9m{margin:0;padding:0}.h1ayic9k:first-child{padding-top:0}.h1ayic9k:last-child{padding-bottom:0}.hkisad5{color:var(--atlas-comp-apiref-properties-description-color);font-size:14px;line-height:22px}.h159tzrk{-webkit-box-flex-wrap:wrap;align-items:center;display:flex;flex-wrap:wrap;gap:10px;justify-content:flex-start;margin:8px 0;position:relative}.h159tzrk dd{margin-inline-start:0}.ht6ukcw{color:var(--atlas-comp-apiref-properties-prop__name-color);font-size:13px;font-weight:600}.h1hhb1ak,.ht6ukcw{display:inline-flex;padding:4px 0}.h1hhb1ak{border-radius:4px;color:var(--atlas-comp-apiref-properties-prop__type-color);font-size:10px}.l1ud1m37{color:var(--atlas-comp-apiref-properties-color--active);-webkit-text-decoration:underline;text-decoration:underline}.l1ud1m37:hover{-webkit-text-decoration:none;text-decoration:none}.h1fjyrqx{border-style:none;display:none;padding:8px}.h12sxrry{display:unset}.u1ofrsp8{-webkit-box-flex-wrap:wrap;border:none;border-left:1px solid var(--atlas-comp-apiref-properties-border-color);display:flex;flex-direction:column;flex-wrap:wrap;gap:16px;list-style:none;margin:0;padding:0}.lmjvvs5{padding:0 16px}.h9u79h5{align-items:center;background:none;border:none;color:inherit;cursor:pointer;display:flex;margin-top:16px;outline:inherit;padding:0}.h9u79h5,.h9u79h5 svg{font-size:13px}.h9u79h5:hover svg{color:var(--atlas-comp-apiref-properties-color--active);transition:all .1s ease-in}.l16o3qrr{cursor:pointer;margin-left:4px;-webkit-text-decoration:none;text-decoration:none}.l16o3qrr:hover{color:var(--atlas-comp-apiref-properties-color--active);transition:all .1s ease-in}.h47igvr{all:unset;align-items:center;border-radius:6px;cursor:pointer;display:flex;justify-content:center;padding:6px}.h47igvr:hover{background:var(--atlas-comp-code-copy-background--active);transition:.1s ease-in}.h1ur68ey{border:1px solid var(--atlas-comp-code-sample-border-color);border-radius:16px;flex:1 1 0;max-width:512px;min-width:0;overflow:hidden}.hp2fg9q{background:linear-gradient(45deg,#f7f7f8,#f7f7f8)!important;border-bottom:0;border-top-left-radius:10px;border-top-right-radius:10px;display:flex;flex:1 1 0%;min-width:0;padding:8px 0}.l1u5q09{display:flex;flex-grow:1;gap:8px;justify-content:end;padding:0 10px}.b1g5l43{all:unset;align-items:center;border-radius:6px;color:var(--atlas-comp-code-sample-color);cursor:pointer;display:flex;font-size:14px;justify-content:center;padding:6px}.b1g5l43[data-state=active]{border-bottom:1px solid var(--atlas-comp-code-sample-color--active);border-bottom-left-radius:0;border-bottom-right-radius:0;color:var(--atlas-comp-code-sample-color--active)}.b1g5l43:hover{background:var(--atlas-comp-code-sample-background);transition:.1s ease-in}.d1x4vxzj{align-items:center;color:var(--atlas-comp-code-sample-color);display:flex;font-size:14px;gap:4px;margin-left:4px;margin-right:4px}.d1n1kybx{border-radius:4px;display:flex;flex:1 1 0%;gap:16px;padding-left:16px;padding-right:16px}.c1qxxuld{align-items:center;display:flex;padding-left:8px;padding-right:8px}.h1gfddng{background:linear-gradient(45deg,#f7f7f8,#f7f7f8)!important;border-bottom-left-radius:10px;border-bottom-right-radius:10px;border-top:1px solid var(--atlas-comp-code-sample-border-color);font-size:14px;line-height:20px;margin:0;max-height:400px;overflow-y:scroll;padding:8px 16px;white-space:pre-wrap;word-break:break-all}.h1h0n8u6{border-color:transparent;border-left-width:4px;display:flex;margin:4px 0}.l12klvp{flex:1 1 0%}._4uqa3m{background-color:var(--atlas-comp-code-sample-mark-background--active);border-color:var(--atlas-comp-code-sample-mark-border--active)}.h18n51vi{margin:0 4px;opacity:.5;-webkit-user-select:none;-moz-user-select:none;user-select:none}.h1de1isv{max-width:100%;position:relative}.c174knag{align-items:center;background-color:#f3f4f6;border-radius:8px;display:flex}.hdr58em{background-color:#fff;box-shadow:0 1px 2px 0 rgba(0,0,0,.05);padding:8px}.izmf263{height:16px;width:16px}.h1olbpn1{flex-grow:1;overflow-x:auto}.c1dubejs{display:inline-flex;gap:4px;margin-left:4px;padding:4px}.he063xp{border-radius:.375rem;color:#6b7280;font-size:.875rem;font-weight:500;line-height:1.25rem;padding:.5rem 1rem;transition-duration:.3s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);white-space:nowrap}._lt697q,.he063xp:hover{color:#111827}._lt697q{background-color:#fff;box-shadow:0 1px 2px 0 rgba(0,0,0,.05)}.hskauww{display:flex;flex-direction:column;gap:32px;position:sticky;top:6rem}.hskauww:first-child{margin-top:0}.hskauww:last-child{margin-bottom:0}.h1nkbfqz{display:flex;flex-direction:column;gap:10px}.h5edgc7{width:100%}.h12vpet9{padding:16px 0}._18e99ku{padding:4px 0}:root{--headingEffect-color-tertiary:rgba(23,119,184,.5);--headingEffect-color-secondary:#7955f1;--headingEffect-color-primary:#ff69b4;--atlas-comp-apiref-properties-color--active:#7051d4;--atlas-comp-apiref-properties-border-color:#d2d5d8}@font-face{font-family:Mona Sans;font-stretch:75% 125%;font-weight:200 900;src:url(../public/fonts/MonaSans/Mona-Sans.woff2) format("woff2 supports variations"),url(../public/fonts/MonaSans/Mona-Sans.woff2) format("woff2-variations")}html{font-family:Mona Sans,serif}body{margin:0}menu,ol,ul{list-style:none;margin:0;padding:0}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}[role=button],button{cursor:pointer}button,select{text-transform:none}button,input,optgroup,select,textarea{font-feature-settings:inherit;color:inherit;font-family:inherit;font-size:100%;font-variation-settings:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;margin:0;padding:0}a{color:inherit;text-decoration:inherit}*,:after,:before{border-style:solid;border-width:0;box-sizing:border-box}p{margin:0;padding:0}.xyd_ui-comp-nav-logo,.xyd_ui-comp-sidebar{padding-left:200px}.xyd_comp-comp-heading{font-weight:400}
|
package/dist/index.d.ts
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import { ITheme } from '@xyd-js/framework';
|
|
3
|
-
|
|
4
|
-
interface ThemeSettings {
|
|
5
|
-
hideToc?: boolean;
|
|
6
|
-
sidebar?: {
|
|
7
|
-
onePathBehaviour?: boolean;
|
|
8
|
-
clientSideRouting?: boolean;
|
|
9
|
-
};
|
|
10
|
-
contentNav?: React.ReactNode;
|
|
11
|
-
layout?: {
|
|
12
|
-
kind?: "fullwidth" | "equal";
|
|
13
|
-
};
|
|
14
|
-
}
|
|
15
|
-
interface ThemeProps extends ITheme<ThemeSettings> {
|
|
16
|
-
}
|
|
17
|
-
declare function ThemePoetry(props: ThemeProps): React.JSX.Element;
|
|
18
|
-
|
|
19
|
-
export { ThemePoetry as default };
|
package/dist/index.js
DELETED
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
import React, { useState, useEffect } from 'react';
|
|
2
|
-
import { helperContent } from '@xyd-js/components/content';
|
|
3
|
-
import { FwNavLinks, FwToc, FwNav, FwSidebarGroups } from '@xyd-js/framework/react';
|
|
4
|
-
|
|
5
|
-
const globalHeaderHeight = '46px';
|
|
6
|
-
const $layout = {
|
|
7
|
-
host: "h1rnwuz9",
|
|
8
|
-
header: "h132y9go",
|
|
9
|
-
header$$sub: "h1ulv53s",
|
|
10
|
-
header$$hideMain: "h1xdz7qg",
|
|
11
|
-
main: "mk7pvq",
|
|
12
|
-
main$$sub: "m8kgblw",
|
|
13
|
-
sidebar: "sh5saf3"
|
|
14
|
-
};
|
|
15
|
-
const $page = {
|
|
16
|
-
host: "h14fb2m2",
|
|
17
|
-
scroll: "skdd2lx",
|
|
18
|
-
container: "c3f1387",
|
|
19
|
-
articleContainer: "a85a4w5",
|
|
20
|
-
articleContainer$$fullWidth: "asxdsuf"
|
|
21
|
-
};
|
|
22
|
-
const $article = {
|
|
23
|
-
host: "hl7s9k1",
|
|
24
|
-
content: "ctha5be",
|
|
25
|
-
nav: "nhz4uc",
|
|
26
|
-
nav$$equal: "n16jquc6"
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
// TODO: move scroller to xyd-foo
|
|
30
|
-
function Layout(props) {
|
|
31
|
-
const [hideMainHeader, setHideMainHeader] = useState(false);
|
|
32
|
-
const [scrollTop, setScrollTop] = useState(0);
|
|
33
|
-
const [controlScrollPos, setControlScrollPos] = useState(0);
|
|
34
|
-
useEffect(() => {
|
|
35
|
-
if (scrollTop === controlScrollPos) {
|
|
36
|
-
return;
|
|
37
|
-
}
|
|
38
|
-
const checkpoint = parseInt(globalHeaderHeight, 10) / 2;
|
|
39
|
-
const diff = scrollTop - controlScrollPos;
|
|
40
|
-
const reversePosDiff = Math.abs(scrollTop - controlScrollPos);
|
|
41
|
-
if (diff > checkpoint) {
|
|
42
|
-
setHideMainHeader(true);
|
|
43
|
-
}
|
|
44
|
-
else if (reversePosDiff > checkpoint) {
|
|
45
|
-
setHideMainHeader(false);
|
|
46
|
-
}
|
|
47
|
-
}, [
|
|
48
|
-
scrollTop,
|
|
49
|
-
controlScrollPos,
|
|
50
|
-
]);
|
|
51
|
-
function onScroll(e) {
|
|
52
|
-
var _a;
|
|
53
|
-
if (!(e.target instanceof HTMLElement)) {
|
|
54
|
-
return;
|
|
55
|
-
}
|
|
56
|
-
const scroll = (_a = e.target) === null || _a === undefined ? undefined : _a.scrollTop;
|
|
57
|
-
setScrollTop(scroll);
|
|
58
|
-
}
|
|
59
|
-
function onScrollFinish(e) {
|
|
60
|
-
var _a;
|
|
61
|
-
if (!(e.target instanceof HTMLElement)) {
|
|
62
|
-
return;
|
|
63
|
-
}
|
|
64
|
-
setControlScrollPos((_a = e.target) === null || _a === undefined ? undefined : _a.scrollTop);
|
|
65
|
-
}
|
|
66
|
-
// TODO: by ref?
|
|
67
|
-
// TODO: MOVE SOMEWHERE ELSE BECAUSE IT DECREASE PERFORMANCE (RERENDER)
|
|
68
|
-
useEffect(() => {
|
|
69
|
-
// return // TODO: UNCOMMENT
|
|
70
|
-
var _a, _b;
|
|
71
|
-
if (!props.subheader) {
|
|
72
|
-
return;
|
|
73
|
-
}
|
|
74
|
-
(_a = document.querySelector(`.${$page.scroll}`)) === null || _a === undefined ? undefined : _a.addEventListener("scroll", onScroll);
|
|
75
|
-
(_b = document.querySelector(`.${$page.scroll}`)) === null || _b === undefined ? undefined : _b.addEventListener("scrollend", onScrollFinish);
|
|
76
|
-
return () => {
|
|
77
|
-
var _a, _b;
|
|
78
|
-
(_a = document.querySelector(`.${$page.scroll}`)) === null || _a === undefined ? undefined : _a.removeEventListener("scroll", onScroll);
|
|
79
|
-
(_b = document.querySelector(`.${$page.scroll}`)) === null || _b === undefined ? undefined : _b.removeEventListener("scrollend", onScrollFinish);
|
|
80
|
-
};
|
|
81
|
-
}, []);
|
|
82
|
-
return React.createElement("div", { className: $layout.host },
|
|
83
|
-
React.createElement("header", { className: `
|
|
84
|
-
${$layout.header}
|
|
85
|
-
${props.subheader && $layout.header$$sub}
|
|
86
|
-
${hideMainHeader && $layout.header$$hideMain}
|
|
87
|
-
` }, props.header),
|
|
88
|
-
React.createElement("main", { className: `
|
|
89
|
-
${$layout.main}
|
|
90
|
-
${!hideMainHeader && props.subheader && $layout.main$$sub}
|
|
91
|
-
` },
|
|
92
|
-
React.createElement("aside", { className: $layout.sidebar }, props.aside),
|
|
93
|
-
React.createElement("div", { className: $page.host },
|
|
94
|
-
React.createElement("div", { className: $page.scroll },
|
|
95
|
-
React.createElement("div", { className: $page.container },
|
|
96
|
-
React.createElement("div", { className: `
|
|
97
|
-
${$page.articleContainer}
|
|
98
|
-
${props.kind == "fullwidth" && $page.articleContainer$$fullWidth}
|
|
99
|
-
${props.kind == "equal" && $page.articleContainer$$fullWidth}
|
|
100
|
-
` },
|
|
101
|
-
React.createElement("article", { className: $article.host },
|
|
102
|
-
React.createElement("section", { className: $article.content }, props.content),
|
|
103
|
-
props.contentNav && React.createElement("nav", { className: `
|
|
104
|
-
${$article.nav}
|
|
105
|
-
${props.kind == "equal" && $article.nav$$equal}
|
|
106
|
-
` }, props.contentNav))))))));
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
const { Content } = helperContent();
|
|
110
|
-
function ThemePoetry(props) {
|
|
111
|
-
var _a, _b, _c, _d;
|
|
112
|
-
return React.createElement(Layout, { header: React.createElement(Navbar, null), aside: React.createElement(Sidebar, { themeSettings: props.themeSettings }), content: React.createElement(React.Fragment, null,
|
|
113
|
-
React.createElement(Content, null, props.children),
|
|
114
|
-
React.createElement(FwNavLinks, null)), contentNav: ((_a = props.themeSettings) === null || _a === undefined ? undefined : _a.hideToc)
|
|
115
|
-
? null
|
|
116
|
-
: ((_b = props.themeSettings) === null || _b === undefined ? undefined : _b.contentNav) ? props.themeSettings.contentNav : React.createElement(FwToc, null), kind: ((_d = (_c = props.themeSettings) === null || _c === undefined ? undefined : _c.layout) === null || _d === undefined ? undefined : _d.kind) || undefined });
|
|
117
|
-
}
|
|
118
|
-
// TODO: finish search
|
|
119
|
-
function Navbar() {
|
|
120
|
-
return React.createElement(React.Fragment, null,
|
|
121
|
-
React.createElement(FwNav, { kind: "middle" }));
|
|
122
|
-
}
|
|
123
|
-
// TODO: onePathBehaviour does not work - fix that
|
|
124
|
-
function Sidebar({ themeSettings }) {
|
|
125
|
-
var _a, _b;
|
|
126
|
-
return React.createElement(FwSidebarGroups, { onePathBehaviour: (_a = themeSettings === null || themeSettings === undefined ? undefined : themeSettings.sidebar) === null || _a === undefined ? undefined : _a.onePathBehaviour, clientSideRouting: (_b = themeSettings === null || themeSettings === undefined ? undefined : themeSettings.sidebar) === null || _b === undefined ? undefined : _b.clientSideRouting });
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
export { ThemePoetry as default };
|
|
130
|
-
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/components/Layouts/Layout.styles.tsx","../src/components/Layouts/Layout.tsx","../src/theme.tsx"],"sourcesContent":["import {css} from \"@linaria/core\";\n\nconst globalPageGutter = '8px';\nexport const globalHeaderHeight = '46px';\nconst globalHeaderWarningHeight = \"0px\";\nconst contentTopSpace = \"12px\";\n\nconst globalHeaderHeightWithSub = '90px';\n\nconst cubicMove = \"cubic-bezier(.65, 0, .35, 1)\";\nconst sidebarWidth = \"450px\";\n\n// TODO: better solution - design tokens\nexport const globals = css`\n :global() {\n :root {\n --xyd-navbar-height: ${globalHeaderHeight};\n --xyd-sidebar-width: ${sidebarWidth};\n }\n }\n`;\n\nexport const $layout = {\n host: css`\n width: 100%;\n `,\n header: css`\n display: flex;\n justify-content: space-between;\n align-items: center;\n\n position: fixed;\n top: ${globalHeaderWarningHeight};\n right: ${globalPageGutter};\n left: ${globalPageGutter};\n\n height: ${globalHeaderHeight};\n `,\n header$$sub: css`\n flex-direction: column;\n height: ${globalHeaderHeightWithSub};\n transition: transform 200ms;\n `,\n header$$hideMain: css`\n transform: translateY(calc(-${globalHeaderHeight} + 3px));\n `,\n main: css`\n position: fixed;\n top: calc(${globalHeaderHeight} + ${globalHeaderWarningHeight});\n bottom: ${globalPageGutter};\n left: ${globalPageGutter};\n right: ${globalPageGutter};\n }`,\n main$$sub: css`\n top: calc(${globalHeaderHeightWithSub} + ${globalHeaderWarningHeight});\n transition: top 200ms;\n `,\n sidebar: css`\n flex-direction: column;\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n z-index: 101;\n width: ${sidebarWidth};\n border: 0;\n padding: ${contentTopSpace} 0 0;\n overflow: visible;\n background: none;\n border-radius: 0;\n opacity: 1;\n visibility: visible;\n transition: opacity .3s ${cubicMove};\n `,\n}\n\nexport const $page = {\n host: css`\n position: absolute;\n top: ${contentTopSpace};\n right: 0;\n bottom: 0;\n z-index: 201;\n background: #fff;\n\n overflow: hidden;\n transition: opacity .3s ${cubicMove};\n\n left: ${sidebarWidth};\n `,\n scroll: css`\n overflow: scroll;\n height: 100%;\n \n `,\n container: css`\n padding: 0;\n width: 100%;\n //position: relative; TODO: unset if during client render?\n min-height: 100%;\n\n max-width: 100%;\n margin: 0 auto;\n font-size: 15px;\n line-height: 24px;\n `,\n articleContainer: css`\n width: 980px;\n padding: 40px 56px;\n padding-left: 0;\n padding-top: 20px;\n margin: 0 auto;\n margin-left: 100px;\n max-width: 100%;\n `,\n articleContainer$$fullWidth: css`\n width: 1200px;\n `,\n}\n\nexport const $article = {\n host: css`\n display: flex;\n gap: 30px;\n width: 100%;\n align-items: flex-start;;\n `,\n content: css`\n flex: 1 1 0;\n overflow: hidden;\n `,\n nav: css`\n position: sticky;\n top: 30px;\n width: 180px;\n margin-top: 0;\n margin-left: 50px;\n padding-left: 16px;\n flex: none;\n `,\n nav$$equal: css`\n flex: 1;\n `\n}","import React, {useEffect, useState} from \"react\"\n\nimport {$layout, $page, $article, globalHeaderHeight} from \"./Layout.styles\"\n\nexport interface LayoutProps {\n header: React.ReactNode;\n aside: React.ReactNode;\n content: React.ReactNode;\n contentNav: React.ReactNode;\n subheader?: boolean;\n kind?: \"fullwidth\" | \"equal\"\n}\n\n// TODO: move scroller to xyd-foo\nexport function Layout(props: LayoutProps) {\n const [hideMainHeader, setHideMainHeader] = useState(false)\n const [scrollTop, setScrollTop] = useState(0)\n const [controlScrollPos, setControlScrollPos] = useState(0)\n\n useEffect(() => {\n if (scrollTop === controlScrollPos) {\n return\n }\n\n const checkpoint = parseInt(globalHeaderHeight, 10) / 2\n const diff = scrollTop - controlScrollPos\n const reversePosDiff = Math.abs(scrollTop - controlScrollPos)\n\n if (diff > checkpoint) {\n setHideMainHeader(true)\n } else if (reversePosDiff > checkpoint) {\n setHideMainHeader(false)\n }\n }, [\n scrollTop,\n controlScrollPos,\n ]);\n\n function onScroll(e: Event) {\n if (!(e.target instanceof HTMLElement)) {\n return\n }\n\n const scroll = e.target?.scrollTop\n setScrollTop(scroll)\n }\n\n function onScrollFinish(e: Event) {\n if (!(e.target instanceof HTMLElement)) {\n return\n }\n\n setControlScrollPos(e.target?.scrollTop)\n }\n\n // TODO: by ref?\n // TODO: MOVE SOMEWHERE ELSE BECAUSE IT DECREASE PERFORMANCE (RERENDER)\n useEffect(() => {\n // return // TODO: UNCOMMENT\n\n if (!props.subheader) {\n return\n }\n\n document.querySelector(`.${$page.scroll}`)?.addEventListener(\"scroll\", onScroll)\n document.querySelector(`.${$page.scroll}`)?.addEventListener(\"scrollend\", onScrollFinish)\n\n return () => {\n document.querySelector(`.${$page.scroll}`)?.removeEventListener(\"scroll\", onScroll)\n document.querySelector(`.${$page.scroll}`)?.removeEventListener(\"scrollend\", onScrollFinish)\n }\n }, []);\n\n return <div className={$layout.host}>\n <header className={`\n ${$layout.header}\n ${props.subheader && $layout.header$$sub}\n ${hideMainHeader && $layout.header$$hideMain}\n `}>\n {props.header}\n </header>\n <main className={`\n ${$layout.main}\n ${!hideMainHeader && props.subheader && $layout.main$$sub}\n `}>\n <aside className={$layout.sidebar}>\n {props.aside}\n </aside>\n <div className={$page.host}>\n <div className={$page.scroll}>\n <div className={$page.container}>\n <div className={`\n ${$page.articleContainer}\n ${props.kind == \"fullwidth\" && $page.articleContainer$$fullWidth}\n ${props.kind == \"equal\" && $page.articleContainer$$fullWidth}\n `}>\n <article className={$article.host}>\n <section className={$article.content}>\n {props.content}\n </section>\n {\n props.contentNav && <nav className={`\n ${$article.nav}\n ${props.kind == \"equal\" && $article.nav$$equal}\n `}>\n {props.contentNav}\n </nav>\n }\n </article>\n </div>\n </div>\n </div>\n </div>\n </main>\n </div>\n}","import React from \"react\"\n\nimport {helperContent} from \"@xyd-js/components/content\"\nimport type {\n ITheme\n} from \"@xyd-js/framework\"\nimport {\n FwNav,\n FwToc,\n FwNavLinks,\n\n FwSidebarGroups,\n} from \"@xyd-js/framework/react\"\n\nimport {Layout} from \"./components/Layouts\";\n\nimport \"@xyd-js/ui/index.css\";\nimport \"@xyd-js/components/index.css\";\nimport '@xyd-js/atlas/index.css';\n\nimport './index.css';\nimport './override.css';\n\nconst {Content} = helperContent()\n\nexport interface ThemeSettings {\n hideToc?: boolean // TODO: better prop name?\n sidebar?: {\n onePathBehaviour?: boolean\n clientSideRouting?: boolean\n }\n contentNav?: React.ReactNode\n layout?: {\n kind?: \"fullwidth\" | \"equal\"\n }\n}\n\nexport interface ThemeProps extends ITheme<ThemeSettings> {\n}\n\nexport default function ThemePoetry(props: ThemeProps) {\n return <Layout\n header={<Navbar/>}\n aside={<Sidebar themeSettings={props.themeSettings}/>}\n content={<>\n {/*TODO: optional breadcrumbs*/}\n {/*{props.breadcrumbs ? <FwBreadcrumbs/> : undefined}*/}\n <Content>\n {props.children}\n </Content>\n\n <FwNavLinks/>\n </>\n }\n contentNav={\n props.themeSettings?.hideToc\n ? null\n : props.themeSettings?.contentNav ? props.themeSettings.contentNav : <FwToc/>\n }\n kind={props.themeSettings?.layout?.kind || undefined}\n />\n}\n\n// TODO: finish search\nfunction Navbar() {\n return <>\n <FwNav kind=\"middle\"/>\n </>\n}\n\n// TODO: onePathBehaviour does not work - fix that\nfunction Sidebar({themeSettings}: { themeSettings?: ThemeSettings }) {\n return <FwSidebarGroups\n onePathBehaviour={themeSettings?.sidebar?.onePathBehaviour}\n clientSideRouting={themeSettings?.sidebar?.clientSideRouting}\n />\n}"],"names":["globalHeaderHeight","$layout","host","header","header$$sub","header$$hideMain","main","main$$sub","sidebar","$page","scroll","container","articleContainer","articleContainer$$fullWidth","$article","content","nav","nav$$equal"],"mappings":"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"}
|