for-humanity 0.12.0 → 0.13.1
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/CHANGELOG.md +39 -0
- package/README.md +16 -9
- package/dist/browser.js +14 -16
- package/dist/cli.css +2 -968
- package/dist/cli.js +92 -2318
- package/dist/config.js +1 -0
- package/dist/constant/copy.d.ts +100 -0
- package/dist/constant/site.d.ts +20 -0
- package/dist/constant/status.d.ts +19 -0
- package/dist/copy-C1uzvEnr.js +103 -0
- package/dist/group-path-XAThmzvC.js +10 -0
- package/dist/load-site-B-u5-jv0.js +2343 -0
- package/dist/logger-Dv1i9xSV.js +9 -0
- package/dist/mermaid/THIRD-PARTY-NOTICES.txt +3134 -0
- package/dist/mermaid/chunk--TN-qHgG.js +2 -0
- package/dist/mermaid/chunk-0kM1Lv4D.js +2 -0
- package/dist/mermaid/chunk-3FHei3pH.js +2001 -0
- package/dist/mermaid/chunk-3_2p2GqN.js +2 -0
- package/dist/mermaid/chunk-6HLei9i0.js +84 -0
- package/dist/mermaid/chunk-7Sz3kAwl.js +2214 -0
- package/dist/mermaid/chunk-7Tarqbpa.js +18047 -0
- package/dist/mermaid/chunk-9kkt8lzL.js +10 -0
- package/dist/mermaid/chunk-B--pNBQF.js +884 -0
- package/dist/mermaid/chunk-B4F-pysn.js +4241 -0
- package/dist/mermaid/chunk-B58sEIY_.js +14 -0
- package/dist/mermaid/chunk-B9_UWzSH.js +1517 -0
- package/dist/mermaid/chunk-BB8uZHwY.js +75 -0
- package/dist/mermaid/chunk-BFfk0LEc.js +717 -0
- package/dist/mermaid/chunk-BKri0qr7.js +89 -0
- package/dist/mermaid/chunk-BL404pH5.js +26 -0
- package/dist/mermaid/chunk-BLeiQSWo.js +354 -0
- package/dist/mermaid/chunk-BOmH_UFd.js +2 -0
- package/dist/mermaid/chunk-BSej9Nhy.js +1361 -0
- package/dist/mermaid/chunk-BYzrzvCI.js +12 -0
- package/dist/mermaid/chunk-BariMtWr.js +3020 -0
- package/dist/mermaid/chunk-BcrBoMwH.js +2352 -0
- package/dist/mermaid/chunk-Bok8z-Yo.js +67 -0
- package/dist/mermaid/chunk-BpTHLKQM.js +1970 -0
- package/dist/mermaid/chunk-BqjuxRsC.js +733 -0
- package/dist/mermaid/chunk-BuvPd-s5.js +1073 -0
- package/dist/mermaid/chunk-BvVehae3.js +5069 -0
- package/dist/mermaid/chunk-C-JABYpd.js +3075 -0
- package/dist/mermaid/chunk-C9XlTm4w.js +2 -0
- package/dist/mermaid/chunk-CApNbSU9.js +6 -0
- package/dist/mermaid/chunk-CCM2AH-C.js +9 -0
- package/dist/mermaid/chunk-CD1E0F_N.js +2 -0
- package/dist/mermaid/chunk-CDWvKG7D.js +2 -0
- package/dist/mermaid/chunk-CEVPpC1F.js +34 -0
- package/dist/mermaid/chunk-CLDr12lf.js +47504 -0
- package/dist/mermaid/chunk-CLVYqOBI.js +61 -0
- package/dist/mermaid/chunk-CLeOkFb5.js +15 -0
- package/dist/mermaid/chunk-CLgRAtOz.js +37 -0
- package/dist/mermaid/chunk-CMqFNUBl.js +134 -0
- package/dist/mermaid/chunk-CTPaBJXB.js +2 -0
- package/dist/mermaid/chunk-CVi6IGBL.js +2 -0
- package/dist/mermaid/chunk-CWV_EN-4.js +4745 -0
- package/dist/mermaid/chunk-CZ0dAs3g.js +2 -0
- package/dist/mermaid/chunk-C_YGy4Fn.js +236 -0
- package/dist/mermaid/chunk-CcVH22Yt.js +100 -0
- package/dist/mermaid/chunk-CgG6CD9_.js +7175 -0
- package/dist/mermaid/chunk-CgOP6IDB.js +3397 -0
- package/dist/mermaid/chunk-Cgg2UTSf.js +13 -0
- package/dist/mermaid/chunk-ChJfJJ1A.js +214 -0
- package/dist/mermaid/chunk-Ck5XRA46.js +447 -0
- package/dist/mermaid/chunk-Ckuw16cl.js +203 -0
- package/dist/mermaid/chunk-CpAbRCbF.js +1880 -0
- package/dist/mermaid/chunk-CuYekbSv.js +2 -0
- package/dist/mermaid/chunk-CwS4wZ5a.js +2 -0
- package/dist/mermaid/chunk-D-bcrBO3.js +82 -0
- package/dist/mermaid/chunk-D3IEAkCW.js +76 -0
- package/dist/mermaid/chunk-D8XfBJ_K.js +645 -0
- package/dist/mermaid/chunk-D9Ddd9y4.js +2228 -0
- package/dist/mermaid/chunk-DBh1mIbK.js +12 -0
- package/dist/mermaid/chunk-DD6Df6Ic.js +5 -0
- package/dist/mermaid/chunk-DGVDaXjx.js +8 -0
- package/dist/mermaid/chunk-DK9KqIXj.js +632 -0
- package/dist/mermaid/chunk-DORnIAsy.js +4487 -0
- package/dist/mermaid/chunk-DU69_VcF.js +363 -0
- package/dist/mermaid/chunk-DVNvSFoz.js +2144 -0
- package/dist/mermaid/chunk-DZe-4kde.js +20 -0
- package/dist/mermaid/chunk-D_a06Rz4.js +287 -0
- package/dist/mermaid/chunk-DfyFJJi2.js +972 -0
- package/dist/mermaid/chunk-DhKYPp1Z.js +2 -0
- package/dist/mermaid/chunk-DjFqgNTG.js +94 -0
- package/dist/mermaid/chunk-DmbDDrr-.js +65 -0
- package/dist/mermaid/chunk-DpuxlyL_.js +696 -0
- package/dist/mermaid/chunk-DqGhppWe.js +2 -0
- package/dist/mermaid/chunk-DqPZxHXa.js +5 -0
- package/dist/mermaid/chunk-Dt_1Jyif.js +293 -0
- package/dist/mermaid/chunk-DyQBE_NW.js +1935 -0
- package/dist/mermaid/chunk-JckyC4mW.js +1009 -0
- package/dist/mermaid/chunk-K7Myuj2-.js +1334 -0
- package/dist/mermaid/chunk-KuPYb48V.js +275 -0
- package/dist/mermaid/chunk-MFVRUoO0.js +4020 -0
- package/dist/mermaid/chunk-MbInCS_6.js +28 -0
- package/dist/mermaid/chunk-MexOLyKV.js +355 -0
- package/dist/mermaid/chunk-NnbDtJzg.js +21856 -0
- package/dist/mermaid/chunk-SGpOYZbI.js +2139 -0
- package/dist/mermaid/chunk-TbxLDlcU.js +198 -0
- package/dist/mermaid/chunk-TftHqGLg.js +490 -0
- package/dist/mermaid/chunk-UjQ8vA_Z.js +4138 -0
- package/dist/mermaid/chunk-YgmVTKqc.js +16 -0
- package/dist/mermaid/chunk-_a9EZE1v.js +1798 -0
- package/dist/mermaid/chunk-dTb8jqeP.js +2 -0
- package/dist/mermaid/chunk-fFdMfF8S.js +2240 -0
- package/dist/mermaid/chunk-feYbMzBj.js +1267 -0
- package/dist/mermaid/chunk-g3Pn8DkW.js +46 -0
- package/dist/mermaid/chunk-hM77LvCb.js +19832 -0
- package/dist/mermaid/chunk-hUDb-eAW.js +527 -0
- package/dist/mermaid/chunk-tpABtZ-3.js +4252 -0
- package/dist/mermaid/chunk-xIbz3oFK.js +59 -0
- package/dist/mermaid/chunk-yBz-vst0.js +976 -0
- package/dist/mermaid/mermaid-BhtR3wyB.js +1145 -0
- package/dist/run-site-command-cqCjpIlc.js +129 -0
- package/dist/site-config-bllORGpm.js +90 -0
- package/dist/site.js +1 -0
- package/dist/start-dev-server-x7Ja5uwv.js +184 -0
- package/dist/to-change-queue-DbEnZGNK.js +34 -0
- package/dist/to-error-message-pF6_7wGK.js +16 -0
- package/dist/type/group-path.d.ts +7 -0
- package/dist/type/site-config.d.ts +57 -0
- package/package.json +34 -17
- package/src/component/widget/cursor-face/_constant/cursor-face.ts +0 -14
- package/src/component/widget/cursor-face/wg-cursor-face.css +0 -15
- package/src/component/widget/cursor-face/wg-cursor-face.tsx +0 -153
- package/src/component/widget/navigation/_constant/locale.ts +0 -9
- package/src/component/widget/navigation/_constant/navigation-data-schema.ts +0 -33
- package/src/component/widget/navigation/_constant/navigation.ts +0 -9
- package/src/component/widget/navigation/_constant/reading-line.ts +0 -4
- package/src/component/widget/navigation/_function/restore-navigation-scroll.ts +0 -59
- package/src/component/widget/navigation/_function/to-doc-groups/_to-doc-branches.ts +0 -15
- package/src/component/widget/navigation/_function/to-doc-groups/_to-doc-group-branches.ts +0 -70
- package/src/component/widget/navigation/_function/to-doc-groups/to-doc-groups.ts +0 -15
- package/src/component/widget/navigation/_function/to-navigation-data/_to-navigation-document.ts +0 -13
- package/src/component/widget/navigation/_function/to-navigation-data/_to-navigation-group.ts +0 -13
- package/src/component/widget/navigation/_function/to-navigation-data/to-navigation-data.ts +0 -18
- package/src/component/widget/navigation/_function/to-navigation-json.ts +0 -8
- package/src/component/widget/navigation/_function/to-toc-groups.ts +0 -38
- package/src/component/widget/navigation/_type/doc-branch.ts +0 -11
- package/src/component/widget/navigation/_type/doc-group.ts +0 -24
- package/src/component/widget/navigation/_type/navigation-data.ts +0 -75
- package/src/component/widget/navigation/_type/navigation-focus-snapshot.ts +0 -17
- package/src/component/widget/navigation/_type/toc-group.ts +0 -39
- package/src/component/widget/navigation/_wg-navigation-nav-list.css +0 -48
- package/src/component/widget/navigation/_wg-navigation-nav-list.tsx +0 -61
- package/src/component/widget/navigation/_wg-navigation-nav.css +0 -21
- package/src/component/widget/navigation/_wg-navigation-nav.tsx +0 -33
- package/src/component/widget/navigation/_wg-navigation-scroll.tsx +0 -117
- package/src/component/widget/navigation/_wg-navigation-toc.css +0 -91
- package/src/component/widget/navigation/_wg-navigation-toc.tsx +0 -114
- package/src/component/widget/navigation/wg-navigation.css +0 -282
- package/src/component/widget/navigation/wg-navigation.tsx +0 -420
- package/src/component/widget/prose/_constant/heading-highlight.ts +0 -4
- package/src/component/widget/prose/_constant/section.ts +0 -7
- package/src/component/widget/prose/_constant/status.ts +0 -9
- package/src/component/widget/prose/_function/has-block-content.ts +0 -30
- package/src/component/widget/prose/_function/rehype-head.ts +0 -31
- package/src/component/widget/prose/_function/rehype-sections/_to-section-headings.ts +0 -20
- package/src/component/widget/prose/_function/rehype-sections/rehype-sections.ts +0 -21
- package/src/component/widget/prose/_function/rehype-tables.ts +0 -22
- package/src/component/widget/prose/_function/remark-blocks.ts +0 -112
- package/src/component/widget/prose/_function/remark-flow.ts +0 -26
- package/src/component/widget/prose/_function/remark-links.ts +0 -33
- package/src/component/widget/prose/_function/remark-parts.ts +0 -26
- package/src/component/widget/prose/_function/remark-status.ts +0 -59
- package/src/component/widget/prose/_function/remark-swatch.ts +0 -16
- package/src/component/widget/prose/_function/remark-unknown-directives.ts +0 -25
- package/src/component/widget/prose/wg-prose.css +0 -484
- package/src/component/widget/prose/wg-prose.tsx +0 -43
- package/src/component/widget/shell/wg-shell.css +0 -63
- package/src/component/widget/shell/wg-shell.tsx +0 -88
- package/src/component/widget/shell-controls/wg-shell-controls.css +0 -4
- package/src/component/widget/shell-controls/wg-shell-controls.tsx +0 -170
- package/src/constant/asset.ts +0 -63
- package/src/constant/copy.ts +0 -133
- package/src/constant/doc.ts +0 -13
- package/src/constant/font.ts +0 -34
- package/src/constant/site.ts +0 -24
- package/src/constant/status.ts +0 -15
- package/src/entry/browser/browser.tsx +0 -22
- package/src/entry/cli/_constant/cli.ts +0 -19
- package/src/entry/cli/_constant/crawling.ts +0 -14
- package/src/entry/cli/_constant/snippet.ts +0 -21
- package/src/entry/cli/_function/create-app.tsx +0 -57
- package/src/entry/cli/_function/create-dev-app.ts +0 -87
- package/src/entry/cli/_function/create-processor/_rehype-assets.ts +0 -70
- package/src/entry/cli/_function/create-processor/_rehype-heading-ids.ts +0 -34
- package/src/entry/cli/_function/create-processor/_remark-report.ts +0 -15
- package/src/entry/cli/_function/create-processor/_remark-snippets.ts +0 -117
- package/src/entry/cli/_function/create-processor/_shiki-transformers.ts +0 -91
- package/src/entry/cli/_function/create-processor/create-processor.ts +0 -64
- package/src/entry/cli/_function/read-docs.ts +0 -128
- package/src/entry/cli/_function/read-home.ts +0 -32
- package/src/entry/cli/_function/to-crawling-app.ts +0 -42
- package/src/entry/cli/cli.test.ts +0 -804
- package/src/entry/cli/cli.ts +0 -206
- package/src/env.d.ts +0 -6
- package/src/page/doc/pg-doc.tsx +0 -35
- package/src/page/home/pg-home.tsx +0 -40
- package/src/store/navigation/create-navigation-stores.test.ts +0 -74
- package/src/store/navigation/create-navigation-stores.ts +0 -59
- package/src/store/navigation/navigation-state.ts +0 -36
- package/src/store/navigation/navigation-storage.ts +0 -9
- package/src/store/navigation/to-navigation-scroll-state.ts +0 -42
- package/src/style/base.css +0 -28
- package/src/style/token.css +0 -188
- package/src/type/doc-content.ts +0 -15
- package/src/type/doc-data.ts +0 -38
- package/src/type/doc-file-data.ts +0 -21
- package/src/type/doc-heading.ts +0 -17
- package/src/type/doc-outline.ts +0 -16
- package/src/type/doc-section.ts +0 -9
- package/src/type/doc.ts +0 -20
- package/src/type/group-path.ts +0 -7
- package/src/type/site-assets.ts +0 -25
- package/src/type/site-config.ts +0 -73
- package/src/type/vfile-data.d.ts +0 -10
- package/src/util/async/to-change-queue.test.ts +0 -58
- package/src/util/async/to-change-queue.ts +0 -43
- package/src/util/dom/find-hash-target.ts +0 -18
- package/src/util/dom/reveal-hash-target.ts +0 -15
- package/src/util/error/to-error-message.ts +0 -10
- package/src/util/file/to-asset-path.ts +0 -26
- package/src/util/font/to-font-css.test.ts +0 -41
- package/src/util/font/to-font-css.ts +0 -28
- package/src/util/mermaid/render-flow.js +0 -321
|
@@ -1,484 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Markdown 본문과 생성 부품의 표현
|
|
3
|
-
* 요소 선택자는 소유 root 안에 한정
|
|
4
|
-
*/
|
|
5
|
-
.wg_prose__root {
|
|
6
|
-
/* stylelint-disable selector-disallowed-list -- Markdown 생성 태그 영역 */
|
|
7
|
-
& h1 {
|
|
8
|
-
margin: 0 0 var(--app-space-stack);
|
|
9
|
-
color: var(--app-color-text-strong);
|
|
10
|
-
font-size: var(--app-font-size-title);
|
|
11
|
-
font-weight: var(--app-font-weight-title);
|
|
12
|
-
line-height: var(--app-line-height-title);
|
|
13
|
-
letter-spacing: var(--app-letter-spacing-title);
|
|
14
|
-
text-wrap: balance;
|
|
15
|
-
|
|
16
|
-
/* 문서 탐색 라벨과 같은 글자 위쪽 기준 · 글꼴 크기별 내부 여백 제거 */
|
|
17
|
-
text-box: trim-start cap alphabetic;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
& p {
|
|
21
|
-
margin: 0 0 var(--app-space-stack);
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
& img {
|
|
25
|
-
max-width: 100%;
|
|
26
|
-
height: auto;
|
|
27
|
-
vertical-align: middle;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
/* 제목 아래 첫 문단 · 소개 크기 */
|
|
31
|
-
& h1 + p {
|
|
32
|
-
font-size: var(--app-font-size-lead);
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
& h2 {
|
|
36
|
-
margin: var(--app-space-section) 0 var(--app-space-stack);
|
|
37
|
-
padding-top: var(--app-space-group);
|
|
38
|
-
border-top: 1px solid var(--app-color-border);
|
|
39
|
-
color: var(--app-color-text-strong);
|
|
40
|
-
font-size: var(--app-font-size-section);
|
|
41
|
-
font-weight: var(--app-font-weight-strong);
|
|
42
|
-
line-height: var(--app-line-height-heading);
|
|
43
|
-
letter-spacing: var(--app-letter-spacing-heading);
|
|
44
|
-
text-wrap: balance;
|
|
45
|
-
scroll-margin-top: var(--app-space-anchor);
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
/* 머리 아래 첫 절의 중복 구분선 제거 */
|
|
49
|
-
& .wg_prose__head + h2 {
|
|
50
|
-
margin-top: var(--app-space-group);
|
|
51
|
-
padding-top: 0;
|
|
52
|
-
border-top: 0;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
/* 가름 아래 절의 중복 구분선 제거 */
|
|
56
|
-
& .wg_prose__part + h2 {
|
|
57
|
-
margin-top: var(--app-space-block);
|
|
58
|
-
padding-top: 0;
|
|
59
|
-
border-top: 0;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
& h3 {
|
|
63
|
-
margin: var(--app-space-subsection) 0 var(--app-space-inline);
|
|
64
|
-
color: var(--app-color-text-strong);
|
|
65
|
-
font-size: var(--app-font-size-lead);
|
|
66
|
-
font-weight: var(--app-font-weight-strong);
|
|
67
|
-
line-height: var(--app-line-height-tight);
|
|
68
|
-
scroll-margin-top: var(--app-space-anchor);
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
& h4 {
|
|
72
|
-
margin: var(--app-space-group) 0 6px;
|
|
73
|
-
color: var(--app-color-text-strong);
|
|
74
|
-
font-size: var(--app-font-size-body);
|
|
75
|
-
font-weight: var(--app-font-weight-strong);
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
& h5 {
|
|
79
|
-
margin: var(--app-space-block) 0 6px;
|
|
80
|
-
color: var(--app-color-text-muted);
|
|
81
|
-
font-size: var(--app-font-size-dense);
|
|
82
|
-
font-weight: var(--app-font-weight-strong);
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
& a {
|
|
86
|
-
color: var(--app-color-link);
|
|
87
|
-
text-decoration: none;
|
|
88
|
-
text-underline-offset: 2px;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
& a:visited {
|
|
92
|
-
color: var(--app-color-link-visited);
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
& a:hover {
|
|
96
|
-
color: var(--app-color-link-hover);
|
|
97
|
-
text-decoration: underline;
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
& a:focus-visible {
|
|
101
|
-
border-radius: var(--app-radius-mark);
|
|
102
|
-
outline: var(--app-outline-focus);
|
|
103
|
-
outline-offset: var(--app-outline-focus-offset);
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
& strong {
|
|
107
|
-
color: var(--app-color-text-strong);
|
|
108
|
-
font-weight: var(--app-font-weight-strong);
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
& ul {
|
|
112
|
-
margin: 0 0 var(--app-space-stack);
|
|
113
|
-
padding-left: 20px;
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
& ol {
|
|
117
|
-
margin: 0 0 var(--app-space-stack);
|
|
118
|
-
padding-left: 22px;
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
& li {
|
|
122
|
-
margin-bottom: 4px;
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
& li > ul {
|
|
126
|
-
margin: 4px 0 0;
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
& li > ol {
|
|
130
|
-
margin: 4px 0 0;
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
& code {
|
|
134
|
-
padding: 1px 3px;
|
|
135
|
-
border-radius: var(--app-radius-inline);
|
|
136
|
-
background: var(--app-color-code);
|
|
137
|
-
color: var(--app-color-text-strong);
|
|
138
|
-
|
|
139
|
-
/* UA monospace 대신 부모 글꼴 · 문단은 본문 정책, 코드 블록은 pre의 고정폭·자간 0 */
|
|
140
|
-
font-family: inherit;
|
|
141
|
-
font-size: 1em;
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
/* 코드 블록 · Shiki의 --app-code-* 참조 */
|
|
145
|
-
& pre {
|
|
146
|
-
overflow-x: auto;
|
|
147
|
-
margin: var(--app-space-block) 0;
|
|
148
|
-
padding: var(--app-space-stack) var(--app-space-block);
|
|
149
|
-
border: 1px solid var(--app-color-border);
|
|
150
|
-
border-radius: var(--app-radius-box);
|
|
151
|
-
background: var(--app-color-code);
|
|
152
|
-
font-family: var(--app-font-mono);
|
|
153
|
-
font-size: var(--app-font-size-detail);
|
|
154
|
-
line-height: var(--app-line-height-code);
|
|
155
|
-
letter-spacing: 0;
|
|
156
|
-
|
|
157
|
-
/* 탭 들여쓰기 코드 · 브라우저 기본 8칸은 좁은 본문에서 너무 넓음 */
|
|
158
|
-
tab-size: 4;
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
& pre code {
|
|
162
|
-
padding: 0;
|
|
163
|
-
background: none;
|
|
164
|
-
color: inherit;
|
|
165
|
-
font-size: inherit;
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
/* 인용과 첫머리 안내 */
|
|
169
|
-
& blockquote {
|
|
170
|
-
margin: var(--app-space-block) 0;
|
|
171
|
-
padding: 0 0 0 var(--app-space-block);
|
|
172
|
-
border-left: 1px solid var(--app-color-border);
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
& blockquote > :last-child {
|
|
176
|
-
margin-bottom: 0;
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
/* 표 · 코드 상자와 같은 선 색으로 바깥 선과 칸 선 · 머리 행은 바탕 */
|
|
180
|
-
& table {
|
|
181
|
-
width: 100%;
|
|
182
|
-
border: 1px solid var(--app-color-border);
|
|
183
|
-
border-collapse: collapse;
|
|
184
|
-
font-size: var(--app-font-size-dense);
|
|
185
|
-
font-variant-numeric: tabular-nums;
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
& th {
|
|
189
|
-
padding: var(--app-space-inline) var(--app-space-stack);
|
|
190
|
-
border: 1px solid var(--app-color-border);
|
|
191
|
-
background: var(--app-color-code);
|
|
192
|
-
color: var(--app-color-text-strong);
|
|
193
|
-
font-weight: var(--app-font-weight-strong);
|
|
194
|
-
text-align: left;
|
|
195
|
-
vertical-align: bottom;
|
|
196
|
-
white-space: nowrap;
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
& td {
|
|
200
|
-
padding: var(--app-space-inline) var(--app-space-stack);
|
|
201
|
-
border: 1px solid var(--app-color-border);
|
|
202
|
-
text-align: left;
|
|
203
|
-
vertical-align: top;
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
/* 표의 읽는 행 표시 */
|
|
207
|
-
& tbody tr:hover td {
|
|
208
|
-
background: var(--app-color-accent-soft);
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
& hr {
|
|
212
|
-
margin: var(--app-space-section) 0;
|
|
213
|
-
border: 0;
|
|
214
|
-
border-top: 1px dotted var(--app-color-border);
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
/* stylelint-disable selector-class-pattern -- Shiki 가 만드는 line·highlighted·diff 클래스 */
|
|
218
|
-
|
|
219
|
-
/* 코드 줄 · 바탕을 상자 가로 전체로 · 표기 없는 줄은 보이는 차이 없음 */
|
|
220
|
-
& pre code .line {
|
|
221
|
-
display: inline-block;
|
|
222
|
-
width: calc(100% + 2 * var(--app-space-block));
|
|
223
|
-
margin: 0 calc(-1 * var(--app-space-block));
|
|
224
|
-
padding: 0 var(--app-space-block);
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
& pre code .line.highlighted {
|
|
228
|
-
background: var(--app-color-accent-soft);
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
& pre code .line.highlighted.error {
|
|
232
|
-
background: var(--app-color-bad-soft);
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
& pre code .line.highlighted.warning {
|
|
236
|
-
background: var(--app-color-warn-soft);
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
& pre code .line.diff.add {
|
|
240
|
-
background: var(--app-color-good-soft);
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
& pre code .line.diff.remove {
|
|
244
|
-
background: var(--app-color-bad-soft);
|
|
245
|
-
opacity: 0.8;
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
/* 색 블록 위의 줄 표기 · 바탕보다 한 단계 진하게 */
|
|
249
|
-
& pre.wg_prose__code--bad code .line.highlighted,
|
|
250
|
-
& pre.wg_prose__code--bad code .line.highlighted.error,
|
|
251
|
-
& pre.wg_prose__code--bad code .line.diff.remove {
|
|
252
|
-
background: var(--app-color-bad-mark);
|
|
253
|
-
}
|
|
254
|
-
|
|
255
|
-
& pre.wg_prose__code--good code .line.highlighted,
|
|
256
|
-
& pre.wg_prose__code--good code .line.diff.add {
|
|
257
|
-
background: var(--app-color-good-mark);
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
& pre code .highlighted-word {
|
|
261
|
-
padding: 0 2px;
|
|
262
|
-
border-radius: var(--app-radius-inline);
|
|
263
|
-
background: var(--app-color-accent-soft);
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
/* 파일 이름 띠 · 펜스 메타 [파일 이름] · 코드 상자와 한 몸, 여백은 figure 가 맡음 */
|
|
267
|
-
& .wg_prose__codeFile {
|
|
268
|
-
margin: var(--app-space-block) 0;
|
|
269
|
-
}
|
|
270
|
-
|
|
271
|
-
& .wg_prose__codeFile pre {
|
|
272
|
-
margin: 0;
|
|
273
|
-
border-top-left-radius: 0;
|
|
274
|
-
border-top-right-radius: 0;
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
& .wg_prose__codeFileTitle {
|
|
278
|
-
display: flex;
|
|
279
|
-
gap: var(--app-space-block);
|
|
280
|
-
justify-content: space-between;
|
|
281
|
-
padding: var(--app-space-inline) var(--app-space-block);
|
|
282
|
-
border: 1px solid var(--app-color-border);
|
|
283
|
-
border-bottom: 0;
|
|
284
|
-
border-radius: var(--app-radius-box) var(--app-radius-box) 0 0;
|
|
285
|
-
background: var(--app-code-background);
|
|
286
|
-
color: var(--app-color-text-muted);
|
|
287
|
-
font-family: var(--app-font-mono);
|
|
288
|
-
font-size: var(--app-font-size-dense);
|
|
289
|
-
letter-spacing: 0;
|
|
290
|
-
}
|
|
291
|
-
|
|
292
|
-
& .wg_prose__codeFileLang {
|
|
293
|
-
text-transform: uppercase;
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
/* 줄 번호 · 펜스 메타 line-numbers · 복사에 섞이지 않게 content 로 */
|
|
297
|
-
& pre.wg_prose__lineNumbers code {
|
|
298
|
-
counter-reset: line;
|
|
299
|
-
}
|
|
300
|
-
|
|
301
|
-
& pre.wg_prose__lineNumbers code .line::before {
|
|
302
|
-
display: inline-block;
|
|
303
|
-
width: 2em;
|
|
304
|
-
margin-right: var(--app-space-stack);
|
|
305
|
-
color: var(--app-color-text-muted);
|
|
306
|
-
text-align: right;
|
|
307
|
-
content: counter(line);
|
|
308
|
-
counter-increment: line;
|
|
309
|
-
user-select: none;
|
|
310
|
-
}
|
|
311
|
-
/* stylelint-enable selector-class-pattern */
|
|
312
|
-
/* stylelint-enable selector-disallowed-list */
|
|
313
|
-
}
|
|
314
|
-
|
|
315
|
-
/* 공통 문서 머리 · 제목·소개 */
|
|
316
|
-
.wg_prose__head {
|
|
317
|
-
margin-bottom: var(--app-space-inline);
|
|
318
|
-
padding-bottom: var(--app-space-block);
|
|
319
|
-
border-bottom: 1px dotted var(--app-color-border);
|
|
320
|
-
|
|
321
|
-
/* stylelint-disable-next-line selector-disallowed-list -- Markdown 생성 머리 */
|
|
322
|
-
& > :last-child {
|
|
323
|
-
margin-bottom: 0;
|
|
324
|
-
}
|
|
325
|
-
|
|
326
|
-
/* stylelint-disable selector-disallowed-list -- README의 가운데 정렬 HTML 소개 */
|
|
327
|
-
& [align="center"] {
|
|
328
|
-
padding: var(--app-space-group) 0;
|
|
329
|
-
text-align: center;
|
|
330
|
-
}
|
|
331
|
-
|
|
332
|
-
& [align="center"] > h1 {
|
|
333
|
-
margin-block: var(--app-space-group);
|
|
334
|
-
font-size: 24px;
|
|
335
|
-
}
|
|
336
|
-
|
|
337
|
-
& [align="center"] > p {
|
|
338
|
-
margin-bottom: var(--app-space-block);
|
|
339
|
-
}
|
|
340
|
-
|
|
341
|
-
& [align="center"] > img {
|
|
342
|
-
width: 72px;
|
|
343
|
-
image-rendering: pixelated;
|
|
344
|
-
}
|
|
345
|
-
/* stylelint-enable selector-disallowed-list */
|
|
346
|
-
}
|
|
347
|
-
|
|
348
|
-
/* 제목 글자만 강조 · 여러 줄에서도 각 줄을 칠하고 문서 배치는 유지 */
|
|
349
|
-
.wg_prose__headingText {
|
|
350
|
-
box-decoration-break: clone;
|
|
351
|
-
|
|
352
|
-
/* 줄바꿈된 글자 뒤의 바탕은 opacity 레이어로 분리할 수 없어 배경색만 전환 */
|
|
353
|
-
transition: background-color var(--app-motion-duration-highlight-fade) var(--app-motion-easing-out);
|
|
354
|
-
}
|
|
355
|
-
|
|
356
|
-
.wg_prose__headingText--highlighted {
|
|
357
|
-
background-color: var(--app-color-anchor-highlight);
|
|
358
|
-
transition: none;
|
|
359
|
-
}
|
|
360
|
-
|
|
361
|
-
/* ::part 가름의 공통 표현 */
|
|
362
|
-
.wg_prose__part {
|
|
363
|
-
margin-top: var(--app-space-section);
|
|
364
|
-
padding-top: var(--app-space-stack);
|
|
365
|
-
border-top: 1px dotted var(--app-color-border);
|
|
366
|
-
color: var(--app-color-text-strong);
|
|
367
|
-
font-size: var(--app-font-size-part);
|
|
368
|
-
font-weight: var(--app-font-weight-strong);
|
|
369
|
-
line-height: var(--app-line-height-heading);
|
|
370
|
-
letter-spacing: var(--app-letter-spacing-heading);
|
|
371
|
-
}
|
|
372
|
-
|
|
373
|
-
/* 넓은 표의 내부 가로 스크롤 */
|
|
374
|
-
.wg_prose__table {
|
|
375
|
-
overflow-x: auto;
|
|
376
|
-
margin: var(--app-space-block) 0;
|
|
377
|
-
}
|
|
378
|
-
|
|
379
|
-
/* 상태 표지 · 확인 초록, 미확인 amber */
|
|
380
|
-
.wg_prose__pill {
|
|
381
|
-
display: inline-block;
|
|
382
|
-
padding: 0 5px;
|
|
383
|
-
border-radius: var(--app-radius-inline);
|
|
384
|
-
font-size: var(--app-font-size-detail);
|
|
385
|
-
font-weight: var(--app-font-weight-strong);
|
|
386
|
-
line-height: 1.6;
|
|
387
|
-
white-space: nowrap;
|
|
388
|
-
}
|
|
389
|
-
|
|
390
|
-
.wg_prose__pill--verified {
|
|
391
|
-
background: var(--app-color-verified-soft);
|
|
392
|
-
color: var(--app-color-verified);
|
|
393
|
-
}
|
|
394
|
-
|
|
395
|
-
.wg_prose__pill--unverified {
|
|
396
|
-
background: var(--app-color-unverified-soft);
|
|
397
|
-
color: var(--app-color-unverified);
|
|
398
|
-
}
|
|
399
|
-
|
|
400
|
-
/* 인라인 hex 색 칩 · remark-swatch의 CSS 변수 */
|
|
401
|
-
.wg_prose__color {
|
|
402
|
-
/* 색 칩과 값 사이 줄바꿈 방지 */
|
|
403
|
-
white-space: nowrap;
|
|
404
|
-
|
|
405
|
-
&::before {
|
|
406
|
-
display: inline-block;
|
|
407
|
-
width: 0.8em;
|
|
408
|
-
height: 0.8em;
|
|
409
|
-
margin-right: 5px;
|
|
410
|
-
border: 1px solid var(--app-color-border);
|
|
411
|
-
border-radius: var(--app-radius-mark);
|
|
412
|
-
background: var(--wg-prose-chip-color, transparent);
|
|
413
|
-
content: "";
|
|
414
|
-
vertical-align: -0.05em;
|
|
415
|
-
}
|
|
416
|
-
}
|
|
417
|
-
|
|
418
|
-
/* 빌드 시 생성한 격자 SVG 흐름도 */
|
|
419
|
-
.wg_prose__flow {
|
|
420
|
-
overflow-x: auto;
|
|
421
|
-
margin: var(--app-space-block) 0;
|
|
422
|
-
padding: var(--app-space-block);
|
|
423
|
-
border: 1px solid var(--app-color-border);
|
|
424
|
-
border-radius: var(--app-radius-box);
|
|
425
|
-
|
|
426
|
-
/* 라벨 위치는 자간 0의 격자로 계산 */
|
|
427
|
-
letter-spacing: 0;
|
|
428
|
-
|
|
429
|
-
/* stylelint-disable-next-line selector-disallowed-list -- 외부 렌더러 생성 SVG */
|
|
430
|
-
& svg {
|
|
431
|
-
display: block;
|
|
432
|
-
max-width: 100%;
|
|
433
|
-
height: auto;
|
|
434
|
-
margin: 0 auto;
|
|
435
|
-
}
|
|
436
|
-
}
|
|
437
|
-
|
|
438
|
-
/* 보충 설명 · 본문과 분리되는 제목·왼쪽 선 */
|
|
439
|
-
.wg_prose__note {
|
|
440
|
-
margin: var(--app-space-block) 0;
|
|
441
|
-
padding-left: var(--app-space-block);
|
|
442
|
-
border-left: 2px solid var(--app-color-border);
|
|
443
|
-
|
|
444
|
-
& > :last-child {
|
|
445
|
-
margin-bottom: 0;
|
|
446
|
-
}
|
|
447
|
-
}
|
|
448
|
-
|
|
449
|
-
.wg_prose__noteTitle {
|
|
450
|
-
display: block;
|
|
451
|
-
margin-bottom: var(--app-space-inline);
|
|
452
|
-
color: var(--app-color-text-strong);
|
|
453
|
-
font-weight: var(--app-font-weight-strong);
|
|
454
|
-
}
|
|
455
|
-
|
|
456
|
-
/* 구현 상세 · 펼침 상태와 marker는 native Details 소유 */
|
|
457
|
-
.wg_prose__details {
|
|
458
|
-
margin: var(--app-space-block) 0;
|
|
459
|
-
padding-bottom: var(--app-space-stack);
|
|
460
|
-
border-top: 1px dotted var(--app-color-border);
|
|
461
|
-
border-bottom: 1px dotted var(--app-color-border);
|
|
462
|
-
|
|
463
|
-
& > :last-child {
|
|
464
|
-
margin-bottom: 0;
|
|
465
|
-
}
|
|
466
|
-
}
|
|
467
|
-
|
|
468
|
-
.wg_prose__detailsSummary {
|
|
469
|
-
padding: var(--app-space-inline) 0;
|
|
470
|
-
color: var(--app-color-link);
|
|
471
|
-
font-weight: var(--app-font-weight-strong);
|
|
472
|
-
cursor: pointer;
|
|
473
|
-
|
|
474
|
-
&:hover {
|
|
475
|
-
color: var(--app-color-link-hover);
|
|
476
|
-
text-decoration: underline;
|
|
477
|
-
text-underline-offset: 2px;
|
|
478
|
-
}
|
|
479
|
-
|
|
480
|
-
&:focus-visible {
|
|
481
|
-
outline: var(--app-outline-focus);
|
|
482
|
-
outline-offset: var(--app-outline-focus-offset);
|
|
483
|
-
}
|
|
484
|
-
}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import clsx from "clsx";
|
|
2
|
-
import "./wg-prose.css";
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Markdown HTML과 본문 부품의 공통 표현 입력
|
|
6
|
-
* remark·rehype 플러그인은 _function 소유
|
|
7
|
-
*/
|
|
8
|
-
export interface WgProseProps {
|
|
9
|
-
/**
|
|
10
|
-
* 머리를 포함한 렌더링 완료 HTML
|
|
11
|
-
*/
|
|
12
|
-
html?: string;
|
|
13
|
-
/**
|
|
14
|
-
* README가 없을 때의 안내 머리
|
|
15
|
-
*/
|
|
16
|
-
head?: {
|
|
17
|
-
/**
|
|
18
|
-
* 문서 h1 제목
|
|
19
|
-
*/
|
|
20
|
-
title: string;
|
|
21
|
-
/**
|
|
22
|
-
* 제목 아래 소개 · 선택
|
|
23
|
-
*/
|
|
24
|
-
lead?: string;
|
|
25
|
-
};
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
export const WgProse = (props: WgProseProps) => {
|
|
29
|
-
if (props.html !== undefined) {
|
|
30
|
-
return <article className={clsx("wg_prose__root")} dangerouslySetInnerHTML={{__html: props.html}} />;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
return (
|
|
34
|
-
<article className={clsx("wg_prose__root")}>
|
|
35
|
-
{props.head !== undefined && (
|
|
36
|
-
<header className={clsx("wg_prose__head")}>
|
|
37
|
-
<h1>{props.head.title}</h1>
|
|
38
|
-
{props.head.lead !== undefined && <p>{props.head.lead}</p>}
|
|
39
|
-
</header>
|
|
40
|
-
)}
|
|
41
|
-
</article>
|
|
42
|
-
);
|
|
43
|
-
};
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* 넓은 화면은 같은 폭의 양쪽 탐색 사이를 본문이 채움 · 좁은 화면은 문서 탐색만 표시
|
|
3
|
-
*/
|
|
4
|
-
.wg_shell__root {
|
|
5
|
-
display: grid;
|
|
6
|
-
max-width: var(--app-size-page);
|
|
7
|
-
margin: 0 auto;
|
|
8
|
-
padding: 0 var(--app-space-gutter);
|
|
9
|
-
grid-template: "nav main outline" 1fr / calc(var(--app-size-sidebar) + var(--app-space-sidebar-gap)) minmax(0, 1fr) calc(var(--app-size-sidebar) + var(--app-space-sidebar-gap));
|
|
10
|
-
background: var(--app-color-ground);
|
|
11
|
-
color: var(--app-color-text);
|
|
12
|
-
font-family: var(--app-font-body);
|
|
13
|
-
font-size: var(--app-font-size-body);
|
|
14
|
-
line-height: var(--app-line-height-body);
|
|
15
|
-
letter-spacing: var(--app-letter-spacing-body);
|
|
16
|
-
|
|
17
|
-
/* 한국어 낱말 단위 줄바꿈 · 긴 식별자만 예외 */
|
|
18
|
-
word-break: keep-all;
|
|
19
|
-
overflow-wrap: break-word;
|
|
20
|
-
text-wrap: pretty;
|
|
21
|
-
-webkit-font-smoothing: antialiased;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
.wg_shell__root--drawerOpen {
|
|
25
|
-
overflow: hidden;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
.wg_shell__browserRoot {
|
|
29
|
-
/* 브라우저 셸의 마운트 경계 · 자식은 body의 기존 grid에 참여 */
|
|
30
|
-
display: contents;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
.wg_shell__main {
|
|
34
|
-
grid-area: main;
|
|
35
|
-
min-width: 0;
|
|
36
|
-
border-inline: 1px solid var(--app-color-border-layout);
|
|
37
|
-
|
|
38
|
-
/* 문서 목록의 시작선 · 마지막 절도 읽는 선까지 이동 가능한 끝 여백 */
|
|
39
|
-
padding-block: var(--app-size-brand) calc(100vh - var(--app-space-anchor));
|
|
40
|
-
padding-inline: var(--app-space-column);
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
/* 본문 최소 약 800px을 남기도록 목차 숨김 · 본문이 오른쪽 여백까지 채움 */
|
|
44
|
-
@media (width < 1360px) {
|
|
45
|
-
.wg_shell__root {
|
|
46
|
-
grid-template: "nav main" 1fr / calc(var(--app-size-sidebar) + var(--app-space-sidebar-gap)) minmax(0, 1fr);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
/* 모바일의 브랜드·본문은 한 열 배치 */
|
|
51
|
-
@media (width < 1024px) {
|
|
52
|
-
.wg_shell__root {
|
|
53
|
-
grid-template:
|
|
54
|
-
"nav" auto
|
|
55
|
-
"main" 1fr / minmax(0, 1fr);
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
.wg_shell__main {
|
|
59
|
-
padding-block-start: var(--app-space-page-top);
|
|
60
|
-
padding-inline: 0;
|
|
61
|
-
border-inline: 0;
|
|
62
|
-
}
|
|
63
|
-
}
|
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
import clsx from "clsx";
|
|
2
|
-
import type {Child} from "hono/jsx";
|
|
3
|
-
import {toNavigationData} from "@/component/widget/navigation/_function/to-navigation-data/to-navigation-data";
|
|
4
|
-
import {toNavigationJson} from "@/component/widget/navigation/_function/to-navigation-json";
|
|
5
|
-
import {WgShellControls} from "@/component/widget/shell-controls/wg-shell-controls";
|
|
6
|
-
import {asset_favicon_path} from "@/constant/asset";
|
|
7
|
-
import type {Doc} from "@/type/doc";
|
|
8
|
-
import type {DocOutline} from "@/type/doc-outline";
|
|
9
|
-
import type {SiteAssets} from "@/type/site-assets";
|
|
10
|
-
import type {SiteConfig} from "@/type/site-config";
|
|
11
|
-
import "@/style/base.css";
|
|
12
|
-
import "@/style/token.css";
|
|
13
|
-
import "./wg-shell.css";
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* 공통 HTML 틀의 입력 · 문서 탐색·현재 목차·본문
|
|
17
|
-
*/
|
|
18
|
-
export interface WgShellProps {
|
|
19
|
-
/**
|
|
20
|
-
* 사이트 이름 · 탭과 사이드바
|
|
21
|
-
*/
|
|
22
|
-
site: SiteConfig;
|
|
23
|
-
/**
|
|
24
|
-
* 사이드바 전체 문서 목록
|
|
25
|
-
*/
|
|
26
|
-
docs: Doc[];
|
|
27
|
-
/**
|
|
28
|
-
* HTML 머리의 글꼴·dev 스크립트
|
|
29
|
-
*/
|
|
30
|
-
assets: SiteAssets;
|
|
31
|
-
/**
|
|
32
|
-
* 탭 제목의 문서 이름 · 첫 화면 생략
|
|
33
|
-
*/
|
|
34
|
-
title?: string;
|
|
35
|
-
/**
|
|
36
|
-
* 현재 문서 id · 첫 화면 생략
|
|
37
|
-
*/
|
|
38
|
-
current?: string;
|
|
39
|
-
/**
|
|
40
|
-
* 현재 문서 또는 README 홈의 목차
|
|
41
|
-
*/
|
|
42
|
-
outline?: DocOutline;
|
|
43
|
-
/**
|
|
44
|
-
* 현재 페이지 본문
|
|
45
|
-
*/
|
|
46
|
-
children: Child;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
export const WgShell = (props: WgShellProps) => {
|
|
50
|
-
const navigationData = toNavigationData({site: props.site, docs: props.docs, current: props.current, outline: props.outline});
|
|
51
|
-
|
|
52
|
-
return (
|
|
53
|
-
<html lang="ko">
|
|
54
|
-
{/**
|
|
55
|
-
* 공통 자원 · 브라우저 동작은 WgShellControls의 생명주기에서 연결
|
|
56
|
-
*/}
|
|
57
|
-
<head>
|
|
58
|
-
<meta charSet="utf-8" />
|
|
59
|
-
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
60
|
-
{props.site.description !== undefined && <meta name="description" content={props.site.description} />}
|
|
61
|
-
<title>{props.title === undefined ? props.site.title : `${props.title} · ${props.site.title}`}</title>
|
|
62
|
-
<link rel="icon" href={asset_favicon_path} type="image/svg+xml" />
|
|
63
|
-
<style dangerouslySetInnerHTML={{__html: props.assets.fontCss}} />
|
|
64
|
-
{props.assets.preload.map((href) => (
|
|
65
|
-
<link key={href} rel="preload" href={href} as="font" type="font/woff2" crossOrigin="" />
|
|
66
|
-
))}
|
|
67
|
-
<link rel="stylesheet" href={props.assets.stylePath} />
|
|
68
|
-
</head>
|
|
69
|
-
{/**
|
|
70
|
-
* 문서 탐색·현재 목차·본문 · 브라우저 동작 연결
|
|
71
|
-
*/}
|
|
72
|
-
<body className={clsx("wg_shell__root")}>
|
|
73
|
-
{/**
|
|
74
|
-
* 서버·브라우저의 공통 셸 조립 · 본문 HTML은 마운트 범위에서 제외
|
|
75
|
-
*/}
|
|
76
|
-
<div className={clsx("wg_shell__browserRoot")} data-shell-browser-root="" data-shell-reload={props.assets.reload ? "" : undefined}>
|
|
77
|
-
<WgShellControls data={navigationData} reload={props.assets.reload} />
|
|
78
|
-
</div>
|
|
79
|
-
{/**
|
|
80
|
-
* 최소 탐색 자료와 단일 JSX 번들 · 본문 전 상태·스크롤 복원
|
|
81
|
-
*/}
|
|
82
|
-
<script type="application/json" id="fh-navigation-data" dangerouslySetInnerHTML={{__html: toNavigationJson(navigationData)}} />
|
|
83
|
-
<script dangerouslySetInnerHTML={{__html: props.assets.browserScript}} />
|
|
84
|
-
<main className={clsx("wg_shell__main")}>{props.children}</main>
|
|
85
|
-
</body>
|
|
86
|
-
</html>
|
|
87
|
-
);
|
|
88
|
-
};
|