czon 0.2.8 → 0.3.0

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 (45) hide show
  1. package/dist/cli.js +2 -8
  2. package/dist/cli.js.map +1 -1
  3. package/dist/ssg/ContentPage.d.ts.map +1 -1
  4. package/dist/ssg/ContentPage.js +9 -276
  5. package/dist/ssg/ContentPage.js.map +1 -1
  6. package/dist/ssg/IndexPage.d.ts +8 -0
  7. package/dist/ssg/IndexPage.d.ts.map +1 -0
  8. package/dist/ssg/IndexPage.js +64 -0
  9. package/dist/ssg/IndexPage.js.map +1 -0
  10. package/dist/ssg/RootPage.d.ts +6 -0
  11. package/dist/ssg/RootPage.d.ts.map +1 -0
  12. package/dist/ssg/RootPage.js +53 -0
  13. package/dist/ssg/RootPage.js.map +1 -0
  14. package/dist/ssg/app.d.ts.map +1 -1
  15. package/dist/ssg/app.js +11 -15
  16. package/dist/ssg/app.js.map +1 -1
  17. package/dist/ssg/components/CZONFooter.d.ts +3 -0
  18. package/dist/ssg/components/CZONFooter.d.ts.map +1 -0
  19. package/dist/ssg/components/CZONFooter.js +23 -0
  20. package/dist/ssg/components/CZONFooter.js.map +1 -0
  21. package/dist/ssg/components/CZONHeader.d.ts +6 -0
  22. package/dist/ssg/components/CZONHeader.d.ts.map +1 -0
  23. package/dist/ssg/components/CZONHeader.js +14 -0
  24. package/dist/ssg/components/CZONHeader.js.map +1 -0
  25. package/dist/ssg/components/ContentMeta.d.ts +10 -0
  26. package/dist/ssg/components/ContentMeta.d.ts.map +1 -0
  27. package/dist/ssg/components/ContentMeta.js +29 -0
  28. package/dist/ssg/components/ContentMeta.js.map +1 -0
  29. package/dist/ssg/components/LanguageSwitcher.d.ts +1 -1
  30. package/dist/ssg/components/LanguageSwitcher.d.ts.map +1 -1
  31. package/dist/ssg/components/LanguageSwitcher.js +2 -1
  32. package/dist/ssg/components/LanguageSwitcher.js.map +1 -1
  33. package/dist/ssg/layouts/PageLayout.d.ts +8 -0
  34. package/dist/ssg/layouts/PageLayout.d.ts.map +1 -0
  35. package/dist/ssg/layouts/PageLayout.js +19 -0
  36. package/dist/ssg/layouts/PageLayout.js.map +1 -0
  37. package/dist/ssg/style.d.ts +2 -0
  38. package/dist/ssg/style.d.ts.map +1 -0
  39. package/dist/ssg/style.js +252 -0
  40. package/dist/ssg/style.js.map +1 -0
  41. package/dist/version.d.ts +2 -0
  42. package/dist/version.d.ts.map +1 -0
  43. package/dist/version.js +16 -0
  44. package/dist/version.js.map +1 -0
  45. package/package.json +1 -1
package/dist/cli.js CHANGED
@@ -36,17 +36,11 @@ var __importStar = (this && this.__importStar) || (function () {
36
36
  Object.defineProperty(exports, "__esModule", { value: true });
37
37
  const clipanion_1 = require("clipanion");
38
38
  const dotenv_1 = require("dotenv");
39
- const fs = __importStar(require("fs"));
40
39
  const path = __importStar(require("path"));
41
40
  const pipeline_1 = require("./build/pipeline");
41
+ const version_1 = require("./version");
42
42
  // 加载 .env 文件中的环境变量
43
43
  (0, dotenv_1.config)();
44
- // 获取版本号 - 从 package.json 读取
45
- function getVersion() {
46
- const packageJsonPath = path.join(__dirname, '..', 'package.json');
47
- const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
48
- return packageJson.version;
49
- }
50
44
  // Build 命令
51
45
  class BuildCommand extends clipanion_1.Command {
52
46
  constructor() {
@@ -89,7 +83,7 @@ BuildCommand.usage = clipanion_1.Command.Usage({
89
83
  const cli = new clipanion_1.Cli({
90
84
  binaryName: 'czon',
91
85
  binaryLabel: 'CZON - A minimalist Markdown documentation site builder',
92
- binaryVersion: getVersion(),
86
+ binaryVersion: version_1.CZON_VERSION,
93
87
  });
94
88
  // 注册命令
95
89
  cli.register(BuildCommand);
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,yCAAiD;AACjD,mCAAgC;AAChC,uCAAyB;AACzB,2CAA6B;AAC7B,+CAA6C;AAE7C,mBAAmB;AACnB,IAAA,eAAM,GAAE,CAAC;AAET,4BAA4B;AAC5B,SAAS,UAAU;IACjB,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;IACnE,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;IAC1E,OAAO,WAAW,CAAC,OAAO,CAAC;AAC7B,CAAC;AAED,WAAW;AACX,MAAM,YAAa,SAAQ,mBAAO;IAAlC;;QAGE,aAAQ,GAAG,kBAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QAC1C,YAAO,GAAG,kBAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QACzC,SAAI,GAAG,kBAAM,CAAC,KAAK,CAAC,QAAQ,EAAE;YAC5B,WAAW,EAAE,uDAAuD;SACrE,CAAC,CAAC;IA8BL,CAAC;IAhBC,KAAK,CAAC,OAAO;QACX,IAAI,CAAC;YACH,MAAM,IAAA,oBAAS,EAAC;gBACd,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS;gBACjE,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,KAAK,EAAE,IAAI,CAAC,IAAI;aACjB,CAAC,CAAC;YAEH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAEhB,OAAO,CAAC,CAAC;QACX,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,mBAAmB,KAAK,IAAI,CAAC,CAAC;YACxD,OAAO,CAAC,CAAC;QACX,CAAC;IACH,CAAC;;AAnCM,kBAAK,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,AAAd,CAAe;AAQpB,kBAAK,GAAG,mBAAO,CAAC,KAAK,CAAC;IAC3B,WAAW,EAAE,mEAAmE;IAChF,OAAO,EAAE;;;;;;;KAOR;CACF,CAAC,AAVU,CAUT;AAoBL,YAAY;AACZ,MAAM,GAAG,GAAG,IAAI,eAAG,CAAC;IAClB,UAAU,EAAE,MAAM;IAClB,WAAW,EAAE,yDAAyD;IACtE,aAAa,EAAE,UAAU,EAAE;CAC5B,CAAC,CAAC;AAEH,OAAO;AACP,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;AAE3B,SAAS;AACT,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;IACjC,GAAG,eAAG,CAAC,cAAc;IACrB,KAAK,EAAE,OAAO,CAAC,KAAK;IACpB,MAAM,EAAE,OAAO,CAAC,MAAM;IACtB,MAAM,EAAE,OAAO,CAAC,MAAM;CACvB,CAAC,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,yCAAiD;AACjD,mCAAgC;AAChC,2CAA6B;AAC7B,+CAA6C;AAC7C,uCAAyC;AAEzC,mBAAmB;AACnB,IAAA,eAAM,GAAE,CAAC;AAET,WAAW;AACX,MAAM,YAAa,SAAQ,mBAAO;IAAlC;;QAGE,aAAQ,GAAG,kBAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QAC1C,YAAO,GAAG,kBAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QACzC,SAAI,GAAG,kBAAM,CAAC,KAAK,CAAC,QAAQ,EAAE;YAC5B,WAAW,EAAE,uDAAuD;SACrE,CAAC,CAAC;IA8BL,CAAC;IAhBC,KAAK,CAAC,OAAO;QACX,IAAI,CAAC;YACH,MAAM,IAAA,oBAAS,EAAC;gBACd,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS;gBACjE,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,KAAK,EAAE,IAAI,CAAC,IAAI;aACjB,CAAC,CAAC;YAEH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAEhB,OAAO,CAAC,CAAC;QACX,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,mBAAmB,KAAK,IAAI,CAAC,CAAC;YACxD,OAAO,CAAC,CAAC;QACX,CAAC;IACH,CAAC;;AAnCM,kBAAK,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,AAAd,CAAe;AAQpB,kBAAK,GAAG,mBAAO,CAAC,KAAK,CAAC;IAC3B,WAAW,EAAE,mEAAmE;IAChF,OAAO,EAAE;;;;;;;KAOR;CACF,CAAC,AAVU,CAUT;AAoBL,YAAY;AACZ,MAAM,GAAG,GAAG,IAAI,eAAG,CAAC;IAClB,UAAU,EAAE,MAAM;IAClB,WAAW,EAAE,yDAAyD;IACtE,aAAa,EAAE,sBAAY;CAC5B,CAAC,CAAC;AAEH,OAAO;AACP,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;AAE3B,SAAS;AACT,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;IACjC,GAAG,eAAG,CAAC,cAAc;IACrB,KAAK,EAAE,OAAO,CAAC,KAAK;IACpB,MAAM,EAAE,OAAO,CAAC,MAAM;IACtB,MAAM,EAAE,OAAO,CAAC,MAAM;CACvB,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ContentPage.d.ts","sourceRoot":"","sources":["../../src/ssg/ContentPage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AA8B1C,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC;IACjC,GAAG,EAAE,cAAc,CAAC;IACpB,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;CACxC,CA+aA,CAAC"}
1
+ {"version":3,"file":"ContentPage.d.ts","sourceRoot":"","sources":["../../src/ssg/ContentPage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAS1C,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC;IACjC,GAAG,EAAE,cAAc,CAAC;IACpB,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;CACxC,CAuKA,CAAC"}
@@ -5,19 +5,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.ContentPage = void 0;
7
7
  const react_1 = __importDefault(require("react"));
8
+ const ContentMeta_1 = require("./components/ContentMeta");
9
+ const CZONFooter_1 = require("./components/CZONFooter");
10
+ const CZONHeader_1 = require("./components/CZONHeader");
8
11
  const LanguageSwitcher_1 = require("./components/LanguageSwitcher");
9
12
  const Navigator_1 = require("./components/Navigator");
10
- const TagList_1 = require("./components/TagList");
11
- const ContentPageLayout = props => {
12
- return (
13
- // 100% 宽度,100% 高度,垂直方向排列
14
- react_1.default.createElement("div", { className: "flex flex-col w-full h-full overflow-hidden items-stretch" },
15
- react_1.default.createElement("header", { className: "shrink-0" }, props.header),
16
- react_1.default.createElement("div", { className: "flex flex-col overflow-auto md:flex-row flex-1 md:overflow-hidden md:items-stretch" },
17
- react_1.default.createElement("nav", { className: "md:overflow-auto md:shrink-0" }, props.navigator),
18
- react_1.default.createElement("main", { className: "md:flex-1 md:overflow-auto" }, props.main)),
19
- react_1.default.createElement("footer", { className: "shrink-0" }, props.footer)));
20
- };
13
+ const PageLayout_1 = require("./layouts/PageLayout");
14
+ const style_1 = require("./style");
21
15
  const ContentPage = props => {
22
16
  const frontmatter = props.content.frontmatter || {};
23
17
  const title = frontmatter.title;
@@ -31,256 +25,7 @@ const ContentPage = props => {
31
25
  react_1.default.createElement("meta", { name: "viewport", content: "width=device-width, initial-scale=1.0" }),
32
26
  react_1.default.createElement("title", null, title),
33
27
  react_1.default.createElement("script", { src: "https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4" }),
34
- react_1.default.createElement("style", { dangerouslySetInnerHTML: {
35
- __html: `
36
-
37
- html[lang='ar-SA'] {
38
- direction: rtl;
39
- }
40
-
41
- body {
42
- color: #333;
43
- background: #f8f9fa;
44
- }
45
-
46
- .sidebar {
47
- width: 280px;
48
- background: #fff;
49
- border-right: 1px solid #e9ecef;
50
- padding: 2rem 1rem;
51
- overflow-y: auto;
52
-
53
- flex-shrink: 0;
54
- }
55
-
56
- .sidebar-header {
57
- margin-bottom: 2rem;
58
- padding-bottom: 1rem;
59
- border-bottom: 1px solid #e9ecef;
60
- }
61
-
62
- .sidebar-header h1 {
63
- font-size: 1.5rem;
64
- font-weight: 600;
65
- color: #212529;
66
- }
67
-
68
- .sidebar-header p {
69
- color: #6c757d;
70
- font-size: 0.875rem;
71
- margin-top: 0.5rem;
72
- }
73
-
74
- .nav-list {
75
- list-style: none;
76
- }
77
-
78
- .nav-item {
79
- margin-bottom: 0.5rem;
80
- }
81
-
82
- .nav-link {
83
- display: block;
84
- padding: 0.5rem 1rem;
85
- color: #495057;
86
- text-decoration: none;
87
- border-radius: 4px;
88
- transition: all 0.2s;
89
- }
90
-
91
- .nav-link:hover {
92
- background: #e9ecef;
93
- color: #212529;
94
- }
95
-
96
- .nav-link.active {
97
- background: #007bff;
98
- color: white;
99
- }
100
-
101
- .nav-submenu {
102
- list-style: none;
103
- margin-left: 1rem;
104
- margin-top: 0.25rem;
105
- }
106
-
107
- blockquote {
108
- border-left: 4px solid #007bff;
109
- padding: 0.5rem 1rem;
110
- margin: 1rem 0;
111
- background: #f8f9fa;
112
- color: #495057;
113
- }
114
-
115
- .content {
116
- flex: 1;
117
- margin-inline-start: 80px;
118
- padding: 3rem 4rem;
119
- max-width: 900px;
120
- }
121
-
122
- .content-header {
123
- margin-bottom: 2rem;
124
- padding-bottom: 1rem;
125
- border-bottom: 1px solid #e9ecef;
126
- }
127
-
128
- .content-header h1 {
129
- font-size: 2.5rem;
130
- font-weight: 700;
131
- color: #212529;
132
- margin-bottom: 0.5rem;
133
- }
134
-
135
- .content-header .meta {
136
- color: #6c757d;
137
- font-size: 0.875rem;
138
- }
139
-
140
- .content-body {
141
- font-size: 1.125rem;
142
- line-height: 1.8;
143
- }
144
-
145
- .content-body h1 {
146
- font-size: 2rem;
147
- margin: 2rem 0 1rem;
148
- color: #212529;
149
- }
150
-
151
- .content-body h2 {
152
- font-size: 1.75rem;
153
- margin: 1.75rem 0 0.875rem;
154
- color: #343a40;
155
- }
156
-
157
- .content-body h3 {
158
- font-size: 1.5rem;
159
- margin: 1.5rem 0 0.75rem;
160
- color: #495057;
161
- }
162
-
163
- .content-body p {
164
- margin: 1rem 0;
165
- }
166
-
167
- .content-body ul,
168
- .content-body ol {
169
- margin: 1rem 0 1rem 2rem;
170
- }
171
-
172
- .content-body li {
173
- margin: 0.5rem 0;
174
- }
175
-
176
- .content-body blockquote {
177
- border-left: 4px solid #007bff;
178
- padding: 0.5rem 1rem;
179
- margin: 1rem 0;
180
- background: #f8f9fa;
181
- color: #495057;
182
- }
183
-
184
- .content-body code {
185
- background: #f8f9fa;
186
- padding: 0.2rem 0.4rem;
187
- border-radius: 3px;
188
- font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace;
189
- font-size: 0.875em;
190
- }
191
-
192
- .content-body pre {
193
- background: #f8f9fa;
194
- padding: 1rem;
195
- border-radius: 6px;
196
- overflow-x: auto;
197
- margin: 1rem 0;
198
- }
199
-
200
- .content-body pre code {
201
- background: none;
202
- padding: 0;
203
- }
204
-
205
- .content-body table {
206
- width: 100%;
207
- border-collapse: collapse;
208
- margin: 1rem 0;
209
- }
210
-
211
- .content-body th,
212
- .content-body td {
213
- border: 1px solid #dee2e6;
214
- padding: 0.75rem;
215
- text-align: left;
216
- }
217
-
218
- .content-body th {
219
- background: #f8f9fa;
220
- font-weight: 600;
221
- }
222
-
223
- .content-body img {
224
- max-width: 100%;
225
- height: auto;
226
- border-radius: 6px;
227
- margin: 1rem 0;
228
- }
229
-
230
- a {
231
- color: #007bff;
232
- text-decoration: none;
233
- }
234
-
235
- .content-body a:hover {
236
- text-decoration: underline;
237
- }
238
-
239
- .footer {
240
- margin-top: 3rem;
241
- padding-top: 2rem;
242
- border-top: 1px solid #e9ecef;
243
- color: #6c757d;
244
- font-size: 0.875rem;
245
- text-align: center;
246
- }
247
-
248
- .tags-list {
249
- list-style: none;
250
- padding: 0;
251
- display: flex;
252
- gap: 0.5rem;
253
- margin-top: 0.5rem;
254
- flex-wrap: wrap;
255
- }
256
-
257
- .tag-item {
258
- background: #e9ecef;
259
- color: #495057;
260
- padding: 0.25rem 0.5rem;
261
- border-radius: 4px;
262
- font-size: 0.875rem;
263
- }
264
-
265
- @media (max-width: 768px) {
266
-
267
- .sidebar {
268
- width: 100%;
269
- height: auto;
270
- position: static;
271
- border-right: none;
272
- border-bottom: 1px solid #e9ecef;
273
- }
274
-
275
- .content {
276
- margin-left: 0;
277
- padding: 2rem;
278
- }
279
- }
280
-
281
-
282
- `,
283
- } }),
28
+ react_1.default.createElement("style", null, style_1.style),
284
29
  react_1.default.createElement("link", { rel: "stylesheet", href: "https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/styles/github.min.css" }),
285
30
  react_1.default.createElement("link", { rel: "stylesheet", href: "https://cdn.jsdelivr.net/npm/katex@0.16.8/dist/katex.min.css", integrity: "sha384-GvrOXuhMATgEsSwCs4smul74iXGOixntILdUW9XmUC6+HX0sLNAK3q71HotJqlAn", crossOrigin: "anonymous" }),
286
31
  react_1.default.createElement("script", { src: "https://cdn.jsdelivr.net/npm/mermaid@11.4.0/dist/mermaid.min.js" }),
@@ -337,17 +82,9 @@ const ContentPage = props => {
337
82
  `,
338
83
  } })),
339
84
  react_1.default.createElement("body", null,
340
- react_1.default.createElement(ContentPageLayout, { header: null, navigator: react_1.default.createElement("nav", { className: "sidebar" },
85
+ react_1.default.createElement(PageLayout_1.PageLayout, { header: react_1.default.createElement(CZONHeader_1.CZONHeader, { ctx: props.ctx }), navigator: react_1.default.createElement("nav", { className: "sidebar" },
341
86
  react_1.default.createElement(Navigator_1.Navigator, { ctx: props.ctx, file: props.file, lang: props.lang })), main: react_1.default.createElement("main", { className: "content" },
342
- react_1.default.createElement("header", { className: "content-header" },
343
- react_1.default.createElement("h2", { className: "text-2xl font-bold mb-2" }, title),
344
- react_1.default.createElement("p", { className: "font-semibold" }, props.file.category),
345
- react_1.default.createElement("blockquote", null, summary),
346
- react_1.default.createElement("div", null,
347
- "\uD83D\uDCC5 ",
348
- date),
349
- react_1.default.createElement("div", { className: "tags" },
350
- react_1.default.createElement(TagList_1.TagList, { tags: tags }))),
87
+ react_1.default.createElement(ContentMeta_1.ContentMeta, { ctx: props.ctx, file: props.file, lang: props.lang }),
351
88
  react_1.default.createElement("div", { className: "content-body" },
352
89
  react_1.default.createElement("article", { dangerouslySetInnerHTML: { __html: props.content.body } }),
353
90
  react_1.default.createElement("h2", null, "See Also"),
@@ -360,11 +97,7 @@ const ContentPage = props => {
360
97
  }))),
361
98
  react_1.default.createElement("footer", { className: "footer" },
362
99
  react_1.default.createElement(LanguageSwitcher_1.LanguageSwitcher, { ctx: props.ctx, lang: props.lang, file: props.file }),
363
- react_1.default.createElement("p", null,
364
- "Generated by ",
365
- react_1.default.createElement("strong", null, "CZON"),
366
- " \u2022",
367
- react_1.default.createElement("a", { href: "https://github.com/zccz14/CZON", target: "_blank" }, "View on GitHub")))), footer: null }),
100
+ react_1.default.createElement(CZONFooter_1.CZONFooter, null))), footer: null }),
368
101
  react_1.default.createElement("script", { src: "https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/highlight.min.js" }),
369
102
  react_1.default.createElement("script", { dangerouslySetInnerHTML: { __html: 'hljs.highlightAll();' } }),
370
103
  react_1.default.createElement("script", { dangerouslySetInnerHTML: {
@@ -1 +1 @@
1
- {"version":3,"file":"ContentPage.js","sourceRoot":"","sources":["../../src/ssg/ContentPage.tsx"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAE1B,oEAAiE;AACjE,sDAAmD;AACnD,kDAA+C;AAE/C,MAAM,iBAAiB,GAKlB,KAAK,CAAC,EAAE;IACX,OAAO;IACL,yBAAyB;IACzB,uCAAK,SAAS,EAAC,2DAA2D;QAExE,0CAAQ,SAAS,EAAC,UAAU,IAAE,KAAK,CAAC,MAAM,CAAU;QAGpD,uCAAK,SAAS,EAAC,oFAAoF;YAEjG,uCAAK,SAAS,EAAC,8BAA8B,IAAE,KAAK,CAAC,SAAS,CAAO;YAErE,wCAAM,SAAS,EAAC,4BAA4B,IAAE,KAAK,CAAC,IAAI,CAAQ,CAC5D;QAEN,0CAAQ,SAAS,EAAC,UAAU,IAAE,KAAK,CAAC,MAAM,CAAU,CAChD,CACP,CAAC;AACJ,CAAC,CAAC;AAEK,MAAM,WAAW,GAKnB,KAAK,CAAC,EAAE;IACX,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC;IACpD,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC;IAChC,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC;IACpC,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,IAAI,IAAI,CAAC;IACtC,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,IAAI,EAAE,CAAC;IACpC,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;IAErC,OAAO,CACL,wCAAM,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE;QACxE;YACE,wCAAM,OAAO,EAAC,OAAO,GAAG;YACxB,wCAAM,IAAI,EAAC,UAAU,EAAC,OAAO,EAAC,uCAAuC,GAAG;YACxE,6CAAQ,KAAK,CAAS;YACtB,0CAAQ,GAAG,EAAC,qDAAqD,GAAU;YAC3E,yCACE,uBAAuB,EAAE;oBACvB,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SAuPX;iBACE,GACM;YACT,wCACE,GAAG,EAAC,YAAY,EAChB,IAAI,EAAC,mFAAmF,GACxF;YACF,wCACE,GAAG,EAAC,YAAY,EAChB,IAAI,EAAC,8DAA8D,EACnE,SAAS,EAAC,yEAAyE,EACnF,WAAW,EAAC,WAAW,GACvB;YAEF,0CAAQ,GAAG,EAAC,iEAAiE,GAAU;YACvF,yCACE,uBAAuB,EAAE;oBACvB,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SAiDX;iBACE,GACM,CACJ;QACP;YACE,8BAAC,iBAAiB,IAChB,MAAM,EAAE,IAAI,EACZ,SAAS,EACP,uCAAK,SAAS,EAAC,SAAS;oBACtB,8BAAC,qBAAS,IAAC,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,GAAI,CAC7D,EAER,IAAI,EACF,wCAAM,SAAS,EAAC,SAAS;oBACvB,0CAAQ,SAAS,EAAC,gBAAgB;wBAChC,sCAAI,SAAS,EAAC,yBAAyB,IAAE,KAAK,CAAM;wBACpD,qCAAG,SAAS,EAAC,eAAe,IAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAK;wBACtD,kDAAa,OAAO,CAAc;wBAClC;;4BAAS,IAAI,CAAO;wBACpB,uCAAK,SAAS,EAAC,MAAM;4BACnB,8BAAC,iBAAO,IAAC,IAAI,EAAE,IAAI,GAAI,CACnB,CACC;oBAET,uCAAK,SAAS,EAAC,cAAc;wBAC3B,2CAAS,uBAAuB,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,GAAI;wBAEpE,qDAAiB;wBACjB,0CACG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK;6BAClB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;6BAClE,GAAG,CAAC,CAAC,CAAC,EAAE;4BACP,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CACxC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,CAChD,CAAC;4BACF,OAAO,CACL,sCAAI,GAAG,EAAE,CAAC,CAAC,IAAI;gCACb,qCAAG,IAAI,EAAE,GAAG,CAAC,CAAC,QAAQ,EAAE,IAAI,OAAO,IAAG,UAAU,EAAE,WAAW,CAAC,KAAK,CAAK,CACrE,CACN,CAAC;wBACJ,CAAC,CAAC,CACD,CACD;oBACN,0CAAQ,SAAS,EAAC,QAAQ;wBACxB,8BAAC,mCAAgB,IAAC,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,GAAI;wBACxE;;4BACe,qDAAqB;;4BAClC,qCAAG,IAAI,EAAC,gCAAgC,EAAC,MAAM,EAAC,QAAQ,qBAEpD,CACF,CACG,CACJ,EAET,MAAM,EAAE,IAAI,GACZ;YAEF,0CAAQ,GAAG,EAAC,8EAA8E,GAAU;YACpG,0CAAQ,uBAAuB,EAAE,EAAE,MAAM,EAAE,sBAAsB,EAAE,GAAI;YACvE,0CACE,uBAAuB,EAAE;oBACvB,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SAkCX;iBACE,GACO,CACL,CACF,CACR,CAAC;AACJ,CAAC,CAAC;AApbW,QAAA,WAAW,eAobtB"}
1
+ {"version":3,"file":"ContentPage.js","sourceRoot":"","sources":["../../src/ssg/ContentPage.tsx"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAE1B,0DAAuD;AACvD,wDAAqD;AACrD,wDAAqD;AACrD,oEAAiE;AACjE,sDAAmD;AACnD,qDAAkD;AAClD,mCAAgC;AAEzB,MAAM,WAAW,GAKnB,KAAK,CAAC,EAAE;IACX,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC;IACpD,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC;IAChC,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC;IACpC,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,IAAI,IAAI,CAAC;IACtC,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,IAAI,EAAE,CAAC;IACpC,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;IAErC,OAAO,CACL,wCAAM,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE;QACxE;YACE,wCAAM,OAAO,EAAC,OAAO,GAAG;YACxB,wCAAM,IAAI,EAAC,UAAU,EAAC,OAAO,EAAC,uCAAuC,GAAG;YACxE,6CAAQ,KAAK,CAAS;YACtB,0CAAQ,GAAG,EAAC,qDAAqD,GAAU;YAC3E,6CAAQ,aAAK,CAAS;YACtB,wCACE,GAAG,EAAC,YAAY,EAChB,IAAI,EAAC,mFAAmF,GACxF;YACF,wCACE,GAAG,EAAC,YAAY,EAChB,IAAI,EAAC,8DAA8D,EACnE,SAAS,EAAC,yEAAyE,EACnF,WAAW,EAAC,WAAW,GACvB;YAEF,0CAAQ,GAAG,EAAC,iEAAiE,GAAU;YACvF,yCACE,uBAAuB,EAAE;oBACvB,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SAiDX;iBACE,GACM,CACJ;QACP;YACE,8BAAC,uBAAU,IACT,MAAM,EAAE,8BAAC,uBAAU,IAAC,GAAG,EAAE,KAAK,CAAC,GAAG,GAAI,EACtC,SAAS,EACP,uCAAK,SAAS,EAAC,SAAS;oBACtB,8BAAC,qBAAS,IAAC,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,GAAI,CAC7D,EAER,IAAI,EACF,wCAAM,SAAS,EAAC,SAAS;oBACvB,8BAAC,yBAAW,IAAC,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,GAAI;oBAEnE,uCAAK,SAAS,EAAC,cAAc;wBAC3B,2CAAS,uBAAuB,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,GAAI;wBAEpE,qDAAiB;wBACjB,0CACG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK;6BAClB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;6BAClE,GAAG,CAAC,CAAC,CAAC,EAAE;4BACP,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CACxC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,CAChD,CAAC;4BACF,OAAO,CACL,sCAAI,GAAG,EAAE,CAAC,CAAC,IAAI;gCACb,qCAAG,IAAI,EAAE,GAAG,CAAC,CAAC,QAAQ,EAAE,IAAI,OAAO,IAAG,UAAU,EAAE,WAAW,CAAC,KAAK,CAAK,CACrE,CACN,CAAC;wBACJ,CAAC,CAAC,CACD,CACD;oBACN,0CAAQ,SAAS,EAAC,QAAQ;wBACxB,8BAAC,mCAAgB,IAAC,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,GAAI;wBACxE,8BAAC,uBAAU,OAAG,CACP,CACJ,EAET,MAAM,EAAE,IAAI,GACZ;YAEF,0CAAQ,GAAG,EAAC,8EAA8E,GAAU;YACpG,0CAAQ,uBAAuB,EAAE,EAAE,MAAM,EAAE,sBAAsB,EAAE,GAAI;YACvE,0CACE,uBAAuB,EAAE;oBACvB,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SAkCX;iBACE,GACO,CACL,CACF,CACR,CAAC;AACJ,CAAC,CAAC;AA5KW,QAAA,WAAW,eA4KtB"}
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ import { IRenderContext } from '../types';
3
+ export declare const IndexPage: React.FC<{
4
+ ctx: IRenderContext;
5
+ lang: string;
6
+ category?: string;
7
+ }>;
8
+ //# sourceMappingURL=IndexPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IndexPage.d.ts","sourceRoot":"","sources":["../../src/ssg/IndexPage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAS1C,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC;IAC/B,GAAG,EAAE,cAAc,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAwFA,CAAC"}
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.IndexPage = void 0;
7
+ const react_1 = __importDefault(require("react"));
8
+ const sortBy_1 = require("../utils/sortBy");
9
+ const ContentMeta_1 = require("./components/ContentMeta");
10
+ const CZONFooter_1 = require("./components/CZONFooter");
11
+ const CZONHeader_1 = require("./components/CZONHeader");
12
+ const LanguageSwitcher_1 = require("./components/LanguageSwitcher");
13
+ const PageLayout_1 = require("./layouts/PageLayout");
14
+ const style_1 = require("./style");
15
+ const IndexPage = props => {
16
+ const contents = (0, sortBy_1.toSortedBy)(props.ctx.site.files.filter(f => f.metadata && (!props.category || f.category === props.category)), [
17
+ // 无日期的排前面
18
+ [x => (x.metadata?.inferred_date ? 1 : 0), 'asc'],
19
+ // 日期降序
20
+ [x => x.metadata?.inferred_date || '', 'desc'],
21
+ ]);
22
+ const allCategories = Array.from(new Set([undefined].concat(props.ctx.site.files.map(f => f.category))));
23
+ return (react_1.default.createElement("html", null,
24
+ react_1.default.createElement("head", null,
25
+ react_1.default.createElement("meta", { charSet: "UTF-8" }),
26
+ react_1.default.createElement("meta", { name: "viewport", content: "width=device-width, initial-scale=1.0" }),
27
+ react_1.default.createElement("title", null,
28
+ "Index of ",
29
+ props.lang),
30
+ react_1.default.createElement("script", { src: "https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4" }),
31
+ react_1.default.createElement("style", null, style_1.style)),
32
+ react_1.default.createElement("body", null,
33
+ react_1.default.createElement(PageLayout_1.PageLayout, { header: react_1.default.createElement(CZONHeader_1.CZONHeader, { ctx: props.ctx }), navigator: undefined, main: react_1.default.createElement("div", { className: "p-6 max-w-3xl mx-auto" },
34
+ react_1.default.createElement("div", null,
35
+ react_1.default.createElement("span", { className: "font-bold" }),
36
+ react_1.default.createElement("div", { className: "mb-6 gap-6 flex flex-wrap" }, allCategories.map(category => {
37
+ const title = category || 'All';
38
+ const link = category ? `categories_${category}.html` : 'index.html';
39
+ const isActive = category === props.category;
40
+ return (react_1.default.createElement("span", { key: title }, isActive ? (react_1.default.createElement("span", { className: "font-bold" }, title)) : (react_1.default.createElement("a", { href: link }, title))));
41
+ }))),
42
+ react_1.default.createElement("div", null, contents.map(file => {
43
+ const metadata = file.metadata;
44
+ return (react_1.default.createElement("div", { className: "mb-6", key: file.hash },
45
+ react_1.default.createElement(ContentMeta_1.ContentMeta, { ctx: props.ctx, file: file, lang: props.lang })));
46
+ })),
47
+ react_1.default.createElement("footer", null,
48
+ react_1.default.createElement(LanguageSwitcher_1.LanguageSwitcher, { ctx: props.ctx, lang: props.lang }),
49
+ react_1.default.createElement(CZONFooter_1.CZONFooter, null))), footer: null }))));
50
+ // TODO: 渲染多语言首页列表
51
+ // return (
52
+ // <div>
53
+ // {props.site.files.map(file => (
54
+ // <div key={file.metadata?.slug}>
55
+ // <h2>{file.metadata?.title}</h2>
56
+ // <p>{file.metadata?.short_summary}</p>
57
+ // <a href={`${file.metadata?.slug}.html`}>阅读更多</a>
58
+ // </div>
59
+ // ))}
60
+ // </div>
61
+ // );
62
+ };
63
+ exports.IndexPage = IndexPage;
64
+ //# sourceMappingURL=IndexPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IndexPage.js","sourceRoot":"","sources":["../../src/ssg/IndexPage.tsx"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAE1B,4CAA6C;AAC7C,0DAAuD;AACvD,wDAAqD;AACrD,wDAAqD;AACrD,oEAAiE;AACjE,qDAAkD;AAClD,mCAAgC;AAEzB,MAAM,SAAS,GAIjB,KAAK,CAAC,EAAE;IACX,MAAM,QAAQ,GAAG,IAAA,mBAAU,EACzB,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CACzB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ,CAAC,CACtE,EACD;QACE,UAAU;QACV,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;QACjD,OAAO;QACP,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,aAAa,IAAI,EAAE,EAAE,MAAM,CAAC;KAC/C,CACF,CAAC;IAEF,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAC9B,IAAI,GAAG,CACJ,CAAC,SAAS,CAA+B,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAC7F,CACF,CAAC;IAEF,OAAO,CACL;QACE;YACE,wCAAM,OAAO,EAAC,OAAO,GAAG;YACxB,wCAAM,IAAI,EAAC,UAAU,EAAC,OAAO,EAAC,uCAAuC,GAAG;YACxE;;gBAAiB,KAAK,CAAC,IAAI,CAAS;YACpC,0CAAQ,GAAG,EAAC,qDAAqD,GAAU;YAC3E,6CAAQ,aAAK,CAAS,CACjB;QACP;YACE,8BAAC,uBAAU,IACT,MAAM,EAAE,8BAAC,uBAAU,IAAC,GAAG,EAAE,KAAK,CAAC,GAAG,GAAI,EACtC,SAAS,EAAE,SAAS,EACpB,IAAI,EACF,uCAAK,SAAS,EAAC,uBAAuB;oBACpC;wBACE,wCAAM,SAAS,EAAC,WAAW,GAAQ;wBAEnC,uCAAK,SAAS,EAAC,2BAA2B,IACvC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;4BAC5B,MAAM,KAAK,GAAG,QAAQ,IAAI,KAAK,CAAC;4BAChC,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,cAAc,QAAQ,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC;4BACrE,MAAM,QAAQ,GAAG,QAAQ,KAAK,KAAK,CAAC,QAAQ,CAAC;4BAC7C,OAAO,CACL,wCAAM,GAAG,EAAE,KAAK,IACb,QAAQ,CAAC,CAAC,CAAC,CACV,wCAAM,SAAS,EAAC,WAAW,IAAE,KAAK,CAAQ,CAC3C,CAAC,CAAC,CAAC,CACF,qCAAG,IAAI,EAAE,IAAI,IAAG,KAAK,CAAK,CAC3B,CACI,CACR,CAAC;wBACJ,CAAC,CAAC,CACE,CACF;oBACN,2CACG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;wBACnB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAS,CAAC;wBAChC,OAAO,CACL,uCAAK,SAAS,EAAC,MAAM,EAAC,GAAG,EAAE,IAAI,CAAC,IAAI;4BAClC,8BAAC,yBAAW,IAAC,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,GAAI,CACzD,CACP,CAAC;oBACJ,CAAC,CAAC,CACE;oBACN;wBACE,8BAAC,mCAAgB,IAAC,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,GAAI;wBACtD,8BAAC,uBAAU,OAAG,CACP,CACL,EAER,MAAM,EAAE,IAAI,GACZ,CACG,CACF,CACR,CAAC;IAEF,kBAAkB;IAClB,WAAW;IACX,UAAU;IACV,sCAAsC;IACtC,wCAAwC;IACxC,0CAA0C;IAC1C,gDAAgD;IAChD,2DAA2D;IAC3D,eAAe;IACf,UAAU;IACV,WAAW;IACX,KAAK;AACP,CAAC,CAAC;AA5FW,QAAA,SAAS,aA4FpB"}
@@ -0,0 +1,6 @@
1
+ import React from 'react';
2
+ import { IRenderContext } from '../types';
3
+ export declare const RootPage: React.FC<{
4
+ ctx: IRenderContext;
5
+ }>;
6
+ //# sourceMappingURL=RootPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RootPage.d.ts","sourceRoot":"","sources":["../../src/ssg/RootPage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAK1C,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC;IAAE,GAAG,EAAE,cAAc,CAAA;CAAE,CAwDtD,CAAC"}
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.RootPage = void 0;
7
+ const react_1 = __importDefault(require("react"));
8
+ const languages_1 = require("../languages");
9
+ // /index.html 的根页面
10
+ // 需要实现多语言选择,自动重定向到用户浏览器语言对应的首页
11
+ // 需要对 SEO 友好,提供适当的 meta 标签
12
+ const RootPage = props => {
13
+ const mapUserLangToSupported = {};
14
+ for (const lang of props.ctx.site.options.langs || []) {
15
+ mapUserLangToSupported[lang] = lang;
16
+ const langPrefix = lang.split('-')[0];
17
+ if (!mapUserLangToSupported[langPrefix]) {
18
+ mapUserLangToSupported[langPrefix] = lang;
19
+ }
20
+ }
21
+ return (react_1.default.createElement("html", { lang: "en" },
22
+ react_1.default.createElement("head", null,
23
+ react_1.default.createElement("meta", { charSet: "UTF-8" }),
24
+ react_1.default.createElement("meta", { name: "viewport", content: "width=device-width, initial-scale=1.0" }),
25
+ react_1.default.createElement("title", null, "CZON Multilingual Site Navigator"),
26
+ react_1.default.createElement("meta", { name: "description", content: "Select your preferred language to explore our content." }),
27
+ props.ctx.site.options.langs.map(lang => (react_1.default.createElement("link", { rel: "alternate", hrefLang: lang, href: `${lang}/index.html` }))),
28
+ react_1.default.createElement("link", { rel: "alternate", hrefLang: "x-default", href: `${props.ctx.site.options.langs[0]}/index.html` })),
29
+ react_1.default.createElement("body", null,
30
+ react_1.default.createElement("h1", null, "Welcome to CZON Multilingual Site"),
31
+ react_1.default.createElement("p", null, "Please select your preferred language if automatic redirection does not work:"),
32
+ react_1.default.createElement("ul", null, props.ctx.site.options.langs?.map(lang => (react_1.default.createElement("li", { key: lang },
33
+ react_1.default.createElement("a", { href: `/${lang}/index.html` },
34
+ "(",
35
+ languages_1.LANGUAGE_NAMES[lang] || lang,
36
+ ")"))))),
37
+ react_1.default.createElement("script", null, `
38
+ // 自动重定向到用户浏览器语言对应的首页
39
+ (function() {
40
+ const mapUserLangToSupported = ${JSON.stringify(mapUserLangToSupported)};
41
+ for (const lang of navigator.languages) {
42
+ if (mapUserLangToSupported[lang]) {
43
+ window.location.href = mapUserLangToSupported[lang] + '/index.html';
44
+ return;
45
+ }
46
+ }
47
+ window.location.href = '${props.ctx.site.options.langs[0]}/index.html'; // 默认语言
48
+ })();
49
+
50
+ `))));
51
+ };
52
+ exports.RootPage = RootPage;
53
+ //# sourceMappingURL=RootPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RootPage.js","sourceRoot":"","sources":["../../src/ssg/RootPage.tsx"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAC1B,4CAA8C;AAG9C,mBAAmB;AACnB,+BAA+B;AAC/B,2BAA2B;AACpB,MAAM,QAAQ,GAAsC,KAAK,CAAC,EAAE;IACjE,MAAM,sBAAsB,GAA2B,EAAE,CAAC;IAE1D,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;QACtD,sBAAsB,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;QACpC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACtC,IAAI,CAAC,sBAAsB,CAAC,UAAU,CAAC,EAAE,CAAC;YACxC,sBAAsB,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,OAAO,CACL,wCAAM,IAAI,EAAC,IAAI;QACb;YACE,wCAAM,OAAO,EAAC,OAAO,GAAG;YACxB,wCAAM,IAAI,EAAC,UAAU,EAAC,OAAO,EAAC,uCAAuC,GAAG;YACxE,gFAA+C;YAC/C,wCAAM,IAAI,EAAC,aAAa,EAAC,OAAO,EAAC,wDAAwD,GAAG;YAC3F,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,KAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CACzC,wCAAM,GAAG,EAAC,WAAW,EAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,aAAa,GAAI,CACrE,CAAC;YACF,wCACE,GAAG,EAAC,WAAW,EACf,QAAQ,EAAC,WAAW,EACpB,IAAI,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,KAAM,CAAC,CAAC,CAAC,aAAa,GACtD,CACG;QACP;YACE,8EAA0C;YAC1C,yHAAoF;YACpF,0CACG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CACzC,sCAAI,GAAG,EAAE,IAAI;gBACX,qCAAG,IAAI,EAAE,IAAI,IAAI,aAAa;;oBAAI,0BAAc,CAAC,IAAI,CAAC,IAAI,IAAI;wBAAM,CACjE,CACN,CAAC,CACC;YACL,8CACG;;;6CAGkC,IAAI,CAAC,SAAS,CAAC,sBAAsB,CAAC;;;;;;;sCAO7C,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,KAAM,CAAC,CAAC,CAAC;;;WAG3D,CACM,CACJ,CACF,CACR,CAAC;AACJ,CAAC,CAAC;AAxDW,QAAA,QAAQ,YAwDnB"}
@@ -1 +1 @@
1
- {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../src/ssg/app.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAI1C,eAAO,MAAM,GAAG,GAAI,OAAO,cAAc,sBAkCxC,CAAC"}
1
+ {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../src/ssg/app.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAM1C,eAAO,MAAM,GAAG,GAAI,OAAO,cAAc,sBA6BxC,CAAC"}
package/dist/ssg/app.js CHANGED
@@ -6,28 +6,24 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.App = void 0;
7
7
  const react_1 = __importDefault(require("react"));
8
8
  const ContentPage_1 = require("./ContentPage");
9
+ const IndexPage_1 = require("./IndexPage");
9
10
  const RedirectPage_1 = require("./RedirectPage");
11
+ const RootPage_1 = require("./RootPage");
10
12
  const App = (props) => {
11
13
  if (props.path === '/index.html') {
12
- return react_1.default.createElement(RedirectPage_1.RedirectPage, { from: props.path, to: `/${props.site.options.langs[0]}/index.html` });
14
+ return react_1.default.createElement(RootPage_1.RootPage, { ctx: props });
13
15
  }
14
16
  // 每个语言的首页
15
17
  for (const lang of props.site.options.langs || []) {
16
18
  if (props.path === `/${lang}/index.html`) {
17
- const firstPage = props.site.files.find(f => f.metadata?.slug);
18
- return react_1.default.createElement(RedirectPage_1.RedirectPage, { from: props.path, to: `/${lang}/${firstPage.metadata.slug}.html` });
19
- // TODO: 渲染多语言首页列表
20
- // return (
21
- // <div>
22
- // {props.site.files.map(file => (
23
- // <div key={file.metadata?.slug}>
24
- // <h2>{file.metadata?.title}</h2>
25
- // <p>{file.metadata?.short_summary}</p>
26
- // <a href={`${file.metadata?.slug}.html`}>阅读更多</a>
27
- // </div>
28
- // ))}
29
- // </div>
30
- // );
19
+ return react_1.default.createElement(IndexPage_1.IndexPage, { ctx: props, lang: lang });
20
+ }
21
+ const categories = [...new Set(props.site.files.map(f => f.category))];
22
+ // 渲染分类页面
23
+ for (const category of categories) {
24
+ if (props.path === `/${lang}/categories_${category}.html`) {
25
+ return react_1.default.createElement(IndexPage_1.IndexPage, { ctx: props, lang: lang, category: category });
26
+ }
31
27
  }
32
28
  // 渲染文章页面
33
29
  for (const file of props.site.files) {
@@ -1 +1 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/ssg/app.tsx"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAE1B,+CAA4C;AAC5C,iDAA8C;AAEvC,MAAM,GAAG,GAAG,CAAC,KAAqB,EAAE,EAAE;IAC3C,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;QACjC,OAAO,8BAAC,2BAAY,IAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,KAAM,CAAC,CAAC,CAAC,aAAa,GAAI,CAAC;IAC/F,CAAC;IAED,UAAU;IACV,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;QAClD,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,IAAI,aAAa,EAAE,CAAC;YACzC,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YAC/D,OAAO,8BAAC,2BAAY,IAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,IAAI,IAAI,SAAU,CAAC,QAAS,CAAC,IAAI,OAAO,GAAI,CAAC;YAC5F,kBAAkB;YAClB,WAAW;YACX,UAAU;YACV,sCAAsC;YACtC,wCAAwC;YACxC,0CAA0C;YAC1C,gDAAgD;YAChD,2DAA2D;YAC3D,eAAe;YACf,UAAU;YACV,WAAW;YACX,KAAK;QACP,CAAC;QACD,SAAS;QACT,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YACpC,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,OAAO,EAAE,CAAC;gBAC1D,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC;gBACrF,IAAI,CAAC,UAAU;oBAAE,OAAO,8BAAC,2BAAY,IAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,aAAa,GAAI,CAAC;gBAC9E,OAAO,8BAAC,yBAAW,IAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,UAAW,GAAI,CAAC;YACnF,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,8BAAC,2BAAY,IAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,aAAa,GAAI,CAAC;AAC/D,CAAC,CAAC;AAlCW,QAAA,GAAG,OAkCd"}
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/ssg/app.tsx"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAE1B,+CAA4C;AAC5C,2CAAwC;AACxC,iDAA8C;AAC9C,yCAAsC;AAE/B,MAAM,GAAG,GAAG,CAAC,KAAqB,EAAE,EAAE;IAC3C,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;QACjC,OAAO,8BAAC,mBAAQ,IAAC,GAAG,EAAE,KAAK,GAAI,CAAC;IAClC,CAAC;IAED,UAAU;IACV,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;QAClD,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,IAAI,aAAa,EAAE,CAAC;YACzC,OAAO,8BAAC,qBAAS,IAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,GAAI,CAAC;QAC/C,CAAC;QAED,MAAM,UAAU,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACvE,SAAS;QACT,KAAK,MAAM,QAAQ,IAAI,UAAU,EAAE,CAAC;YAClC,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,IAAI,eAAe,QAAQ,OAAO,EAAE,CAAC;gBAC1D,OAAO,8BAAC,qBAAS,IAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,GAAI,CAAC;YACnE,CAAC;QACH,CAAC;QACD,SAAS;QACT,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YACpC,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,OAAO,EAAE,CAAC;gBAC1D,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC;gBACrF,IAAI,CAAC,UAAU;oBAAE,OAAO,8BAAC,2BAAY,IAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,aAAa,GAAI,CAAC;gBAC9E,OAAO,8BAAC,yBAAW,IAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,UAAW,GAAI,CAAC;YACnF,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,8BAAC,2BAAY,IAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,aAAa,GAAI,CAAC;AAC/D,CAAC,CAAC;AA7BW,QAAA,GAAG,OA6Bd"}
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ export declare const CZONFooter: React.FC;
3
+ //# sourceMappingURL=CZONFooter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CZONFooter.d.ts","sourceRoot":"","sources":["../../../src/ssg/components/CZONFooter.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAa9B,CAAC"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.CZONFooter = void 0;
7
+ const react_1 = __importDefault(require("react"));
8
+ const version_1 = require("../../version");
9
+ const CZONFooter = () => {
10
+ return (react_1.default.createElement("p", { className: "text-center text-sm text-gray-500 my-8" },
11
+ "Generated by",
12
+ ' ',
13
+ react_1.default.createElement("strong", null,
14
+ react_1.default.createElement("a", { href: "https://czon.zccz14.com" },
15
+ "CZON@",
16
+ version_1.CZON_VERSION)),
17
+ ' ',
18
+ "\u2022",
19
+ ' ',
20
+ react_1.default.createElement("a", { href: "https://github.com/zccz14/CZON", target: "_blank" }, "GitHub")));
21
+ };
22
+ exports.CZONFooter = CZONFooter;
23
+ //# sourceMappingURL=CZONFooter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CZONFooter.js","sourceRoot":"","sources":["../../../src/ssg/components/CZONFooter.tsx"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAC1B,2CAA6C;AAEtC,MAAM,UAAU,GAAa,GAAG,EAAE;IACvC,OAAO,CACL,qCAAG,SAAS,EAAC,wCAAwC;;QACtC,GAAG;QAChB;YACE,qCAAG,IAAI,EAAC,yBAAyB;;gBAAO,sBAAY,CAAK,CAClD;QAAC,GAAG;;QACX,GAAG;QACL,qCAAG,IAAI,EAAC,gCAAgC,EAAC,MAAM,EAAC,QAAQ,aAEpD,CACF,CACL,CAAC;AACJ,CAAC,CAAC;AAbW,QAAA,UAAU,cAarB"}
@@ -0,0 +1,6 @@
1
+ import React from 'react';
2
+ import { IRenderContext } from '../../types';
3
+ export declare const CZONHeader: React.FC<{
4
+ ctx: IRenderContext;
5
+ }>;
6
+ //# sourceMappingURL=CZONHeader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CZONHeader.d.ts","sourceRoot":"","sources":["../../../src/ssg/components/CZONHeader.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC;IAAE,GAAG,EAAE,cAAc,CAAA;CAAE,CAQxD,CAAC"}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.CZONHeader = void 0;
7
+ const react_1 = __importDefault(require("react"));
8
+ const CZONHeader = props => {
9
+ return (react_1.default.createElement("header", { className: "czon-header py-4 border-b" },
10
+ react_1.default.createElement("h1", { className: "text-2xl font-bold px-6" },
11
+ react_1.default.createElement("a", { href: "index.html" }, "CZON"))));
12
+ };
13
+ exports.CZONHeader = CZONHeader;
14
+ //# sourceMappingURL=CZONHeader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CZONHeader.js","sourceRoot":"","sources":["../../../src/ssg/components/CZONHeader.tsx"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAGnB,MAAM,UAAU,GAAsC,KAAK,CAAC,EAAE;IACnE,OAAO,CACL,0CAAQ,SAAS,EAAC,2BAA2B;QAC3C,sCAAI,SAAS,EAAC,yBAAyB;YACrC,qCAAG,IAAI,EAAC,YAAY,WAAS,CAC1B,CACE,CACV,CAAC;AACJ,CAAC,CAAC;AARW,QAAA,UAAU,cAQrB"}
@@ -0,0 +1,10 @@
1
+ import React from 'react';
2
+ import { IRenderContext } from '../../types';
3
+ export declare const ContentMeta: React.FC<{
4
+ ctx: IRenderContext;
5
+ file: IRenderContext['site']['files'][0];
6
+ showShortSummary?: boolean;
7
+ showSummary?: boolean;
8
+ lang: string;
9
+ }>;
10
+ //# sourceMappingURL=ContentMeta.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContentMeta.d.ts","sourceRoot":"","sources":["../../../src/ssg/components/ContentMeta.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAG7C,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC;IACjC,GAAG,EAAE,cAAc,CAAC;IACpB,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACzC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;CACd,CAsBA,CAAC"}
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ContentMeta = void 0;
7
+ const react_1 = __importDefault(require("react"));
8
+ const TagList_1 = require("./TagList");
9
+ const ContentMeta = props => {
10
+ const content = props.ctx.contents.find(c => c.hash === props.file.hash && c.lang === props.lang);
11
+ const frontmatter = content?.frontmatter || {};
12
+ const title = frontmatter.title;
13
+ const summary = frontmatter.summary;
14
+ const date = frontmatter.date || '--';
15
+ const tags = frontmatter.tags || [];
16
+ const category = props.file.category;
17
+ return (react_1.default.createElement("header", { className: "content-header mb-4 pb-2 border-b" },
18
+ react_1.default.createElement("h2", { className: "text-2xl font-bold mb-2" },
19
+ react_1.default.createElement("a", { href: `${props.file.metadata?.slug}.html` }, title)),
20
+ react_1.default.createElement("p", { className: "font-semibold" }, category),
21
+ react_1.default.createElement("blockquote", null, summary),
22
+ react_1.default.createElement("div", null,
23
+ "\uD83D\uDCC5 ",
24
+ date),
25
+ react_1.default.createElement("div", { className: "tags" },
26
+ react_1.default.createElement(TagList_1.TagList, { tags: tags }))));
27
+ };
28
+ exports.ContentMeta = ContentMeta;
29
+ //# sourceMappingURL=ContentMeta.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContentMeta.js","sourceRoot":"","sources":["../../../src/ssg/components/ContentMeta.tsx"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAE1B,uCAAoC;AAE7B,MAAM,WAAW,GAMnB,KAAK,CAAC,EAAE;IACX,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC;IAClG,MAAM,WAAW,GAAG,OAAO,EAAE,WAAW,IAAI,EAAE,CAAC;IAC/C,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC;IAChC,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC;IACpC,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,IAAI,IAAI,CAAC;IACtC,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,IAAI,EAAE,CAAC;IACpC,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;IAErC,OAAO,CACL,0CAAQ,SAAS,EAAC,mCAAmC;QACnD,sCAAI,SAAS,EAAC,yBAAyB;YACrC,qCAAG,IAAI,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,OAAO,IAAG,KAAK,CAAK,CACtD;QACL,qCAAG,SAAS,EAAC,eAAe,IAAE,QAAQ,CAAK;QAC3C,kDAAa,OAAO,CAAc;QAClC;;YAAS,IAAI,CAAO;QACpB,uCAAK,SAAS,EAAC,MAAM;YACnB,8BAAC,iBAAO,IAAC,IAAI,EAAE,IAAI,GAAI,CACnB,CACC,CACV,CAAC;AACJ,CAAC,CAAC;AA5BW,QAAA,WAAW,eA4BtB"}
@@ -3,6 +3,6 @@ import { IRenderContext } from '../../types';
3
3
  export declare const LanguageSwitcher: React.FC<{
4
4
  ctx: IRenderContext;
5
5
  lang: string;
6
- file: IRenderContext['site']['files'][0];
6
+ file?: IRenderContext['site']['files'][0];
7
7
  }>;
8
8
  //# sourceMappingURL=LanguageSwitcher.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"LanguageSwitcher.d.ts","sourceRoot":"","sources":["../../../src/ssg/components/LanguageSwitcher.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC;IACtC,GAAG,EAAE,cAAc,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;CAC1C,CAuBA,CAAC"}
1
+ {"version":3,"file":"LanguageSwitcher.d.ts","sourceRoot":"","sources":["../../../src/ssg/components/LanguageSwitcher.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC;IACtC,GAAG,EAAE,cAAc,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;CAC3C,CAwBA,CAAC"}
@@ -12,7 +12,8 @@ const LanguageSwitcher = props => {
12
12
  react_1.default.createElement("ul", { className: "lang-list grid grid-cols-2 md:grid-cols-4 gap-2 list-none p-0 m-0" }, props.ctx.site.options.langs?.map(lang => {
13
13
  const isActive = lang === props.lang;
14
14
  const langName = languages_1.LANGUAGE_NAMES[lang] || lang;
15
- const link = (0, node_path_1.join)('..', lang, `${props.file.metadata.slug}.html`);
15
+ const target = props.file ? `${props.file.metadata.slug}.html` : 'index.html';
16
+ const link = (0, node_path_1.join)('..', lang, target);
16
17
  return (react_1.default.createElement("li", { className: `lang-item ${isActive ? 'font-bold' : ''}`, key: lang }, isActive ? (langName) : (react_1.default.createElement("a", { href: link, className: "lang-link" }, langName))));
17
18
  }))));
18
19
  };
@@ -1 +1 @@
1
- {"version":3,"file":"LanguageSwitcher.js","sourceRoot":"","sources":["../../../src/ssg/components/LanguageSwitcher.tsx"],"names":[],"mappings":";;;;;;AAAA,yCAAiC;AACjC,kDAA0B;AAC1B,+CAAiD;AAG1C,MAAM,gBAAgB,GAIxB,KAAK,CAAC,EAAE;IACX,OAAO,CACL,qDAAgB,mBAAmB,EAAC,SAAS,EAAC,kBAAkB;QAC9D,sCAAI,SAAS,EAAC,mEAAmE,IAC9E,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE;YACxC,MAAM,QAAQ,GAAG,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC;YACrC,MAAM,QAAQ,GAAG,0BAAc,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;YAC9C,MAAM,IAAI,GAAG,IAAA,gBAAI,EAAC,IAAI,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,QAAS,CAAC,IAAI,OAAO,CAAC,CAAC;YACnE,OAAO,CACL,sCAAI,SAAS,EAAE,aAAa,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,IACjE,QAAQ,CAAC,CAAC,CAAC,CACV,QAAQ,CACT,CAAC,CAAC,CAAC,CACF,qCAAG,IAAI,EAAE,IAAI,EAAE,SAAS,EAAC,WAAW,IACjC,QAAQ,CACP,CACL,CACE,CACN,CAAC;QACJ,CAAC,CAAC,CACC,CACD,CACP,CAAC;AACJ,CAAC,CAAC;AA3BW,QAAA,gBAAgB,oBA2B3B"}
1
+ {"version":3,"file":"LanguageSwitcher.js","sourceRoot":"","sources":["../../../src/ssg/components/LanguageSwitcher.tsx"],"names":[],"mappings":";;;;;;AAAA,yCAAiC;AACjC,kDAA0B;AAC1B,+CAAiD;AAG1C,MAAM,gBAAgB,GAIxB,KAAK,CAAC,EAAE;IACX,OAAO,CACL,qDAAgB,mBAAmB,EAAC,SAAS,EAAC,kBAAkB;QAC9D,sCAAI,SAAS,EAAC,mEAAmE,IAC9E,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE;YACxC,MAAM,QAAQ,GAAG,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC;YACrC,MAAM,QAAQ,GAAG,0BAAc,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;YAC9C,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,QAAS,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC;YAC/E,MAAM,IAAI,GAAG,IAAA,gBAAI,EAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;YACtC,OAAO,CACL,sCAAI,SAAS,EAAE,aAAa,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,IACjE,QAAQ,CAAC,CAAC,CAAC,CACV,QAAQ,CACT,CAAC,CAAC,CAAC,CACF,qCAAG,IAAI,EAAE,IAAI,EAAE,SAAS,EAAC,WAAW,IACjC,QAAQ,CACP,CACL,CACE,CACN,CAAC;QACJ,CAAC,CAAC,CACC,CACD,CACP,CAAC;AACJ,CAAC,CAAC;AA5BW,QAAA,gBAAgB,oBA4B3B"}
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ export declare const PageLayout: React.FC<{
3
+ header: React.ReactNode;
4
+ navigator: React.ReactNode;
5
+ main: React.ReactNode;
6
+ footer: React.ReactNode;
7
+ }>;
8
+ //# sourceMappingURL=PageLayout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PageLayout.d.ts","sourceRoot":"","sources":["../../../src/ssg/layouts/PageLayout.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC;IAChC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC;IACtB,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC;CACzB,CAkBA,CAAC"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.PageLayout = void 0;
7
+ const react_1 = __importDefault(require("react"));
8
+ const PageLayout = props => {
9
+ return (
10
+ // 100% 宽度,100% 高度,垂直方向排列
11
+ react_1.default.createElement("div", { className: "flex flex-col w-full h-full overflow-hidden items-stretch" },
12
+ react_1.default.createElement("header", { className: "shrink-0" }, props.header),
13
+ react_1.default.createElement("div", { className: "flex flex-col overflow-auto md:flex-row flex-1 md:overflow-hidden md:items-stretch" },
14
+ react_1.default.createElement("nav", { className: "md:overflow-auto md:shrink-0" }, props.navigator),
15
+ react_1.default.createElement("main", { className: "md:flex-1 md:overflow-auto" }, props.main)),
16
+ react_1.default.createElement("footer", { className: "shrink-0" }, props.footer)));
17
+ };
18
+ exports.PageLayout = PageLayout;
19
+ //# sourceMappingURL=PageLayout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PageLayout.js","sourceRoot":"","sources":["../../../src/ssg/layouts/PageLayout.tsx"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAEnB,MAAM,UAAU,GAKlB,KAAK,CAAC,EAAE;IACX,OAAO;IACL,yBAAyB;IACzB,uCAAK,SAAS,EAAC,2DAA2D;QAExE,0CAAQ,SAAS,EAAC,UAAU,IAAE,KAAK,CAAC,MAAM,CAAU;QAGpD,uCAAK,SAAS,EAAC,oFAAoF;YAEjG,uCAAK,SAAS,EAAC,8BAA8B,IAAE,KAAK,CAAC,SAAS,CAAO;YAErE,wCAAM,SAAS,EAAC,4BAA4B,IAAE,KAAK,CAAC,IAAI,CAAQ,CAC5D;QAEN,0CAAQ,SAAS,EAAC,UAAU,IAAE,KAAK,CAAC,MAAM,CAAU,CAChD,CACP,CAAC;AACJ,CAAC,CAAC;AAvBW,QAAA,UAAU,cAuBrB"}
@@ -0,0 +1,2 @@
1
+ export declare const style = "\n\n html[lang='ar-SA'] {\n direction: rtl;\n }\n\n body {\n color: #333;\n background: #f8f9fa;\n }\n\n .sidebar {\n width: 280px;\n background: #fff;\n border-right: 1px solid #e9ecef;\n padding: 2rem 1rem;\n overflow-y: auto;\n\n flex-shrink: 0;\n }\n\n .sidebar-header {\n margin-bottom: 2rem;\n padding-bottom: 1rem;\n border-bottom: 1px solid #e9ecef;\n }\n\n .sidebar-header h1 {\n font-size: 1.5rem;\n font-weight: 600;\n color: #212529;\n }\n\n .sidebar-header p {\n color: #6c757d;\n font-size: 0.875rem;\n margin-top: 0.5rem;\n }\n\n .nav-list {\n list-style: none;\n }\n\n .nav-item {\n margin-bottom: 0.5rem;\n }\n\n .nav-link {\n display: block;\n padding: 0.5rem 1rem;\n color: #495057;\n text-decoration: none;\n border-radius: 4px;\n transition: all 0.2s;\n }\n\n .nav-link:hover {\n background: #e9ecef;\n color: #212529;\n }\n\n .nav-link.active {\n background: #007bff;\n color: white;\n }\n\n .nav-submenu {\n list-style: none;\n margin-left: 1rem;\n margin-top: 0.25rem;\n }\n\n blockquote {\n border-left: 4px solid #007bff;\n padding: 0.5rem 1rem;\n margin: 1rem 0;\n background: #f8f9fa;\n color: #495057;\n }\n\n .content {\n flex: 1;\n margin-inline-start: 80px;\n padding: 3rem 4rem;\n max-width: 900px;\n }\n\n .content-header {\n margin-bottom: 2rem;\n padding-bottom: 1rem;\n border-bottom: 1px solid #e9ecef;\n }\n\n .content-header h1 {\n font-size: 2.5rem;\n font-weight: 700;\n color: #212529;\n margin-bottom: 0.5rem;\n }\n\n .content-header .meta {\n color: #6c757d;\n font-size: 0.875rem;\n }\n\n .content-body {\n font-size: 1.125rem;\n line-height: 1.8;\n }\n\n .content-body h1 {\n font-size: 2rem;\n margin: 2rem 0 1rem;\n color: #212529;\n }\n\n .content-body h2 {\n font-size: 1.75rem;\n margin: 1.75rem 0 0.875rem;\n color: #343a40;\n }\n\n .content-body h3 {\n font-size: 1.5rem;\n margin: 1.5rem 0 0.75rem;\n color: #495057;\n }\n\n .content-body p {\n margin: 1rem 0;\n }\n\n .content-body ul,\n .content-body ol {\n margin: 1rem 0 1rem 2rem;\n }\n\n .content-body li {\n margin: 0.5rem 0;\n }\n\n .content-body blockquote {\n border-left: 4px solid #007bff;\n padding: 0.5rem 1rem;\n margin: 1rem 0;\n background: #f8f9fa;\n color: #495057;\n }\n\n .content-body code {\n background: #f8f9fa;\n padding: 0.2rem 0.4rem;\n border-radius: 3px;\n font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace;\n font-size: 0.875em;\n }\n\n .content-body pre {\n background: #f8f9fa;\n padding: 1rem;\n border-radius: 6px;\n overflow-x: auto;\n margin: 1rem 0;\n }\n\n .content-body pre code {\n background: none;\n padding: 0;\n }\n\n .content-body table {\n width: 100%;\n border-collapse: collapse;\n margin: 1rem 0;\n }\n\n .content-body th,\n .content-body td {\n border: 1px solid #dee2e6;\n padding: 0.75rem;\n text-align: left;\n }\n\n .content-body th {\n background: #f8f9fa;\n font-weight: 600;\n }\n\n .content-body img {\n max-width: 100%;\n height: auto;\n border-radius: 6px;\n margin: 1rem 0;\n }\n\n a {\n color: #007bff;\n text-decoration: none;\n }\n\n .content-body a:hover {\n text-decoration: underline;\n }\n\n .footer {\n margin-top: 3rem;\n padding-top: 2rem;\n border-top: 1px solid #e9ecef;\n color: #6c757d;\n font-size: 0.875rem;\n text-align: center;\n }\n\n .tags-list {\n list-style: none;\n padding: 0;\n display: flex;\n gap: 0.5rem;\n margin-top: 0.5rem;\n flex-wrap: wrap;\n }\n\n .tag-item {\n background: #e9ecef;\n color: #495057;\n padding: 0.25rem 0.5rem;\n border-radius: 4px;\n font-size: 0.875rem;\n }\n\n @media (max-width: 768px) {\n\n .sidebar {\n width: 100%;\n height: auto;\n position: static;\n border-right: none;\n border-bottom: 1px solid #e9ecef;\n }\n\n .content {\n margin-left: 0;\n padding: 2rem;\n }\n }\n \n \n ";
2
+ //# sourceMappingURL=style.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style.d.ts","sourceRoot":"","sources":["../../src/ssg/style.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,KAAK,46JAuPT,CAAC"}
@@ -0,0 +1,252 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.style = void 0;
4
+ exports.style = `
5
+
6
+ html[lang='ar-SA'] {
7
+ direction: rtl;
8
+ }
9
+
10
+ body {
11
+ color: #333;
12
+ background: #f8f9fa;
13
+ }
14
+
15
+ .sidebar {
16
+ width: 280px;
17
+ background: #fff;
18
+ border-right: 1px solid #e9ecef;
19
+ padding: 2rem 1rem;
20
+ overflow-y: auto;
21
+
22
+ flex-shrink: 0;
23
+ }
24
+
25
+ .sidebar-header {
26
+ margin-bottom: 2rem;
27
+ padding-bottom: 1rem;
28
+ border-bottom: 1px solid #e9ecef;
29
+ }
30
+
31
+ .sidebar-header h1 {
32
+ font-size: 1.5rem;
33
+ font-weight: 600;
34
+ color: #212529;
35
+ }
36
+
37
+ .sidebar-header p {
38
+ color: #6c757d;
39
+ font-size: 0.875rem;
40
+ margin-top: 0.5rem;
41
+ }
42
+
43
+ .nav-list {
44
+ list-style: none;
45
+ }
46
+
47
+ .nav-item {
48
+ margin-bottom: 0.5rem;
49
+ }
50
+
51
+ .nav-link {
52
+ display: block;
53
+ padding: 0.5rem 1rem;
54
+ color: #495057;
55
+ text-decoration: none;
56
+ border-radius: 4px;
57
+ transition: all 0.2s;
58
+ }
59
+
60
+ .nav-link:hover {
61
+ background: #e9ecef;
62
+ color: #212529;
63
+ }
64
+
65
+ .nav-link.active {
66
+ background: #007bff;
67
+ color: white;
68
+ }
69
+
70
+ .nav-submenu {
71
+ list-style: none;
72
+ margin-left: 1rem;
73
+ margin-top: 0.25rem;
74
+ }
75
+
76
+ blockquote {
77
+ border-left: 4px solid #007bff;
78
+ padding: 0.5rem 1rem;
79
+ margin: 1rem 0;
80
+ background: #f8f9fa;
81
+ color: #495057;
82
+ }
83
+
84
+ .content {
85
+ flex: 1;
86
+ margin-inline-start: 80px;
87
+ padding: 3rem 4rem;
88
+ max-width: 900px;
89
+ }
90
+
91
+ .content-header {
92
+ margin-bottom: 2rem;
93
+ padding-bottom: 1rem;
94
+ border-bottom: 1px solid #e9ecef;
95
+ }
96
+
97
+ .content-header h1 {
98
+ font-size: 2.5rem;
99
+ font-weight: 700;
100
+ color: #212529;
101
+ margin-bottom: 0.5rem;
102
+ }
103
+
104
+ .content-header .meta {
105
+ color: #6c757d;
106
+ font-size: 0.875rem;
107
+ }
108
+
109
+ .content-body {
110
+ font-size: 1.125rem;
111
+ line-height: 1.8;
112
+ }
113
+
114
+ .content-body h1 {
115
+ font-size: 2rem;
116
+ margin: 2rem 0 1rem;
117
+ color: #212529;
118
+ }
119
+
120
+ .content-body h2 {
121
+ font-size: 1.75rem;
122
+ margin: 1.75rem 0 0.875rem;
123
+ color: #343a40;
124
+ }
125
+
126
+ .content-body h3 {
127
+ font-size: 1.5rem;
128
+ margin: 1.5rem 0 0.75rem;
129
+ color: #495057;
130
+ }
131
+
132
+ .content-body p {
133
+ margin: 1rem 0;
134
+ }
135
+
136
+ .content-body ul,
137
+ .content-body ol {
138
+ margin: 1rem 0 1rem 2rem;
139
+ }
140
+
141
+ .content-body li {
142
+ margin: 0.5rem 0;
143
+ }
144
+
145
+ .content-body blockquote {
146
+ border-left: 4px solid #007bff;
147
+ padding: 0.5rem 1rem;
148
+ margin: 1rem 0;
149
+ background: #f8f9fa;
150
+ color: #495057;
151
+ }
152
+
153
+ .content-body code {
154
+ background: #f8f9fa;
155
+ padding: 0.2rem 0.4rem;
156
+ border-radius: 3px;
157
+ font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace;
158
+ font-size: 0.875em;
159
+ }
160
+
161
+ .content-body pre {
162
+ background: #f8f9fa;
163
+ padding: 1rem;
164
+ border-radius: 6px;
165
+ overflow-x: auto;
166
+ margin: 1rem 0;
167
+ }
168
+
169
+ .content-body pre code {
170
+ background: none;
171
+ padding: 0;
172
+ }
173
+
174
+ .content-body table {
175
+ width: 100%;
176
+ border-collapse: collapse;
177
+ margin: 1rem 0;
178
+ }
179
+
180
+ .content-body th,
181
+ .content-body td {
182
+ border: 1px solid #dee2e6;
183
+ padding: 0.75rem;
184
+ text-align: left;
185
+ }
186
+
187
+ .content-body th {
188
+ background: #f8f9fa;
189
+ font-weight: 600;
190
+ }
191
+
192
+ .content-body img {
193
+ max-width: 100%;
194
+ height: auto;
195
+ border-radius: 6px;
196
+ margin: 1rem 0;
197
+ }
198
+
199
+ a {
200
+ color: #007bff;
201
+ text-decoration: none;
202
+ }
203
+
204
+ .content-body a:hover {
205
+ text-decoration: underline;
206
+ }
207
+
208
+ .footer {
209
+ margin-top: 3rem;
210
+ padding-top: 2rem;
211
+ border-top: 1px solid #e9ecef;
212
+ color: #6c757d;
213
+ font-size: 0.875rem;
214
+ text-align: center;
215
+ }
216
+
217
+ .tags-list {
218
+ list-style: none;
219
+ padding: 0;
220
+ display: flex;
221
+ gap: 0.5rem;
222
+ margin-top: 0.5rem;
223
+ flex-wrap: wrap;
224
+ }
225
+
226
+ .tag-item {
227
+ background: #e9ecef;
228
+ color: #495057;
229
+ padding: 0.25rem 0.5rem;
230
+ border-radius: 4px;
231
+ font-size: 0.875rem;
232
+ }
233
+
234
+ @media (max-width: 768px) {
235
+
236
+ .sidebar {
237
+ width: 100%;
238
+ height: auto;
239
+ position: static;
240
+ border-right: none;
241
+ border-bottom: 1px solid #e9ecef;
242
+ }
243
+
244
+ .content {
245
+ margin-left: 0;
246
+ padding: 2rem;
247
+ }
248
+ }
249
+
250
+
251
+ `;
252
+ //# sourceMappingURL=style.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style.js","sourceRoot":"","sources":["../../src/ssg/style.ts"],"names":[],"mappings":";;;AAAa,QAAA,KAAK,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SAuPZ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const CZON_VERSION: string;
2
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,YAAY,QAAe,CAAC"}
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.CZON_VERSION = void 0;
7
+ const fs_1 = require("fs");
8
+ const path_1 = __importDefault(require("path"));
9
+ // 获取版本号 - 从 package.json 读取
10
+ function getVersion() {
11
+ const packageJsonPath = path_1.default.join(__dirname, '..', 'package.json');
12
+ const packageJson = JSON.parse((0, fs_1.readFileSync)(packageJsonPath, 'utf-8'));
13
+ return packageJson.version;
14
+ }
15
+ exports.CZON_VERSION = getVersion();
16
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":";;;;;;AAAA,2BAAkC;AAClC,gDAAwB;AAExB,4BAA4B;AAC5B,SAAS,UAAU;IACjB,MAAM,eAAe,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;IACnE,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,iBAAY,EAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;IACvE,OAAO,WAAW,CAAC,OAAO,CAAC;AAC7B,CAAC;AAEY,QAAA,YAAY,GAAG,UAAU,EAAE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "czon",
3
- "version": "0.2.8",
3
+ "version": "0.3.0",
4
4
  "description": "CZone - AI enhanced Markdown content engine",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",