learn-anything-cli 0.5.0 → 1.1.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.
- package/dist/cli/index.js +32 -4
- package/dist/core/serve.d.ts +9 -0
- package/dist/core/serve.js +99 -0
- package/dist/core/templates/workflows/learn-explain.js +6 -4
- package/dist/core/templates/workflows/learn-practice.js +1 -0
- package/dist/i18n/index.d.ts +1 -1
- package/dist/i18n/locales/en.js +12 -0
- package/dist/i18n/locales/zh-CN.js +12 -0
- package/dist/i18n/types.d.ts +13 -0
- package/package.json +3 -2
- package/site-dist/assets/Dashboard-EDFO7_2g.js +1 -0
- package/site-dist/assets/TopicPage-BvtKWu1I.js +1 -0
- package/site-dist/assets/index-B42o4lnG.css +1 -0
- package/site-dist/assets/index-BaQnKmab.js +49 -0
- package/site-dist/index.html +19 -0
- package/site-dist/serve.mjs +362 -0
package/dist/cli/index.js
CHANGED
|
@@ -9,7 +9,6 @@ import { getMessages } from '../i18n/index.js';
|
|
|
9
9
|
const program = new Command();
|
|
10
10
|
const require = createRequire(import.meta.url);
|
|
11
11
|
const { version } = require('../../package.json');
|
|
12
|
-
// Parse --lang early from process.argv so we can localize static descriptions
|
|
13
12
|
const langIdx = process.argv.indexOf('--lang');
|
|
14
13
|
const earlyLocale = langIdx !== -1 ? resolveLocale(process.argv[langIdx + 1]) : resolveLocale();
|
|
15
14
|
const m = getMessages(earlyLocale);
|
|
@@ -28,7 +27,8 @@ program
|
|
|
28
27
|
.option('--no-context7', 'Disable Context7 documentation verification')
|
|
29
28
|
.action(async (targetPath = '.', options) => {
|
|
30
29
|
const cliLocale = resolveLocale(options?.lang);
|
|
31
|
-
const
|
|
30
|
+
const localeMsgs = cliLocale !== earlyLocale ? getMessages(cliLocale) : m;
|
|
31
|
+
const mc = localeMsgs.cli;
|
|
32
32
|
try {
|
|
33
33
|
const resolvedPath = path.resolve(targetPath);
|
|
34
34
|
try {
|
|
@@ -56,6 +56,7 @@ program
|
|
|
56
56
|
context7: options?.context7,
|
|
57
57
|
});
|
|
58
58
|
await initCommand.execute(targetPath);
|
|
59
|
+
console.log(chalk.dim(mc.serveHint));
|
|
59
60
|
}
|
|
60
61
|
catch (error) {
|
|
61
62
|
console.log();
|
|
@@ -70,16 +71,43 @@ program
|
|
|
70
71
|
.option('--lang <locale>', m.cli.langOption)
|
|
71
72
|
.action(async (targetPath = '.', options) => {
|
|
72
73
|
const cliLocale = resolveLocale(options?.lang);
|
|
73
|
-
const
|
|
74
|
+
const localeMsgs = cliLocale !== earlyLocale ? getMessages(cliLocale) : m;
|
|
75
|
+
const mc = localeMsgs.cli;
|
|
74
76
|
try {
|
|
77
|
+
const resolvedPath = path.resolve(targetPath);
|
|
75
78
|
const { InitCommand } = await import('../core/init.js');
|
|
76
79
|
const initCommand = new InitCommand({
|
|
77
80
|
update: true,
|
|
78
81
|
force: options?.force ?? true,
|
|
79
82
|
locale: cliLocale,
|
|
80
83
|
});
|
|
81
|
-
await initCommand.execute(
|
|
84
|
+
await initCommand.execute(resolvedPath);
|
|
82
85
|
console.log(chalk.green(mc.updateComplete));
|
|
86
|
+
console.log(chalk.dim(mc.serveHint));
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
console.log();
|
|
90
|
+
console.error(chalk.red(mc.errorPrefix(error.message)));
|
|
91
|
+
process.exit(1);
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
program
|
|
95
|
+
.command('serve [path]')
|
|
96
|
+
.description(m.cli.serveCommandDescription)
|
|
97
|
+
.option('--port <number>', m.cli.portOption, parseInt)
|
|
98
|
+
.option('--no-open', m.cli.noOpenOption)
|
|
99
|
+
.option('--lang <locale>', m.cli.langOption)
|
|
100
|
+
.action(async (targetPath = '.', options) => {
|
|
101
|
+
const cliLocale = resolveLocale(options?.lang);
|
|
102
|
+
const mc = cliLocale !== earlyLocale ? getMessages(cliLocale).cli : m.cli;
|
|
103
|
+
try {
|
|
104
|
+
const { executeServe } = await import('../core/serve.js');
|
|
105
|
+
await executeServe({
|
|
106
|
+
targetPath,
|
|
107
|
+
port: options?.port,
|
|
108
|
+
open: options?.open,
|
|
109
|
+
locale: cliLocale,
|
|
110
|
+
});
|
|
83
111
|
}
|
|
84
112
|
catch (error) {
|
|
85
113
|
console.log();
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { SupportedLocale } from '../i18n/types.js';
|
|
2
|
+
export interface ServeOptions {
|
|
3
|
+
targetPath?: string;
|
|
4
|
+
port?: number;
|
|
5
|
+
open?: boolean;
|
|
6
|
+
locale?: SupportedLocale;
|
|
7
|
+
}
|
|
8
|
+
export declare function executeServe(options: ServeOptions): Promise<void>;
|
|
9
|
+
//# sourceMappingURL=serve.d.ts.map
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import path from 'path';
|
|
2
|
+
import { exec, spawn } from 'child_process';
|
|
3
|
+
import chalk from 'chalk';
|
|
4
|
+
import * as fs from 'fs';
|
|
5
|
+
import { createRequire } from 'module';
|
|
6
|
+
import { LEARN_DIR } from '../core/config.js';
|
|
7
|
+
import { getMessages } from '../i18n/index.js';
|
|
8
|
+
export async function executeServe(options) {
|
|
9
|
+
const locale = options.locale ?? 'en';
|
|
10
|
+
const msg = getMessages(locale);
|
|
11
|
+
const m = msg.serve;
|
|
12
|
+
const cli = msg.cli;
|
|
13
|
+
const resolvedPath = path.resolve(options.targetPath ?? '.');
|
|
14
|
+
const topicsDir = path.join(resolvedPath, LEARN_DIR, 'topics');
|
|
15
|
+
if (!fs.existsSync(topicsDir)) {
|
|
16
|
+
fs.mkdirSync(topicsDir, { recursive: true });
|
|
17
|
+
}
|
|
18
|
+
try {
|
|
19
|
+
const entries = fs.readdirSync(topicsDir);
|
|
20
|
+
if (entries.length === 0) {
|
|
21
|
+
console.log(chalk.yellow(m.emptyTopics));
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
// topicsDir already ensured
|
|
26
|
+
}
|
|
27
|
+
console.log(chalk.cyan(m.startingServer));
|
|
28
|
+
const require = createRequire(import.meta.url);
|
|
29
|
+
const siteDistDir = path.join(path.dirname(require.resolve('../../package.json')), 'site-dist');
|
|
30
|
+
const port = options.port ?? 24278;
|
|
31
|
+
if (!fs.existsSync(path.join(siteDistDir, 'serve.mjs'))) {
|
|
32
|
+
console.error(chalk.red(m.siteNotBuilt));
|
|
33
|
+
process.exit(1);
|
|
34
|
+
}
|
|
35
|
+
const server = spawn('node', ['serve.mjs'], {
|
|
36
|
+
cwd: siteDistDir,
|
|
37
|
+
stdio: ['ignore', 'pipe', 'inherit'],
|
|
38
|
+
env: {
|
|
39
|
+
...process.env,
|
|
40
|
+
PORT: String(port),
|
|
41
|
+
TOPICS_DIR: topicsDir,
|
|
42
|
+
},
|
|
43
|
+
});
|
|
44
|
+
let readySignaled = false;
|
|
45
|
+
let outputBuf = '';
|
|
46
|
+
server.stdout.on('data', (data) => {
|
|
47
|
+
outputBuf += data.toString();
|
|
48
|
+
const lines = outputBuf.split('\n');
|
|
49
|
+
outputBuf = lines.pop() || '';
|
|
50
|
+
for (const line of lines) {
|
|
51
|
+
process.stdout.write(line + '\n');
|
|
52
|
+
if (!readySignaled && line.startsWith('SITE_READY|')) {
|
|
53
|
+
readySignaled = true;
|
|
54
|
+
const url = line.substring('SITE_READY|'.length).trim();
|
|
55
|
+
const openBrowser = options.open ?? true;
|
|
56
|
+
if (openBrowser) {
|
|
57
|
+
const openCmd = process.platform === 'darwin'
|
|
58
|
+
? 'open'
|
|
59
|
+
: process.platform === 'win32'
|
|
60
|
+
? `start ""`
|
|
61
|
+
: 'xdg-open';
|
|
62
|
+
exec(`${openCmd} ${url}`);
|
|
63
|
+
}
|
|
64
|
+
console.log(chalk.green(m.siteReady(url)));
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
server.stdout.on('end', () => {
|
|
69
|
+
if (outputBuf)
|
|
70
|
+
process.stdout.write(outputBuf);
|
|
71
|
+
});
|
|
72
|
+
const cleanup = () => {
|
|
73
|
+
if (server.exitCode === null) {
|
|
74
|
+
server.kill('SIGTERM');
|
|
75
|
+
}
|
|
76
|
+
console.log(chalk.dim(`\n${m.serverStopped}`));
|
|
77
|
+
process.exit(0);
|
|
78
|
+
};
|
|
79
|
+
process.on('SIGINT', cleanup);
|
|
80
|
+
process.on('SIGTERM', cleanup);
|
|
81
|
+
server.on('close', (code) => {
|
|
82
|
+
process.removeListener('SIGINT', cleanup);
|
|
83
|
+
process.removeListener('SIGTERM', cleanup);
|
|
84
|
+
if (code !== 0 && code !== null) {
|
|
85
|
+
console.error(chalk.red(`Server exited with code ${code}`));
|
|
86
|
+
process.exit(code);
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
server.on('error', (err) => {
|
|
90
|
+
if (err.code === 'EADDRINUSE') {
|
|
91
|
+
console.error(chalk.red(m.portInUse(port)));
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
console.error(chalk.red(cli.errorPrefix(err.message)));
|
|
95
|
+
}
|
|
96
|
+
process.exit(1);
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=serve.js.map
|
|
@@ -40,8 +40,8 @@ Structure your explanation:
|
|
|
40
40
|
|
|
41
41
|
1. **Positioning** — Where this concept sits in the knowledge map (one sentence).
|
|
42
42
|
2. **Analogy** — Real-world metaphor to build intuition.
|
|
43
|
-
3. **Core Mechanism** — "What" and "why" in clear language.
|
|
44
|
-
4. **Code Example** — Minimal but complete, with walkthrough.
|
|
43
|
+
3. **Core Mechanism** — "What" and "why" in clear language. If explaining based on existing project source code, reference specific file paths and line numbers.
|
|
44
|
+
4. **Code Example** — Minimal but complete, with walkthrough. When the code references existing project source files, annotate the exact file path and line range (e.g., \`src/core/config.ts:42-58\`).
|
|
45
45
|
5. **Common Misconceptions** — The most common beginner mistakes.
|
|
46
46
|
6. **Socratic Check** — 1-2 natural, curious questions to confirm understanding. If unsure, give the answer — don't wait.
|
|
47
47
|
|
|
@@ -93,11 +93,13 @@ Session file format:
|
|
|
93
93
|
|
|
94
94
|
## Code Example
|
|
95
95
|
|
|
96
|
+
> **📁 Source:** \`<file-path>:<line-range>\` — if this code references existing project source, annotate the exact file path and line range here. Omit this line for original/illustrative code.
|
|
97
|
+
|
|
96
98
|
\`\`\`[language]
|
|
97
|
-
[Write the complete code example,
|
|
99
|
+
[Write the complete code example. When referencing existing project source, add \`// 📁 <file-path>:<line-range>\` as the first comment inside the code block.]
|
|
98
100
|
\`\`\`
|
|
99
101
|
|
|
100
|
-
[Include your walkthrough of the code — what each part does]
|
|
102
|
+
[Include your walkthrough of the code — what each part does, referencing specific file locations where applicable]
|
|
101
103
|
|
|
102
104
|
## Common Misconceptions
|
|
103
105
|
|
|
@@ -60,6 +60,7 @@ Example starter:
|
|
|
60
60
|
/**
|
|
61
61
|
* <concept-name> — <difficulty>
|
|
62
62
|
* Open README.md for full description. Replace TODOs with your implementation.
|
|
63
|
+
* 📁 If based on existing project source, reference: <file-path>:<line-range>
|
|
63
64
|
*/
|
|
64
65
|
|
|
65
66
|
// TODO: implement the solution
|
package/dist/i18n/index.d.ts
CHANGED
|
@@ -2,5 +2,5 @@ import type { SupportedLocale, LocaleMessages } from './types.js';
|
|
|
2
2
|
export declare function getMessages(locale: SupportedLocale): LocaleMessages;
|
|
3
3
|
export declare function detectSystemLocale(): SupportedLocale;
|
|
4
4
|
export declare function resolveLocale(cliFlag?: string): SupportedLocale;
|
|
5
|
-
export type { SupportedLocale, LocaleMessages } from './types.js';
|
|
5
|
+
export type { SupportedLocale, LocaleMessages, ServeMessages } from './types.js';
|
|
6
6
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/i18n/locales/en.js
CHANGED
|
@@ -11,6 +11,10 @@ export const en = {
|
|
|
11
11
|
updateComplete: 'Learn Anything skill files have been updated.',
|
|
12
12
|
forceOption: 'Skip confirmation prompt',
|
|
13
13
|
langOption: 'Display language: zh-CN or en (default: system locale)',
|
|
14
|
+
portOption: 'Port for the dev server (default: 24278)',
|
|
15
|
+
noOpenOption: 'Do not open browser automatically',
|
|
16
|
+
serveCommandDescription: 'Start a local site to visualize learning progress',
|
|
17
|
+
serveHint: 'Run npx learn-anything serve to view your learning progress in browser',
|
|
14
18
|
},
|
|
15
19
|
init: {
|
|
16
20
|
header: '\n🧠 Learn Anything — AI-Powered Recursive Learning System\n',
|
|
@@ -28,5 +32,13 @@ export const en = {
|
|
|
28
32
|
context7Enabled: ' 📚 Context7 guidance enabled.',
|
|
29
33
|
context7SetupHint: ' 💡 To set up Context7 MCP, run `npx ctx7 setup` or visit https://context7.com/docs/resources/all-clients',
|
|
30
34
|
},
|
|
35
|
+
serve: {
|
|
36
|
+
startingServer: 'Starting server...',
|
|
37
|
+
siteReady: (url) => `Site ready at ${url}`,
|
|
38
|
+
portInUse: (port) => `Port ${port} is already in use. Try a different port with --port option.`,
|
|
39
|
+
emptyTopics: 'No learning topics found in .learn/topics/. Start learning with /learn:topic.',
|
|
40
|
+
serverStopped: 'Server stopped.',
|
|
41
|
+
siteNotBuilt: 'Site files not found. Please reinstall the package or run the build step.',
|
|
42
|
+
},
|
|
31
43
|
};
|
|
32
44
|
//# sourceMappingURL=en.js.map
|
|
@@ -11,6 +11,10 @@ export const zhCN = {
|
|
|
11
11
|
updateComplete: 'Learn Anything 技能文件已更新。',
|
|
12
12
|
forceOption: '跳过确认提示',
|
|
13
13
|
langOption: '界面语言:zh-CN 或 en(默认读取系统语言设置)',
|
|
14
|
+
portOption: '开发服务器端口(默认:24278)',
|
|
15
|
+
noOpenOption: '不自动打开浏览器',
|
|
16
|
+
serveCommandDescription: '启动本地站点以可视化学习进度',
|
|
17
|
+
serveHint: '运行 npx learn-anything serve 在浏览器中查看学习进度',
|
|
14
18
|
},
|
|
15
19
|
init: {
|
|
16
20
|
header: '\n🧠 Learn Anything — AI 驱动的递归学习系统\n',
|
|
@@ -28,5 +32,13 @@ export const zhCN = {
|
|
|
28
32
|
context7Enabled: ' 📚 已启用 Context7 文档验证引导。',
|
|
29
33
|
context7SetupHint: ' 💡 配置 Context7 MCP:运行 `npx ctx7 setup` 或访问 https://context7.com/docs/resources/all-clients',
|
|
30
34
|
},
|
|
35
|
+
serve: {
|
|
36
|
+
startingServer: '正在启动服务器...',
|
|
37
|
+
siteReady: (url) => `站点已就绪: ${url}`,
|
|
38
|
+
portInUse: (port) => `端口 ${port} 已被占用。请使用 --port 选项指定其他端口。`,
|
|
39
|
+
emptyTopics: '.learn/topics/ 中未找到学习主题。使用 /learn:topic 开始学习。',
|
|
40
|
+
serverStopped: '服务器已停止。',
|
|
41
|
+
siteNotBuilt: '未找到站点文件。请重新安装包或运行构建步骤。',
|
|
42
|
+
},
|
|
31
43
|
};
|
|
32
44
|
//# sourceMappingURL=zh-CN.js.map
|
package/dist/i18n/types.d.ts
CHANGED
|
@@ -1,4 +1,12 @@
|
|
|
1
1
|
export type SupportedLocale = 'zh-CN' | 'en';
|
|
2
|
+
export interface ServeMessages {
|
|
3
|
+
startingServer: string;
|
|
4
|
+
siteReady: (url: string) => string;
|
|
5
|
+
portInUse: (port: number) => string;
|
|
6
|
+
emptyTopics: string;
|
|
7
|
+
serverStopped: string;
|
|
8
|
+
siteNotBuilt: string;
|
|
9
|
+
}
|
|
2
10
|
export interface CLIMessages {
|
|
3
11
|
programDescription: string;
|
|
4
12
|
initCommandDescription: string;
|
|
@@ -11,6 +19,10 @@ export interface CLIMessages {
|
|
|
11
19
|
updateComplete: string;
|
|
12
20
|
forceOption: string;
|
|
13
21
|
langOption: string;
|
|
22
|
+
portOption: string;
|
|
23
|
+
noOpenOption: string;
|
|
24
|
+
serveCommandDescription: string;
|
|
25
|
+
serveHint: string;
|
|
14
26
|
}
|
|
15
27
|
export interface InitMessages {
|
|
16
28
|
header: string;
|
|
@@ -31,5 +43,6 @@ export interface InitMessages {
|
|
|
31
43
|
export interface LocaleMessages {
|
|
32
44
|
cli: CLIMessages;
|
|
33
45
|
init: InitMessages;
|
|
46
|
+
serve: ServeMessages;
|
|
34
47
|
}
|
|
35
48
|
//# sourceMappingURL=types.d.ts.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "learn-anything-cli",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "AI-powered recursive learning system with Socratic method and TDD practice",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"learn-anything-cli",
|
|
@@ -34,13 +34,14 @@
|
|
|
34
34
|
},
|
|
35
35
|
"files": [
|
|
36
36
|
"dist",
|
|
37
|
+
"site-dist",
|
|
37
38
|
"bin",
|
|
38
39
|
"!dist/**/*.test.js",
|
|
39
40
|
"!dist/**/__tests__",
|
|
40
41
|
"!dist/**/*.map"
|
|
41
42
|
],
|
|
42
43
|
"scripts": {
|
|
43
|
-
"build": "tsc",
|
|
44
|
+
"build": "node scripts/bundle-site.mjs && tsc",
|
|
44
45
|
"dev": "tsc --watch",
|
|
45
46
|
"dev:cli": "pnpm build && node bin/learn-anything.js",
|
|
46
47
|
"test": "vitest run",
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{d as u,u as m,c as n,a as s,t,b as a,e as x,F as _,r as h,f as p,o as l,n as f,g,l as b}from"./index-BaQnKmab.js";const v={class:"w-full"},y={class:"mb-4"},k={key:0,class:"text-sm text-text-3 mb-10"},C={key:1,class:"flex flex-col items-center justify-center py-24 text-center"},w={class:"text-sm font-medium text-text-2 mb-2"},T={class:"text-xs text-text-3 max-w-md"},B={key:2,class:"grid grid-cols-[repeat(auto-fill,minmax(320px,1fr))] gap-4"},$=["onClick"],D={class:"text-base font-semibold text-text-1 leading-snug mb-3"},F={class:"text-[13px] text-text-2 leading-relaxed"},L={class:"mt-4 flex items-center gap-3"},N={class:"flex-1 h-1 bg-(--color-divider) rounded-full overflow-hidden"},S={class:"text-xs font-semibold tabular-nums text-text-2"},E=u({__name:"Dashboard",setup(V){const c=g(),{t:o}=m(),r=p(()=>b());function i(d){c.push(`/topics/${d}`)}return(d,j)=>(l(),n("div",v,[s("h1",y,t(a(o)("dashboard.title")),1),r.value.length>0?(l(),n("p",k,t(r.value.length)+" "+t(r.value.length===1?"topic":"topics"),1)):x("",!0),r.value.length===0?(l(),n("div",C,[s("p",w,t(a(o)("dashboard.noTopics")),1),s("p",T,t(a(o)("dashboard.startLearning")),1)])):(l(),n("div",B,[(l(!0),n(_,null,h(r.value,e=>(l(),n("button",{key:e.slug,class:"text-left bg-(--color-bg-soft) rounded-xl border border-(--color-divider) p-6 hover:border-brand-2 transition-colors duration-150 cursor-pointer",onClick:z=>i(e.slug)},[s("h3",D,t(e.name),1),s("p",F,t(e.domainCount)+" "+t(a(o)("topic.domains"))+" · "+t(e.totalConcepts)+" "+t(a(o)("topic.concepts"))+" · "+t(e.masteredCount)+"/"+t(e.totalConcepts)+" "+t(a(o)("topic.mastered")),1),s("div",L,[s("div",N,[s("div",{class:"h-full rounded-full bg-brand-2 transition-all duration-500",style:f({width:`${e.percentage}%`})},null,4)]),s("span",S,t(e.percentage)+"% ",1)])],8,$))),128))]))]))}});export{E as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{d as m,c as o,a as t,t as d,f as s,o as n,h,i as v,j as g,u as k,b as _,F as y,k as w,m as b,p as M,q as H,s as T}from"./index-BaQnKmab.js";const F={class:"h-full"},L={key:0,class:"flex items-center justify-center h-full min-h-75 text-sm text-text-3"},$=["innerHTML"],j={key:2,class:"prose-content rounded-lg overflow-hidden bg-(--color-bg-alt)"},B={class:"flex items-center justify-between px-5 py-2 bg-transparent"},C={class:"text-xs text-text-3 font-mono"},E={class:"m-0! p-0! bg-transparent! text-left overflow-x-auto"},S=["innerHTML"],D=m({__name:"ContentViewer",props:{file:{}},setup(i){const e=i,a=s(()=>e.file&&e.file.path.split("/").pop()||""),c=s(()=>g(a.value)),r=s(()=>e.file?e.file.type==="markdown"?h(e.file.content):v(e.file.content,c.value):""),p=s(()=>{var l;return((l=e.file)==null?void 0:l.type)==="markdown"});return(l,f)=>(n(),o("div",F,[i.file?p.value?(n(),o("div",{key:1,class:"prose-content",innerHTML:r.value},null,8,$)):(n(),o("div",j,[t("div",B,[t("span",C,d(a.value),1)]),t("pre",E,[t("code",{class:"block px-6! py-5! leading-[1.7] font-mono text-[0.875em] text-text-2",innerHTML:r.value},null,8,S)])])):(n(),o("div",L," Select a file from the sidebar to view its content "))]))}}),K={key:0,class:"flex flex-col items-center justify-center py-24 text-center"},N={class:"text-base text-(--color-pencil)"},V={key:1},q={class:"text-[28px] md:text-[32px] font-semibold tracking-[-0.02em] leading-10 text-(--color-ink) mb-6"},I=["innerHTML"],R=m({__name:"TopicPage",props:{slug:{}},setup(i){const e=i,{t:a}=k(),c=s(()=>M(e.slug)),r=s(()=>T(e.slug)),p=s(()=>{const u=r.value;return u?h(u):""}),l=b("topicSelectedFile",H(null)),f=s(()=>!l.value);return(u,x)=>c.value?(n(),o("div",V,[f.value?(n(),o(y,{key:0},[t("h1",q,d(c.value.topic),1),t("div",{class:"prose-content",innerHTML:p.value},null,8,I)],64)):(n(),w(D,{key:1,file:_(l)},null,8,["file"]))])):(n(),o("div",K,[x[0]||(x[0]=t("div",{class:"text-4xl mb-4 opacity-60 select-none"},"🔍",-1)),t("p",N,d(_(a)("topic.notFound"))+": "+d(i.slug),1)]))}});export{R as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.hljs{color:var(--color-ink);background:var(--color-code-bg)}.hljs-keyword,.hljs-selector-tag,.hljs-literal,.hljs-section,.hljs-link{color:#9b3eb0}.hljs-string,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-addition{color:#3d8b5e}.hljs-number,.hljs-meta .hljs-string,.hljs-regexp{color:#d94e34}.hljs-built_in,.hljs-title.function_,.hljs-type{color:#3b6fb6}.hljs-comment,.hljs-quote{color:var(--color-pencil);font-style:italic}.hljs-tag,.hljs-selector-class,.hljs-selector-id{color:#d94e34}.hljs-attr,.hljs-attribute{color:#d9a34a}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-deletion{color:#d94e34;background:#d94e341a}.hljs-addition{color:#3d8b5e;background:#3d8b5e1a}/*! tailwindcss v4.3.1 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-duration:initial}}}@layer theme{:root,:host{--font-sans:"Inter", ui-sans-serif, system-ui, -apple-system, "PingFang SC", "Noto Sans SC", "Microsoft YaHei", sans-serif;--font-mono:ui-monospace, "Cascadia Code", "Fira Code", "JetBrains Mono", "SF Mono", "Menlo", "Monaco", "Consolas", monospace;--color-black:#000;--spacing:.25rem;--container-md:28rem;--text-xs:.75rem;--text-xs--line-height:1rem;--text-sm:.875rem;--text-sm--line-height:1.25rem;--text-base:1rem;--text-base--line-height:1.75;--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5 / 2.25);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--tracking-wide:.025em;--leading-snug:1.375;--leading-relaxed:1.625;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-text-1:#3c3c43;--color-text-2:#67676c;--color-text-3:#929295;--color-bg:#fff;--color-bg-alt:#f6f6f7;--color-bg-soft:#f6f6f7;--color-divider:#e2e2e3;--color-brand-1:#cc4428;--color-brand-2:#d94e34;--color-brand-soft:#d94e3424;--color-code-bg:var(--color-bg-alt)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.fixed{position:fixed}.static{position:static}.inset-0{top:0;right:0;bottom:0;left:0}.top-0{top:0}.top-4{top:calc(var(--spacing) * 4)}.bottom-0{bottom:0}.left-0{left:0}.left-4{left:calc(var(--spacing) * 4)}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.m-0\!{margin:0!important}.mx-6{margin-inline:calc(var(--spacing) * 6)}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-4{margin-top:calc(var(--spacing) * 4)}.-mb-px{margin-bottom:-1px}.mb-1{margin-bottom:var(--spacing)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.mb-10{margin-bottom:calc(var(--spacing) * 10)}.block{display:block}.flex{display:flex}.grid{display:grid}.h-1{height:var(--spacing)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-full{height:100%}.min-h-75{min-height:calc(var(--spacing) * 75)}.min-h-screen{min-height:100vh}.w-3{width:calc(var(--spacing) * 3)}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.w-68{width:calc(var(--spacing) * 68)}.w-full{width:100%}.max-w-md{max-width:var(--container-md)}.min-w-0{min-width:0}.flex-1{flex:1}.shrink-0{flex-shrink:0}.-translate-x-full{--tw-translate-x:-100%;translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-0{--tw-translate-x:0;translate:var(--tw-translate-x) var(--tw-translate-y)}.rotate-90{rotate:90deg}.cursor-pointer{cursor:pointer}.grid-cols-\[repeat\(auto-fill\,minmax\(320px\,1fr\)\)\]{grid-template-columns:repeat(auto-fill,minmax(320px,1fr))}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-6{gap:calc(var(--spacing) * 6)}:where(.space-y-0\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * .5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * .5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-px>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(1px * var(--tw-space-y-reverse));margin-block-end:calc(1px * calc(1 - var(--tw-space-y-reverse)))}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-\(--color-divider\){border-color:var(--color-divider)}.border-brand-2{border-color:var(--color-brand-2)}.border-transparent{border-color:#0000}.bg-\(--color-bg\){background-color:var(--color-bg)}.bg-\(--color-bg-alt\){background-color:var(--color-bg-alt)}.bg-\(--color-bg-soft\){background-color:var(--color-bg-soft)}.bg-\(--color-divider\){background-color:var(--color-divider)}.bg-\(--color-page\){background-color:var(--color-page)}.bg-black\/60{background-color:#0009}@supports (color:color-mix(in lab,red,red)){.bg-black\/60{background-color:color-mix(in oklab,var(--color-black) 60%,transparent)}}.bg-brand-2{background-color:var(--color-brand-2)}.bg-transparent{background-color:#0000}.bg-transparent\!{background-color:#0000!important}.p-0\!{padding:0!important}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.p-2{padding:calc(var(--spacing) * 2)}.p-6{padding:calc(var(--spacing) * 6)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.px-6\!{padding-inline:calc(var(--spacing) * 6)!important}.py-1{padding-block:var(--spacing)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-5\!{padding-block:calc(var(--spacing) * 5)!important}.py-10{padding-block:calc(var(--spacing) * 10)}.py-24{padding-block:calc(var(--spacing) * 24)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pt-6{padding-top:calc(var(--spacing) * 6)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pl-4{padding-left:calc(var(--spacing) * 4)}.text-center{text-align:center}.text-left{text-align:left}.font-mono{font-family:var(--font-mono)}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[0\.875em\]{font-size:.875em}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[13px\]{font-size:13px}.text-\[28px\]{font-size:28px}.leading-10{--tw-leading:calc(var(--spacing) * 10);line-height:calc(var(--spacing) * 10)}.leading-\[1\.7\]{--tw-leading:1.7;line-height:1.7}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-\[-0\.02em\]{--tw-tracking:-.02em;letter-spacing:-.02em}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.text-\(--color-ink\){color:var(--color-ink)}.text-\(--color-pencil\){color:var(--color-pencil)}.text-brand-2{color:var(--color-brand-2)}.text-text-1{color:var(--color-text-1)}.text-text-2{color:var(--color-text-2)}.text-text-3{color:var(--color-text-3)}.uppercase{text-transform:uppercase}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.opacity-60{opacity:.6}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-500{--tw-duration:.5s;transition-duration:.5s}.select-none{-webkit-user-select:none;user-select:none}@media(hover:hover){.hover\:border-brand-2:hover{border-color:var(--color-brand-2)}.hover\:bg-\(--color-bg-soft\):hover{background-color:var(--color-bg-soft)}.hover\:text-brand-1:hover{color:var(--color-brand-1)}.hover\:text-brand-2:hover{color:var(--color-brand-2)}.hover\:text-text-1:hover{color:var(--color-text-1)}}@media(min-width:48rem){.md\:text-\[32px\]{font-size:32px}}@media(min-width:64rem){.lg\:hidden{display:none}.lg\:translate-x-0{--tw-translate-x:0;translate:var(--tw-translate-x) var(--tw-translate-y)}.lg\:px-10{padding-inline:calc(var(--spacing) * 10)}.lg\:pl-68{padding-left:calc(var(--spacing) * 68)}}}.dark{--color-text-1:#dfdfd6;--color-text-2:#98989f;--color-text-3:#6a6a71;--color-text-1-rgb:223 223 214;--color-bg:#1b1b1f;--color-bg-alt:#161618;--color-bg-soft:#202127;--color-bg-elv:#202127;--color-border:#3c3f44;--color-divider:#2e2e32;--color-gutter:#000;--color-brand-1:#f0705a;--color-brand-2:#e85d44;--color-brand-3:#d94e34;--color-brand-soft:#e85d4429;--color-mastered:#3dd68c;--color-progress:#f9b44e}:root{--color-page:var(--color-bg);--color-ink:var(--color-text-1);--color-pencil:var(--color-text-2);--color-rule:var(--color-divider);--color-surface:var(--color-bg-soft);--color-surface-hover:var(--color-bg-alt);--color-accent:var(--color-brand-2);--color-accent-soft:var(--color-brand-soft)}body{font-family:var(--font-sans);font-weight:var(--font-weight-normal);font-size:var(--text-base);line-height:var(--text-base--line-height);color:var(--color-text-1);background-color:var(--color-bg);font-optical-sizing:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}h1,h2,h3,h4,h5,h6{font-family:var(--font-sans);font-weight:var(--font-weight-semibold);color:var(--color-text-1);outline:none}h1{letter-spacing:-.02em;font-size:28px;line-height:40px}h2{letter-spacing:-.02em;font-size:24px;line-height:32px}h3{letter-spacing:-.01em;font-size:20px;line-height:28px}code{font-family:var(--font-mono);font-size:.875em}pre{font-family:var(--font-mono)}pre code{font-size:.875rem}a:not([class]){color:var(--color-accent);text-decoration:none}a:not([class]):hover{text-decoration:underline}:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px}::selection{background-color:var(--color-accent-soft)}.prose-content{max-width:56rem;color:var(--color-ink);margin:0 auto;line-height:28px}.prose-content h1,.prose-content h2,.prose-content h3,.prose-content h4,.prose-content h5,.prose-content h6{outline:none;font-weight:600;position:relative}.prose-content h1{letter-spacing:-.02em;font-size:28px;line-height:40px}.prose-content h2{border-top:1px solid var(--color-rule);letter-spacing:-.02em;margin:48px 0 16px;padding-top:24px;font-size:24px;line-height:32px}.prose-content h3{letter-spacing:-.01em;margin:32px 0 0;font-size:20px;line-height:28px}.prose-content h4{letter-spacing:-.01em;margin:24px 0 0;font-size:18px;line-height:24px}@media(min-width:768px){.prose-content h1{font-size:32px}}.prose-content p,.prose-content img,.prose-content summary{margin:16px 0}.prose-content p{line-height:28px}.prose-content strong{font-weight:600}.prose-content a{color:var(--color-accent);text-underline-offset:2px;font-weight:500;text-decoration:underline;transition:color .25s}.prose-content a:hover{color:var(--color-ink)}.prose-content blockquote{border-left:2px solid var(--color-rule);color:var(--color-pencil);margin:16px 0;padding-left:16px;transition:border-color .5s}.prose-content blockquote>p{margin:0;font-size:16px}.prose-content ul,.prose-content ol{margin:16px 0;padding-left:1.25rem}.prose-content ul{list-style:outside}.prose-content ol{list-style:decimal}.prose-content li+li{margin-top:8px}.prose-content li>ol,.prose-content li>ul{margin:8px 0 0}.prose-content hr{border:none;border-top:1px solid var(--color-rule);margin:16px 0}.prose-content table{border-collapse:collapse;margin:20px 0;font-size:14px;display:block;overflow-x:auto}.prose-content tr{background-color:var(--color-page);border-top:1px solid var(--color-rule)}.prose-content tr:nth-child(2n){background-color:var(--color-surface)}.prose-content th,.prose-content td{border:1px solid var(--color-rule);padding:8px 16px}.prose-content th{text-align:left;color:var(--color-pencil);background-color:var(--color-surface);font-size:14px;font-weight:600}.prose-content td{font-size:14px}.prose-content :not(pre,h1,h2,h3,h4,h5,h6)>code{color:var(--color-accent);font-size:.875em}.prose-content :not(pre)>code{background-color:var(--color-code-bg);font-family:var(--font-mono);border-radius:4px;padding:3px 6px;transition:color .25s,background-color .5s}.prose-content a>code{color:var(--color-accent)}.prose-content a:hover>code{color:var(--color-ink)}.prose-content h1>code,.prose-content h2>code,.prose-content h3>code,.prose-content h4>code{font-size:.9em}.prose-content div[class*=language-],.prose-content pre:has(code){background-color:var(--color-code-bg);margin:16px -24px;transition:background-color .5s;position:relative;overflow-x:auto}@media(min-width:640px){.prose-content div[class*=language-],.prose-content pre:has(code){border-radius:8px;margin:16px 0}}.prose-content [class*=language-] pre,.prose-content [class*=language-] code,.prose-content pre:has(code){-moz-tab-size:4;tab-size:4}.prose-content [class*=language-] pre,.prose-content pre:has(code){z-index:1;text-align:left;background:0 0;margin:0;padding:20px 0;position:relative;overflow-x:auto}.prose-content [class*=language-] code,.prose-content pre:has(code)>code{width:fit-content;min-width:100%;color:var(--color-ink);font-size:.875em;line-height:1.7;font-family:var(--font-mono);background:0 0;padding:0 24px;transition:color .5s;display:block}.prose-content>:first-child{margin-top:0}.prose-content>:last-child{margin-bottom:0}@media(prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}
|