Docs: move enjoy-docs under 1000h (#373)

* move /enjoy-docs unser 1000-h/

* fix dep
This commit is contained in:
an-lee
2024-03-02 19:54:20 +08:00
committed by GitHub
parent 22e6a1af23
commit 1876e45da3
48 changed files with 1739 additions and 4660 deletions

View File

@@ -22,21 +22,19 @@ jobs:
- uses: actions/cache@v4
with:
path: |
1000-hours/node_modules
1000-hours/**/node_modules
key: ${{ runner.os }}-${{ hashFiles('./1000-hours/package-lock.json') }}
path: "**/node_modules"
key: ${{ runner.os }}-${{ hashFiles('**/yarn.lock') }}
- name: Setup node env
uses: actions/setup-node@master
with:
node-version: "20"
- run: npm install
working-directory: 1000-hours
- name: Install dependencies
run: yarn install
- run: npm run docs:build
working-directory: 1000-hours
- name: Build
run: yarn docs:build
- name: Deploy
uses: cloudflare/wrangler-action@v3
@@ -44,4 +42,5 @@ jobs:
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
command: pages deploy .vitepress/dist --project-name=1000-hours-prod
workingDirectory: "1000-hours"
workingDirectory: "1000-hours"

View File

@@ -1,47 +0,0 @@
name: Deploy Enjoy Docs website
on:
workflow_dispatch:
push:
branches:
- main
paths:
- "enjoy-docs/**"
pull_request:
branches:
- main
paths:
- "enjoy-docs/**"
jobs:
deploy:
runs-on: ubuntu-latest
name: Deploy
steps:
# checkout the code
- uses: actions/checkout@v4
- uses: actions/cache@v4
with:
path: "**/node_modules"
key: ${{ runner.os }}-${{ hashFiles('**/yarn.lock') }}
- name: Setup node env
uses: actions/setup-node@master
with:
node-version: "20"
- name: Install Independents
run: yarn install
- name: Build
run: yarn docs:build
- name: Deploy
uses: cloudflare/wrangler-action@v3
with:
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN_A }}
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID_A }}
command: pages deploy .vitepress/dist --project-name=enjoy-docs
workingDirectory: "enjoy-docs"

View File

@@ -1,10 +1,10 @@
import { defineConfig } from 'vitepress'
import { withMermaid } from 'vitepress-plugin-mermaid'
import footnote from 'markdown-it-footnote'
import sup from 'markdown-it-sup'
import sub from 'markdown-it-sub'
import mark from 'markdown-it-mark'
import ins from 'markdown-it-ins'
import { defineConfig } from "vitepress";
import { withMermaid } from "vitepress-plugin-mermaid";
import footnote from "markdown-it-footnote";
import sup from "markdown-it-sup";
import sub from "markdown-it-sub";
import mark from "markdown-it-mark";
import ins from "markdown-it-ins";
// import markdownit from 'markdown-it'
@@ -14,173 +14,354 @@ export default withMermaid(
title: "1000 小时",
description: "用注意力填满 1000 小时就能练成任何你需要的技能……",
head: [
[ 'script', { async: '', src: 'https://www.googletagmanager.com/gtag/js?id=G-Z2QZPX3T9W' } ],
[
'script', {},
"script",
{
async: "",
src: "https://www.googletagmanager.com/gtag/js?id=G-Z2QZPX3T9W",
},
],
[
"script",
{},
`window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-Z2QZPX3T9W');`
gtag('config', 'G-Z2QZPX3T9W');`,
],
['link', { rel: 'icon', href: '/images/clock.svg' }]
["link", { rel: "icon", href: "/images/clock.svg" }],
],
themeConfig: {
// https://vitepress.dev/reference/default-theme-config
nav: [
{ text: 'Home', link: '/' },
// { text: 'Examples', link: '/markdown-examples' }
{ text: "Home", link: "/" },
{ text: "Enjoy App", link: "/enjoy-app/", activeMatch: "/enjoy-app/" },
],
search: {
// provider: 'local'
provider: 'algolia',
provider: "algolia",
options: {
appId: 'KKK8CORNSR',
apiKey: 'd613ff31a535ff1e9535cf9c88ec420a',
indexName: '1000h'
}
appId: "KKK8CORNSR",
apiKey: "d613ff31a535ff1e9535cf9c88ec420a",
indexName: "1000h",
},
},
sidebar: [
{
text: '简要说明', collapsed: true, link: '/intro',
items: [
{ text: '1. 要不要健脑?', link: '/why' },
{ text: '2. 什么最健脑?', link: '/what' },
]
},
{
text: '训练任务', collapsed: true,
items: [
{ text: '1. 启动任务', link: '/training-tasks/kick-off' },
{ text: '2. 训练方法', link: '/training-tasks/procedures' },
{
text: '3. 人工智能', collapsed: false, link: '/training-tasks/ai',
items: [
{ text: '3.1. 基础语言能力', link: '/training-tasks/language' },
{ text: '3.2. 成年人的困境', link: '/training-tasks/predicaments' },
{ text: '3.3. 人工智能辅助', link: '/training-tasks/revolution' },
{ text: '3.4. 任务并不高级', link: '/training-tasks/ground' },
{ text: '3.5. 效果非常惊人', link: '/training-tasks/wonder' },
]
},
{ text: '4. 意料之外', link: '/training-tasks/surprise' },
]
},
{
text: '语音塑造', collapsed: true,
items: [
{
text: '1. 基础', collapsed: true, link: '/sounds-of-english/01-basics',
items: [
{ text: '1.1. 音素', collapsed: true, link: '/sounds-of-english/01-phonemes',
items: [
{ text: '1.1.1. 元音', link: '/sounds-of-english/01-1-vowels' },
{ text: '1.1.2. 辅音', link: '/sounds-of-english/01-2-consonants' },
{ text: '1.1.3. 美式语音标注', link: '/sounds-of-english/01-3-us-phonemes' },
{ text: '1.1.4. 示例', link: '/sounds-of-english/01-4-pangram' }
]
},
{ text: '1.2. 音节', link: '/sounds-of-english/02-syllables' }
]
},
{
text: '2. 详解', collapsed: true, link: '/sounds-of-english/03-details',
items: [
{ text: '2.1. 元音', collapsed: false, link: '/sounds-of-english/03-vowels-overview',
items: [
{ text: '2.1.1. 口腔内气流共鸣位置', link: '/sounds-of-english/04-vowel-positions' },
{ text: '2.1.2. ʌ/ɑː', link: '/sounds-of-english/05-Ʌ' },
{ text: '2.1.3. e/æ', link: '/sounds-of-english/06-e' },
{ text: '2.1.4. ə/əː', link: '/sounds-of-english/07-ə' },
{ text: '2.1.5. ɪ/iː', link: '/sounds-of-english/08-i' },
{ text: '2.1.6. ʊ/uː', link: '/sounds-of-english/09-u' },
{ text: '2.1.7. ɔ/ɔː', link: '/sounds-of-english/10-ɔ' },
{ text: '2.1.8. aɪ, eɪ, ɔɪ, aʊ, əʊ, eə, ɪə, ʊə', link: '/sounds-of-english/11-aɪ' },
]
},
{ text: '2.2. 辅音', collapsed: false, link: '/sounds-of-english/12-consonants-overview',
items: [
{ text: '2.2.1. p, b, m, n, f, k, g, h', link: '/sounds-of-english/13-pbmnfkgh' },
{ text: '2.2.2. f, v', link: '/sounds-of-english/14-fv' },
{ text: '2.2.3. m, n, ŋ', link: '/sounds-of-english/15-mn' },
{ text: '2.2.4. t, d, s, z; ʃ, tʃ, dʒ', link: '/sounds-of-english/16-tdsz' },
{ text: '2.2.5. t, d', link: '/sounds-of-english/17-td' },
{ text: '2.2.6. tr, dr, ts, dz', link: '/sounds-of-english/18-trdr' },
{ text: '2.2.7. sp, st, str, sk', link: '/sounds-of-english/19-sptk' },
{ text: '2.2.8. h', link: '/sounds-of-english/20-h' },
{ text: '2.2.9. θ, ð', link: '/sounds-of-english/21-θð' },
{ text: '2.2.10. r', link: '/sounds-of-english/22-r' },
{ text: '2.2.11. l', link: '/sounds-of-english/23-l' },
{ text: '2.2.12. ʒ', link: '/sounds-of-english/24-ʒ' },
{ text: '2.2.13. j, w', link: '/sounds-of-english/25-jw' },
]
},
{ text: '2.3. 连读', link: '/sounds-of-english/26-catenation' },
{ text: '2.4. 音标学习', link: '/sounds-of-english/27-learning-phonetics' },
{ text: '2.4. 英美口音选择', link: '/sounds-of-english/28-choosing-accent' },
]
},
{
text: '3. 进阶', collapsed: true, link: '/sounds-of-english/29-advanced',
items: [
{ text: '3.1 什么更重要?', link: '/sounds-of-english/30-more-important' },
{ text: '3.2 停顿', link: '/sounds-of-english/31-pause' },
{ text: '3.3 高低', link: '/sounds-of-english/32-high-low' },
{ text: '3.4 起伏', link: '/sounds-of-english/33-up-down' },
{ text: '3.5 轻重', link: '/sounds-of-english/34-strong-weak' },
{ text: '3.6 缓急', link: '/sounds-of-english/35-fast-slow' },
{ text: '3.7 长短', link: '/sounds-of-english/36-long-short' },
]
},
{
text: '4. 收官', collapsed: true, link: '/sounds-of-english/37-round-up',
items: [
{ text: '4.1 流利', link: '/sounds-of-english/38-fluent' },
{ text: '4.2 情绪', link: '/sounds-of-english/39-emotional' },
]
}
]
},
{
text: '大脑内部', collapsed: true,
items: [
{ text: '1. 小空间大世界', link: '/in-the-brain/01-inifinite' },
{ text: '2. 一切都是连接', link: '/in-the-brain/02-links' },
{ text: '3. 一切都是体育课', link: '/in-the-brain/03-sports' },
{ text: '4. 一切都是语文课', link: '/in-the-brain/04-literature' },
{ text: '5. 一切都需要能量', link: '/in-the-brain/05-energy' },
{ text: '6. 用进废退循环利用', link: '/in-the-brain/06-use-or-lose' },
{ text: '7. 短时间内足量重复', link: '/in-the-brain/07-repitition' },
{ text: '8. 新旧网络间的竞争', link: '/in-the-brain/08-compitition' },
{ text: '9. 注意不到就不存在', link: '/in-the-brain/09-unnoticed' },
{ text: '10. 熟练就是卸载负担', link: '/in-the-brain/10-unloading' },
{ text: '11. 被关注是最大负担', link: '/in-the-brain/11-burden' },
{ text: '12. 有限排它不可再生', link: '/in-the-brain/12-unreproducible' },
{ text: '13. 一切都是化学反应', link: '/in-the-brain/13-chemical' },
{ text: '14. 安全阈值决定成果', link: '/in-the-brain/14-threshold' },
]
},
{
text: '自我训练', collapsed: true, link: `/self-training/00-intro`,
items: [
{ text: '1. 用兵打仗', link: '/self-training/01-fight' },
{ text: '2. 只能自学', link: '/self-training/02-last-resort' },
{ text: '3. 生学硬练', link: '/self-training/03-trials-and-errors' },
{ text: '4. 走出迷宫', link: '/self-training/04-maze' },
{ text: '5. 自我纠正', link: '/self-training/05-correction' },
{ text: '6. 自主驱动', link: '/self-training/06-motives' },
{ text: '7. 自我鼓励', link: '/self-training/07-encouraging' },
{ text: '8. 自我监督', link: '/self-training/08-supervising' },
{ text: '9. 自主计划', link: '/self-training/09-planning' },
{ text: '10. 返璞归真', link: '/self-training/10-going-back' },
]
},
],
sidebar: {
"/": [
{
text: "简要说明",
collapsed: true,
link: "/intro",
items: [
{ text: "1. 要不要健脑?", link: "/why" },
{ text: "2. 什么最健脑?", link: "/what" },
],
},
{
text: "训练任务",
collapsed: true,
items: [
{ text: "1. 启动任务", link: "/training-tasks/kick-off" },
{ text: "2. 训练方法", link: "/training-tasks/procedures" },
{
text: "3. 人工智能",
collapsed: false,
link: "/training-tasks/ai",
items: [
{
text: "3.1. 基础语言能力",
link: "/training-tasks/language",
},
{
text: "3.2. 成年人的困境",
link: "/training-tasks/predicaments",
},
{
text: "3.3. 人工智能辅助",
link: "/training-tasks/revolution",
},
{ text: "3.4. 任务并不高级", link: "/training-tasks/ground" },
{ text: "3.5. 效果非常惊人", link: "/training-tasks/wonder" },
],
},
{ text: "4. 意料之外", link: "/training-tasks/surprise" },
],
},
{
text: "语音塑造",
collapsed: true,
items: [
{
text: "1. 基础",
collapsed: true,
link: "/sounds-of-english/01-basics",
items: [
{
text: "1.1. 音素",
collapsed: true,
link: "/sounds-of-english/01-phonemes",
items: [
{
text: "1.1.1. 元音",
link: "/sounds-of-english/01-1-vowels",
},
{
text: "1.1.2. 辅音",
link: "/sounds-of-english/01-2-consonants",
},
{
text: "1.1.3. 美式语音标注",
link: "/sounds-of-english/01-3-us-phonemes",
},
{
text: "1.1.4. 示例",
link: "/sounds-of-english/01-4-pangram",
},
],
},
{
text: "1.2. 音节",
link: "/sounds-of-english/02-syllables",
},
],
},
{
text: "2. 详解",
collapsed: true,
link: "/sounds-of-english/03-details",
items: [
{
text: "2.1. 元音",
collapsed: false,
link: "/sounds-of-english/03-vowels-overview",
items: [
{
text: "2.1.1. 口腔内气流共鸣位置",
link: "/sounds-of-english/04-vowel-positions",
},
{ text: "2.1.2. ʌ/ɑː", link: "/sounds-of-english/05-Ʌ" },
{ text: "2.1.3. e/æ", link: "/sounds-of-english/06-e" },
{ text: "2.1.4. ə/əː", link: "/sounds-of-english/07-ə" },
{ text: "2.1.5. ɪ/iː", link: "/sounds-of-english/08-i" },
{ text: "2.1.6. ʊ/uː", link: "/sounds-of-english/09-u" },
{ text: "2.1.7. ɔ/ɔː", link: "/sounds-of-english/10-ɔ" },
{
text: "2.1.8. aɪ, eɪ, ɔɪ, aʊ, əʊ, eə, ɪə, ʊə",
link: "/sounds-of-english/11-aɪ",
},
],
},
{
text: "2.2. 辅音",
collapsed: false,
link: "/sounds-of-english/12-consonants-overview",
items: [
{
text: "2.2.1. p, b, m, n, f, k, g, h",
link: "/sounds-of-english/13-pbmnfkgh",
},
{ text: "2.2.2. f, v", link: "/sounds-of-english/14-fv" },
{
text: "2.2.3. m, n, ŋ",
link: "/sounds-of-english/15-mn",
},
{
text: "2.2.4. t, d, s, z; ʃ, tʃ, dʒ",
link: "/sounds-of-english/16-tdsz",
},
{ text: "2.2.5. t, d", link: "/sounds-of-english/17-td" },
{
text: "2.2.6. tr, dr, ts, dz",
link: "/sounds-of-english/18-trdr",
},
{
text: "2.2.7. sp, st, str, sk",
link: "/sounds-of-english/19-sptk",
},
{ text: "2.2.8. h", link: "/sounds-of-english/20-h" },
{ text: "2.2.9. θ, ð", link: "/sounds-of-english/21-θð" },
{ text: "2.2.10. r", link: "/sounds-of-english/22-r" },
{ text: "2.2.11. l", link: "/sounds-of-english/23-l" },
{ text: "2.2.12. ʒ", link: "/sounds-of-english/24-ʒ" },
{
text: "2.2.13. j, w",
link: "/sounds-of-english/25-jw",
},
],
},
{
text: "2.3. 连读",
link: "/sounds-of-english/26-catenation",
},
{
text: "2.4. 音标学习",
link: "/sounds-of-english/27-learning-phonetics",
},
{
text: "2.4. 英美口音选择",
link: "/sounds-of-english/28-choosing-accent",
},
],
},
{
text: "3. 进阶",
collapsed: true,
link: "/sounds-of-english/29-advanced",
items: [
{
text: "3.1 什么更重要?",
link: "/sounds-of-english/30-more-important",
},
{ text: "3.2 停顿", link: "/sounds-of-english/31-pause" },
{ text: "3.3 高低", link: "/sounds-of-english/32-high-low" },
{ text: "3.4 起伏", link: "/sounds-of-english/33-up-down" },
{
text: "3.5 轻重",
link: "/sounds-of-english/34-strong-weak",
},
{ text: "3.6 缓急", link: "/sounds-of-english/35-fast-slow" },
{
text: "3.7 长短",
link: "/sounds-of-english/36-long-short",
},
],
},
{
text: "4. 收官",
collapsed: true,
link: "/sounds-of-english/37-round-up",
items: [
{ text: "4.1 流利", link: "/sounds-of-english/38-fluent" },
{ text: "4.2 情绪", link: "/sounds-of-english/39-emotional" },
],
},
],
},
{
text: "大脑内部",
collapsed: true,
items: [
{ text: "1. 小空间大世界", link: "/in-the-brain/01-inifinite" },
{ text: "2. 一切都是连接", link: "/in-the-brain/02-links" },
{ text: "3. 一切都是体育课", link: "/in-the-brain/03-sports" },
{
text: "4. 一切都是语文课",
link: "/in-the-brain/04-literature",
},
{ text: "5. 一切都需要能量", link: "/in-the-brain/05-energy" },
{
text: "6. 用进废退循环利用",
link: "/in-the-brain/06-use-or-lose",
},
{
text: "7. 短时间内足量重复",
link: "/in-the-brain/07-repitition",
},
{
text: "8. 新旧网络间的竞争",
link: "/in-the-brain/08-compitition",
},
{
text: "9. 注意不到就不存在",
link: "/in-the-brain/09-unnoticed",
},
{
text: "10. 熟练就是卸载负担",
link: "/in-the-brain/10-unloading",
},
{ text: "11. 被关注是最大负担", link: "/in-the-brain/11-burden" },
{
text: "12. 有限排它不可再生",
link: "/in-the-brain/12-unreproducible",
},
{
text: "13. 一切都是化学反应",
link: "/in-the-brain/13-chemical",
},
{
text: "14. 安全阈值决定成果",
link: "/in-the-brain/14-threshold",
},
],
},
{
text: "自我训练",
collapsed: true,
link: `/self-training/00-intro`,
items: [
{ text: "1. 用兵打仗", link: "/self-training/01-fight" },
{ text: "2. 只能自学", link: "/self-training/02-last-resort" },
{
text: "3. 生学硬练",
link: "/self-training/03-trials-and-errors",
},
{ text: "4. 走出迷宫", link: "/self-training/04-maze" },
{ text: "5. 自我纠正", link: "/self-training/05-correction" },
{ text: "6. 自主驱动", link: "/self-training/06-motives" },
{ text: "7. 自我鼓励", link: "/self-training/07-encouraging" },
{ text: "8. 自我监督", link: "/self-training/08-supervising" },
{ text: "9. 自主计划", link: "/self-training/09-planning" },
{ text: "10. 返璞归真", link: "/self-training/10-going-back" },
],
},
],
"/enjoy-app/": [
{
text: "快速开始",
collapsed: false,
items: [
{ text: "Enjoy 简介", link: "/enjoy-app/" },
{ text: "下载安装", link: "/enjoy-app/install" },
{ text: "软件设置", link: "/enjoy-app/settings" },
],
},
{
text: "跟读训练",
collapsed: false,
items: [
{ text: "音频资源", link: "/enjoy-app/audios" },
{ text: "视频资源", link: "/enjoy-app/videos" },
],
},
{
text: "阅读文本",
collapsed: false,
items: [
{ text: "在线文章", link: "/enjoy-app/webpage" },
{ text: "本地电子书", link: "/enjoy-app/ebook" },
],
},
{
text: "智能助手",
collapsed: false,
items: [
{ text: "简介", link: "/enjoy-app/ai-assistant" },
{ text: "GPT 服务", link: "/enjoy-app/gpt-conversation" },
{ text: "TTS 服务", link: "/enjoy-app/tts-conversation" },
],
},
{
text: "使用案例",
collapsed: false,
items: [
{
text: "利用 AI 生成训练材料",
link: "/enjoy-app/use-case-generate-audio-resources",
},
],
},
],
},
socialLinks: [
{ icon: 'github', link: 'https://github.com/xiaolai/everyone-can-use-english/tree/main/1000-hours' }
]
{
icon: "github",
link: "https://github.com/xiaolai/everyone-can-use-english/tree/main/1000-hours",
},
],
},
markdown: {
@@ -188,15 +369,15 @@ export default withMermaid(
math: true,
config: (md) => {
// use more markdown-it plugins!
md.use(footnote)
md.use(sub)
md.use(sup)
md.use(mark)
md.use(ins)
md.use(footnote);
md.use(sub);
md.use(sup);
md.use(mark);
md.use(ins);
},
// toc: {
// level: [2, 3, 4]
// }
}
},
})
);

View File

@@ -29,7 +29,7 @@ Enjoy 支持添加本地的音频资源,和在线资源。在音频页面,
Enjoy 会将音频按照句子切分,用户以句子为单位进行跟读练习。在激活的音频句子下,点击下方的录音按钮,即可开始录音,用户可以模仿音频朗读当前句子作为练习。
![音频播放页面](/snapshots/audio-page.png)
![音频播放页面](/images/enjoy/audio-page.png)
_\* 音频播放页面_
::: tip 录音权限
@@ -42,7 +42,7 @@ Enjoy 集成了微软 Azure 的发音评估功能,作为自我的发音检查
该功能会以**录音时的句子文本作为参考**,评估录音的发音情况,各指标的详细说明可以参考微软的 [官方文档](https://learn.microsoft.com/en-us/azure/ai-services/speech-service/how-to-pronunciation-assessment?pivots=programming-language-javascript#scripted-assessment-results)。
![发音评估示例](/snapshots/pronouce-assessment.png)
![发音评估示例](/images/enjoy/pronouce-assessment.png)
_\* 发音评估示例_
::: warning 发音评估的使用建议

View File

@@ -1,4 +1,4 @@
# 简介
# Enjoy 简介
AI 是当今世界上最好的外语老师Enjoy 做 **AI 最好的助教**

View File

@@ -12,14 +12,14 @@
角色定义选择预设的 `英语教练`
![选择 AI 角色](/snapshots/select-ai-role.png)
![选择 AI 角色](/images/enjoy/select-ai-role.png)
_\* 选择 AI 角色_
具体配置里,根据具体情况,修改 AI 引擎 为 OpenAI 或者 Enjoy AI。如果使用 [OpenAI](./settings#openai-配置),可能还需要检查配置 `接口地址`
将配置拉到最下面,`TTS 引擎` 也需要做相应配置。
![对话设置](/snapshots/conversation-form.png)
![对话设置](/images/enjoy/conversation-form.png)
_\* 对话设置_
配置完成后,点击下面的 `确认` 按钮,即可创建成功。
@@ -32,14 +32,14 @@ _\* 对话设置_
如果你对 AI 的回复感到满意,点击信息下方的朗读图标,将其转化为语音。
![英语教练对话](/snapshots/english-coach-gpt-conversation.png)
![英语教练对话](/images/enjoy/english-coach-gpt-conversation.png)
_\* 英语教练对话_
## 跟读训练
继而点击麦克风图标,将该语音加入资源库,进行跟读训练。
![添加跟读训练](/snapshots/conversation-add-speech-to-audio.png)
![添加跟读训练](/images/enjoy/conversation-add-speech-to-audio.png)
_\* 添加跟读训练_
随后也可以在 [音频页面](./audios.md) 找到该材料,继续练习。

View File

@@ -2,7 +2,7 @@
视频资源的使用与 [音频资源](./audios.md) 基本一致。
![视频资源播放页面](/snapshots/video-page.png)
![视频资源播放页面](/images/enjoy/video-page.png)
_\* 视频播放页面_
## 录音

View File

@@ -4,14 +4,14 @@
输入文章的网址,即可开始阅读。
![文章阅读页面](/snapshots/story-page.png)
![文章阅读页面](/images/enjoy/story-page.png)
_\* 文章阅读页面_
## 提取关键词汇
打开文章后Enjoy 将会智能提取该文章的关键词汇,并在文中标注。该功能需要 AI 引擎的支持,在 [默认 AI 引擎](./settings.md#默认-ai-引擎) 可以设置。
![关键词汇](/snapshots/story-key-vocabulary.png)
![关键词汇](/images/enjoy/story-key-vocabulary.png)
_\* 智能提取关键词汇_
## 查单词

View File

@@ -23,8 +23,7 @@ hero:
- theme: brand
text: 自我训练
link: /self-training/00-intro
# - theme: alt
# text: API Examples
# link: /api-examples
- theme: alt
text: Enjoy App
link: /enjoy-app/
---

File diff suppressed because it is too large Load Diff

View File

@@ -1,4 +1,5 @@
{
"name": "1000-hours",
"devDependencies": {
"markdown-it-footnote": "^4.0.0",
"markdown-it-ins": "^4.0.0",
@@ -6,14 +7,15 @@
"markdown-it-mathjax3": "^4.3.2",
"markdown-it-sub": "^2.0.0",
"markdown-it-sup": "^2.0.0",
"mermaid": "^10.8.0",
"sass": "^1.70.0",
"vitepress": "^1.0.0-rc.42",
"vitepress-plugin-mermaid": "^2.0.16",
"vue": "^3.4.18"
},
"scripts": {
"docs:dev": "vitepress dev",
"docs:build": "vitepress build",
"docs:preview": "vitepress preview"
"dev": "vitepress dev",
"build": "vitepress build",
"preview": "vitepress preview"
}
}

View File

Before

Width:  |  Height:  |  Size: 425 KiB

After

Width:  |  Height:  |  Size: 425 KiB

View File

Before

Width:  |  Height:  |  Size: 122 KiB

After

Width:  |  Height:  |  Size: 122 KiB

View File

Before

Width:  |  Height:  |  Size: 182 KiB

After

Width:  |  Height:  |  Size: 182 KiB

View File

Before

Width:  |  Height:  |  Size: 197 KiB

After

Width:  |  Height:  |  Size: 197 KiB

View File

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 20 KiB

View File

Before

Width:  |  Height:  |  Size: 202 KiB

After

Width:  |  Height:  |  Size: 202 KiB

View File

Before

Width:  |  Height:  |  Size: 149 KiB

After

Width:  |  Height:  |  Size: 149 KiB

View File

Before

Width:  |  Height:  |  Size: 240 KiB

After

Width:  |  Height:  |  Size: 240 KiB

View File

Before

Width:  |  Height:  |  Size: 1.4 MiB

After

Width:  |  Height:  |  Size: 1.4 MiB

View File

Before

Width:  |  Height:  |  Size: 1.1 MiB

After

Width:  |  Height:  |  Size: 1.1 MiB

View File

@@ -1,151 +0,0 @@
# Everyone Can Use English
## Table of Contents
- [Introduction](./book/README.md)
- [Chapter 1: Starting Point](./book/chapter1.md)
- [Chapter 2: Spoken Language](./book/chapter2.md)
- [Chapter 3: Pronunciation](./book/chapter3.md)
- [Chapter 4: Reading Aloud](./book/chapter4.md)
- [Chapter 5: Dictionary](./book/chapter5.md)
- [Chapter 6: Grammar](./book/chapter6.md)
- [Chapter 7: Intensive Reading](./book/chapter7.md)
- [Chapter 8: Reminders](./book/chapter8.md)
- [Afterword](./book/end.md)
## Applications
- [Enjoy App](./enjoy/README.md)
## \* Developers
### Local Setup
```bash
yarn install
yarn start:enjoy
```
### Compilation
```bash
yarn make:enjoy
```
## \* Everyday Users
Method 1: The **most direct and simple method** is to download the appropriate installation file from the [releases page](https://github.com/xiaolai/everyone-can-use-english/tags).
Method 2: If you want to **try out updated versions** at any time, follow these steps.
### For MacOS Users
1. Open the Terminal command line tool.
2. Install Homebrew (refer to this article: 《[从 Terminal 开始…](https://github.com/xiaolai/apple-computer-literacy/blob/main/start-from-terminal.md)》)
3. Install `nodejs` and `yarn`:
```bash
brew install nvm
nvm install 20.5.1
brew install ffmpeg
brew install yarn
```
4. Clone this repository locally and then install and launch:
```bash
cd ~
mkdir github
cd github
git clone https://github.com/xiaolai/everyone-can-use-english
cd ~/github/everyone-can-use-english
yarn install
yarn start:enjoy
```
5. To restart the application, use Terminal:
```bash
cd ~/github/everyone-can-use-english
git pull
yarn install
yarn start:enjoy
```
### For Windows Users
System requirements: Windows 10 version 22H2 or later, [Windows PowerShell 5.1](https://aka.ms/wmf5download) or later, stable internet connection.
1. Right-click on the "Windows logo" in the taskbar and choose "PowerShell".
> Tips 1: On the latest Windows 11, you may not see the "PowerShell" option, only "Terminal".
>
> Tips 2: Do not run PowerShell with administrator privileges, as it may cause Scoop installation failure.
2. In the opened PowerShell window, execute the following commands to install Scoop:
```powershell
# Set PowerShell execution policy
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
# Download installation script
irm get.scoop.sh -outfile 'install.ps1'
# Execute installation, --ScoopDir parameter specifies the Scoop installation path
.\install.ps1 -ScoopDir 'C:\Scoop'
````
If you encounter the error:
> `<span style="color:red">`irm : Could not resolve this remote name: 'raw.githubusercontent.com'
It indicates a **network connection** problem; please resolve it on your own.
3. Install Nodejs and yarn as well as other dependencies:
```powershell
scoop install nodejs
scoop install git
npm install yarn -D
````
4. Clone this repository locally, and then install the Enjoy App:
```powershell
cd ~
mkdir github
cd github
git clone https://github.com/xiaolai/everyone-can-use-english
cd everyone-can-use-english
cd enjoy
yarn install
yarn start:enjoy
```
If you see `Completed in XXXXXXXXXX` ,it indicates successful installation.
5. Run the Enjoy App by executing the following command in the terminal:
```powershell
yarn start:enjoy
```
## Update Enjoy
Update and use the latest version of Enjoy:
1. Pull the latest content from the repository locally, execute in the command line tool:
```bash
git pull
```
The result should display:
```shell
Already up to date.
```
2. Run the Enjoy App:
```shell
yarn start:enjoy
```

227
README.md
View File

@@ -1,6 +1,37 @@
# 人人都能用英语
# 一千小时
中文 | [English](README.en-US.md)
## 在线阅读
[1000.org](https://1000h.org)
## 本地阅读
```
yarn install
yarn docs:dev
```
---
# Enjoy App
[![Test](https://github.com/xiaolai/everyone-can-use-english/actions/workflows/test-enjoy-app.yml/badge.svg)](https://github.com/xiaolai/everyone-can-use-english/actions/workflows/test-enjoy-app.yml)
[![Release](https://github.com/xiaolai/everyone-can-use-english/actions/workflows/release-enjoy-app.yml/badge.svg)](https://github.com/xiaolai/everyone-can-use-english/actions/workflows/release-enjoy-app.yml)
## 使用说明
请参阅 https://1000h.org/enjoy-app/
## 本地启动
```
yarn install
yarn enjoy:start
```
---
# 人人都能用英语
## 目录
@@ -14,195 +45,3 @@
- [第七章:精读](./book/chapter7.md)
- [第八章:叮嘱](./book/chapter8.md)
- [后记](./book/end.md)
---
# 一千小时
本地阅读
```
yarn install
yarn dev:1000h
```
---
# Enjoy App
[![Test](https://github.com/xiaolai/everyone-can-use-english/actions/workflows/test-enjoy-app.yml/badge.svg)](https://github.com/xiaolai/everyone-can-use-english/actions/workflows/test-enjoy-app.yml)
[![Release](https://github.com/xiaolai/everyone-can-use-english/actions/workflows/release-enjoy-app.yml/badge.svg)](https://github.com/xiaolai/everyone-can-use-english/actions/workflows/release-enjoy-app.yml)
## \* 开发者
### 本地启动
```bash
yarn install
yarn start:enjoy
```
### 编译
```bash
yarn make:enjoy
```
## \* 普通小白用户
方法一:**最直接简单的方法**是去 [releases 页面](https://github.com/xiaolai/everyone-can-use-english/tags)下载相应的安装文件。
> 如果你需要**详细下载操作指导**[点这里](find-compatible-software-version.md)
> [!TIP]
> 如果你是普通用户,并不想为本项目提供代码,按上面的操作就可以正常使用 Enjoy APP
方法二:如果想要随时**试用更新版本**的话,请按以下步骤操作。
### MacOS 用户
1. 打开命令行工具 Terminal
2. 安装 Homebrew请参阅这篇文章《[从 Terminal 开始…](https://github.com/xiaolai/apple-computer-literacy/blob/main/start-from-terminal.md)》)
3. 安装 `nodejs` 以及 `yarn`
```bash
brew install nvm
nvm install 20.5.1
brew install yarn
brew install ffmpeg
```
4. 设置 yarn 环境变量以及 Node.js 配置
```bash
export ELECTRON_MIRROR="https://npmmirror.com/mirrors/electron/"
corepack enable
```
5. 克隆此仓库至本地,而后安装、启动:
```bash
cd ~
mkdir github
cd github
git clone https://github.com/xiaolai/everyone-can-use-english
cd ~/github/everyone-can-use-english
yarn install
yarn start:enjoy
```
6. 以后重新启动用 Terminal
```bash
cd ~/github/everyone-can-use-english
git pull
yarn install
yarn start:enjoy
```
### Windows 用户
系统要求Windows 10 22H2 以上版本、 [Windows PowerShell 5.1](https://aka.ms/wmf5download) 以上版本、互联网网络连接正常。
1. 将鼠标移至任务栏的 “Windows 徽标” 上单击右键,选择 “PowerShell”
> tips 1 :在最新的 Windows 11 上,你看不到 “PowerShell” 选项,只有 “终端”
>
> tips 2 :不能用管理员权限运行 PowerShell ,否则会导致 Scoop 安装失败
2. 在弹出的 PowerShell 窗口中依次执行运行以下命令,安装 Scoop
```powershell
# 设置 PowerShell 执行策略
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
# 下载安装脚本
irm get.scoop.sh -outfile 'install.ps1'
# 执行安装, --ScoopDir 参数指定 Scoop 安装路径
.\install.ps1 -ScoopDir 'C:\Scoop'
```
如果出现下面的错误:
> <span style="color:red">irm : 未能解析此远程名称: 'raw.githubusercontent.com'</span>
说明你的**网络连接**有问题,请自行研究解决:
3. 安装 Nodejs 和 yarn 以及其他依赖环境
```powershell
scoop install nodejs
scoop install git
npm install yarn -g
```
4. 设置 yarn 环境变量以及 Node.js 配置
```powershell
$env:ELECTRON_MIRROR="https://npmmirror.com/mirrors/electron/"
corepack enable
```
5. 克隆此仓库至本地,而后安装 Enjoy APP
```powershell
cd ~
mkdir github
cd github
git clone https://github.com/xiaolai/everyone-can-use-english
cd everyone-can-use-english
yarn install
```
出现 `“YN0000: · Done …… ” ` 类似字样说明安装成功!
6. 运行 Enjoy APP ,在终端执行下列命令:
```powershell
yarn start:enjoy
```
### 更新 Enjoy
更新并使用最新版本的 Enjoy
1. 将仓库最新内容拉取到本地,在命令行工具中执行:
```bash
git pull
```
结果显示为:
```shell
Already up to date.
```
若非如此,那么意味着代码有所更新,那么就要运行以下命令:
```bash
yarn install
```
2. 运行 Enjoy APP
```shell
yarn start:enjoy
```
## FAQ常见问题
**Q: 我该下载哪个版本?**
> A: [点这里](find-compatible-software-version.md) 有详细说明。
**Q: 还有 bug怎么办**
> A: 可以提 [Issue](https://github.com/xiaolai/everyone-can-use-english/issues/new),也可以 Mixin 开发者Mixin ID: 1051445
**Q: 很多解决不了的问题,怎么办?**
其实可能还有很多其它问题比如本软件安装、OpenAI注册、支付、美国线路……
> A: 1文本生成可以暂时用各种翻译工具比如 Google Translate或者其它的替代方案2语音生成可以暂时用开源免费的 [Edge-TTS-record](https://github.com/LuckyHookin/edge-TTS-record)

139
enjoy-docs/.gitignore vendored
View File

@@ -1,139 +0,0 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
lerna-debug.log*
.pnpm-debug.log*
# Diagnostic reports (https://nodejs.org/api/report.html)
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
# Runtime data
pids
*.pid
*.seed
*.pid.lock
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov
# Coverage directory used by tools like istanbul
coverage
*.lcov
# nyc test coverage
.nyc_output
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
.grunt
# Bower dependency directory (https://bower.io/)
bower_components
# node-waf configuration
.lock-wscript
# Compiled binary addons (https://nodejs.org/api/addons.html)
build/Release
# Dependency directories
node_modules/
jspm_packages/
# Snowpack dependency directory (https://snowpack.dev/)
web_modules/
# TypeScript cache
*.tsbuildinfo
# Optional npm cache directory
.npm
# Optional eslint cache
.eslintcache
# Optional stylelint cache
.stylelintcache
# Microbundle cache
.rpt2_cache/
.rts2_cache_cjs/
.rts2_cache_es/
.rts2_cache_umd/
# Optional REPL history
.node_repl_history
# Output of 'npm pack'
*.tgz
# Yarn Integrity file
.yarn-integrity
# dotenv environment variable files
.env
.env.development.local
.env.test.local
.env.production.local
.env.local
# parcel-bundler cache (https://parceljs.org/)
.cache
.parcel-cache
# Next.js build output
.next
out
# Nuxt.js build / generate output
.nuxt
dist
# Gatsby files
.cache/
# Comment in the public line in if your project uses Gatsby and not Next.js
# https://nextjs.org/blog/next-9-1#public-directory-support
# public
# vuepress build output
.vuepress/dist
# vuepress v2.x temp and cache directory
.temp
.cache
# Docusaurus cache and generated files
.docusaurus
# Serverless directories
.serverless/
# FuseBox cache
.fusebox/
# DynamoDB Local files
.dynamodb/
# TernJS port file
.tern-port
# Stores VSCode versions used for testing VSCode extensions
.vscode-test
# yarn v2
.yarn/cache
.yarn/unplugged
.yarn/build-state.yml
.yarn/install-state.gz
.pnp.*
.DS_Store
./public/jupyter-notebooks/*.mp3
.vitepress/cache/
.jupyter
.ipynb_checkpoints

View File

@@ -1,93 +0,0 @@
import { defineConfig } from "vitepress";
// https://vitepress.dev/reference/site-config
export default defineConfig({
lang: "zh-CN", // 'en-US
title: "Enjoy App",
description: "Enjoy 用户手册",
head: [
[
"script",
{ async: "", src: "https://www.googletagmanager.com/gtag/js?id=G-RY5XCM04NL" },
],
[
"script",
{},
`window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-RY5XCM04NL');`,
],
["link", { rel: "icon", href: "/favicon.ico" }],
],
themeConfig: {
// https://vitepress.dev/reference/default-theme-config
logo: "/logo.png",
nav: [{ text: "用户手册", link: "/markdown-examples" }],
sidebar: [
{
text: "快速开始",
collapsed: false,
items: [
{ text: "简介", link: "/guide/intro" },
{ text: "下载安装", link: "/guide/install" },
{ text: "软件设置", link: "/guide/settings" },
],
},
{
text: "跟读训练",
collapsed: false,
items: [
{ text: "音频资源", link: "/guide/audios" },
{ text: "视频资源", link: "/guide/videos" },
],
},
{
text: "阅读文本",
collapsed: false,
items: [
{ text: "在线文章", link: "/guide/webpage" },
{ text: "本地电子书", link: "/guide/ebook" },
],
},
{
text: "智能助手",
collapsed: false,
items: [
{ text: "简介", link: "/guide/ai-assistant" },
{ text: "GPT 服务", link: "/guide/gpt-conversation" },
{ text: "TTS 服务", link: "/guide/tts-conversation" },
],
},
{
text: "使用案例",
collapsed: false,
items: [
{
text: "利用 AI 生成训练材料",
link: "/guide/use-case-generate-audio-resources",
},
],
},
],
socialLinks: [
{
icon: "github",
link: "https://github.com/xiaolai/everyone-can-use-english/tree/main/enjoy-docs",
},
],
editLink: {
pattern:
"https://github.com/xiaolai/everyone-can-use-english/edit/main/enjoy-docs/:path",
text: "在 GitHub 上编辑此页面",
},
search: {
provider: "local",
},
},
lastUpdated: true,
});

View File

@@ -1,12 +0,0 @@
---
# https://vitepress.dev/reference/default-theme-home-page
layout: home
hero:
name: "Enjoy App"
tagline: AI 是最好的老师,我们做 AI 最好的助教
actions:
- theme: brand
text: 快速开始
link: /guide/intro
---

View File

@@ -1,11 +0,0 @@
{
"name": "enjoy-docs",
"scripts": {
"dev": "vitepress dev",
"build": "vitepress build",
"preview": "vitepress preview"
},
"devDependencies": {
"vitepress": "^1.0.0-rc.44"
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

View File

@@ -107,7 +107,7 @@
"@radix-ui/react-toggle": "^1.0.3",
"@radix-ui/react-tooltip": "^1.0.7",
"@uidotdev/usehooks": "^2.4.1",
"@vidstack/react": "^0.6.14",
"@vidstack/react": "^1.10.9",
"autosize": "^6.0.1",
"axios": "^1.6.7",
"camelcase": "^8.0.0",

Binary file not shown.

Before

Width:  |  Height:  |  Size: 257 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 238 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 145 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 323 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 209 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 123 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 438 KiB

View File

@@ -1,95 +0,0 @@
## 如何找到适配自己电脑的软件版本
看完这篇指南,你将学会如何在 GitHub 下载软件。
[Windows 用户点这里](#Windows用户下载以及安装)
### MacOS用户下载以及安装
点击屏幕左上方的  符号,在弹出来的菜单中,选择第一个选项 “关于本机About This Mac
<img src="find-compatible-software-version-IMG/1.png" alt="1" style="zoom:67%;" />
在弹出来的窗口中,就可以看到本机的硬软件配置:
<img src="find-compatible-software-version-IMG/2.png" alt="2" style="zoom: 50%;" />
如果你看到的画面和上面的图片类似,说明你的 Mac 是配置了 Apple M 系列M1、M2、M3的芯片这是 **ARM64 架构**的处理器,我们一会要下载 **ARM64 版本**的软件。
如果看到的画面是下面这样的,有 **Intel 字样**
<img src="find-compatible-software-version-IMG/3.jpg" alt="2" style="zoom: 50%;" />
说明你的 Mac 是 **x64 架构**,我们一会要下载 **x64 版本**的软件。
点击[这里](https://github.com/xiaolai/everyone-can-use-english/tags)跳转到 [releases 页面](https://github.com/xiaolai/everyone-can-use-english/tags)下载软件。
<img src="find-compatible-software-version-IMG/4.png" alt="2" style="zoom: 50%;" />
注意看发布的日期,**越靠前的版本越新**,我们点击 “Downloads” 跳转到下载页面
<img src="find-compatible-software-version-IMG/5.png" alt="2" style="zoom: 50%;" />
我们要下载的软件就在 Asset 里,如果 Assets 像这样,没有展开:
<img src="find-compatible-software-version-IMG/6.png" alt="2" style="zoom: 50%;" />
可以点击 “ ▶ Assets ” 旁边的 “ ▶ ” 符号展开
<img src="find-compatible-software-version-IMG/7.png" alt="2" style="zoom: 50%;" />
如果你是 **ARM 架构**的 Mac点击包含 “**darwin-arm64**” 字样的链接下载 Enjoy 程序;
如果你是 **intel 架构**的 Mac点击包含 “**darwin-x64**” 字样的链接下载 Enjoy 程序;
下载完成后,双击这个下载好的 ZIP 文件,系统会自动解压
<img src="find-compatible-software-version-IMG/8.png" alt="2" style="zoom: 50%;" />
打开 “终端” 输入
```bash
sudo xattr -rd com.apple.quarantine
```
> [!IMPORTANT]
> 注意:`sudo xattr -rd com.apple.quarantine` 这行命令后面,**要加一个 “空格”**
> [!CAUTION]
> 执行此命令将跳过 macOS 的安全检查机制,请不要在**其他任何软件中使用此方**法绕过安全检查,这可能导致**未知的安全风险**。
> Executing this command bypasses macOSs security checks. Do not use this method to circumvent security checks in any other software, as it may lead to unknown security risks.
然后把刚才解压出来的 Enjoy 程序拖到这行命令后面
<img src="find-compatible-software-version-IMG/9.png" alt="2" style="zoom: 50%;" />
按 “return ↩ ” 键,输入电脑**登陆密码**
> 输入密码的时候屏幕上**不会有任何反馈**,这是[类 Unix](https://zh.wikipedia.org/wiki/类_Unix) 操作系统的特性
输完密码后,按 “return ↩” 键,如果终端**没有抛出任何异常**,说明赋权成功,双击软件图标就可以打开软件。
自此,你就可以正常的使用 Enjoy 软件了!
### Windows用户下载以及安装
点击[这里](https://github.com/xiaolai/everyone-can-use-english/tags)跳转到 [releases 页面](https://github.com/xiaolai/everyone-can-use-english/tags)下载软件。
<img src="find-compatible-software-version-IMG/4.png" alt="2" style="zoom: 50%;" />
注意看发布的日期,**越靠前的版本越新**,我们点击 “Downloads” 跳转到下载页面
<img src="find-compatible-software-version-IMG/5.png" alt="2" style="zoom: 50%;" />
我们要下载的软件就在 Asset 里,如果 Assets 像这样,没有展开:
<img src="find-compatible-software-version-IMG/6.png" alt="2" style="zoom: 50%;" />
可以点击 “ ▶ Assets ” 旁边的 “ ▶ ” 符号展开
<img src="find-compatible-software-version-IMG/7.png" alt="2" style="zoom: 50%;" />
点击包含 “Setup.exe” 字样的链接下载 Enjoy 安装程序,下载完成后,按向导完成安装,即可使用。

View File

@@ -2,7 +2,7 @@
"private": true,
"workspaces": [
"enjoy",
"enjoy-docs"
"1000-hours"
],
"scripts": {
"start:enjoy": "echo 'Please use `yarn enjoy:start` instead'",
@@ -14,12 +14,9 @@
"enjoy:publish": "yarn workspace enjoy publish",
"enjoy:lint": "yarn workspace enjoy eslint --ext .ts,.tsx .",
"enjoy:create-migration": "yarn workspace enjoy zx ./src/main/db/create-migration.mjs",
"docs:dev": "yarn workspace enjoy-docs dev",
"docs:build": "yarn workspace enjoy-docs build",
"docs:preview": "yarn workspace enjoy-docs preview",
"1000h:dev": "yarn workspace 1000-hours dev",
"1000h:build": "yarn workspace 1000-hours build",
"1000h:preview": "yarn workspace 1000-hours preview"
"docs:dev": "yarn workspace 1000-hours dev",
"docs:build": "yarn workspace 1000-hours build",
"docs:preview": "yarn workspace 1000-hours preview"
},
"packageManager": "yarn@4.1.0",
"engines": {

1357
yarn.lock

File diff suppressed because it is too large Load Diff