for-humanity 0.6.0 → 0.7.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.
Files changed (145) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/LICENSE +1 -1
  3. package/README.md +3 -3
  4. package/dist/browser.js +9 -9
  5. package/dist/cli.css +39 -322
  6. package/dist/cli.js +123 -309
  7. package/package.json +4 -3
  8. package/src/asset/font/ibm-plex-sans-kr/IBMPlexSansKR-Regular.woff2 +0 -0
  9. package/src/asset/font/ibm-plex-sans-kr/IBMPlexSansKR-SemiBold.woff2 +0 -0
  10. package/src/asset/font/{pretendard → ibm-plex-sans-kr}/LICENSE.txt +4 -5
  11. package/src/asset/font/ibm-plex-sans-kr/ibm-plex-sans-kr.css +22 -0
  12. package/src/asset/font/{jetbrains-mono/LICENSE → monoplex-kr/LICENSE.md} +61 -8
  13. package/src/asset/font/monoplex-kr/MonoplexKR-Regular.woff2 +0 -0
  14. package/src/asset/font/monoplex-kr/MonoplexKR-SemiBold.woff2 +0 -0
  15. package/src/asset/font/monoplex-kr/monoplex-kr.css +20 -0
  16. package/src/component/widget/navigation/_constant/navigation-data-schema.ts +0 -3
  17. package/src/component/widget/navigation/_constant/navigation.ts +2 -2
  18. package/src/component/widget/navigation/_function/to-navigation-data/_to-navigation-document.ts +2 -3
  19. package/src/component/widget/navigation/_function/to-navigation-data/_to-navigation-group.ts +3 -4
  20. package/src/component/widget/navigation/_function/to-navigation-data/to-navigation-data.ts +6 -14
  21. package/src/component/widget/navigation/_type/navigation-data.ts +0 -12
  22. package/src/component/widget/navigation/_type/navigation-focus-snapshot.ts +0 -4
  23. package/src/component/widget/navigation/_wg-navigation-nav-list.css +5 -136
  24. package/src/component/widget/navigation/_wg-navigation-nav-list.tsx +10 -55
  25. package/src/component/widget/navigation/_wg-navigation-nav.css +2 -8
  26. package/src/component/widget/navigation/_wg-navigation-nav.tsx +1 -11
  27. package/src/component/widget/navigation/_wg-navigation-toc.css +12 -207
  28. package/src/component/widget/navigation/_wg-navigation-toc.tsx +39 -80
  29. package/src/component/widget/navigation/wg-navigation.css +1 -1
  30. package/src/component/widget/navigation/wg-navigation.tsx +10 -69
  31. package/src/component/widget/prose/wg-prose.css +7 -4
  32. package/src/component/widget/shell/wg-shell.css +7 -11
  33. package/src/constant/copy.ts +0 -5
  34. package/src/constant/font.ts +4 -9
  35. package/src/entry/browser/browser.tsx +1 -1
  36. package/src/entry/cli/cli.test.ts +6 -8
  37. package/src/entry/cli/cli.ts +7 -12
  38. package/src/store/navigation/create-navigation-stores.test.ts +10 -28
  39. package/src/store/navigation/create-navigation-stores.ts +4 -18
  40. package/src/store/navigation/navigation-state.ts +0 -10
  41. package/src/store/navigation/navigation-storage.ts +0 -5
  42. package/src/style/token.css +21 -20
  43. package/src/util/font/to-font-css.test.ts +2 -2
  44. package/src/util/mermaid/render-flow.js +2 -2
  45. package/src/asset/font/jetbrains-mono/jetbrains-mono-latin-wght-normal.woff2 +0 -0
  46. package/src/asset/font/jetbrains-mono/jetbrains-mono.css +0 -11
  47. package/src/asset/font/pretendard/pretendardvariable-dynamic-subset.css +0 -1008
  48. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.0.woff2 +0 -0
  49. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.1.woff2 +0 -0
  50. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.10.woff2 +0 -0
  51. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.11.woff2 +0 -0
  52. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.12.woff2 +0 -0
  53. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.13.woff2 +0 -0
  54. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.14.woff2 +0 -0
  55. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.15.woff2 +0 -0
  56. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.16.woff2 +0 -0
  57. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.17.woff2 +0 -0
  58. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.18.woff2 +0 -0
  59. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.19.woff2 +0 -0
  60. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.2.woff2 +0 -0
  61. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.20.woff2 +0 -0
  62. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.21.woff2 +0 -0
  63. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.22.woff2 +0 -0
  64. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.23.woff2 +0 -0
  65. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.24.woff2 +0 -0
  66. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.25.woff2 +0 -0
  67. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.26.woff2 +0 -0
  68. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.27.woff2 +0 -0
  69. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.28.woff2 +0 -0
  70. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.29.woff2 +0 -0
  71. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.3.woff2 +0 -0
  72. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.30.woff2 +0 -0
  73. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.31.woff2 +0 -0
  74. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.32.woff2 +0 -0
  75. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.33.woff2 +0 -0
  76. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.34.woff2 +0 -0
  77. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.35.woff2 +0 -0
  78. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.36.woff2 +0 -0
  79. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.37.woff2 +0 -0
  80. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.38.woff2 +0 -0
  81. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.39.woff2 +0 -0
  82. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.4.woff2 +0 -0
  83. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.40.woff2 +0 -0
  84. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.41.woff2 +0 -0
  85. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.42.woff2 +0 -0
  86. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.43.woff2 +0 -0
  87. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.44.woff2 +0 -0
  88. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.45.woff2 +0 -0
  89. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.46.woff2 +0 -0
  90. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.47.woff2 +0 -0
  91. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.48.woff2 +0 -0
  92. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.49.woff2 +0 -0
  93. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.5.woff2 +0 -0
  94. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.50.woff2 +0 -0
  95. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.51.woff2 +0 -0
  96. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.52.woff2 +0 -0
  97. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.53.woff2 +0 -0
  98. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.54.woff2 +0 -0
  99. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.55.woff2 +0 -0
  100. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.56.woff2 +0 -0
  101. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.57.woff2 +0 -0
  102. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.58.woff2 +0 -0
  103. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.59.woff2 +0 -0
  104. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.6.woff2 +0 -0
  105. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.60.woff2 +0 -0
  106. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.61.woff2 +0 -0
  107. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.62.woff2 +0 -0
  108. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.63.woff2 +0 -0
  109. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.64.woff2 +0 -0
  110. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.65.woff2 +0 -0
  111. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.66.woff2 +0 -0
  112. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.67.woff2 +0 -0
  113. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.68.woff2 +0 -0
  114. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.69.woff2 +0 -0
  115. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.7.woff2 +0 -0
  116. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.70.woff2 +0 -0
  117. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.71.woff2 +0 -0
  118. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.72.woff2 +0 -0
  119. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.73.woff2 +0 -0
  120. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.74.woff2 +0 -0
  121. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.75.woff2 +0 -0
  122. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.76.woff2 +0 -0
  123. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.77.woff2 +0 -0
  124. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.78.woff2 +0 -0
  125. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.79.woff2 +0 -0
  126. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.8.woff2 +0 -0
  127. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.80.woff2 +0 -0
  128. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.81.woff2 +0 -0
  129. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.82.woff2 +0 -0
  130. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.83.woff2 +0 -0
  131. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.84.woff2 +0 -0
  132. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.85.woff2 +0 -0
  133. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.86.woff2 +0 -0
  134. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.87.woff2 +0 -0
  135. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.88.woff2 +0 -0
  136. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.89.woff2 +0 -0
  137. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.9.woff2 +0 -0
  138. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.90.woff2 +0 -0
  139. package/src/asset/font/pretendard/woff2-dynamic-subset/PretendardVariable.subset.91.woff2 +0 -0
  140. package/src/component/widget/navigation/_function/to-navigation-branch-id.ts +0 -6
  141. package/src/component/widget/navigation/_wg-navigation-branch-toggle.css +0 -28
  142. package/src/component/widget/navigation/_wg-navigation-branch-toggle.tsx +0 -48
  143. package/src/store/navigation/_constant/tree.ts +0 -6
  144. package/src/store/navigation/to-navigation-tree-state.ts +0 -19
  145. package/src/store/navigation/use-navigation-tree-store.ts +0 -12
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "for-humanity",
3
- "version": "0.6.0",
3
+ "version": "0.7.1",
4
4
  "description": "Documents written for humans to read: a docs kit with a sidebar, parts, sections and flowcharts, built on Hono JSX",
5
5
  "keywords": [
6
6
  "docs",
@@ -11,7 +11,7 @@
11
11
  "korean"
12
12
  ],
13
13
  "license": "MIT",
14
- "author": "\ud558\ubbfc\uc6b0",
14
+ "author": "nomeehej",
15
15
  "repository": {
16
16
  "type": "git",
17
17
  "url": "git+https://github.com/minu-ha/for-humanity.git"
@@ -86,5 +86,6 @@
86
86
  "stylelint": "^17.15.0",
87
87
  "stylelint-config-standard": "^40.0.0",
88
88
  "typescript": "^7.0.2"
89
- }
89
+ },
90
+ "packageManager": "pnpm@12.9.1+sha512.06b055fff5cd20dc12781de173ced3310ce0951bf2ec620211a16045d5444d5c93a663210764ef29a653a610459ba0368f0e74f84d80c54723cf95aae7bc0d6d"
90
91
  }
@@ -1,9 +1,8 @@
1
- Copyright (c) 2021, Kil Hyung-jin (https://github.com/orioncactus/pretendard),
2
- with Reserved Font Name Pretendard.
1
+ Copyright © 2017 IBM Corp. with Reserved Font Name "Plex"
3
2
 
4
3
  This Font Software is licensed under the SIL Open Font License, Version 1.1.
5
- This license is copied below, and is also available with a FAQ at:
6
- https://scripts.sil.org/OFL
4
+
5
+ This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL
7
6
 
8
7
 
9
8
  -----------------------------------------------------------
@@ -19,7 +18,7 @@ with others.
19
18
 
20
19
  The OFL allows the licensed fonts to be used, studied, modified and
21
20
  redistributed freely as long as they are not sold by themselves. The
22
- fonts, including any derivative works, can be bundled, embedded,
21
+ fonts, including any derivative works, can be bundled, embedded,
23
22
  redistributed and/or sold with any software provided that any reserved
24
23
  names are not used by derivative works. The fonts and derivatives,
25
24
  however, cannot be released under any other type of license. The
@@ -0,0 +1,22 @@
1
+ /*
2
+ * IBM Plex Sans KR 1.003 · npm @ibm/plex-sans-kr 1.1.0 · https://github.com/IBM/plex
3
+ * 배포 WOFF2(fonts/complete/woff2/hinted) 원본 그대로 · 라이선스는 옆의 LICENSE.txt
4
+ * 본문의 한글 음절·호환 자모만 담당 · Monoplex KR 한글과 같은 글자의 원래 폭
5
+ */
6
+ @font-face {
7
+ font-family: "IBM Plex Sans KR";
8
+ font-style: normal;
9
+ font-display: swap;
10
+ font-weight: 400;
11
+ src: url(./IBMPlexSansKR-Regular.woff2) format("woff2");
12
+ unicode-range: U+3131-318E, U+AC00-D7A3;
13
+ }
14
+
15
+ @font-face {
16
+ font-family: "IBM Plex Sans KR";
17
+ font-style: normal;
18
+ font-display: swap;
19
+ font-weight: 600;
20
+ src: url(./IBMPlexSansKR-SemiBold.woff2) format("woff2");
21
+ unicode-range: U+3131-318E, U+AC00-D7A3;
22
+ }
@@ -1,13 +1,42 @@
1
- Copyright 2020 The JetBrains Mono Project Authors (https://github.com/JetBrains/JetBrainsMono) JetBrainsMono-Italic[wght].ttf: Copyright 2020 The JetBrains Mono Project Authors (https://github.com/JetBrains/JetBrainsMono)
1
+ Copyright (c) 2021, Kim Yangsu with Reserved Font Name "Monoplex"
2
2
 
3
- This Font Software is licensed under the SIL Open Font License, Version 1.1.
4
- This license is copied below, and is also available with a FAQ at:
5
- http://scripts.sil.org/OFL
3
+ Monoplex Font Software is licensed under the SIL Open Font License, Version 1.1.
4
+ The build recipe (https://github.com/y-kim/monoplex) and the build tool it drives,
5
+ hapchija (https://github.com/y-kim/hapchija), are licensed under the MIT License.
6
6
 
7
+ The fonts carry the copyrights below. Every one of them is licensed under the
8
+ SIL Open Font License, Version 1.1.
7
9
 
8
- -----------------------------------------------------------
9
- SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
10
- -----------------------------------------------------------
10
+ - Copyright © 2017 IBM Corp. with Reserved Font Name "Plex"
11
+ https://github.com/IBM/plex/
12
+ IBM Plex Mono, IBM Plex Sans KR, IBM Plex Sans JP, IBM Plex Sans TC and
13
+ IBM Plex Sans SC. Nearly every glyph comes from these.
14
+
15
+ - Copyright (c) 2021, Yuko Otawara with Reserved Font Name "PlemolJP"
16
+ https://github.com/yuru7/PlemolJP
17
+ The half-width box drawing and block glyphs, U+2500-U+259F. These were drawn
18
+ for PlemolJP; they are not IBM Plex outlines. The .sfd file that holds them
19
+ (source/AdjustedGlyphs/Box_Drawing_half.sfd) still names IBM Plex Sans JP in
20
+ its header because it was saved out of a working copy of that font, but the
21
+ outlines in it are original work.
22
+
23
+ - Copyright (c) 2014, Ryan L McIntyre (https://ryanlmcintyre.com)
24
+ https://github.com/ryanoasis/nerd-fonts
25
+ Nerd Font variants only. Those variants take icon glyphs, and nothing else,
26
+ from Blex Mono Nerd Font. The icon sets are the work of their own authors and
27
+ keep their own licenses; the upstream release does not restate them.
28
+ Pomicons (U+E000-E00A) are not included.
29
+
30
+ IBM Plex® is a trademark of IBM Corp, registered in many jurisdictions
31
+ worldwide. This notice is carried in the fonts' name table, as OFL FAQ 3.7 asks.
32
+
33
+ Special thanks to PlemolJP (https://github.com/yuru7/PlemolJP). Monoplex began
34
+ as a fork of its generate script, and this repository's history still starts
35
+ there. hapchija has since been rewritten and carries no PlemolJP code.
36
+
37
+ ## SIL Open Font License
38
+
39
+ Version 1.1 - 26 February 2007
11
40
 
12
41
  PREAMBLE
13
42
  The goals of the Open Font License (OFL) are to stimulate worldwide
@@ -37,7 +66,7 @@ copyright statement(s).
37
66
  distributed by the Copyright Holder(s).
38
67
 
39
68
  "Modified Version" refers to any derivative made by adding to, deleting,
40
- or substituting -- in part or in whole -- any of the components of the
69
+ or substituting — in part or in whole — any of the components of the
41
70
  Original Version, by changing formats or by porting the Font Software to a
42
71
  new environment.
43
72
 
@@ -91,3 +120,27 @@ INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
91
120
  DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
92
121
  FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
93
122
  OTHER DEALINGS IN THE FONT SOFTWARE.
123
+
124
+
125
+ ## MIT License
126
+
127
+ Copyright (c) 2021 Kim Yangsu
128
+
129
+ Permission is hereby granted, free of charge, to any person obtaining a copy
130
+ of this software and associated documentation files (the "Software"), to deal
131
+ in the Software without restriction, including without limitation the rights
132
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
133
+ copies of the Software, and to permit persons to whom the Software is
134
+ furnished to do so, subject to the following conditions:
135
+
136
+ The above copyright notice and this permission notice shall be included in
137
+ all copies or substantial portions of the Software.
138
+
139
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
140
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
141
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
142
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
143
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
144
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
145
+ THE SOFTWARE.
146
+
@@ -0,0 +1,20 @@
1
+ /*
2
+ * Monoplex KR 1.1.0 · https://github.com/y-kim/monoplex/releases/tag/monoplex-kr-1.1.0
3
+ * 릴리스 TTF를 서브셋 없이 WOFF2로만 압축 · OFL FAQ의 이름 유지 조건 · 라이선스는 옆의 LICENSE.md
4
+ * fonttools ttLib.woff2 compress MonoplexKR-Regular.ttf
5
+ */
6
+ @font-face {
7
+ font-family: "Monoplex KR";
8
+ font-style: normal;
9
+ font-display: swap;
10
+ font-weight: 400;
11
+ src: url(./MonoplexKR-Regular.woff2) format("woff2");
12
+ }
13
+
14
+ @font-face {
15
+ font-family: "Monoplex KR";
16
+ font-style: normal;
17
+ font-display: swap;
18
+ font-weight: 600;
19
+ src: url(./MonoplexKR-SemiBold.woff2) format("woff2");
20
+ }
@@ -6,13 +6,11 @@ const navigationDocSchema: ZodMiniType<NavigationDoc> = object({
6
6
  name: string(),
7
7
  label: string(),
8
8
  active: boolean(),
9
- current: boolean(),
10
9
  children: lazy(() => array(navigationDocSchema)),
11
10
  });
12
11
  const navigationGroupSchema: ZodMiniType<NavigationGroup> = object({
13
12
  name: string(),
14
13
  path: array(string()),
15
- current: boolean(),
16
14
  docs: array(navigationDocSchema),
17
15
  groups: lazy(() => array(navigationGroupSchema)),
18
16
  });
@@ -30,6 +28,5 @@ export const navigationDataSchema: ZodMiniType<NavigationData> = object({
30
28
  sections: array(object({heading: headingSchema, part: optional(string()), subs: array(object({heading: headingSchema}))})).check(minLength(1)),
31
29
  }),
32
30
  ),
33
- pageId: string(),
34
31
  home: boolean(),
35
32
  });
@@ -4,6 +4,6 @@
4
4
  export const navigation_mobile_query = "(width < 1024px)";
5
5
 
6
6
  /**
7
- * 양쪽 240px 탐색·본문 900px·간격 120px와 스크롤바가 들어가는 3열 기준
7
+ * 양쪽 200px 탐색·간격 120px·최소 800px 본문과 스크롤바가 들어가는 3열 기준
8
8
  */
9
- export const navigation_wide_query = "(width >= 1536px)";
9
+ export const navigation_wide_query = "(width >= 1360px)";
@@ -2,13 +2,12 @@ import type {DocBranch} from "@/component/widget/navigation/_type/doc-branch";
2
2
  import type {NavigationDoc} from "@/component/widget/navigation/_type/navigation-data";
3
3
 
4
4
  /**
5
- * 本문 없는 문서 가지 · 재귀에서도 현재 페이지와 조상 경로만 유지
5
+ * 본문 없는 문서 가지 · 재귀에서도 현재 페이지 한 항목만 표시
6
6
  */
7
- export const toNavigationDocument = (options: {doc: DocBranch; current?: string; ancestors: Set<string>}): NavigationDoc => ({
7
+ export const toNavigationDocument = (options: {doc: DocBranch; current?: string}): NavigationDoc => ({
8
8
  id: options.doc.id,
9
9
  name: options.doc.data.name,
10
10
  label: options.doc.data.label,
11
11
  active: options.doc.id === options.current,
12
- current: options.doc.id === options.current || options.ancestors.has(options.doc.id),
13
12
  children: options.doc.children === undefined ? [] : options.doc.children.map((doc) => toNavigationDocument({...options, doc})),
14
13
  });
@@ -3,12 +3,11 @@ import type {DocGroup} from "@/component/widget/navigation/_type/doc-group";
3
3
  import type {NavigationGroup} from "@/component/widget/navigation/_type/navigation-data";
4
4
 
5
5
  /**
6
- * 전체 묶음 경로와 본문 없는 하위 가지 · 현재 문서의 경로만 트리선으로 연결
6
+ * 전체 묶음 경로와 본문 없는 하위 가지
7
7
  */
8
- export const toNavigationGroup = (options: {group: DocGroup; current?: string; ancestors: Set<string>; currentGroup?: string[]}): NavigationGroup => ({
8
+ export const toNavigationGroup = (options: {group: DocGroup; current?: string}): NavigationGroup => ({
9
9
  name: options.group.name,
10
10
  path: options.group.path,
11
- current: options.group.path.every((name, index) => name === options.currentGroup?.[index]),
12
- docs: options.group.docs.map((doc) => toNavigationDocument({doc, current: options.current, ancestors: options.ancestors})),
11
+ docs: options.group.docs.map((doc) => toNavigationDocument({doc, current: options.current})),
13
12
  groups: options.group.groups.map((group) => toNavigationGroup({...options, group})),
14
13
  });
@@ -9,17 +9,9 @@ import type {SiteConfig} from "@/type/site-config";
9
9
  /**
10
10
  * 현재 문서의 이름·계층·목차만 전송 · 다른 문서 본문은 브라우저 탐색 입력에서 제외
11
11
  */
12
- export const toNavigationData = (options: {site: SiteConfig; docs: Doc[]; current?: string; outline?: DocOutline}): NavigationData => {
13
- const currentDoc = options.docs.find((doc) => doc.id === options.current);
14
- const ancestors = new Set(currentDoc?.ancestors);
15
-
16
- return {
17
- title: options.site.title,
18
- groups: toDocGroups({docs: options.docs, navigation: options.site.navigation}).map((group) =>
19
- toNavigationGroup({group, current: options.current, ancestors, currentGroup: currentDoc?.data.group}),
20
- ),
21
- outline: options.outline === undefined ? [] : toTocGroups(options.outline),
22
- pageId: options.current === undefined ? "/" : options.current,
23
- home: options.current === undefined,
24
- };
25
- };
12
+ export const toNavigationData = (options: {site: SiteConfig; docs: Doc[]; current?: string; outline?: DocOutline}): NavigationData => ({
13
+ title: options.site.title,
14
+ groups: toDocGroups({docs: options.docs, navigation: options.site.navigation}).map((group) => toNavigationGroup({group, current: options.current})),
15
+ outline: options.outline === undefined ? [] : toTocGroups(options.outline),
16
+ home: options.current === undefined,
17
+ });
@@ -20,10 +20,6 @@ export interface NavigationDoc {
20
20
  * 현재 페이지 한 항목만 강조
21
21
  */
22
22
  active: boolean;
23
- /**
24
- * 현재 문서와 조상의 트리 경로
25
- */
26
- current: boolean;
27
23
  /**
28
24
  * 클릭 가능한 하위 문서
29
25
  */
@@ -42,10 +38,6 @@ export interface NavigationGroup {
42
38
  * 최상위부터 현재 묶음까지
43
39
  */
44
40
  path: string[];
45
- /**
46
- * 현재 페이지가 속한 묶음 경로
47
- */
48
- current: boolean;
49
41
  /**
50
42
  * 현재 단계의 문서
51
43
  */
@@ -72,10 +64,6 @@ export interface NavigationData {
72
64
  * 현재 페이지의 목차
73
65
  */
74
66
  outline: TocGroup[];
75
- /**
76
- * 목차의 접힘 상태를 구분할 문서 id
77
- */
78
- pageId: string;
79
67
  /**
80
68
  * README 홈 여부
81
69
  */
@@ -10,10 +10,6 @@ export interface NavigationFocusSnapshot {
10
10
  * 메뉴 진입·닫기 버튼에서 데스크톱 브랜드로 돌아갈 위치인지 구분
11
11
  */
12
12
  drawer: boolean;
13
- /**
14
- * 하위 문서·묶음 접힘 버튼의 안정된 식별자
15
- */
16
- branch: string | null;
17
13
  /**
18
14
  * 문서 이동 링크의 안정된 식별자
19
15
  */
@@ -1,179 +1,48 @@
1
1
  /*
2
- * 재귀 문서 목록 · 단계별 가지와 조상 경로의 1px 트리
2
+ * 재귀 문서 목록 · 단계별 들여쓰기
3
3
  */
4
4
  .wg_navigationNavList__root {
5
- margin: 0 0 0 var(--app-space-tree-inset);
5
+ margin: 0;
6
6
  padding: 0;
7
7
  list-style: none;
8
8
  }
9
9
 
10
10
  .wg_navigationNavList__branch {
11
- /* 하위 묶음도 문서와 같은 첫 줄 기준으로 가지 연결 */
12
- position: relative;
13
11
  display: block;
14
- padding: var(--app-space-tree-row) 0 var(--app-space-tree-row) calc(var(--app-space-tree-indent) + var(--app-space-inline));
12
+ padding: var(--app-space-tree-row) 0;
15
13
  color: var(--app-color-text-muted);
16
14
  font-size: var(--app-font-size-group);
17
15
  line-height: calc(var(--app-font-size-dense) * var(--app-line-height-tight));
18
16
  overflow-wrap: anywhere;
19
-
20
- &::before {
21
- position: absolute;
22
- top: calc(0.5lh + var(--app-space-tree-row));
23
- left: 0;
24
- width: var(--app-space-tree-indent);
25
- border-top: 1px solid var(--app-color-border-soft);
26
- content: "";
27
- pointer-events: none;
28
- }
29
17
  }
30
18
 
31
19
  .wg_navigationNavList__link {
32
- /* 가로 가지는 링크 첫 줄 기준 · 여러 줄 제목에서도 연결 위치 유지 */
33
- position: relative;
34
20
  display: block;
35
- padding: var(--app-space-tree-row) 0 var(--app-space-tree-row) calc(var(--app-space-tree-indent) + var(--app-space-inline));
21
+ padding: var(--app-space-tree-row) 0;
36
22
  color: var(--app-color-link);
37
23
  font-size: var(--app-font-size-dense);
38
24
  line-height: var(--app-line-height-tight);
39
25
  text-decoration: none;
40
26
  overflow-wrap: anywhere;
41
27
 
42
- &::before {
43
- position: absolute;
44
- top: calc(0.5lh + var(--app-space-tree-row));
45
- left: 0;
46
- width: var(--app-space-tree-indent);
47
- border-top: 1px solid var(--app-color-border-soft);
48
- content: "";
49
- pointer-events: none;
50
- }
51
-
52
28
  &:where(:hover) {
53
29
  text-decoration: underline;
54
30
  }
55
31
 
56
- &:where(:hover)::before {
57
- border-top-color: currentcolor;
58
- }
59
-
60
- /* hover와 같은 밑줄·가지선으로 키보드 위치 표시 */
32
+ /* hover와 같은 밑줄로 키보드 위치 표시 */
61
33
  &:where(:focus-visible) {
62
34
  outline: none;
63
35
  text-decoration: underline;
64
36
  }
65
-
66
- &:where(:focus-visible)::before {
67
- border-top-color: currentcolor;
68
- }
69
37
  }
70
38
 
71
39
  .wg_navigationNavList__link--active {
72
40
  color: var(--app-color-link);
73
41
  font-weight: var(--app-font-weight-active);
74
-
75
- &::before {
76
- border-top-color: currentcolor;
77
- }
78
42
  }
79
43
 
80
44
  .wg_navigationNavList__item {
81
- /* 하위 목록을 포함해 다음 형제까지 줄기 연결 */
82
- display: flow-root;
83
-
84
- /* 세로 줄기는 각 항목 기준 · 마지막 항목의 첫 줄 가운데에서 종료 */
85
- position: relative;
86
-
87
- &:has(> .wg_navigationBranchToggle__root) > .wg_navigationNavList__link {
88
- padding-inline-end: calc(var(--app-size-tree-toggle) + var(--app-space-inline));
89
- }
90
-
91
- &:has(> .wg_navigationBranchToggle__root) > .wg_navigationNavList__branch {
92
- padding-inline-end: calc(var(--app-size-tree-toggle) + var(--app-space-inline));
93
- }
94
-
95
- &::before {
96
- position: absolute;
97
- top: 0;
98
- bottom: 0;
99
- left: 0;
100
- border-left: 1px solid var(--app-color-border-soft);
101
- content: "";
102
- pointer-events: none;
103
- }
104
-
105
- &:where(:last-child)::before {
106
- bottom: auto;
107
- height: calc(0.5lh + var(--app-space-tree-row));
108
- }
109
-
110
- /* hover·키보드 포커스의 도착점 · 첫 줄 아래는 기본 줄기 유지 */
111
- &::after {
112
- position: absolute;
113
- top: 0;
114
- left: 0;
115
- height: calc(0.5lh + var(--app-space-tree-row));
116
- border-left: 1px solid transparent;
117
- content: "";
118
- pointer-events: none;
119
- }
120
-
121
- &:where(:hover)::after {
122
- border-left-color: var(--app-color-link);
123
- }
124
-
125
- &:where(:has(:focus-visible))::after {
126
- border-left-color: var(--app-color-link);
127
- }
128
-
129
- /* 뒤 항목까지의 세로 경로 · 같은 목록의 형제 안에서만 연결 */
130
- &:where(:has(~ .wg_navigationNavList__item:hover))::before {
131
- border-left-color: var(--app-color-link);
132
- }
133
-
134
- &:where(:has(~ .wg_navigationNavList__item :focus-visible))::before {
135
- border-left-color: var(--app-color-link);
136
- }
137
-
138
45
  & > .wg_navigationNavList__root {
139
46
  margin-left: var(--app-space-tree-indent);
140
47
  }
141
-
142
- /* 하위 문서를 탐색할 때 조상 묶음의 가지도 함께 연결 */
143
- &:where(:hover) > .wg_navigationNavList__branch::before {
144
- border-top-color: var(--app-color-link);
145
- }
146
-
147
- &:where(:has(:focus-visible)) > .wg_navigationNavList__branch::before {
148
- border-top-color: var(--app-color-link);
149
- }
150
-
151
- /* 자식 문서를 탐색할 때 클릭 가능한 부모 문서의 가지도 연결 */
152
- &:where(:hover) > .wg_navigationNavList__link::before {
153
- border-top-color: var(--app-color-link);
154
- }
155
-
156
- &:where(:has(:focus-visible)) > .wg_navigationNavList__link::before {
157
- border-top-color: var(--app-color-link);
158
- }
159
- }
160
-
161
- .wg_navigationNavList__item--trail {
162
- &::before {
163
- border-left-color: var(--app-color-link);
164
- }
165
- }
166
-
167
- .wg_navigationNavList__item--current {
168
- &::after {
169
- border-left-color: var(--app-color-link);
170
- }
171
-
172
- & > .wg_navigationNavList__branch::before {
173
- border-top-color: var(--app-color-link);
174
- }
175
-
176
- & > .wg_navigationNavList__link::before {
177
- border-top-color: var(--app-color-link);
178
- }
179
48
  }
@@ -1,8 +1,6 @@
1
1
  import clsx from "clsx";
2
2
  import {Fragment} from "hono/jsx";
3
- import {toNavigationBranchId} from "@/component/widget/navigation/_function/to-navigation-branch-id";
4
3
  import type {NavigationGroup} from "@/component/widget/navigation/_type/navigation-data";
5
- import {WgNavigationBranchToggle} from "@/component/widget/navigation/_wg-navigation-branch-toggle";
6
4
  import "./_wg-navigation-nav-list.css";
7
5
 
8
6
  /**
@@ -13,80 +11,38 @@ export interface WgNavigationNavListProps {
13
11
  * 현재 단계의 문서와 하위 묶음
14
12
  */
15
13
  group: NavigationGroup;
16
- /**
17
- * 사용자가 접은 가지
18
- */
19
- collapsed: Record<string, boolean>;
20
- /**
21
- * 브라우저에서 가지 선택 변경
22
- */
23
- onToggle?: (key: string) => void;
24
- /**
25
- * 부모 버튼과 연결할 가지 키 · 루트 묶음·문서 모두 같은 규칙 사용
26
- */
27
- branchKey: string;
28
14
  }
29
15
 
30
16
  export const WgNavigationNavList = (props: WgNavigationNavListProps) => {
31
17
  const entries = [
32
- ...props.group.docs.map((doc) => {
33
- const active = doc.active;
34
- return {kind: "document" as const, key: `doc:${doc.id}`, doc, active, current: doc.current};
35
- }),
36
- ...props.group.groups.map((group) => ({
37
- kind: "group" as const,
38
- key: `group:${JSON.stringify(group.path)}`,
39
- group,
40
- current: group.current,
41
- })),
18
+ ...props.group.docs.map((doc) => ({kind: "document" as const, key: `doc:${doc.id}`, doc})),
19
+ ...props.group.groups.map((group) => ({kind: "group" as const, key: `group:${JSON.stringify(group.path)}`, group})),
42
20
  ];
43
- const currentIndex = entries.findIndex((entry) => entry.current);
44
21
 
45
22
  return (
46
- <ul
47
- className={clsx("wg_navigationNavList__root")}
48
- aria-label={props.group.name}
49
- id={toNavigationBranchId(props.branchKey)}
50
- hidden={props.collapsed[props.branchKey] === true}
51
- >
23
+ <ul className={clsx("wg_navigationNavList__root")} aria-label={props.group.name}>
52
24
  {/**
53
- * 현재 경로 앞의 줄기와 도착 가지 · 문서 링크는 원래 파일 URL 사용
25
+ * 문서 링크는 원래 파일 URL 사용
54
26
  */}
55
- {entries.map((entry, index) => (
56
- <li
57
- className={clsx("wg_navigationNavList__item", {
58
- "wg_navigationNavList__item--trail": index < currentIndex,
59
- "wg_navigationNavList__item--current": entry.current,
60
- })}
61
- key={entry.key}
62
- >
27
+ {entries.map((entry) => (
28
+ <li className={clsx("wg_navigationNavList__item")} key={entry.key}>
63
29
  {/**
64
30
  * 문서 링크 · 부모도 독립 페이지, 현재 한 문서에만 페이지 상태 부여
65
31
  */}
66
32
  {entry.kind === "document" && (
67
33
  <Fragment>
68
34
  <a
69
- className={clsx("wg_navigationNavList__link", {"wg_navigationNavList__link--active": entry.active})}
35
+ className={clsx("wg_navigationNavList__link", {"wg_navigationNavList__link--active": entry.doc.active})}
70
36
  href={`/${entry.doc.id}/`}
71
37
  title={entry.doc.label}
72
- aria-current={entry.active ? "page" : undefined}
38
+ aria-current={entry.doc.active ? "page" : undefined}
73
39
  >
74
40
  {entry.doc.name}
75
41
  </a>
76
42
  {/**
77
43
  * 하위 문서 · 부모 아래에서도 기존 목록의 들여쓰기와 키보드 이동 유지
78
44
  */}
79
- {entry.doc.children.length > 0 && (
80
- <WgNavigationBranchToggle branchKey={entry.key} label={entry.doc.name} collapsed={props.collapsed} onToggle={props.onToggle} />
81
- )}
82
- {entry.doc.children.length > 0 && (
83
- <WgNavigationNavList
84
- group={{name: entry.doc.name, path: props.group.path, current: entry.current, docs: entry.doc.children, groups: []}}
85
- collapsed={props.collapsed}
86
- onToggle={props.onToggle}
87
- branchKey={entry.key}
88
- />
89
- )}
45
+ {entry.doc.children.length > 0 && <WgNavigationNavList group={{name: entry.doc.name, path: props.group.path, docs: entry.doc.children, groups: []}} />}
90
46
  </Fragment>
91
47
  )}
92
48
  {/**
@@ -95,8 +51,7 @@ export const WgNavigationNavList = (props: WgNavigationNavListProps) => {
95
51
  {entry.kind === "group" && (
96
52
  <Fragment>
97
53
  <span className={clsx("wg_navigationNavList__branch")}>{entry.group.name}</span>
98
- <WgNavigationBranchToggle branchKey={entry.key} label={entry.group.name} collapsed={props.collapsed} onToggle={props.onToggle} />
99
- <WgNavigationNavList group={entry.group} collapsed={props.collapsed} onToggle={props.onToggle} branchKey={entry.key} />
54
+ <WgNavigationNavList group={entry.group} />
100
55
  </Fragment>
101
56
  )}
102
57
  </li>
@@ -9,19 +9,13 @@
9
9
  .wg_navigationNav__docs {
10
10
  display: flex;
11
11
  flex-direction: column;
12
- gap: var(--app-space-stack);
12
+ gap: var(--app-space-tree-group);
13
13
  }
14
14
 
15
15
  .wg_navigationNav__group {
16
- padding-inline-end: calc(var(--app-size-tree-toggle) + var(--app-space-inline));
17
- margin: 0 0 4px;
16
+ margin: 0 0 var(--app-space-tree-label);
18
17
  color: var(--app-color-text-muted);
19
18
  font-size: var(--app-font-size-group);
20
19
  line-height: calc(var(--app-font-size-dense) * var(--app-line-height-tight));
21
20
  text-box: trim-start cap alphabetic;
22
21
  }
23
-
24
- .wg_navigationNav__docGroup {
25
- /* 묶음 접기 버튼의 첫 행 기준 */
26
- position: relative;
27
- }